Roasted Bean Deploy commited on
Commit ·
0c6ac49
0
Parent(s):
🚀 Deploy The Roasted Bean — editorial cafe site with admin dashboard
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .dockerignore +6 -0
- Dockerfile +15 -0
- README.md +14 -0
- data/.credentials.json +1 -0
- data/menu.json +192 -0
- node_modules/.bin/mime +1 -0
- node_modules/.bin/uuid +1 -0
- node_modules/.package-lock.json +894 -0
- node_modules/accepts/HISTORY.md +243 -0
- node_modules/accepts/LICENSE +23 -0
- node_modules/accepts/README.md +140 -0
- node_modules/accepts/index.js +238 -0
- node_modules/accepts/package.json +47 -0
- node_modules/array-flatten/LICENSE +21 -0
- node_modules/array-flatten/README.md +43 -0
- node_modules/array-flatten/array-flatten.js +64 -0
- node_modules/array-flatten/package.json +39 -0
- node_modules/bcryptjs/.npmignore +6 -0
- node_modules/bcryptjs/.travis.yml +18 -0
- node_modules/bcryptjs/.vscode/settings.json +3 -0
- node_modules/bcryptjs/LICENSE +50 -0
- node_modules/bcryptjs/README.md +251 -0
- node_modules/bcryptjs/bin/bcrypt +25 -0
- node_modules/bcryptjs/bower.json +22 -0
- node_modules/bcryptjs/dist/README.md +15 -0
- node_modules/bcryptjs/dist/bcrypt.js +1379 -0
- node_modules/bcryptjs/dist/bcrypt.min.js +48 -0
- node_modules/bcryptjs/dist/bcrypt.min.js.gz +0 -0
- node_modules/bcryptjs/dist/bcrypt.min.map +8 -0
- node_modules/bcryptjs/externs/bcrypt.js +91 -0
- node_modules/bcryptjs/externs/minimal-env.js +98 -0
- node_modules/bcryptjs/index.js +29 -0
- node_modules/bcryptjs/package.json +47 -0
- node_modules/bcryptjs/scripts/build.js +37 -0
- node_modules/bcryptjs/src/bcrypt.js +327 -0
- node_modules/bcryptjs/src/bcrypt/impl.js +669 -0
- node_modules/bcryptjs/src/bcrypt/prng/README.md +5 -0
- node_modules/bcryptjs/src/bcrypt/prng/accum.js +133 -0
- node_modules/bcryptjs/src/bcrypt/prng/isaac.js +140 -0
- node_modules/bcryptjs/src/bcrypt/util.js +33 -0
- node_modules/bcryptjs/src/bcrypt/util/base64.js +115 -0
- node_modules/bcryptjs/src/bower.json +22 -0
- node_modules/bcryptjs/src/wrap.js +50 -0
- node_modules/bcryptjs/tests/quickbrown.txt +150 -0
- node_modules/bcryptjs/tests/suite.js +197 -0
- node_modules/body-parser/HISTORY.md +686 -0
- node_modules/body-parser/LICENSE +23 -0
- node_modules/body-parser/README.md +476 -0
- node_modules/body-parser/index.js +156 -0
- node_modules/body-parser/lib/read.js +205 -0
.dockerignore
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
node_modules
|
| 2 |
+
.git
|
| 3 |
+
*.log
|
| 4 |
+
.DS_Store
|
| 5 |
+
/tmp
|
| 6 |
+
/data/.credentials.json
|
Dockerfile
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM node:20-slim
|
| 2 |
+
|
| 3 |
+
WORKDIR /app
|
| 4 |
+
|
| 5 |
+
# Install dependencies
|
| 6 |
+
COPY package.json package-lock.json* ./
|
| 7 |
+
RUN npm install --production
|
| 8 |
+
|
| 9 |
+
# Copy source
|
| 10 |
+
COPY . .
|
| 11 |
+
|
| 12 |
+
# HF Spaces serve on $PORT (default 7860)
|
| 13 |
+
EXPOSE 7860
|
| 14 |
+
|
| 15 |
+
CMD ["node", "server.js"]
|
README.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: The Roasted Bean
|
| 3 |
+
emoji: ☕
|
| 4 |
+
colorFrom: green
|
| 5 |
+
colorTo: gray
|
| 6 |
+
sdk: docker
|
| 7 |
+
pinned: false
|
| 8 |
+
---
|
| 9 |
+
|
| 10 |
+
# The Roasted Bean ☕
|
| 11 |
+
|
| 12 |
+
A specialty coffee roaster's website with editorial design and admin dashboard.
|
| 13 |
+
|
| 14 |
+
**Admin panel:** `/admin` — manage menu items, categories, and cafe info.
|
data/.credentials.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"passwordHash":"$2a$10$w0/9KEhEWGPruYjo8Ljz1.lSJAWCCaCjM/lRycSBR49.9yBmb8HnO"}
|
data/menu.json
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"items": [
|
| 3 |
+
{
|
| 4 |
+
"id": "a1b2c3d4-0001",
|
| 5 |
+
"name": "Cappuccino",
|
| 6 |
+
"description": "Rich espresso topped with velvety steamed milk foam. A timeless Italian favorite.",
|
| 7 |
+
"price": 4.5,
|
| 8 |
+
"category": "coffee",
|
| 9 |
+
"image": "https://images.unsplash.com/photo-1572442388796-11668a67e53d?w=160&h=160&fit=crop&auto=format",
|
| 10 |
+
"available": true,
|
| 11 |
+
"featured": true
|
| 12 |
+
},
|
| 13 |
+
{
|
| 14 |
+
"id": "a1b2c3d4-0002",
|
| 15 |
+
"name": "Vanilla Latte",
|
| 16 |
+
"description": "Smooth espresso with steamed milk and house-made vanilla syrup.",
|
| 17 |
+
"price": 5,
|
| 18 |
+
"category": "coffee",
|
| 19 |
+
"image": "https://images.unsplash.com/photo-1461023058943-07fcbe16d735?w=160&h=160&fit=crop&auto=format",
|
| 20 |
+
"available": true,
|
| 21 |
+
"featured": false
|
| 22 |
+
},
|
| 23 |
+
{
|
| 24 |
+
"id": "a1b2c3d4-0003",
|
| 25 |
+
"name": "Cold Brew",
|
| 26 |
+
"description": "Slow-steeped for 18 hours — smooth, bold, and naturally sweet. Served over ice.",
|
| 27 |
+
"price": 4.75,
|
| 28 |
+
"category": "coffee",
|
| 29 |
+
"image": "https://images.unsplash.com/photo-1517701550927-30cf4ba1dba5?w=160&h=160&fit=crop&auto=format",
|
| 30 |
+
"available": true,
|
| 31 |
+
"featured": true
|
| 32 |
+
},
|
| 33 |
+
{
|
| 34 |
+
"id": "a1b2c3d4-0004",
|
| 35 |
+
"name": "Caramel Macchiato",
|
| 36 |
+
"description": "Layered espresso and milk with a buttery caramel drizzle.",
|
| 37 |
+
"price": 5.5,
|
| 38 |
+
"category": "coffee",
|
| 39 |
+
"image": "https://images.unsplash.com/photo-1485808191679-5f86510681a2?w=160&h=160&fit=crop&auto=format",
|
| 40 |
+
"available": true,
|
| 41 |
+
"featured": false
|
| 42 |
+
},
|
| 43 |
+
{
|
| 44 |
+
"id": "a1b2c3d4-0005",
|
| 45 |
+
"name": "Mocha",
|
| 46 |
+
"description": "Decadent chocolate meets bold espresso, crowned with whipped cream.",
|
| 47 |
+
"price": 5.25,
|
| 48 |
+
"category": "coffee",
|
| 49 |
+
"image": "https://images.unsplash.com/photo-1578314675249-a6910f80cc4e?w=160&h=160&fit=crop&auto=format",
|
| 50 |
+
"available": true,
|
| 51 |
+
"featured": false
|
| 52 |
+
},
|
| 53 |
+
{
|
| 54 |
+
"id": "a1b2c3d4-0006",
|
| 55 |
+
"name": "Matcha Latte",
|
| 56 |
+
"description": "Ceremonial-grade Japanese matcha whisked with steamed oat milk.",
|
| 57 |
+
"price": 5.5,
|
| 58 |
+
"category": "tea",
|
| 59 |
+
"image": "https://images.unsplash.com/photo-1536256263959-770b48d82b0a?w=160&h=160&fit=crop&auto=format",
|
| 60 |
+
"available": true,
|
| 61 |
+
"featured": true
|
| 62 |
+
},
|
| 63 |
+
{
|
| 64 |
+
"id": "a1b2c3d4-0007",
|
| 65 |
+
"name": "Earl Grey",
|
| 66 |
+
"description": "Fragrant black tea with bergamot. Served in a pot with a lemon twist.",
|
| 67 |
+
"price": 3.75,
|
| 68 |
+
"category": "tea",
|
| 69 |
+
"image": "https://images.unsplash.com/photo-1594631252845-29fc4cc8cde9?w=160&h=160&fit=crop&auto=format",
|
| 70 |
+
"available": true,
|
| 71 |
+
"featured": false
|
| 72 |
+
},
|
| 73 |
+
{
|
| 74 |
+
"id": "a1b2c3d4-0008",
|
| 75 |
+
"name": "Chamomile Honey",
|
| 76 |
+
"description": "Soothing chamomile blossoms with a drizzle of local wildflower honey.",
|
| 77 |
+
"price": 3.5,
|
| 78 |
+
"category": "tea",
|
| 79 |
+
"image": "https://images.unsplash.com/photo-1576092768241-dec231879fc3?w=160&h=160&fit=crop&auto=format",
|
| 80 |
+
"available": true,
|
| 81 |
+
"featured": false
|
| 82 |
+
},
|
| 83 |
+
{
|
| 84 |
+
"id": "a1b2c3d4-0009",
|
| 85 |
+
"name": "Butter Croissant",
|
| 86 |
+
"description": "Flaky, golden, and impossibly buttery. Baked fresh every morning.",
|
| 87 |
+
"price": 3.75,
|
| 88 |
+
"category": "pastries",
|
| 89 |
+
"image": "https://images.unsplash.com/photo-1623334044303-241021148842?w=160&h=160&fit=crop&auto=format",
|
| 90 |
+
"available": true,
|
| 91 |
+
"featured": true
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"id": "a1b2c3d4-0010",
|
| 95 |
+
"name": "Blueberry Muffin",
|
| 96 |
+
"description": "Tender crumb studded with wild blueberries and a streusel top.",
|
| 97 |
+
"price": 4.25,
|
| 98 |
+
"category": "pastries",
|
| 99 |
+
"image": "https://images.unsplash.com/photo-1607958996333-41aef7caefaa?w=160&h=160&fit=crop&auto=format",
|
| 100 |
+
"available": true,
|
| 101 |
+
"featured": false
|
| 102 |
+
},
|
| 103 |
+
{
|
| 104 |
+
"id": "a1b2c3d4-0011",
|
| 105 |
+
"name": "Cinnamon Roll",
|
| 106 |
+
"description": "Soft, gooey, and generously swirled with cinnamon-brown sugar. Topped with cream cheese frosting.",
|
| 107 |
+
"price": 5,
|
| 108 |
+
"category": "pastries",
|
| 109 |
+
"image": "https://images.unsplash.com/photo-1509365465985-25d11c17e812?w=160&h=160&fit=crop&auto=format",
|
| 110 |
+
"available": true,
|
| 111 |
+
"featured": true
|
| 112 |
+
},
|
| 113 |
+
{
|
| 114 |
+
"id": "a1b2c3d4-0012",
|
| 115 |
+
"name": "Avocado Toast",
|
| 116 |
+
"description": "Sourdough topped with smashed avocado, cherry tomatoes, feta, and chili flakes.",
|
| 117 |
+
"price": 9.5,
|
| 118 |
+
"category": "food",
|
| 119 |
+
"image": "https://images.unsplash.com/photo-1541519227354-08fa5d50c44d?w=160&h=160&fit=crop&auto=format",
|
| 120 |
+
"available": true,
|
| 121 |
+
"featured": false
|
| 122 |
+
},
|
| 123 |
+
{
|
| 124 |
+
"id": "a1b2c3d4-0013",
|
| 125 |
+
"name": "Caprese Panini",
|
| 126 |
+
"description": "Fresh mozzarella, tomato, and basil pressed on ciabatta with balsamic glaze.",
|
| 127 |
+
"price": 10.5,
|
| 128 |
+
"category": "food",
|
| 129 |
+
"image": "https://images.unsplash.com/photo-1509722747041-616f39b57569?w=160&h=160&fit=crop&auto=format",
|
| 130 |
+
"available": true,
|
| 131 |
+
"featured": false
|
| 132 |
+
},
|
| 133 |
+
{
|
| 134 |
+
"id": "a1b2c3d4-0014",
|
| 135 |
+
"name": "Açaí Bowl",
|
| 136 |
+
"description": "Blended açaí with granola, banana, strawberries, coconut, and a drizzle of honey.",
|
| 137 |
+
"price": 11,
|
| 138 |
+
"category": "food",
|
| 139 |
+
"image": "https://images.unsplash.com/photo-1590301157890-4810ed352733?w=160&h=160&fit=crop&auto=format",
|
| 140 |
+
"available": true,
|
| 141 |
+
"featured": false
|
| 142 |
+
}
|
| 143 |
+
],
|
| 144 |
+
"categories": [
|
| 145 |
+
{
|
| 146 |
+
"id": "all",
|
| 147 |
+
"name": "All",
|
| 148 |
+
"icon": "/img/icons/default.svg"
|
| 149 |
+
},
|
| 150 |
+
{
|
| 151 |
+
"id": "coffee",
|
| 152 |
+
"name": "Coffee",
|
| 153 |
+
"icon": "/img/icons/coffee.svg"
|
| 154 |
+
},
|
| 155 |
+
{
|
| 156 |
+
"id": "tea",
|
| 157 |
+
"name": "Tea",
|
| 158 |
+
"icon": "/img/icons/tea.svg"
|
| 159 |
+
},
|
| 160 |
+
{
|
| 161 |
+
"id": "pastries",
|
| 162 |
+
"name": "Pastries",
|
| 163 |
+
"icon": "/img/icons/pastry.svg"
|
| 164 |
+
},
|
| 165 |
+
{
|
| 166 |
+
"id": "food",
|
| 167 |
+
"name": "Food",
|
| 168 |
+
"icon": "/img/icons/food.svg"
|
| 169 |
+
}
|
| 170 |
+
],
|
| 171 |
+
"info": {
|
| 172 |
+
"name": "The Roasted Bean",
|
| 173 |
+
"tagline": "Crafted with care, served with warmth",
|
| 174 |
+
"address": "127 Barista Lane, Portland, OR 97201",
|
| 175 |
+
"phone": "(503) 555-0192",
|
| 176 |
+
"hours": [
|
| 177 |
+
{
|
| 178 |
+
"days": "Mon–Fri",
|
| 179 |
+
"time": "7:00 AM – 7:00 PM"
|
| 180 |
+
},
|
| 181 |
+
{
|
| 182 |
+
"days": "Saturday",
|
| 183 |
+
"time": "8:00 AM – 8:00 PM"
|
| 184 |
+
},
|
| 185 |
+
{
|
| 186 |
+
"days": "Sunday",
|
| 187 |
+
"time": "8:00 AM – 5:00 PM"
|
| 188 |
+
}
|
| 189 |
+
],
|
| 190 |
+
"email": "hello@theroastedbean.com"
|
| 191 |
+
}
|
| 192 |
+
}
|
node_modules/.bin/mime
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
../mime/cli.js
|
node_modules/.bin/uuid
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
../uuid/dist/bin/uuid
|
node_modules/.package-lock.json
ADDED
|
@@ -0,0 +1,894 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "cafe-website",
|
| 3 |
+
"version": "1.0.0",
|
| 4 |
+
"lockfileVersion": 3,
|
| 5 |
+
"requires": true,
|
| 6 |
+
"packages": {
|
| 7 |
+
"node_modules/accepts": {
|
| 8 |
+
"version": "1.3.8",
|
| 9 |
+
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
|
| 10 |
+
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
|
| 11 |
+
"license": "MIT",
|
| 12 |
+
"dependencies": {
|
| 13 |
+
"mime-types": "~2.1.34",
|
| 14 |
+
"negotiator": "0.6.3"
|
| 15 |
+
},
|
| 16 |
+
"engines": {
|
| 17 |
+
"node": ">= 0.6"
|
| 18 |
+
}
|
| 19 |
+
},
|
| 20 |
+
"node_modules/array-flatten": {
|
| 21 |
+
"version": "1.1.1",
|
| 22 |
+
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
| 23 |
+
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
|
| 24 |
+
"license": "MIT"
|
| 25 |
+
},
|
| 26 |
+
"node_modules/bcryptjs": {
|
| 27 |
+
"version": "2.4.3",
|
| 28 |
+
"resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
|
| 29 |
+
"integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==",
|
| 30 |
+
"license": "MIT"
|
| 31 |
+
},
|
| 32 |
+
"node_modules/body-parser": {
|
| 33 |
+
"version": "1.20.5",
|
| 34 |
+
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz",
|
| 35 |
+
"integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==",
|
| 36 |
+
"license": "MIT",
|
| 37 |
+
"dependencies": {
|
| 38 |
+
"bytes": "~3.1.2",
|
| 39 |
+
"content-type": "~1.0.5",
|
| 40 |
+
"debug": "2.6.9",
|
| 41 |
+
"depd": "2.0.0",
|
| 42 |
+
"destroy": "~1.2.0",
|
| 43 |
+
"http-errors": "~2.0.1",
|
| 44 |
+
"iconv-lite": "~0.4.24",
|
| 45 |
+
"on-finished": "~2.4.1",
|
| 46 |
+
"qs": "~6.15.1",
|
| 47 |
+
"raw-body": "~2.5.3",
|
| 48 |
+
"type-is": "~1.6.18",
|
| 49 |
+
"unpipe": "~1.0.0"
|
| 50 |
+
},
|
| 51 |
+
"engines": {
|
| 52 |
+
"node": ">= 0.8",
|
| 53 |
+
"npm": "1.2.8000 || >= 1.4.16"
|
| 54 |
+
}
|
| 55 |
+
},
|
| 56 |
+
"node_modules/bytes": {
|
| 57 |
+
"version": "3.1.2",
|
| 58 |
+
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
| 59 |
+
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
|
| 60 |
+
"license": "MIT",
|
| 61 |
+
"engines": {
|
| 62 |
+
"node": ">= 0.8"
|
| 63 |
+
}
|
| 64 |
+
},
|
| 65 |
+
"node_modules/call-bind-apply-helpers": {
|
| 66 |
+
"version": "1.0.2",
|
| 67 |
+
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
|
| 68 |
+
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
|
| 69 |
+
"license": "MIT",
|
| 70 |
+
"dependencies": {
|
| 71 |
+
"es-errors": "^1.3.0",
|
| 72 |
+
"function-bind": "^1.1.2"
|
| 73 |
+
},
|
| 74 |
+
"engines": {
|
| 75 |
+
"node": ">= 0.4"
|
| 76 |
+
}
|
| 77 |
+
},
|
| 78 |
+
"node_modules/call-bound": {
|
| 79 |
+
"version": "1.0.4",
|
| 80 |
+
"resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
|
| 81 |
+
"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
|
| 82 |
+
"license": "MIT",
|
| 83 |
+
"dependencies": {
|
| 84 |
+
"call-bind-apply-helpers": "^1.0.2",
|
| 85 |
+
"get-intrinsic": "^1.3.0"
|
| 86 |
+
},
|
| 87 |
+
"engines": {
|
| 88 |
+
"node": ">= 0.4"
|
| 89 |
+
},
|
| 90 |
+
"funding": {
|
| 91 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 92 |
+
}
|
| 93 |
+
},
|
| 94 |
+
"node_modules/content-disposition": {
|
| 95 |
+
"version": "0.5.4",
|
| 96 |
+
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
|
| 97 |
+
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
|
| 98 |
+
"license": "MIT",
|
| 99 |
+
"dependencies": {
|
| 100 |
+
"safe-buffer": "5.2.1"
|
| 101 |
+
},
|
| 102 |
+
"engines": {
|
| 103 |
+
"node": ">= 0.6"
|
| 104 |
+
}
|
| 105 |
+
},
|
| 106 |
+
"node_modules/content-type": {
|
| 107 |
+
"version": "1.0.5",
|
| 108 |
+
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
|
| 109 |
+
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
|
| 110 |
+
"license": "MIT",
|
| 111 |
+
"engines": {
|
| 112 |
+
"node": ">= 0.6"
|
| 113 |
+
}
|
| 114 |
+
},
|
| 115 |
+
"node_modules/cookie": {
|
| 116 |
+
"version": "0.7.2",
|
| 117 |
+
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
|
| 118 |
+
"integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
|
| 119 |
+
"license": "MIT",
|
| 120 |
+
"engines": {
|
| 121 |
+
"node": ">= 0.6"
|
| 122 |
+
}
|
| 123 |
+
},
|
| 124 |
+
"node_modules/cookie-signature": {
|
| 125 |
+
"version": "1.0.7",
|
| 126 |
+
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz",
|
| 127 |
+
"integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==",
|
| 128 |
+
"license": "MIT"
|
| 129 |
+
},
|
| 130 |
+
"node_modules/debug": {
|
| 131 |
+
"version": "2.6.9",
|
| 132 |
+
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
| 133 |
+
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
| 134 |
+
"license": "MIT",
|
| 135 |
+
"dependencies": {
|
| 136 |
+
"ms": "2.0.0"
|
| 137 |
+
}
|
| 138 |
+
},
|
| 139 |
+
"node_modules/depd": {
|
| 140 |
+
"version": "2.0.0",
|
| 141 |
+
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
|
| 142 |
+
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
|
| 143 |
+
"license": "MIT",
|
| 144 |
+
"engines": {
|
| 145 |
+
"node": ">= 0.8"
|
| 146 |
+
}
|
| 147 |
+
},
|
| 148 |
+
"node_modules/destroy": {
|
| 149 |
+
"version": "1.2.0",
|
| 150 |
+
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
|
| 151 |
+
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
|
| 152 |
+
"license": "MIT",
|
| 153 |
+
"engines": {
|
| 154 |
+
"node": ">= 0.8",
|
| 155 |
+
"npm": "1.2.8000 || >= 1.4.16"
|
| 156 |
+
}
|
| 157 |
+
},
|
| 158 |
+
"node_modules/dunder-proto": {
|
| 159 |
+
"version": "1.0.1",
|
| 160 |
+
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
| 161 |
+
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
|
| 162 |
+
"license": "MIT",
|
| 163 |
+
"dependencies": {
|
| 164 |
+
"call-bind-apply-helpers": "^1.0.1",
|
| 165 |
+
"es-errors": "^1.3.0",
|
| 166 |
+
"gopd": "^1.2.0"
|
| 167 |
+
},
|
| 168 |
+
"engines": {
|
| 169 |
+
"node": ">= 0.4"
|
| 170 |
+
}
|
| 171 |
+
},
|
| 172 |
+
"node_modules/ee-first": {
|
| 173 |
+
"version": "1.1.1",
|
| 174 |
+
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
| 175 |
+
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
|
| 176 |
+
"license": "MIT"
|
| 177 |
+
},
|
| 178 |
+
"node_modules/encodeurl": {
|
| 179 |
+
"version": "2.0.0",
|
| 180 |
+
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
|
| 181 |
+
"integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
|
| 182 |
+
"license": "MIT",
|
| 183 |
+
"engines": {
|
| 184 |
+
"node": ">= 0.8"
|
| 185 |
+
}
|
| 186 |
+
},
|
| 187 |
+
"node_modules/es-define-property": {
|
| 188 |
+
"version": "1.0.1",
|
| 189 |
+
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
|
| 190 |
+
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
| 191 |
+
"license": "MIT",
|
| 192 |
+
"engines": {
|
| 193 |
+
"node": ">= 0.4"
|
| 194 |
+
}
|
| 195 |
+
},
|
| 196 |
+
"node_modules/es-errors": {
|
| 197 |
+
"version": "1.3.0",
|
| 198 |
+
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
|
| 199 |
+
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
|
| 200 |
+
"license": "MIT",
|
| 201 |
+
"engines": {
|
| 202 |
+
"node": ">= 0.4"
|
| 203 |
+
}
|
| 204 |
+
},
|
| 205 |
+
"node_modules/es-object-atoms": {
|
| 206 |
+
"version": "1.1.2",
|
| 207 |
+
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
|
| 208 |
+
"integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
|
| 209 |
+
"license": "MIT",
|
| 210 |
+
"dependencies": {
|
| 211 |
+
"es-errors": "^1.3.0"
|
| 212 |
+
},
|
| 213 |
+
"engines": {
|
| 214 |
+
"node": ">= 0.4"
|
| 215 |
+
}
|
| 216 |
+
},
|
| 217 |
+
"node_modules/escape-html": {
|
| 218 |
+
"version": "1.0.3",
|
| 219 |
+
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
| 220 |
+
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
|
| 221 |
+
"license": "MIT"
|
| 222 |
+
},
|
| 223 |
+
"node_modules/etag": {
|
| 224 |
+
"version": "1.8.1",
|
| 225 |
+
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
|
| 226 |
+
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
|
| 227 |
+
"license": "MIT",
|
| 228 |
+
"engines": {
|
| 229 |
+
"node": ">= 0.6"
|
| 230 |
+
}
|
| 231 |
+
},
|
| 232 |
+
"node_modules/express": {
|
| 233 |
+
"version": "4.22.2",
|
| 234 |
+
"resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz",
|
| 235 |
+
"integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==",
|
| 236 |
+
"license": "MIT",
|
| 237 |
+
"dependencies": {
|
| 238 |
+
"accepts": "~1.3.8",
|
| 239 |
+
"array-flatten": "1.1.1",
|
| 240 |
+
"body-parser": "~1.20.5",
|
| 241 |
+
"content-disposition": "~0.5.4",
|
| 242 |
+
"content-type": "~1.0.4",
|
| 243 |
+
"cookie": "~0.7.1",
|
| 244 |
+
"cookie-signature": "~1.0.6",
|
| 245 |
+
"debug": "2.6.9",
|
| 246 |
+
"depd": "2.0.0",
|
| 247 |
+
"encodeurl": "~2.0.0",
|
| 248 |
+
"escape-html": "~1.0.3",
|
| 249 |
+
"etag": "~1.8.1",
|
| 250 |
+
"finalhandler": "~1.3.1",
|
| 251 |
+
"fresh": "~0.5.2",
|
| 252 |
+
"http-errors": "~2.0.0",
|
| 253 |
+
"merge-descriptors": "1.0.3",
|
| 254 |
+
"methods": "~1.1.2",
|
| 255 |
+
"on-finished": "~2.4.1",
|
| 256 |
+
"parseurl": "~1.3.3",
|
| 257 |
+
"path-to-regexp": "~0.1.12",
|
| 258 |
+
"proxy-addr": "~2.0.7",
|
| 259 |
+
"qs": "~6.15.1",
|
| 260 |
+
"range-parser": "~1.2.1",
|
| 261 |
+
"safe-buffer": "5.2.1",
|
| 262 |
+
"send": "~0.19.0",
|
| 263 |
+
"serve-static": "~1.16.2",
|
| 264 |
+
"setprototypeof": "1.2.0",
|
| 265 |
+
"statuses": "~2.0.1",
|
| 266 |
+
"type-is": "~1.6.18",
|
| 267 |
+
"utils-merge": "1.0.1",
|
| 268 |
+
"vary": "~1.1.2"
|
| 269 |
+
},
|
| 270 |
+
"engines": {
|
| 271 |
+
"node": ">= 0.10.0"
|
| 272 |
+
},
|
| 273 |
+
"funding": {
|
| 274 |
+
"type": "opencollective",
|
| 275 |
+
"url": "https://opencollective.com/express"
|
| 276 |
+
}
|
| 277 |
+
},
|
| 278 |
+
"node_modules/express-session": {
|
| 279 |
+
"version": "1.19.0",
|
| 280 |
+
"resolved": "https://registry.npmjs.org/express-session/-/express-session-1.19.0.tgz",
|
| 281 |
+
"integrity": "sha512-0csaMkGq+vaiZTmSMMGkfdCOabYv192VbytFypcvI0MANrp+4i/7yEkJ0sbAEhycQjntaKGzYfjfXQyVb7BHMA==",
|
| 282 |
+
"license": "MIT",
|
| 283 |
+
"dependencies": {
|
| 284 |
+
"cookie": "~0.7.2",
|
| 285 |
+
"cookie-signature": "~1.0.7",
|
| 286 |
+
"debug": "~2.6.9",
|
| 287 |
+
"depd": "~2.0.0",
|
| 288 |
+
"on-headers": "~1.1.0",
|
| 289 |
+
"parseurl": "~1.3.3",
|
| 290 |
+
"safe-buffer": "~5.2.1",
|
| 291 |
+
"uid-safe": "~2.1.5"
|
| 292 |
+
},
|
| 293 |
+
"engines": {
|
| 294 |
+
"node": ">= 0.8.0"
|
| 295 |
+
},
|
| 296 |
+
"funding": {
|
| 297 |
+
"type": "opencollective",
|
| 298 |
+
"url": "https://opencollective.com/express"
|
| 299 |
+
}
|
| 300 |
+
},
|
| 301 |
+
"node_modules/finalhandler": {
|
| 302 |
+
"version": "1.3.2",
|
| 303 |
+
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz",
|
| 304 |
+
"integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==",
|
| 305 |
+
"license": "MIT",
|
| 306 |
+
"dependencies": {
|
| 307 |
+
"debug": "2.6.9",
|
| 308 |
+
"encodeurl": "~2.0.0",
|
| 309 |
+
"escape-html": "~1.0.3",
|
| 310 |
+
"on-finished": "~2.4.1",
|
| 311 |
+
"parseurl": "~1.3.3",
|
| 312 |
+
"statuses": "~2.0.2",
|
| 313 |
+
"unpipe": "~1.0.0"
|
| 314 |
+
},
|
| 315 |
+
"engines": {
|
| 316 |
+
"node": ">= 0.8"
|
| 317 |
+
}
|
| 318 |
+
},
|
| 319 |
+
"node_modules/forwarded": {
|
| 320 |
+
"version": "0.2.0",
|
| 321 |
+
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
|
| 322 |
+
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
|
| 323 |
+
"license": "MIT",
|
| 324 |
+
"engines": {
|
| 325 |
+
"node": ">= 0.6"
|
| 326 |
+
}
|
| 327 |
+
},
|
| 328 |
+
"node_modules/fresh": {
|
| 329 |
+
"version": "0.5.2",
|
| 330 |
+
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
| 331 |
+
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
|
| 332 |
+
"license": "MIT",
|
| 333 |
+
"engines": {
|
| 334 |
+
"node": ">= 0.6"
|
| 335 |
+
}
|
| 336 |
+
},
|
| 337 |
+
"node_modules/function-bind": {
|
| 338 |
+
"version": "1.1.2",
|
| 339 |
+
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
| 340 |
+
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
| 341 |
+
"license": "MIT",
|
| 342 |
+
"funding": {
|
| 343 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 344 |
+
}
|
| 345 |
+
},
|
| 346 |
+
"node_modules/get-intrinsic": {
|
| 347 |
+
"version": "1.3.0",
|
| 348 |
+
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
|
| 349 |
+
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
|
| 350 |
+
"license": "MIT",
|
| 351 |
+
"dependencies": {
|
| 352 |
+
"call-bind-apply-helpers": "^1.0.2",
|
| 353 |
+
"es-define-property": "^1.0.1",
|
| 354 |
+
"es-errors": "^1.3.0",
|
| 355 |
+
"es-object-atoms": "^1.1.1",
|
| 356 |
+
"function-bind": "^1.1.2",
|
| 357 |
+
"get-proto": "^1.0.1",
|
| 358 |
+
"gopd": "^1.2.0",
|
| 359 |
+
"has-symbols": "^1.1.0",
|
| 360 |
+
"hasown": "^2.0.2",
|
| 361 |
+
"math-intrinsics": "^1.1.0"
|
| 362 |
+
},
|
| 363 |
+
"engines": {
|
| 364 |
+
"node": ">= 0.4"
|
| 365 |
+
},
|
| 366 |
+
"funding": {
|
| 367 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 368 |
+
}
|
| 369 |
+
},
|
| 370 |
+
"node_modules/get-proto": {
|
| 371 |
+
"version": "1.0.1",
|
| 372 |
+
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
|
| 373 |
+
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
|
| 374 |
+
"license": "MIT",
|
| 375 |
+
"dependencies": {
|
| 376 |
+
"dunder-proto": "^1.0.1",
|
| 377 |
+
"es-object-atoms": "^1.0.0"
|
| 378 |
+
},
|
| 379 |
+
"engines": {
|
| 380 |
+
"node": ">= 0.4"
|
| 381 |
+
}
|
| 382 |
+
},
|
| 383 |
+
"node_modules/gopd": {
|
| 384 |
+
"version": "1.2.0",
|
| 385 |
+
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
| 386 |
+
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
| 387 |
+
"license": "MIT",
|
| 388 |
+
"engines": {
|
| 389 |
+
"node": ">= 0.4"
|
| 390 |
+
},
|
| 391 |
+
"funding": {
|
| 392 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 393 |
+
}
|
| 394 |
+
},
|
| 395 |
+
"node_modules/has-symbols": {
|
| 396 |
+
"version": "1.1.0",
|
| 397 |
+
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
|
| 398 |
+
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
|
| 399 |
+
"license": "MIT",
|
| 400 |
+
"engines": {
|
| 401 |
+
"node": ">= 0.4"
|
| 402 |
+
},
|
| 403 |
+
"funding": {
|
| 404 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 405 |
+
}
|
| 406 |
+
},
|
| 407 |
+
"node_modules/hasown": {
|
| 408 |
+
"version": "2.0.4",
|
| 409 |
+
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
|
| 410 |
+
"integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
|
| 411 |
+
"license": "MIT",
|
| 412 |
+
"dependencies": {
|
| 413 |
+
"function-bind": "^1.1.2"
|
| 414 |
+
},
|
| 415 |
+
"engines": {
|
| 416 |
+
"node": ">= 0.4"
|
| 417 |
+
}
|
| 418 |
+
},
|
| 419 |
+
"node_modules/http-errors": {
|
| 420 |
+
"version": "2.0.1",
|
| 421 |
+
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
|
| 422 |
+
"integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
|
| 423 |
+
"license": "MIT",
|
| 424 |
+
"dependencies": {
|
| 425 |
+
"depd": "~2.0.0",
|
| 426 |
+
"inherits": "~2.0.4",
|
| 427 |
+
"setprototypeof": "~1.2.0",
|
| 428 |
+
"statuses": "~2.0.2",
|
| 429 |
+
"toidentifier": "~1.0.1"
|
| 430 |
+
},
|
| 431 |
+
"engines": {
|
| 432 |
+
"node": ">= 0.8"
|
| 433 |
+
},
|
| 434 |
+
"funding": {
|
| 435 |
+
"type": "opencollective",
|
| 436 |
+
"url": "https://opencollective.com/express"
|
| 437 |
+
}
|
| 438 |
+
},
|
| 439 |
+
"node_modules/iconv-lite": {
|
| 440 |
+
"version": "0.4.24",
|
| 441 |
+
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
| 442 |
+
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
| 443 |
+
"license": "MIT",
|
| 444 |
+
"dependencies": {
|
| 445 |
+
"safer-buffer": ">= 2.1.2 < 3"
|
| 446 |
+
},
|
| 447 |
+
"engines": {
|
| 448 |
+
"node": ">=0.10.0"
|
| 449 |
+
}
|
| 450 |
+
},
|
| 451 |
+
"node_modules/inherits": {
|
| 452 |
+
"version": "2.0.4",
|
| 453 |
+
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
| 454 |
+
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
| 455 |
+
"license": "ISC"
|
| 456 |
+
},
|
| 457 |
+
"node_modules/ipaddr.js": {
|
| 458 |
+
"version": "1.9.1",
|
| 459 |
+
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
|
| 460 |
+
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
|
| 461 |
+
"license": "MIT",
|
| 462 |
+
"engines": {
|
| 463 |
+
"node": ">= 0.10"
|
| 464 |
+
}
|
| 465 |
+
},
|
| 466 |
+
"node_modules/math-intrinsics": {
|
| 467 |
+
"version": "1.1.0",
|
| 468 |
+
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
| 469 |
+
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
|
| 470 |
+
"license": "MIT",
|
| 471 |
+
"engines": {
|
| 472 |
+
"node": ">= 0.4"
|
| 473 |
+
}
|
| 474 |
+
},
|
| 475 |
+
"node_modules/media-typer": {
|
| 476 |
+
"version": "0.3.0",
|
| 477 |
+
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
| 478 |
+
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
|
| 479 |
+
"license": "MIT",
|
| 480 |
+
"engines": {
|
| 481 |
+
"node": ">= 0.6"
|
| 482 |
+
}
|
| 483 |
+
},
|
| 484 |
+
"node_modules/merge-descriptors": {
|
| 485 |
+
"version": "1.0.3",
|
| 486 |
+
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
|
| 487 |
+
"integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
|
| 488 |
+
"license": "MIT",
|
| 489 |
+
"funding": {
|
| 490 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
| 491 |
+
}
|
| 492 |
+
},
|
| 493 |
+
"node_modules/methods": {
|
| 494 |
+
"version": "1.1.2",
|
| 495 |
+
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
|
| 496 |
+
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
|
| 497 |
+
"license": "MIT",
|
| 498 |
+
"engines": {
|
| 499 |
+
"node": ">= 0.6"
|
| 500 |
+
}
|
| 501 |
+
},
|
| 502 |
+
"node_modules/mime": {
|
| 503 |
+
"version": "1.6.0",
|
| 504 |
+
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
|
| 505 |
+
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
|
| 506 |
+
"license": "MIT",
|
| 507 |
+
"bin": {
|
| 508 |
+
"mime": "cli.js"
|
| 509 |
+
},
|
| 510 |
+
"engines": {
|
| 511 |
+
"node": ">=4"
|
| 512 |
+
}
|
| 513 |
+
},
|
| 514 |
+
"node_modules/mime-db": {
|
| 515 |
+
"version": "1.52.0",
|
| 516 |
+
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
| 517 |
+
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
| 518 |
+
"license": "MIT",
|
| 519 |
+
"engines": {
|
| 520 |
+
"node": ">= 0.6"
|
| 521 |
+
}
|
| 522 |
+
},
|
| 523 |
+
"node_modules/mime-types": {
|
| 524 |
+
"version": "2.1.35",
|
| 525 |
+
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
| 526 |
+
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
| 527 |
+
"license": "MIT",
|
| 528 |
+
"dependencies": {
|
| 529 |
+
"mime-db": "1.52.0"
|
| 530 |
+
},
|
| 531 |
+
"engines": {
|
| 532 |
+
"node": ">= 0.6"
|
| 533 |
+
}
|
| 534 |
+
},
|
| 535 |
+
"node_modules/ms": {
|
| 536 |
+
"version": "2.0.0",
|
| 537 |
+
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
| 538 |
+
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
|
| 539 |
+
"license": "MIT"
|
| 540 |
+
},
|
| 541 |
+
"node_modules/negotiator": {
|
| 542 |
+
"version": "0.6.3",
|
| 543 |
+
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
|
| 544 |
+
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
|
| 545 |
+
"license": "MIT",
|
| 546 |
+
"engines": {
|
| 547 |
+
"node": ">= 0.6"
|
| 548 |
+
}
|
| 549 |
+
},
|
| 550 |
+
"node_modules/object-inspect": {
|
| 551 |
+
"version": "1.13.4",
|
| 552 |
+
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
|
| 553 |
+
"integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
|
| 554 |
+
"license": "MIT",
|
| 555 |
+
"engines": {
|
| 556 |
+
"node": ">= 0.4"
|
| 557 |
+
},
|
| 558 |
+
"funding": {
|
| 559 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 560 |
+
}
|
| 561 |
+
},
|
| 562 |
+
"node_modules/on-finished": {
|
| 563 |
+
"version": "2.4.1",
|
| 564 |
+
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
|
| 565 |
+
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
|
| 566 |
+
"license": "MIT",
|
| 567 |
+
"dependencies": {
|
| 568 |
+
"ee-first": "1.1.1"
|
| 569 |
+
},
|
| 570 |
+
"engines": {
|
| 571 |
+
"node": ">= 0.8"
|
| 572 |
+
}
|
| 573 |
+
},
|
| 574 |
+
"node_modules/on-headers": {
|
| 575 |
+
"version": "1.1.0",
|
| 576 |
+
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz",
|
| 577 |
+
"integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==",
|
| 578 |
+
"license": "MIT",
|
| 579 |
+
"engines": {
|
| 580 |
+
"node": ">= 0.8"
|
| 581 |
+
}
|
| 582 |
+
},
|
| 583 |
+
"node_modules/parseurl": {
|
| 584 |
+
"version": "1.3.3",
|
| 585 |
+
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
| 586 |
+
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
|
| 587 |
+
"license": "MIT",
|
| 588 |
+
"engines": {
|
| 589 |
+
"node": ">= 0.8"
|
| 590 |
+
}
|
| 591 |
+
},
|
| 592 |
+
"node_modules/path-to-regexp": {
|
| 593 |
+
"version": "0.1.13",
|
| 594 |
+
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
|
| 595 |
+
"integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==",
|
| 596 |
+
"license": "MIT"
|
| 597 |
+
},
|
| 598 |
+
"node_modules/proxy-addr": {
|
| 599 |
+
"version": "2.0.7",
|
| 600 |
+
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
|
| 601 |
+
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
|
| 602 |
+
"license": "MIT",
|
| 603 |
+
"dependencies": {
|
| 604 |
+
"forwarded": "0.2.0",
|
| 605 |
+
"ipaddr.js": "1.9.1"
|
| 606 |
+
},
|
| 607 |
+
"engines": {
|
| 608 |
+
"node": ">= 0.10"
|
| 609 |
+
}
|
| 610 |
+
},
|
| 611 |
+
"node_modules/qs": {
|
| 612 |
+
"version": "6.15.3",
|
| 613 |
+
"resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz",
|
| 614 |
+
"integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==",
|
| 615 |
+
"license": "BSD-3-Clause",
|
| 616 |
+
"dependencies": {
|
| 617 |
+
"es-define-property": "^1.0.1",
|
| 618 |
+
"side-channel": "^1.1.1"
|
| 619 |
+
},
|
| 620 |
+
"engines": {
|
| 621 |
+
"node": ">=0.6"
|
| 622 |
+
},
|
| 623 |
+
"funding": {
|
| 624 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 625 |
+
}
|
| 626 |
+
},
|
| 627 |
+
"node_modules/random-bytes": {
|
| 628 |
+
"version": "1.0.0",
|
| 629 |
+
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
|
| 630 |
+
"integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==",
|
| 631 |
+
"license": "MIT",
|
| 632 |
+
"engines": {
|
| 633 |
+
"node": ">= 0.8"
|
| 634 |
+
}
|
| 635 |
+
},
|
| 636 |
+
"node_modules/range-parser": {
|
| 637 |
+
"version": "1.2.1",
|
| 638 |
+
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
|
| 639 |
+
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
|
| 640 |
+
"license": "MIT",
|
| 641 |
+
"engines": {
|
| 642 |
+
"node": ">= 0.6"
|
| 643 |
+
}
|
| 644 |
+
},
|
| 645 |
+
"node_modules/raw-body": {
|
| 646 |
+
"version": "2.5.3",
|
| 647 |
+
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz",
|
| 648 |
+
"integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==",
|
| 649 |
+
"license": "MIT",
|
| 650 |
+
"dependencies": {
|
| 651 |
+
"bytes": "~3.1.2",
|
| 652 |
+
"http-errors": "~2.0.1",
|
| 653 |
+
"iconv-lite": "~0.4.24",
|
| 654 |
+
"unpipe": "~1.0.0"
|
| 655 |
+
},
|
| 656 |
+
"engines": {
|
| 657 |
+
"node": ">= 0.8"
|
| 658 |
+
}
|
| 659 |
+
},
|
| 660 |
+
"node_modules/safe-buffer": {
|
| 661 |
+
"version": "5.2.1",
|
| 662 |
+
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
| 663 |
+
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
| 664 |
+
"funding": [
|
| 665 |
+
{
|
| 666 |
+
"type": "github",
|
| 667 |
+
"url": "https://github.com/sponsors/feross"
|
| 668 |
+
},
|
| 669 |
+
{
|
| 670 |
+
"type": "patreon",
|
| 671 |
+
"url": "https://www.patreon.com/feross"
|
| 672 |
+
},
|
| 673 |
+
{
|
| 674 |
+
"type": "consulting",
|
| 675 |
+
"url": "https://feross.org/support"
|
| 676 |
+
}
|
| 677 |
+
],
|
| 678 |
+
"license": "MIT"
|
| 679 |
+
},
|
| 680 |
+
"node_modules/safer-buffer": {
|
| 681 |
+
"version": "2.1.2",
|
| 682 |
+
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
| 683 |
+
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
| 684 |
+
"license": "MIT"
|
| 685 |
+
},
|
| 686 |
+
"node_modules/send": {
|
| 687 |
+
"version": "0.19.2",
|
| 688 |
+
"resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz",
|
| 689 |
+
"integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==",
|
| 690 |
+
"license": "MIT",
|
| 691 |
+
"dependencies": {
|
| 692 |
+
"debug": "2.6.9",
|
| 693 |
+
"depd": "2.0.0",
|
| 694 |
+
"destroy": "1.2.0",
|
| 695 |
+
"encodeurl": "~2.0.0",
|
| 696 |
+
"escape-html": "~1.0.3",
|
| 697 |
+
"etag": "~1.8.1",
|
| 698 |
+
"fresh": "~0.5.2",
|
| 699 |
+
"http-errors": "~2.0.1",
|
| 700 |
+
"mime": "1.6.0",
|
| 701 |
+
"ms": "2.1.3",
|
| 702 |
+
"on-finished": "~2.4.1",
|
| 703 |
+
"range-parser": "~1.2.1",
|
| 704 |
+
"statuses": "~2.0.2"
|
| 705 |
+
},
|
| 706 |
+
"engines": {
|
| 707 |
+
"node": ">= 0.8.0"
|
| 708 |
+
}
|
| 709 |
+
},
|
| 710 |
+
"node_modules/send/node_modules/ms": {
|
| 711 |
+
"version": "2.1.3",
|
| 712 |
+
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
| 713 |
+
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
| 714 |
+
"license": "MIT"
|
| 715 |
+
},
|
| 716 |
+
"node_modules/serve-static": {
|
| 717 |
+
"version": "1.16.3",
|
| 718 |
+
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz",
|
| 719 |
+
"integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==",
|
| 720 |
+
"license": "MIT",
|
| 721 |
+
"dependencies": {
|
| 722 |
+
"encodeurl": "~2.0.0",
|
| 723 |
+
"escape-html": "~1.0.3",
|
| 724 |
+
"parseurl": "~1.3.3",
|
| 725 |
+
"send": "~0.19.1"
|
| 726 |
+
},
|
| 727 |
+
"engines": {
|
| 728 |
+
"node": ">= 0.8.0"
|
| 729 |
+
}
|
| 730 |
+
},
|
| 731 |
+
"node_modules/setprototypeof": {
|
| 732 |
+
"version": "1.2.0",
|
| 733 |
+
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
|
| 734 |
+
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
|
| 735 |
+
"license": "ISC"
|
| 736 |
+
},
|
| 737 |
+
"node_modules/side-channel": {
|
| 738 |
+
"version": "1.1.1",
|
| 739 |
+
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",
|
| 740 |
+
"integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==",
|
| 741 |
+
"license": "MIT",
|
| 742 |
+
"dependencies": {
|
| 743 |
+
"es-errors": "^1.3.0",
|
| 744 |
+
"object-inspect": "^1.13.4",
|
| 745 |
+
"side-channel-list": "^1.0.1",
|
| 746 |
+
"side-channel-map": "^1.0.1",
|
| 747 |
+
"side-channel-weakmap": "^1.0.2"
|
| 748 |
+
},
|
| 749 |
+
"engines": {
|
| 750 |
+
"node": ">= 0.4"
|
| 751 |
+
},
|
| 752 |
+
"funding": {
|
| 753 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 754 |
+
}
|
| 755 |
+
},
|
| 756 |
+
"node_modules/side-channel-list": {
|
| 757 |
+
"version": "1.0.1",
|
| 758 |
+
"resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",
|
| 759 |
+
"integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
|
| 760 |
+
"license": "MIT",
|
| 761 |
+
"dependencies": {
|
| 762 |
+
"es-errors": "^1.3.0",
|
| 763 |
+
"object-inspect": "^1.13.4"
|
| 764 |
+
},
|
| 765 |
+
"engines": {
|
| 766 |
+
"node": ">= 0.4"
|
| 767 |
+
},
|
| 768 |
+
"funding": {
|
| 769 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 770 |
+
}
|
| 771 |
+
},
|
| 772 |
+
"node_modules/side-channel-map": {
|
| 773 |
+
"version": "1.0.1",
|
| 774 |
+
"resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
|
| 775 |
+
"integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
|
| 776 |
+
"license": "MIT",
|
| 777 |
+
"dependencies": {
|
| 778 |
+
"call-bound": "^1.0.2",
|
| 779 |
+
"es-errors": "^1.3.0",
|
| 780 |
+
"get-intrinsic": "^1.2.5",
|
| 781 |
+
"object-inspect": "^1.13.3"
|
| 782 |
+
},
|
| 783 |
+
"engines": {
|
| 784 |
+
"node": ">= 0.4"
|
| 785 |
+
},
|
| 786 |
+
"funding": {
|
| 787 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 788 |
+
}
|
| 789 |
+
},
|
| 790 |
+
"node_modules/side-channel-weakmap": {
|
| 791 |
+
"version": "1.0.2",
|
| 792 |
+
"resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
|
| 793 |
+
"integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
|
| 794 |
+
"license": "MIT",
|
| 795 |
+
"dependencies": {
|
| 796 |
+
"call-bound": "^1.0.2",
|
| 797 |
+
"es-errors": "^1.3.0",
|
| 798 |
+
"get-intrinsic": "^1.2.5",
|
| 799 |
+
"object-inspect": "^1.13.3",
|
| 800 |
+
"side-channel-map": "^1.0.1"
|
| 801 |
+
},
|
| 802 |
+
"engines": {
|
| 803 |
+
"node": ">= 0.4"
|
| 804 |
+
},
|
| 805 |
+
"funding": {
|
| 806 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 807 |
+
}
|
| 808 |
+
},
|
| 809 |
+
"node_modules/statuses": {
|
| 810 |
+
"version": "2.0.2",
|
| 811 |
+
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
|
| 812 |
+
"integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
|
| 813 |
+
"license": "MIT",
|
| 814 |
+
"engines": {
|
| 815 |
+
"node": ">= 0.8"
|
| 816 |
+
}
|
| 817 |
+
},
|
| 818 |
+
"node_modules/toidentifier": {
|
| 819 |
+
"version": "1.0.1",
|
| 820 |
+
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
|
| 821 |
+
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
|
| 822 |
+
"license": "MIT",
|
| 823 |
+
"engines": {
|
| 824 |
+
"node": ">=0.6"
|
| 825 |
+
}
|
| 826 |
+
},
|
| 827 |
+
"node_modules/type-is": {
|
| 828 |
+
"version": "1.6.18",
|
| 829 |
+
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
|
| 830 |
+
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
|
| 831 |
+
"license": "MIT",
|
| 832 |
+
"dependencies": {
|
| 833 |
+
"media-typer": "0.3.0",
|
| 834 |
+
"mime-types": "~2.1.24"
|
| 835 |
+
},
|
| 836 |
+
"engines": {
|
| 837 |
+
"node": ">= 0.6"
|
| 838 |
+
}
|
| 839 |
+
},
|
| 840 |
+
"node_modules/uid-safe": {
|
| 841 |
+
"version": "2.1.5",
|
| 842 |
+
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
|
| 843 |
+
"integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
|
| 844 |
+
"license": "MIT",
|
| 845 |
+
"dependencies": {
|
| 846 |
+
"random-bytes": "~1.0.0"
|
| 847 |
+
},
|
| 848 |
+
"engines": {
|
| 849 |
+
"node": ">= 0.8"
|
| 850 |
+
}
|
| 851 |
+
},
|
| 852 |
+
"node_modules/unpipe": {
|
| 853 |
+
"version": "1.0.0",
|
| 854 |
+
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
| 855 |
+
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
|
| 856 |
+
"license": "MIT",
|
| 857 |
+
"engines": {
|
| 858 |
+
"node": ">= 0.8"
|
| 859 |
+
}
|
| 860 |
+
},
|
| 861 |
+
"node_modules/utils-merge": {
|
| 862 |
+
"version": "1.0.1",
|
| 863 |
+
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
| 864 |
+
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
|
| 865 |
+
"license": "MIT",
|
| 866 |
+
"engines": {
|
| 867 |
+
"node": ">= 0.4.0"
|
| 868 |
+
}
|
| 869 |
+
},
|
| 870 |
+
"node_modules/uuid": {
|
| 871 |
+
"version": "9.0.1",
|
| 872 |
+
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
|
| 873 |
+
"integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
|
| 874 |
+
"deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).",
|
| 875 |
+
"funding": [
|
| 876 |
+
"https://github.com/sponsors/broofa",
|
| 877 |
+
"https://github.com/sponsors/ctavan"
|
| 878 |
+
],
|
| 879 |
+
"license": "MIT",
|
| 880 |
+
"bin": {
|
| 881 |
+
"uuid": "dist/bin/uuid"
|
| 882 |
+
}
|
| 883 |
+
},
|
| 884 |
+
"node_modules/vary": {
|
| 885 |
+
"version": "1.1.2",
|
| 886 |
+
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
| 887 |
+
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
|
| 888 |
+
"license": "MIT",
|
| 889 |
+
"engines": {
|
| 890 |
+
"node": ">= 0.8"
|
| 891 |
+
}
|
| 892 |
+
}
|
| 893 |
+
}
|
| 894 |
+
}
|
node_modules/accepts/HISTORY.md
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
1.3.8 / 2022-02-02
|
| 2 |
+
==================
|
| 3 |
+
|
| 4 |
+
* deps: mime-types@~2.1.34
|
| 5 |
+
- deps: mime-db@~1.51.0
|
| 6 |
+
* deps: negotiator@0.6.3
|
| 7 |
+
|
| 8 |
+
1.3.7 / 2019-04-29
|
| 9 |
+
==================
|
| 10 |
+
|
| 11 |
+
* deps: negotiator@0.6.2
|
| 12 |
+
- Fix sorting charset, encoding, and language with extra parameters
|
| 13 |
+
|
| 14 |
+
1.3.6 / 2019-04-28
|
| 15 |
+
==================
|
| 16 |
+
|
| 17 |
+
* deps: mime-types@~2.1.24
|
| 18 |
+
- deps: mime-db@~1.40.0
|
| 19 |
+
|
| 20 |
+
1.3.5 / 2018-02-28
|
| 21 |
+
==================
|
| 22 |
+
|
| 23 |
+
* deps: mime-types@~2.1.18
|
| 24 |
+
- deps: mime-db@~1.33.0
|
| 25 |
+
|
| 26 |
+
1.3.4 / 2017-08-22
|
| 27 |
+
==================
|
| 28 |
+
|
| 29 |
+
* deps: mime-types@~2.1.16
|
| 30 |
+
- deps: mime-db@~1.29.0
|
| 31 |
+
|
| 32 |
+
1.3.3 / 2016-05-02
|
| 33 |
+
==================
|
| 34 |
+
|
| 35 |
+
* deps: mime-types@~2.1.11
|
| 36 |
+
- deps: mime-db@~1.23.0
|
| 37 |
+
* deps: negotiator@0.6.1
|
| 38 |
+
- perf: improve `Accept` parsing speed
|
| 39 |
+
- perf: improve `Accept-Charset` parsing speed
|
| 40 |
+
- perf: improve `Accept-Encoding` parsing speed
|
| 41 |
+
- perf: improve `Accept-Language` parsing speed
|
| 42 |
+
|
| 43 |
+
1.3.2 / 2016-03-08
|
| 44 |
+
==================
|
| 45 |
+
|
| 46 |
+
* deps: mime-types@~2.1.10
|
| 47 |
+
- Fix extension of `application/dash+xml`
|
| 48 |
+
- Update primary extension for `audio/mp4`
|
| 49 |
+
- deps: mime-db@~1.22.0
|
| 50 |
+
|
| 51 |
+
1.3.1 / 2016-01-19
|
| 52 |
+
==================
|
| 53 |
+
|
| 54 |
+
* deps: mime-types@~2.1.9
|
| 55 |
+
- deps: mime-db@~1.21.0
|
| 56 |
+
|
| 57 |
+
1.3.0 / 2015-09-29
|
| 58 |
+
==================
|
| 59 |
+
|
| 60 |
+
* deps: mime-types@~2.1.7
|
| 61 |
+
- deps: mime-db@~1.19.0
|
| 62 |
+
* deps: negotiator@0.6.0
|
| 63 |
+
- Fix including type extensions in parameters in `Accept` parsing
|
| 64 |
+
- Fix parsing `Accept` parameters with quoted equals
|
| 65 |
+
- Fix parsing `Accept` parameters with quoted semicolons
|
| 66 |
+
- Lazy-load modules from main entry point
|
| 67 |
+
- perf: delay type concatenation until needed
|
| 68 |
+
- perf: enable strict mode
|
| 69 |
+
- perf: hoist regular expressions
|
| 70 |
+
- perf: remove closures getting spec properties
|
| 71 |
+
- perf: remove a closure from media type parsing
|
| 72 |
+
- perf: remove property delete from media type parsing
|
| 73 |
+
|
| 74 |
+
1.2.13 / 2015-09-06
|
| 75 |
+
===================
|
| 76 |
+
|
| 77 |
+
* deps: mime-types@~2.1.6
|
| 78 |
+
- deps: mime-db@~1.18.0
|
| 79 |
+
|
| 80 |
+
1.2.12 / 2015-07-30
|
| 81 |
+
===================
|
| 82 |
+
|
| 83 |
+
* deps: mime-types@~2.1.4
|
| 84 |
+
- deps: mime-db@~1.16.0
|
| 85 |
+
|
| 86 |
+
1.2.11 / 2015-07-16
|
| 87 |
+
===================
|
| 88 |
+
|
| 89 |
+
* deps: mime-types@~2.1.3
|
| 90 |
+
- deps: mime-db@~1.15.0
|
| 91 |
+
|
| 92 |
+
1.2.10 / 2015-07-01
|
| 93 |
+
===================
|
| 94 |
+
|
| 95 |
+
* deps: mime-types@~2.1.2
|
| 96 |
+
- deps: mime-db@~1.14.0
|
| 97 |
+
|
| 98 |
+
1.2.9 / 2015-06-08
|
| 99 |
+
==================
|
| 100 |
+
|
| 101 |
+
* deps: mime-types@~2.1.1
|
| 102 |
+
- perf: fix deopt during mapping
|
| 103 |
+
|
| 104 |
+
1.2.8 / 2015-06-07
|
| 105 |
+
==================
|
| 106 |
+
|
| 107 |
+
* deps: mime-types@~2.1.0
|
| 108 |
+
- deps: mime-db@~1.13.0
|
| 109 |
+
* perf: avoid argument reassignment & argument slice
|
| 110 |
+
* perf: avoid negotiator recursive construction
|
| 111 |
+
* perf: enable strict mode
|
| 112 |
+
* perf: remove unnecessary bitwise operator
|
| 113 |
+
|
| 114 |
+
1.2.7 / 2015-05-10
|
| 115 |
+
==================
|
| 116 |
+
|
| 117 |
+
* deps: negotiator@0.5.3
|
| 118 |
+
- Fix media type parameter matching to be case-insensitive
|
| 119 |
+
|
| 120 |
+
1.2.6 / 2015-05-07
|
| 121 |
+
==================
|
| 122 |
+
|
| 123 |
+
* deps: mime-types@~2.0.11
|
| 124 |
+
- deps: mime-db@~1.9.1
|
| 125 |
+
* deps: negotiator@0.5.2
|
| 126 |
+
- Fix comparing media types with quoted values
|
| 127 |
+
- Fix splitting media types with quoted commas
|
| 128 |
+
|
| 129 |
+
1.2.5 / 2015-03-13
|
| 130 |
+
==================
|
| 131 |
+
|
| 132 |
+
* deps: mime-types@~2.0.10
|
| 133 |
+
- deps: mime-db@~1.8.0
|
| 134 |
+
|
| 135 |
+
1.2.4 / 2015-02-14
|
| 136 |
+
==================
|
| 137 |
+
|
| 138 |
+
* Support Node.js 0.6
|
| 139 |
+
* deps: mime-types@~2.0.9
|
| 140 |
+
- deps: mime-db@~1.7.0
|
| 141 |
+
* deps: negotiator@0.5.1
|
| 142 |
+
- Fix preference sorting to be stable for long acceptable lists
|
| 143 |
+
|
| 144 |
+
1.2.3 / 2015-01-31
|
| 145 |
+
==================
|
| 146 |
+
|
| 147 |
+
* deps: mime-types@~2.0.8
|
| 148 |
+
- deps: mime-db@~1.6.0
|
| 149 |
+
|
| 150 |
+
1.2.2 / 2014-12-30
|
| 151 |
+
==================
|
| 152 |
+
|
| 153 |
+
* deps: mime-types@~2.0.7
|
| 154 |
+
- deps: mime-db@~1.5.0
|
| 155 |
+
|
| 156 |
+
1.2.1 / 2014-12-30
|
| 157 |
+
==================
|
| 158 |
+
|
| 159 |
+
* deps: mime-types@~2.0.5
|
| 160 |
+
- deps: mime-db@~1.3.1
|
| 161 |
+
|
| 162 |
+
1.2.0 / 2014-12-19
|
| 163 |
+
==================
|
| 164 |
+
|
| 165 |
+
* deps: negotiator@0.5.0
|
| 166 |
+
- Fix list return order when large accepted list
|
| 167 |
+
- Fix missing identity encoding when q=0 exists
|
| 168 |
+
- Remove dynamic building of Negotiator class
|
| 169 |
+
|
| 170 |
+
1.1.4 / 2014-12-10
|
| 171 |
+
==================
|
| 172 |
+
|
| 173 |
+
* deps: mime-types@~2.0.4
|
| 174 |
+
- deps: mime-db@~1.3.0
|
| 175 |
+
|
| 176 |
+
1.1.3 / 2014-11-09
|
| 177 |
+
==================
|
| 178 |
+
|
| 179 |
+
* deps: mime-types@~2.0.3
|
| 180 |
+
- deps: mime-db@~1.2.0
|
| 181 |
+
|
| 182 |
+
1.1.2 / 2014-10-14
|
| 183 |
+
==================
|
| 184 |
+
|
| 185 |
+
* deps: negotiator@0.4.9
|
| 186 |
+
- Fix error when media type has invalid parameter
|
| 187 |
+
|
| 188 |
+
1.1.1 / 2014-09-28
|
| 189 |
+
==================
|
| 190 |
+
|
| 191 |
+
* deps: mime-types@~2.0.2
|
| 192 |
+
- deps: mime-db@~1.1.0
|
| 193 |
+
* deps: negotiator@0.4.8
|
| 194 |
+
- Fix all negotiations to be case-insensitive
|
| 195 |
+
- Stable sort preferences of same quality according to client order
|
| 196 |
+
|
| 197 |
+
1.1.0 / 2014-09-02
|
| 198 |
+
==================
|
| 199 |
+
|
| 200 |
+
* update `mime-types`
|
| 201 |
+
|
| 202 |
+
1.0.7 / 2014-07-04
|
| 203 |
+
==================
|
| 204 |
+
|
| 205 |
+
* Fix wrong type returned from `type` when match after unknown extension
|
| 206 |
+
|
| 207 |
+
1.0.6 / 2014-06-24
|
| 208 |
+
==================
|
| 209 |
+
|
| 210 |
+
* deps: negotiator@0.4.7
|
| 211 |
+
|
| 212 |
+
1.0.5 / 2014-06-20
|
| 213 |
+
==================
|
| 214 |
+
|
| 215 |
+
* fix crash when unknown extension given
|
| 216 |
+
|
| 217 |
+
1.0.4 / 2014-06-19
|
| 218 |
+
==================
|
| 219 |
+
|
| 220 |
+
* use `mime-types`
|
| 221 |
+
|
| 222 |
+
1.0.3 / 2014-06-11
|
| 223 |
+
==================
|
| 224 |
+
|
| 225 |
+
* deps: negotiator@0.4.6
|
| 226 |
+
- Order by specificity when quality is the same
|
| 227 |
+
|
| 228 |
+
1.0.2 / 2014-05-29
|
| 229 |
+
==================
|
| 230 |
+
|
| 231 |
+
* Fix interpretation when header not in request
|
| 232 |
+
* deps: pin negotiator@0.4.5
|
| 233 |
+
|
| 234 |
+
1.0.1 / 2014-01-18
|
| 235 |
+
==================
|
| 236 |
+
|
| 237 |
+
* Identity encoding isn't always acceptable
|
| 238 |
+
* deps: negotiator@~0.4.0
|
| 239 |
+
|
| 240 |
+
1.0.0 / 2013-12-27
|
| 241 |
+
==================
|
| 242 |
+
|
| 243 |
+
* Genesis
|
node_modules/accepts/LICENSE
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
(The MIT License)
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
|
| 4 |
+
Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>
|
| 5 |
+
|
| 6 |
+
Permission is hereby granted, free of charge, to any person obtaining
|
| 7 |
+
a copy of this software and associated documentation files (the
|
| 8 |
+
'Software'), to deal in the Software without restriction, including
|
| 9 |
+
without limitation the rights to use, copy, modify, merge, publish,
|
| 10 |
+
distribute, sublicense, and/or sell copies of the Software, and to
|
| 11 |
+
permit persons to whom the Software is furnished to do so, subject to
|
| 12 |
+
the following conditions:
|
| 13 |
+
|
| 14 |
+
The above copyright notice and this permission notice shall be
|
| 15 |
+
included in all copies or substantial portions of the Software.
|
| 16 |
+
|
| 17 |
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
| 18 |
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| 19 |
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
| 20 |
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
| 21 |
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
| 22 |
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
| 23 |
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
node_modules/accepts/README.md
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# accepts
|
| 2 |
+
|
| 3 |
+
[![NPM Version][npm-version-image]][npm-url]
|
| 4 |
+
[![NPM Downloads][npm-downloads-image]][npm-url]
|
| 5 |
+
[![Node.js Version][node-version-image]][node-version-url]
|
| 6 |
+
[![Build Status][github-actions-ci-image]][github-actions-ci-url]
|
| 7 |
+
[![Test Coverage][coveralls-image]][coveralls-url]
|
| 8 |
+
|
| 9 |
+
Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator).
|
| 10 |
+
Extracted from [koa](https://www.npmjs.com/package/koa) for general use.
|
| 11 |
+
|
| 12 |
+
In addition to negotiator, it allows:
|
| 13 |
+
|
| 14 |
+
- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])`
|
| 15 |
+
as well as `('text/html', 'application/json')`.
|
| 16 |
+
- Allows type shorthands such as `json`.
|
| 17 |
+
- Returns `false` when no types match
|
| 18 |
+
- Treats non-existent headers as `*`
|
| 19 |
+
|
| 20 |
+
## Installation
|
| 21 |
+
|
| 22 |
+
This is a [Node.js](https://nodejs.org/en/) module available through the
|
| 23 |
+
[npm registry](https://www.npmjs.com/). Installation is done using the
|
| 24 |
+
[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
|
| 25 |
+
|
| 26 |
+
```sh
|
| 27 |
+
$ npm install accepts
|
| 28 |
+
```
|
| 29 |
+
|
| 30 |
+
## API
|
| 31 |
+
|
| 32 |
+
```js
|
| 33 |
+
var accepts = require('accepts')
|
| 34 |
+
```
|
| 35 |
+
|
| 36 |
+
### accepts(req)
|
| 37 |
+
|
| 38 |
+
Create a new `Accepts` object for the given `req`.
|
| 39 |
+
|
| 40 |
+
#### .charset(charsets)
|
| 41 |
+
|
| 42 |
+
Return the first accepted charset. If nothing in `charsets` is accepted,
|
| 43 |
+
then `false` is returned.
|
| 44 |
+
|
| 45 |
+
#### .charsets()
|
| 46 |
+
|
| 47 |
+
Return the charsets that the request accepts, in the order of the client's
|
| 48 |
+
preference (most preferred first).
|
| 49 |
+
|
| 50 |
+
#### .encoding(encodings)
|
| 51 |
+
|
| 52 |
+
Return the first accepted encoding. If nothing in `encodings` is accepted,
|
| 53 |
+
then `false` is returned.
|
| 54 |
+
|
| 55 |
+
#### .encodings()
|
| 56 |
+
|
| 57 |
+
Return the encodings that the request accepts, in the order of the client's
|
| 58 |
+
preference (most preferred first).
|
| 59 |
+
|
| 60 |
+
#### .language(languages)
|
| 61 |
+
|
| 62 |
+
Return the first accepted language. If nothing in `languages` is accepted,
|
| 63 |
+
then `false` is returned.
|
| 64 |
+
|
| 65 |
+
#### .languages()
|
| 66 |
+
|
| 67 |
+
Return the languages that the request accepts, in the order of the client's
|
| 68 |
+
preference (most preferred first).
|
| 69 |
+
|
| 70 |
+
#### .type(types)
|
| 71 |
+
|
| 72 |
+
Return the first accepted type (and it is returned as the same text as what
|
| 73 |
+
appears in the `types` array). If nothing in `types` is accepted, then `false`
|
| 74 |
+
is returned.
|
| 75 |
+
|
| 76 |
+
The `types` array can contain full MIME types or file extensions. Any value
|
| 77 |
+
that is not a full MIME types is passed to `require('mime-types').lookup`.
|
| 78 |
+
|
| 79 |
+
#### .types()
|
| 80 |
+
|
| 81 |
+
Return the types that the request accepts, in the order of the client's
|
| 82 |
+
preference (most preferred first).
|
| 83 |
+
|
| 84 |
+
## Examples
|
| 85 |
+
|
| 86 |
+
### Simple type negotiation
|
| 87 |
+
|
| 88 |
+
This simple example shows how to use `accepts` to return a different typed
|
| 89 |
+
respond body based on what the client wants to accept. The server lists it's
|
| 90 |
+
preferences in order and will get back the best match between the client and
|
| 91 |
+
server.
|
| 92 |
+
|
| 93 |
+
```js
|
| 94 |
+
var accepts = require('accepts')
|
| 95 |
+
var http = require('http')
|
| 96 |
+
|
| 97 |
+
function app (req, res) {
|
| 98 |
+
var accept = accepts(req)
|
| 99 |
+
|
| 100 |
+
// the order of this list is significant; should be server preferred order
|
| 101 |
+
switch (accept.type(['json', 'html'])) {
|
| 102 |
+
case 'json':
|
| 103 |
+
res.setHeader('Content-Type', 'application/json')
|
| 104 |
+
res.write('{"hello":"world!"}')
|
| 105 |
+
break
|
| 106 |
+
case 'html':
|
| 107 |
+
res.setHeader('Content-Type', 'text/html')
|
| 108 |
+
res.write('<b>hello, world!</b>')
|
| 109 |
+
break
|
| 110 |
+
default:
|
| 111 |
+
// the fallback is text/plain, so no need to specify it above
|
| 112 |
+
res.setHeader('Content-Type', 'text/plain')
|
| 113 |
+
res.write('hello, world!')
|
| 114 |
+
break
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
res.end()
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
http.createServer(app).listen(3000)
|
| 121 |
+
```
|
| 122 |
+
|
| 123 |
+
You can test this out with the cURL program:
|
| 124 |
+
```sh
|
| 125 |
+
curl -I -H'Accept: text/html' http://localhost:3000/
|
| 126 |
+
```
|
| 127 |
+
|
| 128 |
+
## License
|
| 129 |
+
|
| 130 |
+
[MIT](LICENSE)
|
| 131 |
+
|
| 132 |
+
[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master
|
| 133 |
+
[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master
|
| 134 |
+
[github-actions-ci-image]: https://badgen.net/github/checks/jshttp/accepts/master?label=ci
|
| 135 |
+
[github-actions-ci-url]: https://github.com/jshttp/accepts/actions/workflows/ci.yml
|
| 136 |
+
[node-version-image]: https://badgen.net/npm/node/accepts
|
| 137 |
+
[node-version-url]: https://nodejs.org/en/download
|
| 138 |
+
[npm-downloads-image]: https://badgen.net/npm/dm/accepts
|
| 139 |
+
[npm-url]: https://npmjs.org/package/accepts
|
| 140 |
+
[npm-version-image]: https://badgen.net/npm/v/accepts
|
node_modules/accepts/index.js
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*!
|
| 2 |
+
* accepts
|
| 3 |
+
* Copyright(c) 2014 Jonathan Ong
|
| 4 |
+
* Copyright(c) 2015 Douglas Christopher Wilson
|
| 5 |
+
* MIT Licensed
|
| 6 |
+
*/
|
| 7 |
+
|
| 8 |
+
'use strict'
|
| 9 |
+
|
| 10 |
+
/**
|
| 11 |
+
* Module dependencies.
|
| 12 |
+
* @private
|
| 13 |
+
*/
|
| 14 |
+
|
| 15 |
+
var Negotiator = require('negotiator')
|
| 16 |
+
var mime = require('mime-types')
|
| 17 |
+
|
| 18 |
+
/**
|
| 19 |
+
* Module exports.
|
| 20 |
+
* @public
|
| 21 |
+
*/
|
| 22 |
+
|
| 23 |
+
module.exports = Accepts
|
| 24 |
+
|
| 25 |
+
/**
|
| 26 |
+
* Create a new Accepts object for the given req.
|
| 27 |
+
*
|
| 28 |
+
* @param {object} req
|
| 29 |
+
* @public
|
| 30 |
+
*/
|
| 31 |
+
|
| 32 |
+
function Accepts (req) {
|
| 33 |
+
if (!(this instanceof Accepts)) {
|
| 34 |
+
return new Accepts(req)
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
this.headers = req.headers
|
| 38 |
+
this.negotiator = new Negotiator(req)
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* Check if the given `type(s)` is acceptable, returning
|
| 43 |
+
* the best match when true, otherwise `undefined`, in which
|
| 44 |
+
* case you should respond with 406 "Not Acceptable".
|
| 45 |
+
*
|
| 46 |
+
* The `type` value may be a single mime type string
|
| 47 |
+
* such as "application/json", the extension name
|
| 48 |
+
* such as "json" or an array `["json", "html", "text/plain"]`. When a list
|
| 49 |
+
* or array is given the _best_ match, if any is returned.
|
| 50 |
+
*
|
| 51 |
+
* Examples:
|
| 52 |
+
*
|
| 53 |
+
* // Accept: text/html
|
| 54 |
+
* this.types('html');
|
| 55 |
+
* // => "html"
|
| 56 |
+
*
|
| 57 |
+
* // Accept: text/*, application/json
|
| 58 |
+
* this.types('html');
|
| 59 |
+
* // => "html"
|
| 60 |
+
* this.types('text/html');
|
| 61 |
+
* // => "text/html"
|
| 62 |
+
* this.types('json', 'text');
|
| 63 |
+
* // => "json"
|
| 64 |
+
* this.types('application/json');
|
| 65 |
+
* // => "application/json"
|
| 66 |
+
*
|
| 67 |
+
* // Accept: text/*, application/json
|
| 68 |
+
* this.types('image/png');
|
| 69 |
+
* this.types('png');
|
| 70 |
+
* // => undefined
|
| 71 |
+
*
|
| 72 |
+
* // Accept: text/*;q=.5, application/json
|
| 73 |
+
* this.types(['html', 'json']);
|
| 74 |
+
* this.types('html', 'json');
|
| 75 |
+
* // => "json"
|
| 76 |
+
*
|
| 77 |
+
* @param {String|Array} types...
|
| 78 |
+
* @return {String|Array|Boolean}
|
| 79 |
+
* @public
|
| 80 |
+
*/
|
| 81 |
+
|
| 82 |
+
Accepts.prototype.type =
|
| 83 |
+
Accepts.prototype.types = function (types_) {
|
| 84 |
+
var types = types_
|
| 85 |
+
|
| 86 |
+
// support flattened arguments
|
| 87 |
+
if (types && !Array.isArray(types)) {
|
| 88 |
+
types = new Array(arguments.length)
|
| 89 |
+
for (var i = 0; i < types.length; i++) {
|
| 90 |
+
types[i] = arguments[i]
|
| 91 |
+
}
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
// no types, return all requested types
|
| 95 |
+
if (!types || types.length === 0) {
|
| 96 |
+
return this.negotiator.mediaTypes()
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
// no accept header, return first given type
|
| 100 |
+
if (!this.headers.accept) {
|
| 101 |
+
return types[0]
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
var mimes = types.map(extToMime)
|
| 105 |
+
var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))
|
| 106 |
+
var first = accepts[0]
|
| 107 |
+
|
| 108 |
+
return first
|
| 109 |
+
? types[mimes.indexOf(first)]
|
| 110 |
+
: false
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
/**
|
| 114 |
+
* Return accepted encodings or best fit based on `encodings`.
|
| 115 |
+
*
|
| 116 |
+
* Given `Accept-Encoding: gzip, deflate`
|
| 117 |
+
* an array sorted by quality is returned:
|
| 118 |
+
*
|
| 119 |
+
* ['gzip', 'deflate']
|
| 120 |
+
*
|
| 121 |
+
* @param {String|Array} encodings...
|
| 122 |
+
* @return {String|Array}
|
| 123 |
+
* @public
|
| 124 |
+
*/
|
| 125 |
+
|
| 126 |
+
Accepts.prototype.encoding =
|
| 127 |
+
Accepts.prototype.encodings = function (encodings_) {
|
| 128 |
+
var encodings = encodings_
|
| 129 |
+
|
| 130 |
+
// support flattened arguments
|
| 131 |
+
if (encodings && !Array.isArray(encodings)) {
|
| 132 |
+
encodings = new Array(arguments.length)
|
| 133 |
+
for (var i = 0; i < encodings.length; i++) {
|
| 134 |
+
encodings[i] = arguments[i]
|
| 135 |
+
}
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
// no encodings, return all requested encodings
|
| 139 |
+
if (!encodings || encodings.length === 0) {
|
| 140 |
+
return this.negotiator.encodings()
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
return this.negotiator.encodings(encodings)[0] || false
|
| 144 |
+
}
|
| 145 |
+
|
| 146 |
+
/**
|
| 147 |
+
* Return accepted charsets or best fit based on `charsets`.
|
| 148 |
+
*
|
| 149 |
+
* Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
|
| 150 |
+
* an array sorted by quality is returned:
|
| 151 |
+
*
|
| 152 |
+
* ['utf-8', 'utf-7', 'iso-8859-1']
|
| 153 |
+
*
|
| 154 |
+
* @param {String|Array} charsets...
|
| 155 |
+
* @return {String|Array}
|
| 156 |
+
* @public
|
| 157 |
+
*/
|
| 158 |
+
|
| 159 |
+
Accepts.prototype.charset =
|
| 160 |
+
Accepts.prototype.charsets = function (charsets_) {
|
| 161 |
+
var charsets = charsets_
|
| 162 |
+
|
| 163 |
+
// support flattened arguments
|
| 164 |
+
if (charsets && !Array.isArray(charsets)) {
|
| 165 |
+
charsets = new Array(arguments.length)
|
| 166 |
+
for (var i = 0; i < charsets.length; i++) {
|
| 167 |
+
charsets[i] = arguments[i]
|
| 168 |
+
}
|
| 169 |
+
}
|
| 170 |
+
|
| 171 |
+
// no charsets, return all requested charsets
|
| 172 |
+
if (!charsets || charsets.length === 0) {
|
| 173 |
+
return this.negotiator.charsets()
|
| 174 |
+
}
|
| 175 |
+
|
| 176 |
+
return this.negotiator.charsets(charsets)[0] || false
|
| 177 |
+
}
|
| 178 |
+
|
| 179 |
+
/**
|
| 180 |
+
* Return accepted languages or best fit based on `langs`.
|
| 181 |
+
*
|
| 182 |
+
* Given `Accept-Language: en;q=0.8, es, pt`
|
| 183 |
+
* an array sorted by quality is returned:
|
| 184 |
+
*
|
| 185 |
+
* ['es', 'pt', 'en']
|
| 186 |
+
*
|
| 187 |
+
* @param {String|Array} langs...
|
| 188 |
+
* @return {Array|String}
|
| 189 |
+
* @public
|
| 190 |
+
*/
|
| 191 |
+
|
| 192 |
+
Accepts.prototype.lang =
|
| 193 |
+
Accepts.prototype.langs =
|
| 194 |
+
Accepts.prototype.language =
|
| 195 |
+
Accepts.prototype.languages = function (languages_) {
|
| 196 |
+
var languages = languages_
|
| 197 |
+
|
| 198 |
+
// support flattened arguments
|
| 199 |
+
if (languages && !Array.isArray(languages)) {
|
| 200 |
+
languages = new Array(arguments.length)
|
| 201 |
+
for (var i = 0; i < languages.length; i++) {
|
| 202 |
+
languages[i] = arguments[i]
|
| 203 |
+
}
|
| 204 |
+
}
|
| 205 |
+
|
| 206 |
+
// no languages, return all requested languages
|
| 207 |
+
if (!languages || languages.length === 0) {
|
| 208 |
+
return this.negotiator.languages()
|
| 209 |
+
}
|
| 210 |
+
|
| 211 |
+
return this.negotiator.languages(languages)[0] || false
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
+
/**
|
| 215 |
+
* Convert extnames to mime.
|
| 216 |
+
*
|
| 217 |
+
* @param {String} type
|
| 218 |
+
* @return {String}
|
| 219 |
+
* @private
|
| 220 |
+
*/
|
| 221 |
+
|
| 222 |
+
function extToMime (type) {
|
| 223 |
+
return type.indexOf('/') === -1
|
| 224 |
+
? mime.lookup(type)
|
| 225 |
+
: type
|
| 226 |
+
}
|
| 227 |
+
|
| 228 |
+
/**
|
| 229 |
+
* Check if mime is valid.
|
| 230 |
+
*
|
| 231 |
+
* @param {String} type
|
| 232 |
+
* @return {String}
|
| 233 |
+
* @private
|
| 234 |
+
*/
|
| 235 |
+
|
| 236 |
+
function validMime (type) {
|
| 237 |
+
return typeof type === 'string'
|
| 238 |
+
}
|
node_modules/accepts/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "accepts",
|
| 3 |
+
"description": "Higher-level content negotiation",
|
| 4 |
+
"version": "1.3.8",
|
| 5 |
+
"contributors": [
|
| 6 |
+
"Douglas Christopher Wilson <doug@somethingdoug.com>",
|
| 7 |
+
"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)"
|
| 8 |
+
],
|
| 9 |
+
"license": "MIT",
|
| 10 |
+
"repository": "jshttp/accepts",
|
| 11 |
+
"dependencies": {
|
| 12 |
+
"mime-types": "~2.1.34",
|
| 13 |
+
"negotiator": "0.6.3"
|
| 14 |
+
},
|
| 15 |
+
"devDependencies": {
|
| 16 |
+
"deep-equal": "1.0.1",
|
| 17 |
+
"eslint": "7.32.0",
|
| 18 |
+
"eslint-config-standard": "14.1.1",
|
| 19 |
+
"eslint-plugin-import": "2.25.4",
|
| 20 |
+
"eslint-plugin-markdown": "2.2.1",
|
| 21 |
+
"eslint-plugin-node": "11.1.0",
|
| 22 |
+
"eslint-plugin-promise": "4.3.1",
|
| 23 |
+
"eslint-plugin-standard": "4.1.0",
|
| 24 |
+
"mocha": "9.2.0",
|
| 25 |
+
"nyc": "15.1.0"
|
| 26 |
+
},
|
| 27 |
+
"files": [
|
| 28 |
+
"LICENSE",
|
| 29 |
+
"HISTORY.md",
|
| 30 |
+
"index.js"
|
| 31 |
+
],
|
| 32 |
+
"engines": {
|
| 33 |
+
"node": ">= 0.6"
|
| 34 |
+
},
|
| 35 |
+
"scripts": {
|
| 36 |
+
"lint": "eslint .",
|
| 37 |
+
"test": "mocha --reporter spec --check-leaks --bail test/",
|
| 38 |
+
"test-ci": "nyc --reporter=lcov --reporter=text npm test",
|
| 39 |
+
"test-cov": "nyc --reporter=html --reporter=text npm test"
|
| 40 |
+
},
|
| 41 |
+
"keywords": [
|
| 42 |
+
"content",
|
| 43 |
+
"negotiation",
|
| 44 |
+
"accept",
|
| 45 |
+
"accepts"
|
| 46 |
+
]
|
| 47 |
+
}
|
node_modules/array-flatten/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
The MIT License (MIT)
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 6 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 7 |
+
in the Software without restriction, including without limitation the rights
|
| 8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 9 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 10 |
+
furnished to do so, subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in
|
| 13 |
+
all copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
| 21 |
+
THE SOFTWARE.
|
node_modules/array-flatten/README.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Array Flatten
|
| 2 |
+
|
| 3 |
+
[![NPM version][npm-image]][npm-url]
|
| 4 |
+
[![NPM downloads][downloads-image]][downloads-url]
|
| 5 |
+
[![Build status][travis-image]][travis-url]
|
| 6 |
+
[![Test coverage][coveralls-image]][coveralls-url]
|
| 7 |
+
|
| 8 |
+
> Flatten an array of nested arrays into a single flat array. Accepts an optional depth.
|
| 9 |
+
|
| 10 |
+
## Installation
|
| 11 |
+
|
| 12 |
+
```
|
| 13 |
+
npm install array-flatten --save
|
| 14 |
+
```
|
| 15 |
+
|
| 16 |
+
## Usage
|
| 17 |
+
|
| 18 |
+
```javascript
|
| 19 |
+
var flatten = require('array-flatten')
|
| 20 |
+
|
| 21 |
+
flatten([1, [2, [3, [4, [5], 6], 7], 8], 9])
|
| 22 |
+
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
|
| 23 |
+
|
| 24 |
+
flatten([1, [2, [3, [4, [5], 6], 7], 8], 9], 2)
|
| 25 |
+
//=> [1, 2, 3, [4, [5], 6], 7, 8, 9]
|
| 26 |
+
|
| 27 |
+
(function () {
|
| 28 |
+
flatten(arguments) //=> [1, 2, 3]
|
| 29 |
+
})(1, [2, 3])
|
| 30 |
+
```
|
| 31 |
+
|
| 32 |
+
## License
|
| 33 |
+
|
| 34 |
+
MIT
|
| 35 |
+
|
| 36 |
+
[npm-image]: https://img.shields.io/npm/v/array-flatten.svg?style=flat
|
| 37 |
+
[npm-url]: https://npmjs.org/package/array-flatten
|
| 38 |
+
[downloads-image]: https://img.shields.io/npm/dm/array-flatten.svg?style=flat
|
| 39 |
+
[downloads-url]: https://npmjs.org/package/array-flatten
|
| 40 |
+
[travis-image]: https://img.shields.io/travis/blakeembrey/array-flatten.svg?style=flat
|
| 41 |
+
[travis-url]: https://travis-ci.org/blakeembrey/array-flatten
|
| 42 |
+
[coveralls-image]: https://img.shields.io/coveralls/blakeembrey/array-flatten.svg?style=flat
|
| 43 |
+
[coveralls-url]: https://coveralls.io/r/blakeembrey/array-flatten?branch=master
|
node_modules/array-flatten/array-flatten.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use strict'
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Expose `arrayFlatten`.
|
| 5 |
+
*/
|
| 6 |
+
module.exports = arrayFlatten
|
| 7 |
+
|
| 8 |
+
/**
|
| 9 |
+
* Recursive flatten function with depth.
|
| 10 |
+
*
|
| 11 |
+
* @param {Array} array
|
| 12 |
+
* @param {Array} result
|
| 13 |
+
* @param {Number} depth
|
| 14 |
+
* @return {Array}
|
| 15 |
+
*/
|
| 16 |
+
function flattenWithDepth (array, result, depth) {
|
| 17 |
+
for (var i = 0; i < array.length; i++) {
|
| 18 |
+
var value = array[i]
|
| 19 |
+
|
| 20 |
+
if (depth > 0 && Array.isArray(value)) {
|
| 21 |
+
flattenWithDepth(value, result, depth - 1)
|
| 22 |
+
} else {
|
| 23 |
+
result.push(value)
|
| 24 |
+
}
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
return result
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
/**
|
| 31 |
+
* Recursive flatten function. Omitting depth is slightly faster.
|
| 32 |
+
*
|
| 33 |
+
* @param {Array} array
|
| 34 |
+
* @param {Array} result
|
| 35 |
+
* @return {Array}
|
| 36 |
+
*/
|
| 37 |
+
function flattenForever (array, result) {
|
| 38 |
+
for (var i = 0; i < array.length; i++) {
|
| 39 |
+
var value = array[i]
|
| 40 |
+
|
| 41 |
+
if (Array.isArray(value)) {
|
| 42 |
+
flattenForever(value, result)
|
| 43 |
+
} else {
|
| 44 |
+
result.push(value)
|
| 45 |
+
}
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
return result
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
/**
|
| 52 |
+
* Flatten an array, with the ability to define a depth.
|
| 53 |
+
*
|
| 54 |
+
* @param {Array} array
|
| 55 |
+
* @param {Number} depth
|
| 56 |
+
* @return {Array}
|
| 57 |
+
*/
|
| 58 |
+
function arrayFlatten (array, depth) {
|
| 59 |
+
if (depth == null) {
|
| 60 |
+
return flattenForever(array, [])
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
return flattenWithDepth(array, [], depth)
|
| 64 |
+
}
|
node_modules/array-flatten/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "array-flatten",
|
| 3 |
+
"version": "1.1.1",
|
| 4 |
+
"description": "Flatten an array of nested arrays into a single flat array",
|
| 5 |
+
"main": "array-flatten.js",
|
| 6 |
+
"files": [
|
| 7 |
+
"array-flatten.js",
|
| 8 |
+
"LICENSE"
|
| 9 |
+
],
|
| 10 |
+
"scripts": {
|
| 11 |
+
"test": "istanbul cover _mocha -- -R spec"
|
| 12 |
+
},
|
| 13 |
+
"repository": {
|
| 14 |
+
"type": "git",
|
| 15 |
+
"url": "git://github.com/blakeembrey/array-flatten.git"
|
| 16 |
+
},
|
| 17 |
+
"keywords": [
|
| 18 |
+
"array",
|
| 19 |
+
"flatten",
|
| 20 |
+
"arguments",
|
| 21 |
+
"depth"
|
| 22 |
+
],
|
| 23 |
+
"author": {
|
| 24 |
+
"name": "Blake Embrey",
|
| 25 |
+
"email": "hello@blakeembrey.com",
|
| 26 |
+
"url": "http://blakeembrey.me"
|
| 27 |
+
},
|
| 28 |
+
"license": "MIT",
|
| 29 |
+
"bugs": {
|
| 30 |
+
"url": "https://github.com/blakeembrey/array-flatten/issues"
|
| 31 |
+
},
|
| 32 |
+
"homepage": "https://github.com/blakeembrey/array-flatten",
|
| 33 |
+
"devDependencies": {
|
| 34 |
+
"istanbul": "^0.3.13",
|
| 35 |
+
"mocha": "^2.2.4",
|
| 36 |
+
"pre-commit": "^1.0.7",
|
| 37 |
+
"standard": "^3.7.3"
|
| 38 |
+
}
|
| 39 |
+
}
|
node_modules/bcryptjs/.npmignore
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
node_modules/
|
| 2 |
+
npm-debug.log
|
| 3 |
+
debug.log
|
| 4 |
+
doco/
|
| 5 |
+
tests/bench.js
|
| 6 |
+
*.png
|
node_modules/bcryptjs/.travis.yml
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
language: node_js
|
| 2 |
+
|
| 3 |
+
node_js:
|
| 4 |
+
- 0.10
|
| 5 |
+
- 0.12
|
| 6 |
+
- 4
|
| 7 |
+
- 6
|
| 8 |
+
|
| 9 |
+
before_script: npm -g install testjs
|
| 10 |
+
|
| 11 |
+
env:
|
| 12 |
+
- CXX=g++-4.8
|
| 13 |
+
addons:
|
| 14 |
+
apt:
|
| 15 |
+
sources:
|
| 16 |
+
- ubuntu-toolchain-r-test
|
| 17 |
+
packages:
|
| 18 |
+
- g++-4.8
|
node_modules/bcryptjs/.vscode/settings.json
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"vsicons.presets.angular": false
|
| 3 |
+
}
|
node_modules/bcryptjs/LICENSE
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
bcrypt.js
|
| 2 |
+
---------
|
| 3 |
+
Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>
|
| 4 |
+
Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>
|
| 5 |
+
Copyright (c) 2014 Daniel Wirtz <dcode@dcode.io>
|
| 6 |
+
|
| 7 |
+
Redistribution and use in source and binary forms, with or without
|
| 8 |
+
modification, are permitted provided that the following conditions
|
| 9 |
+
are met:
|
| 10 |
+
1. Redistributions of source code must retain the above copyright
|
| 11 |
+
notice, this list of conditions and the following disclaimer.
|
| 12 |
+
2. Redistributions in binary form must reproduce the above copyright
|
| 13 |
+
notice, this list of conditions and the following disclaimer in the
|
| 14 |
+
documentation and/or other materials provided with the distribution.
|
| 15 |
+
3. The name of the author may not be used to endorse or promote products
|
| 16 |
+
derived from this software without specific prior written permission.
|
| 17 |
+
|
| 18 |
+
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
| 19 |
+
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
| 20 |
+
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
| 21 |
+
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
| 22 |
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
| 23 |
+
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| 24 |
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| 25 |
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| 26 |
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
| 27 |
+
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| 28 |
+
|
| 29 |
+
isaac.js
|
| 30 |
+
--------
|
| 31 |
+
Copyright (c) 2012 Yves-Marie K. Rinquin
|
| 32 |
+
|
| 33 |
+
Permission is hereby granted, free of charge, to any person obtaining
|
| 34 |
+
a copy of this software and associated documentation files (the
|
| 35 |
+
"Software"), to deal in the Software without restriction, including
|
| 36 |
+
without limitation the rights to use, copy, modify, merge, publish,
|
| 37 |
+
distribute, sublicense, and/or sell copies of the Software, and to
|
| 38 |
+
permit persons to whom the Software is furnished to do so, subject to
|
| 39 |
+
the following conditions:
|
| 40 |
+
|
| 41 |
+
The above copyright notice and this permission notice shall be
|
| 42 |
+
included in all copies or substantial portions of the Software.
|
| 43 |
+
|
| 44 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
| 45 |
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| 46 |
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
| 47 |
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
| 48 |
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
| 49 |
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
| 50 |
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
node_modules/bcryptjs/README.md
ADDED
|
@@ -0,0 +1,251 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
bcrypt.js
|
| 2 |
+
=========
|
| 3 |
+
Optimized bcrypt in JavaScript with zero dependencies. Compatible to the C++ [bcrypt](https://npmjs.org/package/bcrypt)
|
| 4 |
+
binding on node.js and also working in the browser.
|
| 5 |
+
|
| 6 |
+
<a href="https://travis-ci.org/dcodeIO/bcrypt.js"><img alt="build static" src="https://travis-ci.org/dcodeIO/bcrypt.js.svg?branch=master" /></a> <a href="https://npmjs.org/package/bcryptjs"><img src="https://img.shields.io/npm/v/bcryptjs.svg" alt=""></a> <a href="https://npmjs.org/package/bcryptjs"><img src="https://img.shields.io/npm/dm/bcryptjs.svg" alt=""></a> <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=dcode%40dcode.io&item_name=Open%20Source%20Software%20Donation&item_number=dcodeIO%2Fbcrypt.js"><img alt="donate ❤" src="https://img.shields.io/badge/donate-❤-ff2244.svg"></a>
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
Security considerations
|
| 10 |
+
-----------------------
|
| 11 |
+
Besides incorporating a salt to protect against rainbow table attacks, bcrypt is an adaptive function: over time, the
|
| 12 |
+
iteration count can be increased to make it slower, so it remains resistant to brute-force search attacks even with
|
| 13 |
+
increasing computation power. ([see](http://en.wikipedia.org/wiki/Bcrypt))
|
| 14 |
+
|
| 15 |
+
While bcrypt.js is compatible to the C++ bcrypt binding, it is written in pure JavaScript and thus slower ([about 30%](https://github.com/dcodeIO/bcrypt.js/wiki/Benchmark)), effectively reducing the number of iterations that can be
|
| 16 |
+
processed in an equal time span.
|
| 17 |
+
|
| 18 |
+
The maximum input length is 72 bytes (note that UTF8 encoded characters use up to 4 bytes) and the length of generated
|
| 19 |
+
hashes is 60 characters.
|
| 20 |
+
|
| 21 |
+
Usage
|
| 22 |
+
-----
|
| 23 |
+
The library is compatible with CommonJS and AMD loaders and is exposed globally as `dcodeIO.bcrypt` if neither is
|
| 24 |
+
available.
|
| 25 |
+
|
| 26 |
+
### node.js
|
| 27 |
+
|
| 28 |
+
On node.js, the inbuilt [crypto module](http://nodejs.org/api/crypto.html)'s randomBytes interface is used to obtain
|
| 29 |
+
secure random numbers.
|
| 30 |
+
|
| 31 |
+
`npm install bcryptjs`
|
| 32 |
+
|
| 33 |
+
```js
|
| 34 |
+
var bcrypt = require('bcryptjs');
|
| 35 |
+
...
|
| 36 |
+
```
|
| 37 |
+
|
| 38 |
+
### Browser
|
| 39 |
+
|
| 40 |
+
In the browser, bcrypt.js relies on [Web Crypto API](http://www.w3.org/TR/WebCryptoAPI)'s getRandomValues
|
| 41 |
+
interface to obtain secure random numbers. If no cryptographically secure source of randomness is available, you may
|
| 42 |
+
specify one through [bcrypt.setRandomFallback](https://github.com/dcodeIO/bcrypt.js#setrandomfallbackrandom).
|
| 43 |
+
|
| 44 |
+
```js
|
| 45 |
+
var bcrypt = dcodeIO.bcrypt;
|
| 46 |
+
...
|
| 47 |
+
```
|
| 48 |
+
|
| 49 |
+
or
|
| 50 |
+
|
| 51 |
+
```js
|
| 52 |
+
require.config({
|
| 53 |
+
paths: { "bcrypt": "/path/to/bcrypt.js" }
|
| 54 |
+
});
|
| 55 |
+
require(["bcrypt"], function(bcrypt) {
|
| 56 |
+
...
|
| 57 |
+
});
|
| 58 |
+
```
|
| 59 |
+
|
| 60 |
+
Usage - Sync
|
| 61 |
+
------------
|
| 62 |
+
To hash a password:
|
| 63 |
+
|
| 64 |
+
```javascript
|
| 65 |
+
var bcrypt = require('bcryptjs');
|
| 66 |
+
var salt = bcrypt.genSaltSync(10);
|
| 67 |
+
var hash = bcrypt.hashSync("B4c0/\/", salt);
|
| 68 |
+
// Store hash in your password DB.
|
| 69 |
+
```
|
| 70 |
+
|
| 71 |
+
To check a password:
|
| 72 |
+
|
| 73 |
+
```javascript
|
| 74 |
+
// Load hash from your password DB.
|
| 75 |
+
bcrypt.compareSync("B4c0/\/", hash); // true
|
| 76 |
+
bcrypt.compareSync("not_bacon", hash); // false
|
| 77 |
+
```
|
| 78 |
+
|
| 79 |
+
Auto-gen a salt and hash:
|
| 80 |
+
|
| 81 |
+
```javascript
|
| 82 |
+
var hash = bcrypt.hashSync('bacon', 8);
|
| 83 |
+
```
|
| 84 |
+
|
| 85 |
+
Usage - Async
|
| 86 |
+
-------------
|
| 87 |
+
To hash a password:
|
| 88 |
+
|
| 89 |
+
```javascript
|
| 90 |
+
var bcrypt = require('bcryptjs');
|
| 91 |
+
bcrypt.genSalt(10, function(err, salt) {
|
| 92 |
+
bcrypt.hash("B4c0/\/", salt, function(err, hash) {
|
| 93 |
+
// Store hash in your password DB.
|
| 94 |
+
});
|
| 95 |
+
});
|
| 96 |
+
```
|
| 97 |
+
|
| 98 |
+
To check a password:
|
| 99 |
+
|
| 100 |
+
```javascript
|
| 101 |
+
// Load hash from your password DB.
|
| 102 |
+
bcrypt.compare("B4c0/\/", hash, function(err, res) {
|
| 103 |
+
// res === true
|
| 104 |
+
});
|
| 105 |
+
bcrypt.compare("not_bacon", hash, function(err, res) {
|
| 106 |
+
// res === false
|
| 107 |
+
});
|
| 108 |
+
|
| 109 |
+
// As of bcryptjs 2.4.0, compare returns a promise if callback is omitted:
|
| 110 |
+
bcrypt.compare("B4c0/\/", hash).then((res) => {
|
| 111 |
+
// res === true
|
| 112 |
+
});
|
| 113 |
+
```
|
| 114 |
+
|
| 115 |
+
Auto-gen a salt and hash:
|
| 116 |
+
|
| 117 |
+
```javascript
|
| 118 |
+
bcrypt.hash('bacon', 8, function(err, hash) {
|
| 119 |
+
});
|
| 120 |
+
```
|
| 121 |
+
|
| 122 |
+
**Note:** Under the hood, asynchronisation splits a crypto operation into small chunks. After the completion of a chunk, the execution of the next chunk is placed on the back of [JS event loop queue](https://developer.mozilla.org/en/docs/Web/JavaScript/EventLoop), thus efficiently sharing the computational resources with the other operations in the queue.
|
| 123 |
+
|
| 124 |
+
API
|
| 125 |
+
---
|
| 126 |
+
### setRandomFallback(random)
|
| 127 |
+
|
| 128 |
+
Sets the pseudo random number generator to use as a fallback if neither node's `crypto` module nor the Web Crypto
|
| 129 |
+
API is available. Please note: It is highly important that the PRNG used is cryptographically secure and that it is
|
| 130 |
+
seeded properly!
|
| 131 |
+
|
| 132 |
+
| Parameter | Type | Description
|
| 133 |
+
|-----------------|-----------------|---------------
|
| 134 |
+
| random | *function(number):!Array.<number>* | Function taking the number of bytes to generate as its sole argument, returning the corresponding array of cryptographically secure random byte values.
|
| 135 |
+
| **@see** | | http://nodejs.org/api/crypto.html
|
| 136 |
+
| **@see** | | http://www.w3.org/TR/WebCryptoAPI/
|
| 137 |
+
|
| 138 |
+
**Hint:** You might use [isaac.js](https://github.com/rubycon/isaac.js) as a CSPRNG but you still have to make sure to
|
| 139 |
+
seed it properly.
|
| 140 |
+
|
| 141 |
+
### genSaltSync(rounds=, seed_length=)
|
| 142 |
+
|
| 143 |
+
Synchronously generates a salt.
|
| 144 |
+
|
| 145 |
+
| Parameter | Type | Description
|
| 146 |
+
|-----------------|-----------------|---------------
|
| 147 |
+
| rounds | *number* | Number of rounds to use, defaults to 10 if omitted
|
| 148 |
+
| seed_length | *number* | Not supported.
|
| 149 |
+
| **@returns** | *string* | Resulting salt
|
| 150 |
+
| **@throws** | *Error* | If a random fallback is required but not set
|
| 151 |
+
|
| 152 |
+
### genSalt(rounds=, seed_length=, callback)
|
| 153 |
+
|
| 154 |
+
Asynchronously generates a salt.
|
| 155 |
+
|
| 156 |
+
| Parameter | Type | Description
|
| 157 |
+
|-----------------|-----------------|---------------
|
| 158 |
+
| rounds | *number | function(Error, string=)* | Number of rounds to use, defaults to 10 if omitted
|
| 159 |
+
| seed_length | *number | function(Error, string=)* | Not supported.
|
| 160 |
+
| callback | *function(Error, string=)* | Callback receiving the error, if any, and the resulting salt
|
| 161 |
+
| **@returns** | *Promise* | If `callback` has been omitted
|
| 162 |
+
| **@throws** | *Error* | If `callback` is present but not a function
|
| 163 |
+
|
| 164 |
+
### hashSync(s, salt=)
|
| 165 |
+
|
| 166 |
+
Synchronously generates a hash for the given string.
|
| 167 |
+
|
| 168 |
+
| Parameter | Type | Description
|
| 169 |
+
|-----------------|-----------------|---------------
|
| 170 |
+
| s | *string* | String to hash
|
| 171 |
+
| salt | *number | string* | Salt length to generate or salt to use, default to 10
|
| 172 |
+
| **@returns** | *string* | Resulting hash
|
| 173 |
+
|
| 174 |
+
### hash(s, salt, callback, progressCallback=)
|
| 175 |
+
|
| 176 |
+
Asynchronously generates a hash for the given string.
|
| 177 |
+
|
| 178 |
+
| Parameter | Type | Description
|
| 179 |
+
|-----------------|-----------------|---------------
|
| 180 |
+
| s | *string* | String to hash
|
| 181 |
+
| salt | *number | string* | Salt length to generate or salt to use
|
| 182 |
+
| callback | *function(Error, string=)* | Callback receiving the error, if any, and the resulting hash
|
| 183 |
+
| progressCallback | *function(number)* | Callback successively called with the percentage of rounds completed (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
|
| 184 |
+
| **@returns** | *Promise* | If `callback` has been omitted
|
| 185 |
+
| **@throws** | *Error* | If `callback` is present but not a function
|
| 186 |
+
|
| 187 |
+
### compareSync(s, hash)
|
| 188 |
+
|
| 189 |
+
Synchronously tests a string against a hash.
|
| 190 |
+
|
| 191 |
+
| Parameter | Type | Description
|
| 192 |
+
|-----------------|-----------------|---------------
|
| 193 |
+
| s | *string* | String to compare
|
| 194 |
+
| hash | *string* | Hash to test against
|
| 195 |
+
| **@returns** | *boolean* | true if matching, otherwise false
|
| 196 |
+
| **@throws** | *Error* | If an argument is illegal
|
| 197 |
+
|
| 198 |
+
### compare(s, hash, callback, progressCallback=)
|
| 199 |
+
|
| 200 |
+
Asynchronously compares the given data against the given hash.
|
| 201 |
+
|
| 202 |
+
| Parameter | Type | Description
|
| 203 |
+
|-----------------|-----------------|---------------
|
| 204 |
+
| s | *string* | Data to compare
|
| 205 |
+
| hash | *string* | Data to be compared to
|
| 206 |
+
| callback | *function(Error, boolean)* | Callback receiving the error, if any, otherwise the result
|
| 207 |
+
| progressCallback | *function(number)* | Callback successively called with the percentage of rounds completed (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
|
| 208 |
+
| **@returns** | *Promise* | If `callback` has been omitted
|
| 209 |
+
| **@throws** | *Error* | If `callback` is present but not a function
|
| 210 |
+
|
| 211 |
+
### getRounds(hash)
|
| 212 |
+
|
| 213 |
+
Gets the number of rounds used to encrypt the specified hash.
|
| 214 |
+
|
| 215 |
+
| Parameter | Type | Description
|
| 216 |
+
|-----------------|-----------------|---------------
|
| 217 |
+
| hash | *string* | Hash to extract the used number of rounds from
|
| 218 |
+
| **@returns** | *number* | Number of rounds used
|
| 219 |
+
| **@throws** | *Error* | If `hash` is not a string
|
| 220 |
+
|
| 221 |
+
### getSalt(hash)
|
| 222 |
+
|
| 223 |
+
Gets the salt portion from a hash. Does not validate the hash.
|
| 224 |
+
|
| 225 |
+
| Parameter | Type | Description
|
| 226 |
+
|-----------------|-----------------|---------------
|
| 227 |
+
| hash | *string* | Hash to extract the salt from
|
| 228 |
+
| **@returns** | *string* | Extracted salt part
|
| 229 |
+
| **@throws** | *Error* | If `hash` is not a string or otherwise invalid
|
| 230 |
+
|
| 231 |
+
|
| 232 |
+
Command line
|
| 233 |
+
------------
|
| 234 |
+
`Usage: bcrypt <input> [salt]`
|
| 235 |
+
|
| 236 |
+
If the input has spaces inside, simply surround it with quotes.
|
| 237 |
+
|
| 238 |
+
Downloads
|
| 239 |
+
---------
|
| 240 |
+
* [Distributions](https://github.com/dcodeIO/bcrypt.js/tree/master/dist)
|
| 241 |
+
* [ZIP-Archive](https://github.com/dcodeIO/bcrypt.js/archive/master.zip)
|
| 242 |
+
* [Tarball](https://github.com/dcodeIO/bcrypt.js/tarball/master)
|
| 243 |
+
|
| 244 |
+
Credits
|
| 245 |
+
-------
|
| 246 |
+
Based on work started by Shane Girish at [bcrypt-nodejs](https://github.com/shaneGirish/bcrypt-nodejs) (MIT-licensed),
|
| 247 |
+
which is itself based on [javascript-bcrypt](http://code.google.com/p/javascript-bcrypt/) (New BSD-licensed).
|
| 248 |
+
|
| 249 |
+
License
|
| 250 |
+
-------
|
| 251 |
+
New-BSD / MIT ([see](https://github.com/dcodeIO/bcrypt.js/blob/master/LICENSE))
|
node_modules/bcryptjs/bin/bcrypt
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env node
|
| 2 |
+
|
| 3 |
+
var path = require("path"),
|
| 4 |
+
bcrypt = require(path.join(__dirname, '..', 'index.js')),
|
| 5 |
+
pkg = require(path.join(__dirname, '..', 'package.json'));
|
| 6 |
+
|
| 7 |
+
if (process.argv.length < 3) {
|
| 8 |
+
process.stderr.write([ // No dependencies, so we do it from hand.
|
| 9 |
+
"",
|
| 10 |
+
" |_ _ _ _ |_",
|
| 11 |
+
" |_)(_| \\/|_)|_ v"+pkg['version']+" (c) "+pkg['author'],
|
| 12 |
+
" / | "
|
| 13 |
+
].join('\n')+'\n\n'+" Usage: "+path.basename(process.argv[1])+" <input> [rounds|salt]\n");
|
| 14 |
+
process.exit(1);
|
| 15 |
+
} else {
|
| 16 |
+
var salt;
|
| 17 |
+
if (process.argv.length > 3) {
|
| 18 |
+
salt = process.argv[3];
|
| 19 |
+
var rounds = parseInt(salt, 10);
|
| 20 |
+
if (rounds == salt)
|
| 21 |
+
salt = bcrypt.genSaltSync(rounds);
|
| 22 |
+
} else
|
| 23 |
+
salt = bcrypt.genSaltSync();
|
| 24 |
+
process.stdout.write(bcrypt.hashSync(process.argv[2], salt)+"\n");
|
| 25 |
+
}
|
node_modules/bcryptjs/bower.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "bcryptjs",
|
| 3 |
+
"description": "Optimized bcrypt in plain JavaScript with zero dependencies.",
|
| 4 |
+
"version": "2.4.3",
|
| 5 |
+
"main": "dist/bcrypt.min.js",
|
| 6 |
+
"license": "New-BSD",
|
| 7 |
+
"homepage": "http://dcode.io/",
|
| 8 |
+
"repository": {
|
| 9 |
+
"type": "git",
|
| 10 |
+
"url": "git://github.com/dcodeIO/bcrypt.js.git"
|
| 11 |
+
},
|
| 12 |
+
"keywords": ["bcrypt", "password", "auth", "authentication", "encryption", "crypt", "crypto"],
|
| 13 |
+
"dependencies": {},
|
| 14 |
+
"devDependencies": {},
|
| 15 |
+
"ignore": [
|
| 16 |
+
"**/.*",
|
| 17 |
+
"node_modules",
|
| 18 |
+
"bower_components",
|
| 19 |
+
"test",
|
| 20 |
+
"tests"
|
| 21 |
+
]
|
| 22 |
+
}
|
node_modules/bcryptjs/dist/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Distributions
|
| 2 |
+
=============
|
| 3 |
+
bcrypt.js is available as the following distributions:
|
| 4 |
+
|
| 5 |
+
* **[bcrypt.js](https://github.com/dcodeIO/bcrypt.js/blob/master/dist/bcrypt.js)**
|
| 6 |
+
contains the commented source code.
|
| 7 |
+
|
| 8 |
+
* **[bcrypt.min.js](https://github.com/dcodeIO/bcrypt.js/blob/master/dist/bcrypt.min.js)**
|
| 9 |
+
has been compiled with Closure Compiler using advanced optimizations.
|
| 10 |
+
|
| 11 |
+
* **[bcrypt.min.map](https://github.com/dcodeIO/bcrypt.js/blob/master/dist/bcrypt.min.map)**
|
| 12 |
+
contains the source map generated by Closure Compiler.
|
| 13 |
+
|
| 14 |
+
* **[bcrypt.min.js.gz](https://github.com/dcodeIO/bcrypt.js/blob/master/dist/bcrypt.min.js.gz)**
|
| 15 |
+
has also been gzipped using `-9`.
|
node_modules/bcryptjs/dist/bcrypt.js
ADDED
|
@@ -0,0 +1,1379 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>
|
| 3 |
+
Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>
|
| 4 |
+
Copyright (c) 2014 Daniel Wirtz <dcode@dcode.io>
|
| 5 |
+
|
| 6 |
+
Redistribution and use in source and binary forms, with or without
|
| 7 |
+
modification, are permitted provided that the following conditions
|
| 8 |
+
are met:
|
| 9 |
+
1. Redistributions of source code must retain the above copyright
|
| 10 |
+
notice, this list of conditions and the following disclaimer.
|
| 11 |
+
2. Redistributions in binary form must reproduce the above copyright
|
| 12 |
+
notice, this list of conditions and the following disclaimer in the
|
| 13 |
+
documentation and/or other materials provided with the distribution.
|
| 14 |
+
3. The name of the author may not be used to endorse or promote products
|
| 15 |
+
derived from this software without specific prior written permission.
|
| 16 |
+
|
| 17 |
+
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
| 18 |
+
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
| 19 |
+
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
| 20 |
+
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
| 21 |
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
| 22 |
+
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| 23 |
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| 24 |
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| 25 |
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
| 26 |
+
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| 27 |
+
*/
|
| 28 |
+
|
| 29 |
+
/**
|
| 30 |
+
* @license bcrypt.js (c) 2013 Daniel Wirtz <dcode@dcode.io>
|
| 31 |
+
* Released under the Apache License, Version 2.0
|
| 32 |
+
* see: https://github.com/dcodeIO/bcrypt.js for details
|
| 33 |
+
*/
|
| 34 |
+
(function(global, factory) {
|
| 35 |
+
|
| 36 |
+
/* AMD */ if (typeof define === 'function' && define["amd"])
|
| 37 |
+
define([], factory);
|
| 38 |
+
/* CommonJS */ else if (typeof require === 'function' && typeof module === "object" && module && module["exports"])
|
| 39 |
+
module["exports"] = factory();
|
| 40 |
+
/* Global */ else
|
| 41 |
+
(global["dcodeIO"] = global["dcodeIO"] || {})["bcrypt"] = factory();
|
| 42 |
+
|
| 43 |
+
}(this, function() {
|
| 44 |
+
"use strict";
|
| 45 |
+
|
| 46 |
+
/**
|
| 47 |
+
* bcrypt namespace.
|
| 48 |
+
* @type {Object.<string,*>}
|
| 49 |
+
*/
|
| 50 |
+
var bcrypt = {};
|
| 51 |
+
|
| 52 |
+
/**
|
| 53 |
+
* The random implementation to use as a fallback.
|
| 54 |
+
* @type {?function(number):!Array.<number>}
|
| 55 |
+
* @inner
|
| 56 |
+
*/
|
| 57 |
+
var randomFallback = null;
|
| 58 |
+
|
| 59 |
+
/**
|
| 60 |
+
* Generates cryptographically secure random bytes.
|
| 61 |
+
* @function
|
| 62 |
+
* @param {number} len Bytes length
|
| 63 |
+
* @returns {!Array.<number>} Random bytes
|
| 64 |
+
* @throws {Error} If no random implementation is available
|
| 65 |
+
* @inner
|
| 66 |
+
*/
|
| 67 |
+
function random(len) {
|
| 68 |
+
/* node */ if (typeof module !== 'undefined' && module && module['exports'])
|
| 69 |
+
try {
|
| 70 |
+
return require("crypto")['randomBytes'](len);
|
| 71 |
+
} catch (e) {}
|
| 72 |
+
/* WCA */ try {
|
| 73 |
+
var a; (self['crypto']||self['msCrypto'])['getRandomValues'](a = new Uint32Array(len));
|
| 74 |
+
return Array.prototype.slice.call(a);
|
| 75 |
+
} catch (e) {}
|
| 76 |
+
/* fallback */ if (!randomFallback)
|
| 77 |
+
throw Error("Neither WebCryptoAPI nor a crypto module is available. Use bcrypt.setRandomFallback to set an alternative");
|
| 78 |
+
return randomFallback(len);
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
// Test if any secure randomness source is available
|
| 82 |
+
var randomAvailable = false;
|
| 83 |
+
try {
|
| 84 |
+
random(1);
|
| 85 |
+
randomAvailable = true;
|
| 86 |
+
} catch (e) {}
|
| 87 |
+
|
| 88 |
+
// Default fallback, if any
|
| 89 |
+
randomFallback = null;
|
| 90 |
+
/**
|
| 91 |
+
* Sets the pseudo random number generator to use as a fallback if neither node's `crypto` module nor the Web Crypto
|
| 92 |
+
* API is available. Please note: It is highly important that the PRNG used is cryptographically secure and that it
|
| 93 |
+
* is seeded properly!
|
| 94 |
+
* @param {?function(number):!Array.<number>} random Function taking the number of bytes to generate as its
|
| 95 |
+
* sole argument, returning the corresponding array of cryptographically secure random byte values.
|
| 96 |
+
* @see http://nodejs.org/api/crypto.html
|
| 97 |
+
* @see http://www.w3.org/TR/WebCryptoAPI/
|
| 98 |
+
*/
|
| 99 |
+
bcrypt.setRandomFallback = function(random) {
|
| 100 |
+
randomFallback = random;
|
| 101 |
+
};
|
| 102 |
+
|
| 103 |
+
/**
|
| 104 |
+
* Synchronously generates a salt.
|
| 105 |
+
* @param {number=} rounds Number of rounds to use, defaults to 10 if omitted
|
| 106 |
+
* @param {number=} seed_length Not supported.
|
| 107 |
+
* @returns {string} Resulting salt
|
| 108 |
+
* @throws {Error} If a random fallback is required but not set
|
| 109 |
+
* @expose
|
| 110 |
+
*/
|
| 111 |
+
bcrypt.genSaltSync = function(rounds, seed_length) {
|
| 112 |
+
rounds = rounds || GENSALT_DEFAULT_LOG2_ROUNDS;
|
| 113 |
+
if (typeof rounds !== 'number')
|
| 114 |
+
throw Error("Illegal arguments: "+(typeof rounds)+", "+(typeof seed_length));
|
| 115 |
+
if (rounds < 4)
|
| 116 |
+
rounds = 4;
|
| 117 |
+
else if (rounds > 31)
|
| 118 |
+
rounds = 31;
|
| 119 |
+
var salt = [];
|
| 120 |
+
salt.push("$2a$");
|
| 121 |
+
if (rounds < 10)
|
| 122 |
+
salt.push("0");
|
| 123 |
+
salt.push(rounds.toString());
|
| 124 |
+
salt.push('$');
|
| 125 |
+
salt.push(base64_encode(random(BCRYPT_SALT_LEN), BCRYPT_SALT_LEN)); // May throw
|
| 126 |
+
return salt.join('');
|
| 127 |
+
};
|
| 128 |
+
|
| 129 |
+
/**
|
| 130 |
+
* Asynchronously generates a salt.
|
| 131 |
+
* @param {(number|function(Error, string=))=} rounds Number of rounds to use, defaults to 10 if omitted
|
| 132 |
+
* @param {(number|function(Error, string=))=} seed_length Not supported.
|
| 133 |
+
* @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting salt
|
| 134 |
+
* @returns {!Promise} If `callback` has been omitted
|
| 135 |
+
* @throws {Error} If `callback` is present but not a function
|
| 136 |
+
* @expose
|
| 137 |
+
*/
|
| 138 |
+
bcrypt.genSalt = function(rounds, seed_length, callback) {
|
| 139 |
+
if (typeof seed_length === 'function')
|
| 140 |
+
callback = seed_length,
|
| 141 |
+
seed_length = undefined; // Not supported.
|
| 142 |
+
if (typeof rounds === 'function')
|
| 143 |
+
callback = rounds,
|
| 144 |
+
rounds = undefined;
|
| 145 |
+
if (typeof rounds === 'undefined')
|
| 146 |
+
rounds = GENSALT_DEFAULT_LOG2_ROUNDS;
|
| 147 |
+
else if (typeof rounds !== 'number')
|
| 148 |
+
throw Error("illegal arguments: "+(typeof rounds));
|
| 149 |
+
|
| 150 |
+
function _async(callback) {
|
| 151 |
+
nextTick(function() { // Pretty thin, but salting is fast enough
|
| 152 |
+
try {
|
| 153 |
+
callback(null, bcrypt.genSaltSync(rounds));
|
| 154 |
+
} catch (err) {
|
| 155 |
+
callback(err);
|
| 156 |
+
}
|
| 157 |
+
});
|
| 158 |
+
}
|
| 159 |
+
|
| 160 |
+
if (callback) {
|
| 161 |
+
if (typeof callback !== 'function')
|
| 162 |
+
throw Error("Illegal callback: "+typeof(callback));
|
| 163 |
+
_async(callback);
|
| 164 |
+
} else
|
| 165 |
+
return new Promise(function(resolve, reject) {
|
| 166 |
+
_async(function(err, res) {
|
| 167 |
+
if (err) {
|
| 168 |
+
reject(err);
|
| 169 |
+
return;
|
| 170 |
+
}
|
| 171 |
+
resolve(res);
|
| 172 |
+
});
|
| 173 |
+
});
|
| 174 |
+
};
|
| 175 |
+
|
| 176 |
+
/**
|
| 177 |
+
* Synchronously generates a hash for the given string.
|
| 178 |
+
* @param {string} s String to hash
|
| 179 |
+
* @param {(number|string)=} salt Salt length to generate or salt to use, default to 10
|
| 180 |
+
* @returns {string} Resulting hash
|
| 181 |
+
* @expose
|
| 182 |
+
*/
|
| 183 |
+
bcrypt.hashSync = function(s, salt) {
|
| 184 |
+
if (typeof salt === 'undefined')
|
| 185 |
+
salt = GENSALT_DEFAULT_LOG2_ROUNDS;
|
| 186 |
+
if (typeof salt === 'number')
|
| 187 |
+
salt = bcrypt.genSaltSync(salt);
|
| 188 |
+
if (typeof s !== 'string' || typeof salt !== 'string')
|
| 189 |
+
throw Error("Illegal arguments: "+(typeof s)+', '+(typeof salt));
|
| 190 |
+
return _hash(s, salt);
|
| 191 |
+
};
|
| 192 |
+
|
| 193 |
+
/**
|
| 194 |
+
* Asynchronously generates a hash for the given string.
|
| 195 |
+
* @param {string} s String to hash
|
| 196 |
+
* @param {number|string} salt Salt length to generate or salt to use
|
| 197 |
+
* @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash
|
| 198 |
+
* @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed
|
| 199 |
+
* (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
|
| 200 |
+
* @returns {!Promise} If `callback` has been omitted
|
| 201 |
+
* @throws {Error} If `callback` is present but not a function
|
| 202 |
+
* @expose
|
| 203 |
+
*/
|
| 204 |
+
bcrypt.hash = function(s, salt, callback, progressCallback) {
|
| 205 |
+
|
| 206 |
+
function _async(callback) {
|
| 207 |
+
if (typeof s === 'string' && typeof salt === 'number')
|
| 208 |
+
bcrypt.genSalt(salt, function(err, salt) {
|
| 209 |
+
_hash(s, salt, callback, progressCallback);
|
| 210 |
+
});
|
| 211 |
+
else if (typeof s === 'string' && typeof salt === 'string')
|
| 212 |
+
_hash(s, salt, callback, progressCallback);
|
| 213 |
+
else
|
| 214 |
+
nextTick(callback.bind(this, Error("Illegal arguments: "+(typeof s)+', '+(typeof salt))));
|
| 215 |
+
}
|
| 216 |
+
|
| 217 |
+
if (callback) {
|
| 218 |
+
if (typeof callback !== 'function')
|
| 219 |
+
throw Error("Illegal callback: "+typeof(callback));
|
| 220 |
+
_async(callback);
|
| 221 |
+
} else
|
| 222 |
+
return new Promise(function(resolve, reject) {
|
| 223 |
+
_async(function(err, res) {
|
| 224 |
+
if (err) {
|
| 225 |
+
reject(err);
|
| 226 |
+
return;
|
| 227 |
+
}
|
| 228 |
+
resolve(res);
|
| 229 |
+
});
|
| 230 |
+
});
|
| 231 |
+
};
|
| 232 |
+
|
| 233 |
+
/**
|
| 234 |
+
* Compares two strings of the same length in constant time.
|
| 235 |
+
* @param {string} known Must be of the correct length
|
| 236 |
+
* @param {string} unknown Must be the same length as `known`
|
| 237 |
+
* @returns {boolean}
|
| 238 |
+
* @inner
|
| 239 |
+
*/
|
| 240 |
+
function safeStringCompare(known, unknown) {
|
| 241 |
+
var right = 0,
|
| 242 |
+
wrong = 0;
|
| 243 |
+
for (var i=0, k=known.length; i<k; ++i) {
|
| 244 |
+
if (known.charCodeAt(i) === unknown.charCodeAt(i))
|
| 245 |
+
++right;
|
| 246 |
+
else
|
| 247 |
+
++wrong;
|
| 248 |
+
}
|
| 249 |
+
// Prevent removal of unused variables (never true, actually)
|
| 250 |
+
if (right < 0)
|
| 251 |
+
return false;
|
| 252 |
+
return wrong === 0;
|
| 253 |
+
}
|
| 254 |
+
|
| 255 |
+
/**
|
| 256 |
+
* Synchronously tests a string against a hash.
|
| 257 |
+
* @param {string} s String to compare
|
| 258 |
+
* @param {string} hash Hash to test against
|
| 259 |
+
* @returns {boolean} true if matching, otherwise false
|
| 260 |
+
* @throws {Error} If an argument is illegal
|
| 261 |
+
* @expose
|
| 262 |
+
*/
|
| 263 |
+
bcrypt.compareSync = function(s, hash) {
|
| 264 |
+
if (typeof s !== "string" || typeof hash !== "string")
|
| 265 |
+
throw Error("Illegal arguments: "+(typeof s)+', '+(typeof hash));
|
| 266 |
+
if (hash.length !== 60)
|
| 267 |
+
return false;
|
| 268 |
+
return safeStringCompare(bcrypt.hashSync(s, hash.substr(0, hash.length-31)), hash);
|
| 269 |
+
};
|
| 270 |
+
|
| 271 |
+
/**
|
| 272 |
+
* Asynchronously compares the given data against the given hash.
|
| 273 |
+
* @param {string} s Data to compare
|
| 274 |
+
* @param {string} hash Data to be compared to
|
| 275 |
+
* @param {function(Error, boolean)=} callback Callback receiving the error, if any, otherwise the result
|
| 276 |
+
* @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed
|
| 277 |
+
* (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
|
| 278 |
+
* @returns {!Promise} If `callback` has been omitted
|
| 279 |
+
* @throws {Error} If `callback` is present but not a function
|
| 280 |
+
* @expose
|
| 281 |
+
*/
|
| 282 |
+
bcrypt.compare = function(s, hash, callback, progressCallback) {
|
| 283 |
+
|
| 284 |
+
function _async(callback) {
|
| 285 |
+
if (typeof s !== "string" || typeof hash !== "string") {
|
| 286 |
+
nextTick(callback.bind(this, Error("Illegal arguments: "+(typeof s)+', '+(typeof hash))));
|
| 287 |
+
return;
|
| 288 |
+
}
|
| 289 |
+
if (hash.length !== 60) {
|
| 290 |
+
nextTick(callback.bind(this, null, false));
|
| 291 |
+
return;
|
| 292 |
+
}
|
| 293 |
+
bcrypt.hash(s, hash.substr(0, 29), function(err, comp) {
|
| 294 |
+
if (err)
|
| 295 |
+
callback(err);
|
| 296 |
+
else
|
| 297 |
+
callback(null, safeStringCompare(comp, hash));
|
| 298 |
+
}, progressCallback);
|
| 299 |
+
}
|
| 300 |
+
|
| 301 |
+
if (callback) {
|
| 302 |
+
if (typeof callback !== 'function')
|
| 303 |
+
throw Error("Illegal callback: "+typeof(callback));
|
| 304 |
+
_async(callback);
|
| 305 |
+
} else
|
| 306 |
+
return new Promise(function(resolve, reject) {
|
| 307 |
+
_async(function(err, res) {
|
| 308 |
+
if (err) {
|
| 309 |
+
reject(err);
|
| 310 |
+
return;
|
| 311 |
+
}
|
| 312 |
+
resolve(res);
|
| 313 |
+
});
|
| 314 |
+
});
|
| 315 |
+
};
|
| 316 |
+
|
| 317 |
+
/**
|
| 318 |
+
* Gets the number of rounds used to encrypt the specified hash.
|
| 319 |
+
* @param {string} hash Hash to extract the used number of rounds from
|
| 320 |
+
* @returns {number} Number of rounds used
|
| 321 |
+
* @throws {Error} If `hash` is not a string
|
| 322 |
+
* @expose
|
| 323 |
+
*/
|
| 324 |
+
bcrypt.getRounds = function(hash) {
|
| 325 |
+
if (typeof hash !== "string")
|
| 326 |
+
throw Error("Illegal arguments: "+(typeof hash));
|
| 327 |
+
return parseInt(hash.split("$")[2], 10);
|
| 328 |
+
};
|
| 329 |
+
|
| 330 |
+
/**
|
| 331 |
+
* Gets the salt portion from a hash. Does not validate the hash.
|
| 332 |
+
* @param {string} hash Hash to extract the salt from
|
| 333 |
+
* @returns {string} Extracted salt part
|
| 334 |
+
* @throws {Error} If `hash` is not a string or otherwise invalid
|
| 335 |
+
* @expose
|
| 336 |
+
*/
|
| 337 |
+
bcrypt.getSalt = function(hash) {
|
| 338 |
+
if (typeof hash !== 'string')
|
| 339 |
+
throw Error("Illegal arguments: "+(typeof hash));
|
| 340 |
+
if (hash.length !== 60)
|
| 341 |
+
throw Error("Illegal hash length: "+hash.length+" != 60");
|
| 342 |
+
return hash.substring(0, 29);
|
| 343 |
+
};
|
| 344 |
+
|
| 345 |
+
/**
|
| 346 |
+
* Continues with the callback on the next tick.
|
| 347 |
+
* @function
|
| 348 |
+
* @param {function(...[*])} callback Callback to execute
|
| 349 |
+
* @inner
|
| 350 |
+
*/
|
| 351 |
+
var nextTick = typeof process !== 'undefined' && process && typeof process.nextTick === 'function'
|
| 352 |
+
? (typeof setImmediate === 'function' ? setImmediate : process.nextTick)
|
| 353 |
+
: setTimeout;
|
| 354 |
+
|
| 355 |
+
/**
|
| 356 |
+
* Converts a JavaScript string to UTF8 bytes.
|
| 357 |
+
* @param {string} str String
|
| 358 |
+
* @returns {!Array.<number>} UTF8 bytes
|
| 359 |
+
* @inner
|
| 360 |
+
*/
|
| 361 |
+
function stringToBytes(str) {
|
| 362 |
+
var out = [],
|
| 363 |
+
i = 0;
|
| 364 |
+
utfx.encodeUTF16toUTF8(function() {
|
| 365 |
+
if (i >= str.length) return null;
|
| 366 |
+
return str.charCodeAt(i++);
|
| 367 |
+
}, function(b) {
|
| 368 |
+
out.push(b);
|
| 369 |
+
});
|
| 370 |
+
return out;
|
| 371 |
+
}
|
| 372 |
+
|
| 373 |
+
// A base64 implementation for the bcrypt algorithm. This is partly non-standard.
|
| 374 |
+
|
| 375 |
+
/**
|
| 376 |
+
* bcrypt's own non-standard base64 dictionary.
|
| 377 |
+
* @type {!Array.<string>}
|
| 378 |
+
* @const
|
| 379 |
+
* @inner
|
| 380 |
+
**/
|
| 381 |
+
var BASE64_CODE = "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split('');
|
| 382 |
+
|
| 383 |
+
/**
|
| 384 |
+
* @type {!Array.<number>}
|
| 385 |
+
* @const
|
| 386 |
+
* @inner
|
| 387 |
+
**/
|
| 388 |
+
var BASE64_INDEX = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
| 389 |
+
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
| 390 |
+
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
|
| 391 |
+
1, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1,
|
| 392 |
+
-1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
|
| 393 |
+
20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, -1, 28, 29, 30,
|
| 394 |
+
31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
| 395 |
+
48, 49, 50, 51, 52, 53, -1, -1, -1, -1, -1];
|
| 396 |
+
|
| 397 |
+
/**
|
| 398 |
+
* @type {!function(...number):string}
|
| 399 |
+
* @inner
|
| 400 |
+
*/
|
| 401 |
+
var stringFromCharCode = String.fromCharCode;
|
| 402 |
+
|
| 403 |
+
/**
|
| 404 |
+
* Encodes a byte array to base64 with up to len bytes of input.
|
| 405 |
+
* @param {!Array.<number>} b Byte array
|
| 406 |
+
* @param {number} len Maximum input length
|
| 407 |
+
* @returns {string}
|
| 408 |
+
* @inner
|
| 409 |
+
*/
|
| 410 |
+
function base64_encode(b, len) {
|
| 411 |
+
var off = 0,
|
| 412 |
+
rs = [],
|
| 413 |
+
c1, c2;
|
| 414 |
+
if (len <= 0 || len > b.length)
|
| 415 |
+
throw Error("Illegal len: "+len);
|
| 416 |
+
while (off < len) {
|
| 417 |
+
c1 = b[off++] & 0xff;
|
| 418 |
+
rs.push(BASE64_CODE[(c1 >> 2) & 0x3f]);
|
| 419 |
+
c1 = (c1 & 0x03) << 4;
|
| 420 |
+
if (off >= len) {
|
| 421 |
+
rs.push(BASE64_CODE[c1 & 0x3f]);
|
| 422 |
+
break;
|
| 423 |
+
}
|
| 424 |
+
c2 = b[off++] & 0xff;
|
| 425 |
+
c1 |= (c2 >> 4) & 0x0f;
|
| 426 |
+
rs.push(BASE64_CODE[c1 & 0x3f]);
|
| 427 |
+
c1 = (c2 & 0x0f) << 2;
|
| 428 |
+
if (off >= len) {
|
| 429 |
+
rs.push(BASE64_CODE[c1 & 0x3f]);
|
| 430 |
+
break;
|
| 431 |
+
}
|
| 432 |
+
c2 = b[off++] & 0xff;
|
| 433 |
+
c1 |= (c2 >> 6) & 0x03;
|
| 434 |
+
rs.push(BASE64_CODE[c1 & 0x3f]);
|
| 435 |
+
rs.push(BASE64_CODE[c2 & 0x3f]);
|
| 436 |
+
}
|
| 437 |
+
return rs.join('');
|
| 438 |
+
}
|
| 439 |
+
|
| 440 |
+
/**
|
| 441 |
+
* Decodes a base64 encoded string to up to len bytes of output.
|
| 442 |
+
* @param {string} s String to decode
|
| 443 |
+
* @param {number} len Maximum output length
|
| 444 |
+
* @returns {!Array.<number>}
|
| 445 |
+
* @inner
|
| 446 |
+
*/
|
| 447 |
+
function base64_decode(s, len) {
|
| 448 |
+
var off = 0,
|
| 449 |
+
slen = s.length,
|
| 450 |
+
olen = 0,
|
| 451 |
+
rs = [],
|
| 452 |
+
c1, c2, c3, c4, o, code;
|
| 453 |
+
if (len <= 0)
|
| 454 |
+
throw Error("Illegal len: "+len);
|
| 455 |
+
while (off < slen - 1 && olen < len) {
|
| 456 |
+
code = s.charCodeAt(off++);
|
| 457 |
+
c1 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
|
| 458 |
+
code = s.charCodeAt(off++);
|
| 459 |
+
c2 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
|
| 460 |
+
if (c1 == -1 || c2 == -1)
|
| 461 |
+
break;
|
| 462 |
+
o = (c1 << 2) >>> 0;
|
| 463 |
+
o |= (c2 & 0x30) >> 4;
|
| 464 |
+
rs.push(stringFromCharCode(o));
|
| 465 |
+
if (++olen >= len || off >= slen)
|
| 466 |
+
break;
|
| 467 |
+
code = s.charCodeAt(off++);
|
| 468 |
+
c3 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
|
| 469 |
+
if (c3 == -1)
|
| 470 |
+
break;
|
| 471 |
+
o = ((c2 & 0x0f) << 4) >>> 0;
|
| 472 |
+
o |= (c3 & 0x3c) >> 2;
|
| 473 |
+
rs.push(stringFromCharCode(o));
|
| 474 |
+
if (++olen >= len || off >= slen)
|
| 475 |
+
break;
|
| 476 |
+
code = s.charCodeAt(off++);
|
| 477 |
+
c4 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
|
| 478 |
+
o = ((c3 & 0x03) << 6) >>> 0;
|
| 479 |
+
o |= c4;
|
| 480 |
+
rs.push(stringFromCharCode(o));
|
| 481 |
+
++olen;
|
| 482 |
+
}
|
| 483 |
+
var res = [];
|
| 484 |
+
for (off = 0; off<olen; off++)
|
| 485 |
+
res.push(rs[off].charCodeAt(0));
|
| 486 |
+
return res;
|
| 487 |
+
}
|
| 488 |
+
|
| 489 |
+
/**
|
| 490 |
+
* utfx-embeddable (c) 2014 Daniel Wirtz <dcode@dcode.io>
|
| 491 |
+
* Released under the Apache License, Version 2.0
|
| 492 |
+
* see: https://github.com/dcodeIO/utfx for details
|
| 493 |
+
*/
|
| 494 |
+
var utfx = function() {
|
| 495 |
+
"use strict";
|
| 496 |
+
|
| 497 |
+
/**
|
| 498 |
+
* utfx namespace.
|
| 499 |
+
* @inner
|
| 500 |
+
* @type {!Object.<string,*>}
|
| 501 |
+
*/
|
| 502 |
+
var utfx = {};
|
| 503 |
+
|
| 504 |
+
/**
|
| 505 |
+
* Maximum valid code point.
|
| 506 |
+
* @type {number}
|
| 507 |
+
* @const
|
| 508 |
+
*/
|
| 509 |
+
utfx.MAX_CODEPOINT = 0x10FFFF;
|
| 510 |
+
|
| 511 |
+
/**
|
| 512 |
+
* Encodes UTF8 code points to UTF8 bytes.
|
| 513 |
+
* @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point
|
| 514 |
+
* respectively `null` if there are no more code points left or a single numeric code point.
|
| 515 |
+
* @param {!function(number)} dst Bytes destination as a function successively called with the next byte
|
| 516 |
+
*/
|
| 517 |
+
utfx.encodeUTF8 = function(src, dst) {
|
| 518 |
+
var cp = null;
|
| 519 |
+
if (typeof src === 'number')
|
| 520 |
+
cp = src,
|
| 521 |
+
src = function() { return null; };
|
| 522 |
+
while (cp !== null || (cp = src()) !== null) {
|
| 523 |
+
if (cp < 0x80)
|
| 524 |
+
dst(cp&0x7F);
|
| 525 |
+
else if (cp < 0x800)
|
| 526 |
+
dst(((cp>>6)&0x1F)|0xC0),
|
| 527 |
+
dst((cp&0x3F)|0x80);
|
| 528 |
+
else if (cp < 0x10000)
|
| 529 |
+
dst(((cp>>12)&0x0F)|0xE0),
|
| 530 |
+
dst(((cp>>6)&0x3F)|0x80),
|
| 531 |
+
dst((cp&0x3F)|0x80);
|
| 532 |
+
else
|
| 533 |
+
dst(((cp>>18)&0x07)|0xF0),
|
| 534 |
+
dst(((cp>>12)&0x3F)|0x80),
|
| 535 |
+
dst(((cp>>6)&0x3F)|0x80),
|
| 536 |
+
dst((cp&0x3F)|0x80);
|
| 537 |
+
cp = null;
|
| 538 |
+
}
|
| 539 |
+
};
|
| 540 |
+
|
| 541 |
+
/**
|
| 542 |
+
* Decodes UTF8 bytes to UTF8 code points.
|
| 543 |
+
* @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there
|
| 544 |
+
* are no more bytes left.
|
| 545 |
+
* @param {!function(number)} dst Code points destination as a function successively called with each decoded code point.
|
| 546 |
+
* @throws {RangeError} If a starting byte is invalid in UTF8
|
| 547 |
+
* @throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the
|
| 548 |
+
* remaining bytes.
|
| 549 |
+
*/
|
| 550 |
+
utfx.decodeUTF8 = function(src, dst) {
|
| 551 |
+
var a, b, c, d, fail = function(b) {
|
| 552 |
+
b = b.slice(0, b.indexOf(null));
|
| 553 |
+
var err = Error(b.toString());
|
| 554 |
+
err.name = "TruncatedError";
|
| 555 |
+
err['bytes'] = b;
|
| 556 |
+
throw err;
|
| 557 |
+
};
|
| 558 |
+
while ((a = src()) !== null) {
|
| 559 |
+
if ((a&0x80) === 0)
|
| 560 |
+
dst(a);
|
| 561 |
+
else if ((a&0xE0) === 0xC0)
|
| 562 |
+
((b = src()) === null) && fail([a, b]),
|
| 563 |
+
dst(((a&0x1F)<<6) | (b&0x3F));
|
| 564 |
+
else if ((a&0xF0) === 0xE0)
|
| 565 |
+
((b=src()) === null || (c=src()) === null) && fail([a, b, c]),
|
| 566 |
+
dst(((a&0x0F)<<12) | ((b&0x3F)<<6) | (c&0x3F));
|
| 567 |
+
else if ((a&0xF8) === 0xF0)
|
| 568 |
+
((b=src()) === null || (c=src()) === null || (d=src()) === null) && fail([a, b, c ,d]),
|
| 569 |
+
dst(((a&0x07)<<18) | ((b&0x3F)<<12) | ((c&0x3F)<<6) | (d&0x3F));
|
| 570 |
+
else throw RangeError("Illegal starting byte: "+a);
|
| 571 |
+
}
|
| 572 |
+
};
|
| 573 |
+
|
| 574 |
+
/**
|
| 575 |
+
* Converts UTF16 characters to UTF8 code points.
|
| 576 |
+
* @param {!function():number|null} src Characters source as a function returning the next char code respectively
|
| 577 |
+
* `null` if there are no more characters left.
|
| 578 |
+
* @param {!function(number)} dst Code points destination as a function successively called with each converted code
|
| 579 |
+
* point.
|
| 580 |
+
*/
|
| 581 |
+
utfx.UTF16toUTF8 = function(src, dst) {
|
| 582 |
+
var c1, c2 = null;
|
| 583 |
+
while (true) {
|
| 584 |
+
if ((c1 = c2 !== null ? c2 : src()) === null)
|
| 585 |
+
break;
|
| 586 |
+
if (c1 >= 0xD800 && c1 <= 0xDFFF) {
|
| 587 |
+
if ((c2 = src()) !== null) {
|
| 588 |
+
if (c2 >= 0xDC00 && c2 <= 0xDFFF) {
|
| 589 |
+
dst((c1-0xD800)*0x400+c2-0xDC00+0x10000);
|
| 590 |
+
c2 = null; continue;
|
| 591 |
+
}
|
| 592 |
+
}
|
| 593 |
+
}
|
| 594 |
+
dst(c1);
|
| 595 |
+
}
|
| 596 |
+
if (c2 !== null) dst(c2);
|
| 597 |
+
};
|
| 598 |
+
|
| 599 |
+
/**
|
| 600 |
+
* Converts UTF8 code points to UTF16 characters.
|
| 601 |
+
* @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point
|
| 602 |
+
* respectively `null` if there are no more code points left or a single numeric code point.
|
| 603 |
+
* @param {!function(number)} dst Characters destination as a function successively called with each converted char code.
|
| 604 |
+
* @throws {RangeError} If a code point is out of range
|
| 605 |
+
*/
|
| 606 |
+
utfx.UTF8toUTF16 = function(src, dst) {
|
| 607 |
+
var cp = null;
|
| 608 |
+
if (typeof src === 'number')
|
| 609 |
+
cp = src, src = function() { return null; };
|
| 610 |
+
while (cp !== null || (cp = src()) !== null) {
|
| 611 |
+
if (cp <= 0xFFFF)
|
| 612 |
+
dst(cp);
|
| 613 |
+
else
|
| 614 |
+
cp -= 0x10000,
|
| 615 |
+
dst((cp>>10)+0xD800),
|
| 616 |
+
dst((cp%0x400)+0xDC00);
|
| 617 |
+
cp = null;
|
| 618 |
+
}
|
| 619 |
+
};
|
| 620 |
+
|
| 621 |
+
/**
|
| 622 |
+
* Converts and encodes UTF16 characters to UTF8 bytes.
|
| 623 |
+
* @param {!function():number|null} src Characters source as a function returning the next char code respectively `null`
|
| 624 |
+
* if there are no more characters left.
|
| 625 |
+
* @param {!function(number)} dst Bytes destination as a function successively called with the next byte.
|
| 626 |
+
*/
|
| 627 |
+
utfx.encodeUTF16toUTF8 = function(src, dst) {
|
| 628 |
+
utfx.UTF16toUTF8(src, function(cp) {
|
| 629 |
+
utfx.encodeUTF8(cp, dst);
|
| 630 |
+
});
|
| 631 |
+
};
|
| 632 |
+
|
| 633 |
+
/**
|
| 634 |
+
* Decodes and converts UTF8 bytes to UTF16 characters.
|
| 635 |
+
* @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there
|
| 636 |
+
* are no more bytes left.
|
| 637 |
+
* @param {!function(number)} dst Characters destination as a function successively called with each converted char code.
|
| 638 |
+
* @throws {RangeError} If a starting byte is invalid in UTF8
|
| 639 |
+
* @throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the remaining bytes.
|
| 640 |
+
*/
|
| 641 |
+
utfx.decodeUTF8toUTF16 = function(src, dst) {
|
| 642 |
+
utfx.decodeUTF8(src, function(cp) {
|
| 643 |
+
utfx.UTF8toUTF16(cp, dst);
|
| 644 |
+
});
|
| 645 |
+
};
|
| 646 |
+
|
| 647 |
+
/**
|
| 648 |
+
* Calculates the byte length of an UTF8 code point.
|
| 649 |
+
* @param {number} cp UTF8 code point
|
| 650 |
+
* @returns {number} Byte length
|
| 651 |
+
*/
|
| 652 |
+
utfx.calculateCodePoint = function(cp) {
|
| 653 |
+
return (cp < 0x80) ? 1 : (cp < 0x800) ? 2 : (cp < 0x10000) ? 3 : 4;
|
| 654 |
+
};
|
| 655 |
+
|
| 656 |
+
/**
|
| 657 |
+
* Calculates the number of UTF8 bytes required to store UTF8 code points.
|
| 658 |
+
* @param {(!function():number|null)} src Code points source as a function returning the next code point respectively
|
| 659 |
+
* `null` if there are no more code points left.
|
| 660 |
+
* @returns {number} The number of UTF8 bytes required
|
| 661 |
+
*/
|
| 662 |
+
utfx.calculateUTF8 = function(src) {
|
| 663 |
+
var cp, l=0;
|
| 664 |
+
while ((cp = src()) !== null)
|
| 665 |
+
l += utfx.calculateCodePoint(cp);
|
| 666 |
+
return l;
|
| 667 |
+
};
|
| 668 |
+
|
| 669 |
+
/**
|
| 670 |
+
* Calculates the number of UTF8 code points respectively UTF8 bytes required to store UTF16 char codes.
|
| 671 |
+
* @param {(!function():number|null)} src Characters source as a function returning the next char code respectively
|
| 672 |
+
* `null` if there are no more characters left.
|
| 673 |
+
* @returns {!Array.<number>} The number of UTF8 code points at index 0 and the number of UTF8 bytes required at index 1.
|
| 674 |
+
*/
|
| 675 |
+
utfx.calculateUTF16asUTF8 = function(src) {
|
| 676 |
+
var n=0, l=0;
|
| 677 |
+
utfx.UTF16toUTF8(src, function(cp) {
|
| 678 |
+
++n; l += utfx.calculateCodePoint(cp);
|
| 679 |
+
});
|
| 680 |
+
return [n,l];
|
| 681 |
+
};
|
| 682 |
+
|
| 683 |
+
return utfx;
|
| 684 |
+
}();
|
| 685 |
+
|
| 686 |
+
Date.now = Date.now || function() { return +new Date; };
|
| 687 |
+
|
| 688 |
+
/**
|
| 689 |
+
* @type {number}
|
| 690 |
+
* @const
|
| 691 |
+
* @inner
|
| 692 |
+
*/
|
| 693 |
+
var BCRYPT_SALT_LEN = 16;
|
| 694 |
+
|
| 695 |
+
/**
|
| 696 |
+
* @type {number}
|
| 697 |
+
* @const
|
| 698 |
+
* @inner
|
| 699 |
+
*/
|
| 700 |
+
var GENSALT_DEFAULT_LOG2_ROUNDS = 10;
|
| 701 |
+
|
| 702 |
+
/**
|
| 703 |
+
* @type {number}
|
| 704 |
+
* @const
|
| 705 |
+
* @inner
|
| 706 |
+
*/
|
| 707 |
+
var BLOWFISH_NUM_ROUNDS = 16;
|
| 708 |
+
|
| 709 |
+
/**
|
| 710 |
+
* @type {number}
|
| 711 |
+
* @const
|
| 712 |
+
* @inner
|
| 713 |
+
*/
|
| 714 |
+
var MAX_EXECUTION_TIME = 100;
|
| 715 |
+
|
| 716 |
+
/**
|
| 717 |
+
* @type {Array.<number>}
|
| 718 |
+
* @const
|
| 719 |
+
* @inner
|
| 720 |
+
*/
|
| 721 |
+
var P_ORIG = [
|
| 722 |
+
0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822,
|
| 723 |
+
0x299f31d0, 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377,
|
| 724 |
+
0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5,
|
| 725 |
+
0xb5470917, 0x9216d5d9, 0x8979fb1b
|
| 726 |
+
];
|
| 727 |
+
|
| 728 |
+
/**
|
| 729 |
+
* @type {Array.<number>}
|
| 730 |
+
* @const
|
| 731 |
+
* @inner
|
| 732 |
+
*/
|
| 733 |
+
var S_ORIG = [
|
| 734 |
+
0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed,
|
| 735 |
+
0x6a267e96, 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7,
|
| 736 |
+
0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3,
|
| 737 |
+
0xf4933d7e, 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
|
| 738 |
+
0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, 0xc5d1b023,
|
| 739 |
+
0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e,
|
| 740 |
+
0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda,
|
| 741 |
+
0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
|
| 742 |
+
0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af,
|
| 743 |
+
0x7c72e993, 0xb3ee1411, 0x636fbc2a, 0x2ba9c55d, 0x741831f6,
|
| 744 |
+
0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381,
|
| 745 |
+
0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
|
| 746 |
+
0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d,
|
| 747 |
+
0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5,
|
| 748 |
+
0x0f6d6ff3, 0x83f44239, 0x2e0b4482, 0xa4842004, 0x69c8f04a,
|
| 749 |
+
0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
|
| 750 |
+
0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c,
|
| 751 |
+
0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176,
|
| 752 |
+
0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3,
|
| 753 |
+
0x3b8b5ebe, 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
|
| 754 |
+
0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 0x37d0d724,
|
| 755 |
+
0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b,
|
| 756 |
+
0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, 0x976ce0bd,
|
| 757 |
+
0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
|
| 758 |
+
0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f,
|
| 759 |
+
0x9b30952c, 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd,
|
| 760 |
+
0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39,
|
| 761 |
+
0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
|
| 762 |
+
0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, 0x3c7516df,
|
| 763 |
+
0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760,
|
| 764 |
+
0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e,
|
| 765 |
+
0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
|
| 766 |
+
0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98,
|
| 767 |
+
0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, 0x9a53e479, 0xb6f84565,
|
| 768 |
+
0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341,
|
| 769 |
+
0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
|
| 770 |
+
0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0,
|
| 771 |
+
0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64,
|
| 772 |
+
0x8888b812, 0x900df01c, 0x4fad5ea0, 0x688fc31c, 0xd1cff191,
|
| 773 |
+
0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
|
| 774 |
+
0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0,
|
| 775 |
+
0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705,
|
| 776 |
+
0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5,
|
| 777 |
+
0xfb9d35cf, 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
|
| 778 |
+
0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, 0x2464369b,
|
| 779 |
+
0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f,
|
| 780 |
+
0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9, 0x11c81968,
|
| 781 |
+
0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
|
| 782 |
+
0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5,
|
| 783 |
+
0x571be91f, 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6,
|
| 784 |
+
0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799,
|
| 785 |
+
0x6e85076a, 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
|
| 786 |
+
0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, 0xecaa8c71,
|
| 787 |
+
0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29,
|
| 788 |
+
0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, 0x6b8fe4d6,
|
| 789 |
+
0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
|
| 790 |
+
0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f,
|
| 791 |
+
0x3ebaefc9, 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286,
|
| 792 |
+
0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec,
|
| 793 |
+
0x5716f2b8, 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
|
| 794 |
+
0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 0xd19113f9,
|
| 795 |
+
0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc,
|
| 796 |
+
0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e,
|
| 797 |
+
0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
|
| 798 |
+
0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290,
|
| 799 |
+
0x24977c79, 0x5679b072, 0xbcaf89af, 0xde9a771f, 0xd9930810,
|
| 800 |
+
0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6,
|
| 801 |
+
0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
|
| 802 |
+
0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847,
|
| 803 |
+
0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451,
|
| 804 |
+
0x50940002, 0x133ae4dd, 0x71dff89e, 0x10314e55, 0x81ac77d6,
|
| 805 |
+
0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
|
| 806 |
+
0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570,
|
| 807 |
+
0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa,
|
| 808 |
+
0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978,
|
| 809 |
+
0x9c10b36a, 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
|
| 810 |
+
0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 0x5223a708,
|
| 811 |
+
0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883,
|
| 812 |
+
0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, 0x65582185,
|
| 813 |
+
0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
|
| 814 |
+
0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830,
|
| 815 |
+
0xeb61bd96, 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239,
|
| 816 |
+
0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab,
|
| 817 |
+
0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
|
| 818 |
+
0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 0x9b540b19,
|
| 819 |
+
0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77,
|
| 820 |
+
0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1,
|
| 821 |
+
0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
|
| 822 |
+
0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef,
|
| 823 |
+
0x34c6ffea, 0xfe28ed61, 0xee7c3c73, 0x5d4a14d9, 0xe864b7e3,
|
| 824 |
+
0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15,
|
| 825 |
+
0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
|
| 826 |
+
0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2,
|
| 827 |
+
0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492,
|
| 828 |
+
0x47848a0b, 0x5692b285, 0x095bbf00, 0xad19489d, 0x1462b174,
|
| 829 |
+
0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
|
| 830 |
+
0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759,
|
| 831 |
+
0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e,
|
| 832 |
+
0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc,
|
| 833 |
+
0x800bcadc, 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
|
| 834 |
+
0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, 0xc5c43465,
|
| 835 |
+
0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a,
|
| 836 |
+
0xe6e39f2b, 0xdb83adf7, 0xe93d5a68, 0x948140f7, 0xf64c261c,
|
| 837 |
+
0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
|
| 838 |
+
0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e,
|
| 839 |
+
0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af,
|
| 840 |
+
0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0,
|
| 841 |
+
0x31cb8504, 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
|
| 842 |
+
0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, 0x68dc1462,
|
| 843 |
+
0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c,
|
| 844 |
+
0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, 0xce78a399,
|
| 845 |
+
0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
|
| 846 |
+
0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74,
|
| 847 |
+
0xdd5b4332, 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397,
|
| 848 |
+
0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7,
|
| 849 |
+
0xd096954b, 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
|
| 850 |
+
0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, 0xfdf8e802,
|
| 851 |
+
0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22,
|
| 852 |
+
0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4,
|
| 853 |
+
0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
|
| 854 |
+
0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2,
|
| 855 |
+
0x02e1329e, 0xaf664fd1, 0xcad18115, 0x6b2395e0, 0x333e92e1,
|
| 856 |
+
0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c,
|
| 857 |
+
0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
|
| 858 |
+
0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341,
|
| 859 |
+
0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8,
|
| 860 |
+
0x991be14c, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, 0x2765d43b,
|
| 861 |
+
0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
|
| 862 |
+
0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88,
|
| 863 |
+
0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979,
|
| 864 |
+
0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc,
|
| 865 |
+
0x782ef11c, 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
|
| 866 |
+
0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, 0x44421659,
|
| 867 |
+
0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f,
|
| 868 |
+
0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, 0x60787bf8,
|
| 869 |
+
0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
|
| 870 |
+
0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be,
|
| 871 |
+
0xbde8ae24, 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2,
|
| 872 |
+
0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255,
|
| 873 |
+
0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
|
| 874 |
+
0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 0xb90bace1,
|
| 875 |
+
0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09,
|
| 876 |
+
0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025,
|
| 877 |
+
0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
|
| 878 |
+
0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01,
|
| 879 |
+
0xa70683fa, 0xa002b5c4, 0x0de6d027, 0x9af88c27, 0x773f8641,
|
| 880 |
+
0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa,
|
| 881 |
+
0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
|
| 882 |
+
0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409,
|
| 883 |
+
0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9,
|
| 884 |
+
0x1ac15bb4, 0xd39eb8fc, 0xed545578, 0x08fca5b5, 0xd83d7cd3,
|
| 885 |
+
0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
|
| 886 |
+
0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234,
|
| 887 |
+
0x92638212, 0x670efa8e, 0x406000e0, 0x3a39ce37, 0xd3faf5cf,
|
| 888 |
+
0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740,
|
| 889 |
+
0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
|
| 890 |
+
0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f,
|
| 891 |
+
0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d,
|
| 892 |
+
0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, 0xa9ba4650, 0xac9526e8,
|
| 893 |
+
0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
|
| 894 |
+
0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba,
|
| 895 |
+
0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1,
|
| 896 |
+
0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69,
|
| 897 |
+
0x77fa0a59, 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
|
| 898 |
+
0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a,
|
| 899 |
+
0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b,
|
| 900 |
+
0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6, 0x47b0acfd,
|
| 901 |
+
0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
|
| 902 |
+
0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4,
|
| 903 |
+
0x88f46dba, 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2,
|
| 904 |
+
0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb,
|
| 905 |
+
0x26dcf319, 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
|
| 906 |
+
0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 0x4de81751,
|
| 907 |
+
0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce,
|
| 908 |
+
0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369,
|
| 909 |
+
0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
|
| 910 |
+
0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd,
|
| 911 |
+
0x1b588d40, 0xccd2017f, 0x6bb4e3bb, 0xdda26a7e, 0x3a59ff45,
|
| 912 |
+
0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae,
|
| 913 |
+
0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
|
| 914 |
+
0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08,
|
| 915 |
+
0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d,
|
| 916 |
+
0x06b89fb4, 0xce6ea048, 0x6f3f3b82, 0x3520ab82, 0x011a1d4b,
|
| 917 |
+
0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
|
| 918 |
+
0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e,
|
| 919 |
+
0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a,
|
| 920 |
+
0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c,
|
| 921 |
+
0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
|
| 922 |
+
0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 0xfae59361,
|
| 923 |
+
0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c,
|
| 924 |
+
0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be,
|
| 925 |
+
0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
|
| 926 |
+
0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d,
|
| 927 |
+
0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891,
|
| 928 |
+
0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5,
|
| 929 |
+
0xf6fb2299, 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
|
| 930 |
+
0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 0xde966292,
|
| 931 |
+
0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a,
|
| 932 |
+
0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2,
|
| 933 |
+
0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
|
| 934 |
+
0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c,
|
| 935 |
+
0xf746ce76, 0x77afa1c5, 0x20756060, 0x85cbfe4e, 0x8ae88dd8,
|
| 936 |
+
0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4,
|
| 937 |
+
0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
|
| 938 |
+
0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
|
| 939 |
+
];
|
| 940 |
+
|
| 941 |
+
/**
|
| 942 |
+
* @type {Array.<number>}
|
| 943 |
+
* @const
|
| 944 |
+
* @inner
|
| 945 |
+
*/
|
| 946 |
+
var C_ORIG = [
|
| 947 |
+
0x4f727068, 0x65616e42, 0x65686f6c, 0x64657253, 0x63727944,
|
| 948 |
+
0x6f756274
|
| 949 |
+
];
|
| 950 |
+
|
| 951 |
+
/**
|
| 952 |
+
* @param {Array.<number>} lr
|
| 953 |
+
* @param {number} off
|
| 954 |
+
* @param {Array.<number>} P
|
| 955 |
+
* @param {Array.<number>} S
|
| 956 |
+
* @returns {Array.<number>}
|
| 957 |
+
* @inner
|
| 958 |
+
*/
|
| 959 |
+
function _encipher(lr, off, P, S) { // This is our bottleneck: 1714/1905 ticks / 90% - see profile.txt
|
| 960 |
+
var n,
|
| 961 |
+
l = lr[off],
|
| 962 |
+
r = lr[off + 1];
|
| 963 |
+
|
| 964 |
+
l ^= P[0];
|
| 965 |
+
|
| 966 |
+
/*
|
| 967 |
+
for (var i=0, k=BLOWFISH_NUM_ROUNDS-2; i<=k;)
|
| 968 |
+
// Feistel substitution on left word
|
| 969 |
+
n = S[l >>> 24],
|
| 970 |
+
n += S[0x100 | ((l >> 16) & 0xff)],
|
| 971 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)],
|
| 972 |
+
n += S[0x300 | (l & 0xff)],
|
| 973 |
+
r ^= n ^ P[++i],
|
| 974 |
+
// Feistel substitution on right word
|
| 975 |
+
n = S[r >>> 24],
|
| 976 |
+
n += S[0x100 | ((r >> 16) & 0xff)],
|
| 977 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)],
|
| 978 |
+
n += S[0x300 | (r & 0xff)],
|
| 979 |
+
l ^= n ^ P[++i];
|
| 980 |
+
*/
|
| 981 |
+
|
| 982 |
+
//The following is an unrolled version of the above loop.
|
| 983 |
+
//Iteration 0
|
| 984 |
+
n = S[l >>> 24];
|
| 985 |
+
n += S[0x100 | ((l >> 16) & 0xff)];
|
| 986 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
| 987 |
+
n += S[0x300 | (l & 0xff)];
|
| 988 |
+
r ^= n ^ P[1];
|
| 989 |
+
n = S[r >>> 24];
|
| 990 |
+
n += S[0x100 | ((r >> 16) & 0xff)];
|
| 991 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
| 992 |
+
n += S[0x300 | (r & 0xff)];
|
| 993 |
+
l ^= n ^ P[2];
|
| 994 |
+
//Iteration 1
|
| 995 |
+
n = S[l >>> 24];
|
| 996 |
+
n += S[0x100 | ((l >> 16) & 0xff)];
|
| 997 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
| 998 |
+
n += S[0x300 | (l & 0xff)];
|
| 999 |
+
r ^= n ^ P[3];
|
| 1000 |
+
n = S[r >>> 24];
|
| 1001 |
+
n += S[0x100 | ((r >> 16) & 0xff)];
|
| 1002 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
| 1003 |
+
n += S[0x300 | (r & 0xff)];
|
| 1004 |
+
l ^= n ^ P[4];
|
| 1005 |
+
//Iteration 2
|
| 1006 |
+
n = S[l >>> 24];
|
| 1007 |
+
n += S[0x100 | ((l >> 16) & 0xff)];
|
| 1008 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
| 1009 |
+
n += S[0x300 | (l & 0xff)];
|
| 1010 |
+
r ^= n ^ P[5];
|
| 1011 |
+
n = S[r >>> 24];
|
| 1012 |
+
n += S[0x100 | ((r >> 16) & 0xff)];
|
| 1013 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
| 1014 |
+
n += S[0x300 | (r & 0xff)];
|
| 1015 |
+
l ^= n ^ P[6];
|
| 1016 |
+
//Iteration 3
|
| 1017 |
+
n = S[l >>> 24];
|
| 1018 |
+
n += S[0x100 | ((l >> 16) & 0xff)];
|
| 1019 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
| 1020 |
+
n += S[0x300 | (l & 0xff)];
|
| 1021 |
+
r ^= n ^ P[7];
|
| 1022 |
+
n = S[r >>> 24];
|
| 1023 |
+
n += S[0x100 | ((r >> 16) & 0xff)];
|
| 1024 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
| 1025 |
+
n += S[0x300 | (r & 0xff)];
|
| 1026 |
+
l ^= n ^ P[8];
|
| 1027 |
+
//Iteration 4
|
| 1028 |
+
n = S[l >>> 24];
|
| 1029 |
+
n += S[0x100 | ((l >> 16) & 0xff)];
|
| 1030 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
| 1031 |
+
n += S[0x300 | (l & 0xff)];
|
| 1032 |
+
r ^= n ^ P[9];
|
| 1033 |
+
n = S[r >>> 24];
|
| 1034 |
+
n += S[0x100 | ((r >> 16) & 0xff)];
|
| 1035 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
| 1036 |
+
n += S[0x300 | (r & 0xff)];
|
| 1037 |
+
l ^= n ^ P[10];
|
| 1038 |
+
//Iteration 5
|
| 1039 |
+
n = S[l >>> 24];
|
| 1040 |
+
n += S[0x100 | ((l >> 16) & 0xff)];
|
| 1041 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
| 1042 |
+
n += S[0x300 | (l & 0xff)];
|
| 1043 |
+
r ^= n ^ P[11];
|
| 1044 |
+
n = S[r >>> 24];
|
| 1045 |
+
n += S[0x100 | ((r >> 16) & 0xff)];
|
| 1046 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
| 1047 |
+
n += S[0x300 | (r & 0xff)];
|
| 1048 |
+
l ^= n ^ P[12];
|
| 1049 |
+
//Iteration 6
|
| 1050 |
+
n = S[l >>> 24];
|
| 1051 |
+
n += S[0x100 | ((l >> 16) & 0xff)];
|
| 1052 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
| 1053 |
+
n += S[0x300 | (l & 0xff)];
|
| 1054 |
+
r ^= n ^ P[13];
|
| 1055 |
+
n = S[r >>> 24];
|
| 1056 |
+
n += S[0x100 | ((r >> 16) & 0xff)];
|
| 1057 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
| 1058 |
+
n += S[0x300 | (r & 0xff)];
|
| 1059 |
+
l ^= n ^ P[14];
|
| 1060 |
+
//Iteration 7
|
| 1061 |
+
n = S[l >>> 24];
|
| 1062 |
+
n += S[0x100 | ((l >> 16) & 0xff)];
|
| 1063 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
| 1064 |
+
n += S[0x300 | (l & 0xff)];
|
| 1065 |
+
r ^= n ^ P[15];
|
| 1066 |
+
n = S[r >>> 24];
|
| 1067 |
+
n += S[0x100 | ((r >> 16) & 0xff)];
|
| 1068 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
| 1069 |
+
n += S[0x300 | (r & 0xff)];
|
| 1070 |
+
l ^= n ^ P[16];
|
| 1071 |
+
|
| 1072 |
+
lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1];
|
| 1073 |
+
lr[off + 1] = l;
|
| 1074 |
+
return lr;
|
| 1075 |
+
}
|
| 1076 |
+
|
| 1077 |
+
/**
|
| 1078 |
+
* @param {Array.<number>} data
|
| 1079 |
+
* @param {number} offp
|
| 1080 |
+
* @returns {{key: number, offp: number}}
|
| 1081 |
+
* @inner
|
| 1082 |
+
*/
|
| 1083 |
+
function _streamtoword(data, offp) {
|
| 1084 |
+
for (var i = 0, word = 0; i < 4; ++i)
|
| 1085 |
+
word = (word << 8) | (data[offp] & 0xff),
|
| 1086 |
+
offp = (offp + 1) % data.length;
|
| 1087 |
+
return { key: word, offp: offp };
|
| 1088 |
+
}
|
| 1089 |
+
|
| 1090 |
+
/**
|
| 1091 |
+
* @param {Array.<number>} key
|
| 1092 |
+
* @param {Array.<number>} P
|
| 1093 |
+
* @param {Array.<number>} S
|
| 1094 |
+
* @inner
|
| 1095 |
+
*/
|
| 1096 |
+
function _key(key, P, S) {
|
| 1097 |
+
var offset = 0,
|
| 1098 |
+
lr = [0, 0],
|
| 1099 |
+
plen = P.length,
|
| 1100 |
+
slen = S.length,
|
| 1101 |
+
sw;
|
| 1102 |
+
for (var i = 0; i < plen; i++)
|
| 1103 |
+
sw = _streamtoword(key, offset),
|
| 1104 |
+
offset = sw.offp,
|
| 1105 |
+
P[i] = P[i] ^ sw.key;
|
| 1106 |
+
for (i = 0; i < plen; i += 2)
|
| 1107 |
+
lr = _encipher(lr, 0, P, S),
|
| 1108 |
+
P[i] = lr[0],
|
| 1109 |
+
P[i + 1] = lr[1];
|
| 1110 |
+
for (i = 0; i < slen; i += 2)
|
| 1111 |
+
lr = _encipher(lr, 0, P, S),
|
| 1112 |
+
S[i] = lr[0],
|
| 1113 |
+
S[i + 1] = lr[1];
|
| 1114 |
+
}
|
| 1115 |
+
|
| 1116 |
+
/**
|
| 1117 |
+
* Expensive key schedule Blowfish.
|
| 1118 |
+
* @param {Array.<number>} data
|
| 1119 |
+
* @param {Array.<number>} key
|
| 1120 |
+
* @param {Array.<number>} P
|
| 1121 |
+
* @param {Array.<number>} S
|
| 1122 |
+
* @inner
|
| 1123 |
+
*/
|
| 1124 |
+
function _ekskey(data, key, P, S) {
|
| 1125 |
+
var offp = 0,
|
| 1126 |
+
lr = [0, 0],
|
| 1127 |
+
plen = P.length,
|
| 1128 |
+
slen = S.length,
|
| 1129 |
+
sw;
|
| 1130 |
+
for (var i = 0; i < plen; i++)
|
| 1131 |
+
sw = _streamtoword(key, offp),
|
| 1132 |
+
offp = sw.offp,
|
| 1133 |
+
P[i] = P[i] ^ sw.key;
|
| 1134 |
+
offp = 0;
|
| 1135 |
+
for (i = 0; i < plen; i += 2)
|
| 1136 |
+
sw = _streamtoword(data, offp),
|
| 1137 |
+
offp = sw.offp,
|
| 1138 |
+
lr[0] ^= sw.key,
|
| 1139 |
+
sw = _streamtoword(data, offp),
|
| 1140 |
+
offp = sw.offp,
|
| 1141 |
+
lr[1] ^= sw.key,
|
| 1142 |
+
lr = _encipher(lr, 0, P, S),
|
| 1143 |
+
P[i] = lr[0],
|
| 1144 |
+
P[i + 1] = lr[1];
|
| 1145 |
+
for (i = 0; i < slen; i += 2)
|
| 1146 |
+
sw = _streamtoword(data, offp),
|
| 1147 |
+
offp = sw.offp,
|
| 1148 |
+
lr[0] ^= sw.key,
|
| 1149 |
+
sw = _streamtoword(data, offp),
|
| 1150 |
+
offp = sw.offp,
|
| 1151 |
+
lr[1] ^= sw.key,
|
| 1152 |
+
lr = _encipher(lr, 0, P, S),
|
| 1153 |
+
S[i] = lr[0],
|
| 1154 |
+
S[i + 1] = lr[1];
|
| 1155 |
+
}
|
| 1156 |
+
|
| 1157 |
+
/**
|
| 1158 |
+
* Internaly crypts a string.
|
| 1159 |
+
* @param {Array.<number>} b Bytes to crypt
|
| 1160 |
+
* @param {Array.<number>} salt Salt bytes to use
|
| 1161 |
+
* @param {number} rounds Number of rounds
|
| 1162 |
+
* @param {function(Error, Array.<number>=)=} callback Callback receiving the error, if any, and the resulting bytes. If
|
| 1163 |
+
* omitted, the operation will be performed synchronously.
|
| 1164 |
+
* @param {function(number)=} progressCallback Callback called with the current progress
|
| 1165 |
+
* @returns {!Array.<number>|undefined} Resulting bytes if callback has been omitted, otherwise `undefined`
|
| 1166 |
+
* @inner
|
| 1167 |
+
*/
|
| 1168 |
+
function _crypt(b, salt, rounds, callback, progressCallback) {
|
| 1169 |
+
var cdata = C_ORIG.slice(),
|
| 1170 |
+
clen = cdata.length,
|
| 1171 |
+
err;
|
| 1172 |
+
|
| 1173 |
+
// Validate
|
| 1174 |
+
if (rounds < 4 || rounds > 31) {
|
| 1175 |
+
err = Error("Illegal number of rounds (4-31): "+rounds);
|
| 1176 |
+
if (callback) {
|
| 1177 |
+
nextTick(callback.bind(this, err));
|
| 1178 |
+
return;
|
| 1179 |
+
} else
|
| 1180 |
+
throw err;
|
| 1181 |
+
}
|
| 1182 |
+
if (salt.length !== BCRYPT_SALT_LEN) {
|
| 1183 |
+
err =Error("Illegal salt length: "+salt.length+" != "+BCRYPT_SALT_LEN);
|
| 1184 |
+
if (callback) {
|
| 1185 |
+
nextTick(callback.bind(this, err));
|
| 1186 |
+
return;
|
| 1187 |
+
} else
|
| 1188 |
+
throw err;
|
| 1189 |
+
}
|
| 1190 |
+
rounds = (1 << rounds) >>> 0;
|
| 1191 |
+
|
| 1192 |
+
var P, S, i = 0, j;
|
| 1193 |
+
|
| 1194 |
+
//Use typed arrays when available - huge speedup!
|
| 1195 |
+
if (Int32Array) {
|
| 1196 |
+
P = new Int32Array(P_ORIG);
|
| 1197 |
+
S = new Int32Array(S_ORIG);
|
| 1198 |
+
} else {
|
| 1199 |
+
P = P_ORIG.slice();
|
| 1200 |
+
S = S_ORIG.slice();
|
| 1201 |
+
}
|
| 1202 |
+
|
| 1203 |
+
_ekskey(salt, b, P, S);
|
| 1204 |
+
|
| 1205 |
+
/**
|
| 1206 |
+
* Calcualtes the next round.
|
| 1207 |
+
* @returns {Array.<number>|undefined} Resulting array if callback has been omitted, otherwise `undefined`
|
| 1208 |
+
* @inner
|
| 1209 |
+
*/
|
| 1210 |
+
function next() {
|
| 1211 |
+
if (progressCallback)
|
| 1212 |
+
progressCallback(i / rounds);
|
| 1213 |
+
if (i < rounds) {
|
| 1214 |
+
var start = Date.now();
|
| 1215 |
+
for (; i < rounds;) {
|
| 1216 |
+
i = i + 1;
|
| 1217 |
+
_key(b, P, S);
|
| 1218 |
+
_key(salt, P, S);
|
| 1219 |
+
if (Date.now() - start > MAX_EXECUTION_TIME)
|
| 1220 |
+
break;
|
| 1221 |
+
}
|
| 1222 |
+
} else {
|
| 1223 |
+
for (i = 0; i < 64; i++)
|
| 1224 |
+
for (j = 0; j < (clen >> 1); j++)
|
| 1225 |
+
_encipher(cdata, j << 1, P, S);
|
| 1226 |
+
var ret = [];
|
| 1227 |
+
for (i = 0; i < clen; i++)
|
| 1228 |
+
ret.push(((cdata[i] >> 24) & 0xff) >>> 0),
|
| 1229 |
+
ret.push(((cdata[i] >> 16) & 0xff) >>> 0),
|
| 1230 |
+
ret.push(((cdata[i] >> 8) & 0xff) >>> 0),
|
| 1231 |
+
ret.push((cdata[i] & 0xff) >>> 0);
|
| 1232 |
+
if (callback) {
|
| 1233 |
+
callback(null, ret);
|
| 1234 |
+
return;
|
| 1235 |
+
} else
|
| 1236 |
+
return ret;
|
| 1237 |
+
}
|
| 1238 |
+
if (callback)
|
| 1239 |
+
nextTick(next);
|
| 1240 |
+
}
|
| 1241 |
+
|
| 1242 |
+
// Async
|
| 1243 |
+
if (typeof callback !== 'undefined') {
|
| 1244 |
+
next();
|
| 1245 |
+
|
| 1246 |
+
// Sync
|
| 1247 |
+
} else {
|
| 1248 |
+
var res;
|
| 1249 |
+
while (true)
|
| 1250 |
+
if (typeof(res = next()) !== 'undefined')
|
| 1251 |
+
return res || [];
|
| 1252 |
+
}
|
| 1253 |
+
}
|
| 1254 |
+
|
| 1255 |
+
/**
|
| 1256 |
+
* Internally hashes a string.
|
| 1257 |
+
* @param {string} s String to hash
|
| 1258 |
+
* @param {?string} salt Salt to use, actually never null
|
| 1259 |
+
* @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash. If omitted,
|
| 1260 |
+
* hashing is perormed synchronously.
|
| 1261 |
+
* @param {function(number)=} progressCallback Callback called with the current progress
|
| 1262 |
+
* @returns {string|undefined} Resulting hash if callback has been omitted, otherwise `undefined`
|
| 1263 |
+
* @inner
|
| 1264 |
+
*/
|
| 1265 |
+
function _hash(s, salt, callback, progressCallback) {
|
| 1266 |
+
var err;
|
| 1267 |
+
if (typeof s !== 'string' || typeof salt !== 'string') {
|
| 1268 |
+
err = Error("Invalid string / salt: Not a string");
|
| 1269 |
+
if (callback) {
|
| 1270 |
+
nextTick(callback.bind(this, err));
|
| 1271 |
+
return;
|
| 1272 |
+
}
|
| 1273 |
+
else
|
| 1274 |
+
throw err;
|
| 1275 |
+
}
|
| 1276 |
+
|
| 1277 |
+
// Validate the salt
|
| 1278 |
+
var minor, offset;
|
| 1279 |
+
if (salt.charAt(0) !== '$' || salt.charAt(1) !== '2') {
|
| 1280 |
+
err = Error("Invalid salt version: "+salt.substring(0,2));
|
| 1281 |
+
if (callback) {
|
| 1282 |
+
nextTick(callback.bind(this, err));
|
| 1283 |
+
return;
|
| 1284 |
+
}
|
| 1285 |
+
else
|
| 1286 |
+
throw err;
|
| 1287 |
+
}
|
| 1288 |
+
if (salt.charAt(2) === '$')
|
| 1289 |
+
minor = String.fromCharCode(0),
|
| 1290 |
+
offset = 3;
|
| 1291 |
+
else {
|
| 1292 |
+
minor = salt.charAt(2);
|
| 1293 |
+
if ((minor !== 'a' && minor !== 'b' && minor !== 'y') || salt.charAt(3) !== '$') {
|
| 1294 |
+
err = Error("Invalid salt revision: "+salt.substring(2,4));
|
| 1295 |
+
if (callback) {
|
| 1296 |
+
nextTick(callback.bind(this, err));
|
| 1297 |
+
return;
|
| 1298 |
+
} else
|
| 1299 |
+
throw err;
|
| 1300 |
+
}
|
| 1301 |
+
offset = 4;
|
| 1302 |
+
}
|
| 1303 |
+
|
| 1304 |
+
// Extract number of rounds
|
| 1305 |
+
if (salt.charAt(offset + 2) > '$') {
|
| 1306 |
+
err = Error("Missing salt rounds");
|
| 1307 |
+
if (callback) {
|
| 1308 |
+
nextTick(callback.bind(this, err));
|
| 1309 |
+
return;
|
| 1310 |
+
} else
|
| 1311 |
+
throw err;
|
| 1312 |
+
}
|
| 1313 |
+
var r1 = parseInt(salt.substring(offset, offset + 1), 10) * 10,
|
| 1314 |
+
r2 = parseInt(salt.substring(offset + 1, offset + 2), 10),
|
| 1315 |
+
rounds = r1 + r2,
|
| 1316 |
+
real_salt = salt.substring(offset + 3, offset + 25);
|
| 1317 |
+
s += minor >= 'a' ? "\x00" : "";
|
| 1318 |
+
|
| 1319 |
+
var passwordb = stringToBytes(s),
|
| 1320 |
+
saltb = base64_decode(real_salt, BCRYPT_SALT_LEN);
|
| 1321 |
+
|
| 1322 |
+
/**
|
| 1323 |
+
* Finishes hashing.
|
| 1324 |
+
* @param {Array.<number>} bytes Byte array
|
| 1325 |
+
* @returns {string}
|
| 1326 |
+
* @inner
|
| 1327 |
+
*/
|
| 1328 |
+
function finish(bytes) {
|
| 1329 |
+
var res = [];
|
| 1330 |
+
res.push("$2");
|
| 1331 |
+
if (minor >= 'a')
|
| 1332 |
+
res.push(minor);
|
| 1333 |
+
res.push("$");
|
| 1334 |
+
if (rounds < 10)
|
| 1335 |
+
res.push("0");
|
| 1336 |
+
res.push(rounds.toString());
|
| 1337 |
+
res.push("$");
|
| 1338 |
+
res.push(base64_encode(saltb, saltb.length));
|
| 1339 |
+
res.push(base64_encode(bytes, C_ORIG.length * 4 - 1));
|
| 1340 |
+
return res.join('');
|
| 1341 |
+
}
|
| 1342 |
+
|
| 1343 |
+
// Sync
|
| 1344 |
+
if (typeof callback == 'undefined')
|
| 1345 |
+
return finish(_crypt(passwordb, saltb, rounds));
|
| 1346 |
+
|
| 1347 |
+
// Async
|
| 1348 |
+
else {
|
| 1349 |
+
_crypt(passwordb, saltb, rounds, function(err, bytes) {
|
| 1350 |
+
if (err)
|
| 1351 |
+
callback(err, null);
|
| 1352 |
+
else
|
| 1353 |
+
callback(null, finish(bytes));
|
| 1354 |
+
}, progressCallback);
|
| 1355 |
+
}
|
| 1356 |
+
}
|
| 1357 |
+
|
| 1358 |
+
/**
|
| 1359 |
+
* Encodes a byte array to base64 with up to len bytes of input, using the custom bcrypt alphabet.
|
| 1360 |
+
* @function
|
| 1361 |
+
* @param {!Array.<number>} b Byte array
|
| 1362 |
+
* @param {number} len Maximum input length
|
| 1363 |
+
* @returns {string}
|
| 1364 |
+
* @expose
|
| 1365 |
+
*/
|
| 1366 |
+
bcrypt.encodeBase64 = base64_encode;
|
| 1367 |
+
|
| 1368 |
+
/**
|
| 1369 |
+
* Decodes a base64 encoded string to up to len bytes of output, using the custom bcrypt alphabet.
|
| 1370 |
+
* @function
|
| 1371 |
+
* @param {string} s String to decode
|
| 1372 |
+
* @param {number} len Maximum output length
|
| 1373 |
+
* @returns {!Array.<number>}
|
| 1374 |
+
* @expose
|
| 1375 |
+
*/
|
| 1376 |
+
bcrypt.decodeBase64 = base64_decode;
|
| 1377 |
+
|
| 1378 |
+
return bcrypt;
|
| 1379 |
+
}));
|
node_modules/bcryptjs/dist/bcrypt.min.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
bcrypt.js (c) 2013 Daniel Wirtz <dcode@dcode.io>
|
| 3 |
+
Released under the Apache License, Version 2.0
|
| 4 |
+
see: https://github.com/dcodeIO/bcrypt.js for details
|
| 5 |
+
*/
|
| 6 |
+
(function(u,r){"function"===typeof define&&define.amd?define([],r):"function"===typeof require&&"object"===typeof module&&module&&module.exports?module.exports=r():(u.dcodeIO=u.dcodeIO||{}).bcrypt=r()})(this,function(){function u(e){if("undefined"!==typeof module&&module&&module.exports)try{return require("crypto").randomBytes(e)}catch(d){}try{var c;(self.crypto||self.msCrypto).getRandomValues(c=new Uint32Array(e));return Array.prototype.slice.call(c)}catch(b){}if(!w)throw Error("Neither WebCryptoAPI nor a crypto module is available. Use bcrypt.setRandomFallback to set an alternative");
|
| 7 |
+
return w(e)}function r(e,d){for(var c=0,b=0,a=0,f=e.length;a<f;++a)e.charCodeAt(a)===d.charCodeAt(a)?++c:++b;return 0>c?!1:0===b}function H(e){var d=[],c=0;I.encodeUTF16toUTF8(function(){return c>=e.length?null:e.charCodeAt(c++)},function(b){d.push(b)});return d}function x(e,d){var c=0,b=[],a,f;if(0>=d||d>e.length)throw Error("Illegal len: "+d);for(;c<d;){a=e[c++]&255;b.push(s[a>>2&63]);a=(a&3)<<4;if(c>=d){b.push(s[a&63]);break}f=e[c++]&255;a|=f>>4&15;b.push(s[a&63]);a=(f&15)<<2;if(c>=d){b.push(s[a&
|
| 8 |
+
63]);break}f=e[c++]&255;a|=f>>6&3;b.push(s[a&63]);b.push(s[f&63])}return b.join("")}function B(e,d){var c=0,b=e.length,a=0,f=[],g,m,h;if(0>=d)throw Error("Illegal len: "+d);for(;c<b-1&&a<d;){h=e.charCodeAt(c++);g=h<q.length?q[h]:-1;h=e.charCodeAt(c++);m=h<q.length?q[h]:-1;if(-1==g||-1==m)break;h=g<<2>>>0;h|=(m&48)>>4;f.push(z(h));if(++a>=d||c>=b)break;h=e.charCodeAt(c++);g=h<q.length?q[h]:-1;if(-1==g)break;h=(m&15)<<4>>>0;h|=(g&60)>>2;f.push(z(h));if(++a>=d||c>=b)break;h=e.charCodeAt(c++);m=h<q.length?
|
| 9 |
+
q[h]:-1;h=(g&3)<<6>>>0;h|=m;f.push(z(h));++a}b=[];for(c=0;c<a;c++)b.push(f[c].charCodeAt(0));return b}function v(e,d,c,b){var a,f=e[d],g=e[d+1],f=f^c[0];a=b[f>>>24];a+=b[256|f>>16&255];a^=b[512|f>>8&255];a+=b[768|f&255];g=g^a^c[1];a=b[g>>>24];a+=b[256|g>>16&255];a^=b[512|g>>8&255];a+=b[768|g&255];f=f^a^c[2];a=b[f>>>24];a+=b[256|f>>16&255];a^=b[512|f>>8&255];a+=b[768|f&255];g=g^a^c[3];a=b[g>>>24];a+=b[256|g>>16&255];a^=b[512|g>>8&255];a+=b[768|g&255];f=f^a^c[4];a=b[f>>>24];a+=b[256|f>>16&255];a^=b[512|
|
| 10 |
+
f>>8&255];a+=b[768|f&255];g=g^a^c[5];a=b[g>>>24];a+=b[256|g>>16&255];a^=b[512|g>>8&255];a+=b[768|g&255];f=f^a^c[6];a=b[f>>>24];a+=b[256|f>>16&255];a^=b[512|f>>8&255];a+=b[768|f&255];g=g^a^c[7];a=b[g>>>24];a+=b[256|g>>16&255];a^=b[512|g>>8&255];a+=b[768|g&255];f=f^a^c[8];a=b[f>>>24];a+=b[256|f>>16&255];a^=b[512|f>>8&255];a+=b[768|f&255];g=g^a^c[9];a=b[g>>>24];a+=b[256|g>>16&255];a^=b[512|g>>8&255];a+=b[768|g&255];f=f^a^c[10];a=b[f>>>24];a+=b[256|f>>16&255];a^=b[512|f>>8&255];a+=b[768|f&255];g=g^a^
|
| 11 |
+
c[11];a=b[g>>>24];a+=b[256|g>>16&255];a^=b[512|g>>8&255];a+=b[768|g&255];f=f^a^c[12];a=b[f>>>24];a+=b[256|f>>16&255];a^=b[512|f>>8&255];a+=b[768|f&255];g=g^a^c[13];a=b[g>>>24];a+=b[256|g>>16&255];a^=b[512|g>>8&255];a+=b[768|g&255];f=f^a^c[14];a=b[f>>>24];a+=b[256|f>>16&255];a^=b[512|f>>8&255];a+=b[768|f&255];g=g^a^c[15];a=b[g>>>24];a+=b[256|g>>16&255];a^=b[512|g>>8&255];a+=b[768|g&255];f=f^a^c[16];e[d]=g^c[17];e[d+1]=f;return e}function t(e,d){for(var c=0,b=0;4>c;++c)b=b<<8|e[d]&255,d=(d+1)%e.length;
|
| 12 |
+
return{key:b,offp:d}}function C(e,d,c){for(var b=0,a=[0,0],f=d.length,g=c.length,m,h=0;h<f;h++)m=t(e,b),b=m.offp,d[h]^=m.key;for(h=0;h<f;h+=2)a=v(a,0,d,c),d[h]=a[0],d[h+1]=a[1];for(h=0;h<g;h+=2)a=v(a,0,d,c),c[h]=a[0],c[h+1]=a[1]}function J(e,d,c,b){for(var a=0,f=[0,0],g=c.length,m=b.length,h,l=0;l<g;l++)h=t(d,a),a=h.offp,c[l]^=h.key;for(l=a=0;l<g;l+=2)h=t(e,a),a=h.offp,f[0]^=h.key,h=t(e,a),a=h.offp,f[1]^=h.key,f=v(f,0,c,b),c[l]=f[0],c[l+1]=f[1];for(l=0;l<m;l+=2)h=t(e,a),a=h.offp,f[0]^=h.key,h=t(e,
|
| 13 |
+
a),a=h.offp,f[1]^=h.key,f=v(f,0,c,b),b[l]=f[0],b[l+1]=f[1]}function D(e,d,c,b,a){function f(){a&&a(n/c);if(n<c)for(var h=Date.now();n<c&&!(n+=1,C(e,l,k),C(d,l,k),100<Date.now()-h););else{for(n=0;64>n;n++)for(y=0;y<m>>1;y++)v(g,y<<1,l,k);h=[];for(n=0;n<m;n++)h.push((g[n]>>24&255)>>>0),h.push((g[n]>>16&255)>>>0),h.push((g[n]>>8&255)>>>0),h.push((g[n]&255)>>>0);if(b){b(null,h);return}return h}b&&p(f)}var g=E.slice(),m=g.length,h;if(4>c||31<c){h=Error("Illegal number of rounds (4-31): "+c);if(b){p(b.bind(this,
|
| 14 |
+
h));return}throw h;}if(16!==d.length){h=Error("Illegal salt length: "+d.length+" != 16");if(b){p(b.bind(this,h));return}throw h;}c=1<<c>>>0;var l,k,n=0,y;Int32Array?(l=new Int32Array(F),k=new Int32Array(G)):(l=F.slice(),k=G.slice());J(d,e,l,k);if("undefined"!==typeof b)f();else for(;;)if("undefined"!==typeof(h=f()))return h||[]}function A(e,d,c,b){function a(a){var b=[];b.push("$2");"a"<=f&&b.push(f);b.push("$");10>l&&b.push("0");b.push(l.toString());b.push("$");b.push(x(k,k.length));b.push(x(a,4*
|
| 15 |
+
E.length-1));return b.join("")}if("string"!==typeof e||"string"!==typeof d){b=Error("Invalid string / salt: Not a string");if(c){p(c.bind(this,b));return}throw b;}var f,g;if("$"!==d.charAt(0)||"2"!==d.charAt(1)){b=Error("Invalid salt version: "+d.substring(0,2));if(c){p(c.bind(this,b));return}throw b;}if("$"===d.charAt(2))f=String.fromCharCode(0),g=3;else{f=d.charAt(2);if("a"!==f&&"b"!==f&&"y"!==f||"$"!==d.charAt(3)){b=Error("Invalid salt revision: "+d.substring(2,4));if(c){p(c.bind(this,b));return}throw b;
|
| 16 |
+
}g=4}if("$"<d.charAt(g+2)){b=Error("Missing salt rounds");if(c){p(c.bind(this,b));return}throw b;}var m=10*parseInt(d.substring(g,g+1),10),h=parseInt(d.substring(g+1,g+2),10),l=m+h;d=d.substring(g+3,g+25);e=H(e+("a"<=f?"\x00":""));var k=B(d,16);if("undefined"==typeof c)return a(D(e,k,l));D(e,k,l,function(b,d){b?c(b,null):c(null,a(d))},b)}var k={},w=null;try{u(1)}catch(K){}w=null;k.setRandomFallback=function(e){w=e};k.genSaltSync=function(e,d){e=e||10;if("number"!==typeof e)throw Error("Illegal arguments: "+
|
| 17 |
+
typeof e+", "+typeof d);4>e?e=4:31<e&&(e=31);var c=[];c.push("$2a$");10>e&&c.push("0");c.push(e.toString());c.push("$");c.push(x(u(16),16));return c.join("")};k.genSalt=function(e,d,c){function b(a){p(function(){try{a(null,k.genSaltSync(e))}catch(b){a(b)}})}"function"===typeof d&&(c=d,d=void 0);"function"===typeof e&&(c=e,e=void 0);if("undefined"===typeof e)e=10;else if("number"!==typeof e)throw Error("illegal arguments: "+typeof e);if(c){if("function"!==typeof c)throw Error("Illegal callback: "+
|
| 18 |
+
typeof c);b(c)}else return new Promise(function(a,c){b(function(b,d){b?c(b):a(d)})})};k.hashSync=function(e,d){"undefined"===typeof d&&(d=10);"number"===typeof d&&(d=k.genSaltSync(d));if("string"!==typeof e||"string"!==typeof d)throw Error("Illegal arguments: "+typeof e+", "+typeof d);return A(e,d)};k.hash=function(e,d,c,b){function a(a){"string"===typeof e&&"number"===typeof d?k.genSalt(d,function(c,d){A(e,d,a,b)}):"string"===typeof e&&"string"===typeof d?A(e,d,a,b):p(a.bind(this,Error("Illegal arguments: "+
|
| 19 |
+
typeof e+", "+typeof d)))}if(c){if("function"!==typeof c)throw Error("Illegal callback: "+typeof c);a(c)}else return new Promise(function(b,c){a(function(a,d){a?c(a):b(d)})})};k.compareSync=function(e,d){if("string"!==typeof e||"string"!==typeof d)throw Error("Illegal arguments: "+typeof e+", "+typeof d);return 60!==d.length?!1:r(k.hashSync(e,d.substr(0,d.length-31)),d)};k.compare=function(e,d,c,b){function a(a){"string"!==typeof e||"string"!==typeof d?p(a.bind(this,Error("Illegal arguments: "+typeof e+
|
| 20 |
+
", "+typeof d))):60!==d.length?p(a.bind(this,null,!1)):k.hash(e,d.substr(0,29),function(b,c){b?a(b):a(null,r(c,d))},b)}if(c){if("function"!==typeof c)throw Error("Illegal callback: "+typeof c);a(c)}else return new Promise(function(b,c){a(function(a,d){a?c(a):b(d)})})};k.getRounds=function(e){if("string"!==typeof e)throw Error("Illegal arguments: "+typeof e);return parseInt(e.split("$")[2],10)};k.getSalt=function(e){if("string"!==typeof e)throw Error("Illegal arguments: "+typeof e);if(60!==e.length)throw Error("Illegal hash length: "+
|
| 21 |
+
e.length+" != 60");return e.substring(0,29)};var p="undefined"!==typeof process&&process&&"function"===typeof process.nextTick?"function"===typeof setImmediate?setImmediate:process.nextTick:setTimeout,s="./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),q=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,54,55,56,57,58,59,60,61,62,63,-1,-1,-1,-1,-1,-1,-1,2,3,4,5,6,7,8,9,10,11,12,
|
| 22 |
+
13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,-1,-1,-1,-1,-1,-1,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,-1,-1,-1,-1,-1],z=String.fromCharCode,I=function(){var e={MAX_CODEPOINT:1114111,encodeUTF8:function(d,c){var b=null;"number"===typeof d&&(b=d,d=function(){return null});for(;null!==b||null!==(b=d());)128>b?c(b&127):(2048>b?c(b>>6&31|192):(65536>b?c(b>>12&15|224):(c(b>>18&7|240),c(b>>12&63|128)),c(b>>6&63|128)),c(b&63|128)),b=null},decodeUTF8:function(d,c){for(var b,
|
| 23 |
+
a,f,e,k=function(a){a=a.slice(0,a.indexOf(null));var b=Error(a.toString());b.name="TruncatedError";b.bytes=a;throw b;};null!==(b=d());)if(0===(b&128))c(b);else if(192===(b&224))null===(a=d())&&k([b,a]),c((b&31)<<6|a&63);else if(224===(b&240))null!==(a=d())&&null!==(f=d())||k([b,a,f]),c((b&15)<<12|(a&63)<<6|f&63);else if(240===(b&248))null!==(a=d())&&null!==(f=d())&&null!==(e=d())||k([b,a,f,e]),c((b&7)<<18|(a&63)<<12|(f&63)<<6|e&63);else throw RangeError("Illegal starting byte: "+b);},UTF16toUTF8:function(d,
|
| 24 |
+
c){for(var b,a=null;null!==(b=null!==a?a:d());)55296<=b&&57343>=b&&null!==(a=d())&&56320<=a&&57343>=a?(c(1024*(b-55296)+a-56320+65536),a=null):c(b);null!==a&&c(a)},UTF8toUTF16:function(d,c){var b=null;"number"===typeof d&&(b=d,d=function(){return null});for(;null!==b||null!==(b=d());)65535>=b?c(b):(b-=65536,c((b>>10)+55296),c(b%1024+56320)),b=null},encodeUTF16toUTF8:function(d,c){e.UTF16toUTF8(d,function(b){e.encodeUTF8(b,c)})},decodeUTF8toUTF16:function(d,c){e.decodeUTF8(d,function(b){e.UTF8toUTF16(b,
|
| 25 |
+
c)})},calculateCodePoint:function(d){return 128>d?1:2048>d?2:65536>d?3:4},calculateUTF8:function(d){for(var c,b=0;null!==(c=d());)b+=e.calculateCodePoint(c);return b},calculateUTF16asUTF8:function(d){var c=0,b=0;e.UTF16toUTF8(d,function(a){++c;b+=e.calculateCodePoint(a)});return[c,b]}};return e}();Date.now=Date.now||function(){return+new Date};var F=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,
|
| 26 |
+
3041331479,2450970073,2306472731],G=[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,
|
| 27 |
+
289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,
|
| 28 |
+
1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,
|
| 29 |
+
442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,
|
| 30 |
+
3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,
|
| 31 |
+
48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946,1266315497,3048417604,3681880366,3289982499,290971E4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,
|
| 32 |
+
1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,
|
| 33 |
+
613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,
|
| 34 |
+
2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,
|
| 35 |
+
1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,
|
| 36 |
+
4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055,3913112168,
|
| 37 |
+
2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,
|
| 38 |
+
499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,
|
| 39 |
+
3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,
|
| 40 |
+
309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,
|
| 41 |
+
1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,
|
| 42 |
+
2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504,976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,
|
| 43 |
+
2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,
|
| 44 |
+
3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,
|
| 45 |
+
3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409E3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,
|
| 46 |
+
3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,
|
| 47 |
+
1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462],E=[1332899944,1700884034,1701343084,1684370003,1668446532,
|
| 48 |
+
1869963892];k.encodeBase64=x;k.decodeBase64=B;return k});
|
node_modules/bcryptjs/dist/bcrypt.min.js.gz
ADDED
|
Binary file (9.44 kB). View file
|
|
|
node_modules/bcryptjs/dist/bcrypt.min.map
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"version":3,
|
| 3 |
+
"file":"",
|
| 4 |
+
"lineCount":48,
|
| 5 |
+
"mappings":"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",
|
| 6 |
+
"sources":["dist/bcrypt.js"],
|
| 7 |
+
"names":["global","factory","define","require","module","random","len","e","a","self","Uint32Array","Array","prototype","slice","call","randomFallback","Error","safeStringCompare","known","unknown","right","wrong","i","k","length","charCodeAt","stringToBytes","str","out","utfx","encodeUTF16toUTF8","b","push","base64_encode","off","rs","c1","c2","BASE64_CODE","join","base64_decode","s","slen","olen","o","code","BASE64_INDEX","stringFromCharCode","c3","c4","res","_encipher","lr","P","S","n","l","r","_streamtoword","data","offp","word","key","_key","offset","plen","sw","_ekskey","_crypt","salt","rounds","callback","progressCallback","next","start","Date","now","MAX_EXECUTION_TIME","j","clen","cdata","ret","nextTick","C_ORIG","err","bind","BCRYPT_SALT_LEN","Int32Array","P_ORIG","S_ORIG","_hash","finish","bytes","minor","toString","saltb","charAt","substring","String","fromCharCode","r1","parseInt","r2","real_salt","passwordb","bcrypt","setRandomFallback","bcrypt.setRandomFallback","genSaltSync","bcrypt.genSaltSync","seed_length","GENSALT_DEFAULT_LOG2_ROUNDS","genSalt","bcrypt.genSalt","_async","undefined","Promise","resolve","reject","hashSync","bcrypt.hashSync","hash","bcrypt.hash","compareSync","bcrypt.compareSync","substr","compare","bcrypt.compare","comp","getRounds","bcrypt.getRounds","split","getSalt","bcrypt.getSalt","process","setImmediate","setTimeout","utfx.encodeUTF8","src","dst","cp","utfx.decodeUTF8","c","d","fail","indexOf","name","RangeError","utfx.UTF16toUTF8","utfx.UTF8toUTF16","utfx.encodeUTF16toUTF8","UTF16toUTF8","encodeUTF8","utfx.decodeUTF8toUTF16","decodeUTF8","UTF8toUTF16","utfx.calculateCodePoint","utfx.calculateUTF8","calculateCodePoint","utfx.calculateUTF16asUTF8","encodeBase64","decodeBase64"]
|
| 8 |
+
}
|
node_modules/bcryptjs/externs/bcrypt.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
* Copyright 2012 The Closure Compiler Authors.
|
| 3 |
+
*
|
| 4 |
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
| 5 |
+
* you may not use this file except in compliance with the License.
|
| 6 |
+
* You may obtain a copy of the License at
|
| 7 |
+
*
|
| 8 |
+
* http://www.apache.org/licenses/LICENSE-2.0
|
| 9 |
+
*
|
| 10 |
+
* Unless required by applicable law or agreed to in writing, software
|
| 11 |
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
| 12 |
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 13 |
+
* See the License for the specific language governing permissions and
|
| 14 |
+
* limitations under the License.
|
| 15 |
+
*/
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* @fileoverview Definitions for bcrypt.js 2.
|
| 19 |
+
* @externs
|
| 20 |
+
* @author Daniel Wirtz <dcode@dcode.io>
|
| 21 |
+
*/
|
| 22 |
+
|
| 23 |
+
/**
|
| 24 |
+
* @type {Object.<string,*>}
|
| 25 |
+
*/
|
| 26 |
+
var bcrypt = {};
|
| 27 |
+
|
| 28 |
+
/**
|
| 29 |
+
* @param {?function(number):!Array.<number>} random
|
| 30 |
+
*/
|
| 31 |
+
bcrypt.setRandomFallback = function(random) {};
|
| 32 |
+
|
| 33 |
+
/**
|
| 34 |
+
* @param {number=} rounds
|
| 35 |
+
* @param {number=} seed_length
|
| 36 |
+
* @returns {string}
|
| 37 |
+
*/
|
| 38 |
+
bcrypt.genSaltSync = function(rounds, seed_length) {};
|
| 39 |
+
|
| 40 |
+
/**
|
| 41 |
+
* @param {(number|function(Error, ?string))=} rounds
|
| 42 |
+
* @param {(number|function(Error, ?string))=} seed_length
|
| 43 |
+
* @param {function(Error, string=)=} callback
|
| 44 |
+
*/
|
| 45 |
+
bcrypt.genSalt = function(rounds, seed_length, callback) {};
|
| 46 |
+
|
| 47 |
+
/**
|
| 48 |
+
* @param {string} s
|
| 49 |
+
* @param {(number|string)=} salt
|
| 50 |
+
* @returns {?string}
|
| 51 |
+
*/
|
| 52 |
+
bcrypt.hashSync = function(s, salt) {};
|
| 53 |
+
|
| 54 |
+
/**
|
| 55 |
+
* @param {string} s
|
| 56 |
+
* @param {number|string} salt
|
| 57 |
+
* @param {function(Error, string=)} callback
|
| 58 |
+
* @expose
|
| 59 |
+
*/
|
| 60 |
+
bcrypt.hash = function(s, salt, callback) {};
|
| 61 |
+
|
| 62 |
+
/**
|
| 63 |
+
* @param {string} s
|
| 64 |
+
* @param {string} hash
|
| 65 |
+
* @returns {boolean}
|
| 66 |
+
* @throws {Error}
|
| 67 |
+
*/
|
| 68 |
+
bcrypt.compareSync = function(s, hash) {};
|
| 69 |
+
|
| 70 |
+
/**
|
| 71 |
+
* @param {string} s
|
| 72 |
+
* @param {string} hash
|
| 73 |
+
* @param {function(Error, boolean)} callback
|
| 74 |
+
* @throws {Error}
|
| 75 |
+
*/
|
| 76 |
+
bcrypt.compare = function(s, hash, callback) {};
|
| 77 |
+
|
| 78 |
+
/**
|
| 79 |
+
* @param {string} hash
|
| 80 |
+
* @returns {number}
|
| 81 |
+
* @throws {Error}
|
| 82 |
+
*/
|
| 83 |
+
bcrypt.getRounds = function(hash) {};
|
| 84 |
+
|
| 85 |
+
/**
|
| 86 |
+
* @param {string} hash
|
| 87 |
+
* @returns {string}
|
| 88 |
+
* @throws {Error}
|
| 89 |
+
* @expose
|
| 90 |
+
*/
|
| 91 |
+
bcrypt.getSalt = function(hash) {};
|
node_modules/bcryptjs/externs/minimal-env.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/**
|
| 2 |
+
* @fileoverview Minimal environment for bcrypt.js.
|
| 3 |
+
* @externs
|
| 4 |
+
*/
|
| 5 |
+
|
| 6 |
+
/**
|
| 7 |
+
* @param {string} moduleName
|
| 8 |
+
* returns {*}
|
| 9 |
+
*/
|
| 10 |
+
function require(moduleName) {}
|
| 11 |
+
|
| 12 |
+
/**
|
| 13 |
+
* @constructor
|
| 14 |
+
* @private
|
| 15 |
+
*/
|
| 16 |
+
var Module = function() {};
|
| 17 |
+
|
| 18 |
+
/**
|
| 19 |
+
* @type {*}
|
| 20 |
+
*/
|
| 21 |
+
Module.prototype.exports;
|
| 22 |
+
|
| 23 |
+
/**
|
| 24 |
+
* @type {Module}
|
| 25 |
+
*/
|
| 26 |
+
var module;
|
| 27 |
+
|
| 28 |
+
/**
|
| 29 |
+
* @type {string}
|
| 30 |
+
*/
|
| 31 |
+
var __dirname;
|
| 32 |
+
|
| 33 |
+
/**
|
| 34 |
+
* @type {Object.<string,*>}
|
| 35 |
+
*/
|
| 36 |
+
var process = {};
|
| 37 |
+
|
| 38 |
+
/**
|
| 39 |
+
* @param {function()} func
|
| 40 |
+
*/
|
| 41 |
+
process.nextTick = function(func) {};
|
| 42 |
+
|
| 43 |
+
/**
|
| 44 |
+
* @param {string} s
|
| 45 |
+
* @constructor
|
| 46 |
+
* @extends Array
|
| 47 |
+
*/
|
| 48 |
+
var Buffer = function(s) {};
|
| 49 |
+
|
| 50 |
+
/**
|
| 51 |
+
BEGIN_NODE_INCLUDE
|
| 52 |
+
var crypto = require('crypto');
|
| 53 |
+
END_NODE_INCLUDE
|
| 54 |
+
*/
|
| 55 |
+
|
| 56 |
+
/**
|
| 57 |
+
* @type {Object.<string,*>}
|
| 58 |
+
*/
|
| 59 |
+
var crypto = {};
|
| 60 |
+
|
| 61 |
+
/**
|
| 62 |
+
* @param {number} n
|
| 63 |
+
* @returns {Array.<number>}
|
| 64 |
+
*/
|
| 65 |
+
crypto.randomBytes = function(n) {};
|
| 66 |
+
|
| 67 |
+
/**
|
| 68 |
+
* @type {Object.<string,*>}
|
| 69 |
+
*/
|
| 70 |
+
window.crypto = {};
|
| 71 |
+
|
| 72 |
+
/**
|
| 73 |
+
* @param {Uint8Array|Int8Array|Uint16Array|Int16Array|Uint32Array|Int32Array} array
|
| 74 |
+
*/
|
| 75 |
+
window.crypto.getRandomValues = function(array) {};
|
| 76 |
+
|
| 77 |
+
/**
|
| 78 |
+
* @param {string} name
|
| 79 |
+
* @param {function(...[*]):*} constructor
|
| 80 |
+
*/
|
| 81 |
+
var define = function(name, constructor) {};
|
| 82 |
+
|
| 83 |
+
/**
|
| 84 |
+
* @type {boolean}
|
| 85 |
+
*/
|
| 86 |
+
define.amd;
|
| 87 |
+
|
| 88 |
+
/**
|
| 89 |
+
* @param {...*} var_args
|
| 90 |
+
* @returns {string}
|
| 91 |
+
*/
|
| 92 |
+
String.fromCodePoint = function(var_args) {};
|
| 93 |
+
|
| 94 |
+
/**
|
| 95 |
+
* @param {number} offset
|
| 96 |
+
* @returns {number}
|
| 97 |
+
*/
|
| 98 |
+
String.prototype.codePointAt = function(offset) {};
|
node_modules/bcryptjs/index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>
|
| 3 |
+
Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>
|
| 4 |
+
Copyright (c) 2013 Daniel Wirtz <dcode@dcode.io>
|
| 5 |
+
|
| 6 |
+
Redistribution and use in source and binary forms, with or without
|
| 7 |
+
modification, are permitted provided that the following conditions
|
| 8 |
+
are met:
|
| 9 |
+
1. Redistributions of source code must retain the above copyright
|
| 10 |
+
notice, this list of conditions and the following disclaimer.
|
| 11 |
+
2. Redistributions in binary form must reproduce the above copyright
|
| 12 |
+
notice, this list of conditions and the following disclaimer in the
|
| 13 |
+
documentation and/or other materials provided with the distribution.
|
| 14 |
+
3. The name of the author may not be used to endorse or promote products
|
| 15 |
+
derived from this software without specific prior written permission.
|
| 16 |
+
|
| 17 |
+
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
| 18 |
+
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
| 19 |
+
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
| 20 |
+
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
| 21 |
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
| 22 |
+
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| 23 |
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| 24 |
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| 25 |
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
| 26 |
+
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| 27 |
+
*/
|
| 28 |
+
|
| 29 |
+
module.exports = require("./dist/bcrypt.js");
|
node_modules/bcryptjs/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "bcryptjs",
|
| 3 |
+
"description": "Optimized bcrypt in plain JavaScript with zero dependencies. Compatible to 'bcrypt'.",
|
| 4 |
+
"version": "2.4.3",
|
| 5 |
+
"author": "Daniel Wirtz <dcode@dcode.io>",
|
| 6 |
+
"contributors": [
|
| 7 |
+
"Shane Girish <shaneGirish@gmail.com> (https://github.com/shaneGirish)",
|
| 8 |
+
"Alex Murray <> (https://github.com/alexmurray)",
|
| 9 |
+
"Nicolas Pelletier <> (https://github.com/NicolasPelletier)",
|
| 10 |
+
"Josh Rogers <> (https://github.com/geekymole)",
|
| 11 |
+
"Noah Isaacson <noah@nisaacson.com> (https://github.com/nisaacson)"
|
| 12 |
+
],
|
| 13 |
+
"repository": {
|
| 14 |
+
"type": "url",
|
| 15 |
+
"url": "https://github.com/dcodeIO/bcrypt.js.git"
|
| 16 |
+
},
|
| 17 |
+
"bugs": {
|
| 18 |
+
"url": "https://github.com/dcodeIO/bcrypt.js/issues"
|
| 19 |
+
},
|
| 20 |
+
"keywords": [
|
| 21 |
+
"bcrypt",
|
| 22 |
+
"password",
|
| 23 |
+
"auth",
|
| 24 |
+
"authentication",
|
| 25 |
+
"encryption",
|
| 26 |
+
"crypt",
|
| 27 |
+
"crypto"
|
| 28 |
+
],
|
| 29 |
+
"main": "index.js",
|
| 30 |
+
"browser": "dist/bcrypt.js",
|
| 31 |
+
"dependencies": {},
|
| 32 |
+
"devDependencies": {
|
| 33 |
+
"testjs": "~1",
|
| 34 |
+
"closurecompiler": "~1",
|
| 35 |
+
"metascript": "~0.18",
|
| 36 |
+
"bcrypt": "latest",
|
| 37 |
+
"utfx": "~1"
|
| 38 |
+
},
|
| 39 |
+
"license": "MIT",
|
| 40 |
+
"scripts": {
|
| 41 |
+
"test": "node node_modules/testjs/bin/testjs",
|
| 42 |
+
"build": "node scripts/build.js",
|
| 43 |
+
"compile": "node node_modules/closurecompiler/bin/ccjs dist/bcrypt.js --compilation_level=SIMPLE_OPTIMIZATIONS --create_source_map=dist/bcrypt.min.map > dist/bcrypt.min.js",
|
| 44 |
+
"compress": "gzip -c -9 dist/bcrypt.min.js > dist/bcrypt.min.js.gz",
|
| 45 |
+
"make": "npm run build && npm run compile && npm run compress && npm test"
|
| 46 |
+
}
|
| 47 |
+
}
|
node_modules/bcryptjs/scripts/build.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
var MetaScript = require("metascript"),
|
| 2 |
+
path = require("path"),
|
| 3 |
+
fs = require("fs");
|
| 4 |
+
|
| 5 |
+
var rootDir = path.join(__dirname, ".."),
|
| 6 |
+
srcDir = path.join(rootDir, "src"),
|
| 7 |
+
distDir = path.join(rootDir, "dist"),
|
| 8 |
+
pkg = require(path.join(rootDir, "package.json")),
|
| 9 |
+
filename;
|
| 10 |
+
|
| 11 |
+
var scope = {
|
| 12 |
+
VERSION: pkg.version,
|
| 13 |
+
ISAAC: false
|
| 14 |
+
};
|
| 15 |
+
|
| 16 |
+
// Make standard build
|
| 17 |
+
console.log("Building bcrypt.js with scope", JSON.stringify(scope, null, 2));
|
| 18 |
+
fs.writeFileSync(
|
| 19 |
+
path.join(distDir, "bcrypt.js"),
|
| 20 |
+
MetaScript.transform(fs.readFileSync(filename = path.join(srcDir, "wrap.js")), filename, scope, srcDir)
|
| 21 |
+
);
|
| 22 |
+
|
| 23 |
+
// Make isaac build - see: https://github.com/dcodeIO/bcrypt.js/issues/16
|
| 24 |
+
/* scope.ISAAC = true;
|
| 25 |
+
console.log("Building bcrypt-isaac.js with scope", JSON.stringify(scope, null, 2));
|
| 26 |
+
fs.writeFileSync(
|
| 27 |
+
path.join(distDir, "bcrypt-isaac.js"),
|
| 28 |
+
MetaScript.transform(fs.readFileSync(filename = path.join(srcDir, "bcrypt.js")), filename, scope, srcDir)
|
| 29 |
+
); */
|
| 30 |
+
|
| 31 |
+
// Update bower.json
|
| 32 |
+
scope = { VERSION: pkg.version };
|
| 33 |
+
console.log("Updating bower.json with scope", JSON.stringify(scope, null, 2));
|
| 34 |
+
fs.writeFileSync(
|
| 35 |
+
path.join(rootDir, "bower.json"),
|
| 36 |
+
MetaScript.transform(fs.readFileSync(filename = path.join(srcDir, "bower.json")), filename, scope, srcDir)
|
| 37 |
+
);
|
node_modules/bcryptjs/src/bcrypt.js
ADDED
|
@@ -0,0 +1,327 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/**
|
| 2 |
+
* bcrypt namespace.
|
| 3 |
+
* @type {Object.<string,*>}
|
| 4 |
+
*/
|
| 5 |
+
var bcrypt = {};
|
| 6 |
+
|
| 7 |
+
/**
|
| 8 |
+
* The random implementation to use as a fallback.
|
| 9 |
+
* @type {?function(number):!Array.<number>}
|
| 10 |
+
* @inner
|
| 11 |
+
*/
|
| 12 |
+
var randomFallback = null;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Generates cryptographically secure random bytes.
|
| 16 |
+
* @function
|
| 17 |
+
* @param {number} len Bytes length
|
| 18 |
+
* @returns {!Array.<number>} Random bytes
|
| 19 |
+
* @throws {Error} If no random implementation is available
|
| 20 |
+
* @inner
|
| 21 |
+
*/
|
| 22 |
+
function random(len) {
|
| 23 |
+
/* node */ if (typeof module !== 'undefined' && module && module['exports'])
|
| 24 |
+
try {
|
| 25 |
+
return require("crypto")['randomBytes'](len);
|
| 26 |
+
} catch (e) {}
|
| 27 |
+
/* WCA */ try {
|
| 28 |
+
var a; (self['crypto']||self['msCrypto'])['getRandomValues'](a = new Uint32Array(len));
|
| 29 |
+
return Array.prototype.slice.call(a);
|
| 30 |
+
} catch (e) {}
|
| 31 |
+
/* fallback */ if (!randomFallback)
|
| 32 |
+
throw Error("Neither WebCryptoAPI nor a crypto module is available. Use bcrypt.setRandomFallback to set an alternative");
|
| 33 |
+
return randomFallback(len);
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
// Test if any secure randomness source is available
|
| 37 |
+
var randomAvailable = false;
|
| 38 |
+
try {
|
| 39 |
+
random(1);
|
| 40 |
+
randomAvailable = true;
|
| 41 |
+
} catch (e) {}
|
| 42 |
+
|
| 43 |
+
// Default fallback, if any
|
| 44 |
+
randomFallback = /*? if (ISAAC) { */function(len) {
|
| 45 |
+
for (var a=[], i=0; i<len; ++i)
|
| 46 |
+
a[i] = ((0.5 + isaac() * 2.3283064365386963e-10) * 256) | 0;
|
| 47 |
+
return a;
|
| 48 |
+
};/*? } else { */null;/*? }*/
|
| 49 |
+
|
| 50 |
+
/**
|
| 51 |
+
* Sets the pseudo random number generator to use as a fallback if neither node's `crypto` module nor the Web Crypto
|
| 52 |
+
* API is available. Please note: It is highly important that the PRNG used is cryptographically secure and that it
|
| 53 |
+
* is seeded properly!
|
| 54 |
+
* @param {?function(number):!Array.<number>} random Function taking the number of bytes to generate as its
|
| 55 |
+
* sole argument, returning the corresponding array of cryptographically secure random byte values.
|
| 56 |
+
* @see http://nodejs.org/api/crypto.html
|
| 57 |
+
* @see http://www.w3.org/TR/WebCryptoAPI/
|
| 58 |
+
*/
|
| 59 |
+
bcrypt.setRandomFallback = function(random) {
|
| 60 |
+
randomFallback = random;
|
| 61 |
+
};
|
| 62 |
+
|
| 63 |
+
/**
|
| 64 |
+
* Synchronously generates a salt.
|
| 65 |
+
* @param {number=} rounds Number of rounds to use, defaults to 10 if omitted
|
| 66 |
+
* @param {number=} seed_length Not supported.
|
| 67 |
+
* @returns {string} Resulting salt
|
| 68 |
+
* @throws {Error} If a random fallback is required but not set
|
| 69 |
+
* @expose
|
| 70 |
+
*/
|
| 71 |
+
bcrypt.genSaltSync = function(rounds, seed_length) {
|
| 72 |
+
rounds = rounds || GENSALT_DEFAULT_LOG2_ROUNDS;
|
| 73 |
+
if (typeof rounds !== 'number')
|
| 74 |
+
throw Error("Illegal arguments: "+(typeof rounds)+", "+(typeof seed_length));
|
| 75 |
+
if (rounds < 4)
|
| 76 |
+
rounds = 4;
|
| 77 |
+
else if (rounds > 31)
|
| 78 |
+
rounds = 31;
|
| 79 |
+
var salt = [];
|
| 80 |
+
salt.push("$2a$");
|
| 81 |
+
if (rounds < 10)
|
| 82 |
+
salt.push("0");
|
| 83 |
+
salt.push(rounds.toString());
|
| 84 |
+
salt.push('$');
|
| 85 |
+
salt.push(base64_encode(random(BCRYPT_SALT_LEN), BCRYPT_SALT_LEN)); // May throw
|
| 86 |
+
return salt.join('');
|
| 87 |
+
};
|
| 88 |
+
|
| 89 |
+
/**
|
| 90 |
+
* Asynchronously generates a salt.
|
| 91 |
+
* @param {(number|function(Error, string=))=} rounds Number of rounds to use, defaults to 10 if omitted
|
| 92 |
+
* @param {(number|function(Error, string=))=} seed_length Not supported.
|
| 93 |
+
* @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting salt
|
| 94 |
+
* @returns {!Promise} If `callback` has been omitted
|
| 95 |
+
* @throws {Error} If `callback` is present but not a function
|
| 96 |
+
* @expose
|
| 97 |
+
*/
|
| 98 |
+
bcrypt.genSalt = function(rounds, seed_length, callback) {
|
| 99 |
+
if (typeof seed_length === 'function')
|
| 100 |
+
callback = seed_length,
|
| 101 |
+
seed_length = undefined; // Not supported.
|
| 102 |
+
if (typeof rounds === 'function')
|
| 103 |
+
callback = rounds,
|
| 104 |
+
rounds = undefined;
|
| 105 |
+
if (typeof rounds === 'undefined')
|
| 106 |
+
rounds = GENSALT_DEFAULT_LOG2_ROUNDS;
|
| 107 |
+
else if (typeof rounds !== 'number')
|
| 108 |
+
throw Error("illegal arguments: "+(typeof rounds));
|
| 109 |
+
|
| 110 |
+
function _async(callback) {
|
| 111 |
+
nextTick(function() { // Pretty thin, but salting is fast enough
|
| 112 |
+
try {
|
| 113 |
+
callback(null, bcrypt.genSaltSync(rounds));
|
| 114 |
+
} catch (err) {
|
| 115 |
+
callback(err);
|
| 116 |
+
}
|
| 117 |
+
});
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
if (callback) {
|
| 121 |
+
if (typeof callback !== 'function')
|
| 122 |
+
throw Error("Illegal callback: "+typeof(callback));
|
| 123 |
+
_async(callback);
|
| 124 |
+
} else
|
| 125 |
+
return new Promise(function(resolve, reject) {
|
| 126 |
+
_async(function(err, res) {
|
| 127 |
+
if (err) {
|
| 128 |
+
reject(err);
|
| 129 |
+
return;
|
| 130 |
+
}
|
| 131 |
+
resolve(res);
|
| 132 |
+
});
|
| 133 |
+
});
|
| 134 |
+
};
|
| 135 |
+
|
| 136 |
+
/**
|
| 137 |
+
* Synchronously generates a hash for the given string.
|
| 138 |
+
* @param {string} s String to hash
|
| 139 |
+
* @param {(number|string)=} salt Salt length to generate or salt to use, default to 10
|
| 140 |
+
* @returns {string} Resulting hash
|
| 141 |
+
* @expose
|
| 142 |
+
*/
|
| 143 |
+
bcrypt.hashSync = function(s, salt) {
|
| 144 |
+
if (typeof salt === 'undefined')
|
| 145 |
+
salt = GENSALT_DEFAULT_LOG2_ROUNDS;
|
| 146 |
+
if (typeof salt === 'number')
|
| 147 |
+
salt = bcrypt.genSaltSync(salt);
|
| 148 |
+
if (typeof s !== 'string' || typeof salt !== 'string')
|
| 149 |
+
throw Error("Illegal arguments: "+(typeof s)+', '+(typeof salt));
|
| 150 |
+
return _hash(s, salt);
|
| 151 |
+
};
|
| 152 |
+
|
| 153 |
+
/**
|
| 154 |
+
* Asynchronously generates a hash for the given string.
|
| 155 |
+
* @param {string} s String to hash
|
| 156 |
+
* @param {number|string} salt Salt length to generate or salt to use
|
| 157 |
+
* @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash
|
| 158 |
+
* @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed
|
| 159 |
+
* (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
|
| 160 |
+
* @returns {!Promise} If `callback` has been omitted
|
| 161 |
+
* @throws {Error} If `callback` is present but not a function
|
| 162 |
+
* @expose
|
| 163 |
+
*/
|
| 164 |
+
bcrypt.hash = function(s, salt, callback, progressCallback) {
|
| 165 |
+
|
| 166 |
+
function _async(callback) {
|
| 167 |
+
if (typeof s === 'string' && typeof salt === 'number')
|
| 168 |
+
bcrypt.genSalt(salt, function(err, salt) {
|
| 169 |
+
_hash(s, salt, callback, progressCallback);
|
| 170 |
+
});
|
| 171 |
+
else if (typeof s === 'string' && typeof salt === 'string')
|
| 172 |
+
_hash(s, salt, callback, progressCallback);
|
| 173 |
+
else
|
| 174 |
+
nextTick(callback.bind(this, Error("Illegal arguments: "+(typeof s)+', '+(typeof salt))));
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
+
if (callback) {
|
| 178 |
+
if (typeof callback !== 'function')
|
| 179 |
+
throw Error("Illegal callback: "+typeof(callback));
|
| 180 |
+
_async(callback);
|
| 181 |
+
} else
|
| 182 |
+
return new Promise(function(resolve, reject) {
|
| 183 |
+
_async(function(err, res) {
|
| 184 |
+
if (err) {
|
| 185 |
+
reject(err);
|
| 186 |
+
return;
|
| 187 |
+
}
|
| 188 |
+
resolve(res);
|
| 189 |
+
});
|
| 190 |
+
});
|
| 191 |
+
};
|
| 192 |
+
|
| 193 |
+
/**
|
| 194 |
+
* Compares two strings of the same length in constant time.
|
| 195 |
+
* @param {string} known Must be of the correct length
|
| 196 |
+
* @param {string} unknown Must be the same length as `known`
|
| 197 |
+
* @returns {boolean}
|
| 198 |
+
* @inner
|
| 199 |
+
*/
|
| 200 |
+
function safeStringCompare(known, unknown) {
|
| 201 |
+
var right = 0,
|
| 202 |
+
wrong = 0;
|
| 203 |
+
for (var i=0, k=known.length; i<k; ++i) {
|
| 204 |
+
if (known.charCodeAt(i) === unknown.charCodeAt(i))
|
| 205 |
+
++right;
|
| 206 |
+
else
|
| 207 |
+
++wrong;
|
| 208 |
+
}
|
| 209 |
+
// Prevent removal of unused variables (never true, actually)
|
| 210 |
+
if (right < 0)
|
| 211 |
+
return false;
|
| 212 |
+
return wrong === 0;
|
| 213 |
+
}
|
| 214 |
+
|
| 215 |
+
/**
|
| 216 |
+
* Synchronously tests a string against a hash.
|
| 217 |
+
* @param {string} s String to compare
|
| 218 |
+
* @param {string} hash Hash to test against
|
| 219 |
+
* @returns {boolean} true if matching, otherwise false
|
| 220 |
+
* @throws {Error} If an argument is illegal
|
| 221 |
+
* @expose
|
| 222 |
+
*/
|
| 223 |
+
bcrypt.compareSync = function(s, hash) {
|
| 224 |
+
if (typeof s !== "string" || typeof hash !== "string")
|
| 225 |
+
throw Error("Illegal arguments: "+(typeof s)+', '+(typeof hash));
|
| 226 |
+
if (hash.length !== 60)
|
| 227 |
+
return false;
|
| 228 |
+
return safeStringCompare(bcrypt.hashSync(s, hash.substr(0, hash.length-31)), hash);
|
| 229 |
+
};
|
| 230 |
+
|
| 231 |
+
/**
|
| 232 |
+
* Asynchronously compares the given data against the given hash.
|
| 233 |
+
* @param {string} s Data to compare
|
| 234 |
+
* @param {string} hash Data to be compared to
|
| 235 |
+
* @param {function(Error, boolean)=} callback Callback receiving the error, if any, otherwise the result
|
| 236 |
+
* @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed
|
| 237 |
+
* (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.
|
| 238 |
+
* @returns {!Promise} If `callback` has been omitted
|
| 239 |
+
* @throws {Error} If `callback` is present but not a function
|
| 240 |
+
* @expose
|
| 241 |
+
*/
|
| 242 |
+
bcrypt.compare = function(s, hash, callback, progressCallback) {
|
| 243 |
+
|
| 244 |
+
function _async(callback) {
|
| 245 |
+
if (typeof s !== "string" || typeof hash !== "string") {
|
| 246 |
+
nextTick(callback.bind(this, Error("Illegal arguments: "+(typeof s)+', '+(typeof hash))));
|
| 247 |
+
return;
|
| 248 |
+
}
|
| 249 |
+
if (hash.length !== 60) {
|
| 250 |
+
nextTick(callback.bind(this, null, false));
|
| 251 |
+
return;
|
| 252 |
+
}
|
| 253 |
+
bcrypt.hash(s, hash.substr(0, 29), function(err, comp) {
|
| 254 |
+
if (err)
|
| 255 |
+
callback(err);
|
| 256 |
+
else
|
| 257 |
+
callback(null, safeStringCompare(comp, hash));
|
| 258 |
+
}, progressCallback);
|
| 259 |
+
}
|
| 260 |
+
|
| 261 |
+
if (callback) {
|
| 262 |
+
if (typeof callback !== 'function')
|
| 263 |
+
throw Error("Illegal callback: "+typeof(callback));
|
| 264 |
+
_async(callback);
|
| 265 |
+
} else
|
| 266 |
+
return new Promise(function(resolve, reject) {
|
| 267 |
+
_async(function(err, res) {
|
| 268 |
+
if (err) {
|
| 269 |
+
reject(err);
|
| 270 |
+
return;
|
| 271 |
+
}
|
| 272 |
+
resolve(res);
|
| 273 |
+
});
|
| 274 |
+
});
|
| 275 |
+
};
|
| 276 |
+
|
| 277 |
+
/**
|
| 278 |
+
* Gets the number of rounds used to encrypt the specified hash.
|
| 279 |
+
* @param {string} hash Hash to extract the used number of rounds from
|
| 280 |
+
* @returns {number} Number of rounds used
|
| 281 |
+
* @throws {Error} If `hash` is not a string
|
| 282 |
+
* @expose
|
| 283 |
+
*/
|
| 284 |
+
bcrypt.getRounds = function(hash) {
|
| 285 |
+
if (typeof hash !== "string")
|
| 286 |
+
throw Error("Illegal arguments: "+(typeof hash));
|
| 287 |
+
return parseInt(hash.split("$")[2], 10);
|
| 288 |
+
};
|
| 289 |
+
|
| 290 |
+
/**
|
| 291 |
+
* Gets the salt portion from a hash. Does not validate the hash.
|
| 292 |
+
* @param {string} hash Hash to extract the salt from
|
| 293 |
+
* @returns {string} Extracted salt part
|
| 294 |
+
* @throws {Error} If `hash` is not a string or otherwise invalid
|
| 295 |
+
* @expose
|
| 296 |
+
*/
|
| 297 |
+
bcrypt.getSalt = function(hash) {
|
| 298 |
+
if (typeof hash !== 'string')
|
| 299 |
+
throw Error("Illegal arguments: "+(typeof hash));
|
| 300 |
+
if (hash.length !== 60)
|
| 301 |
+
throw Error("Illegal hash length: "+hash.length+" != 60");
|
| 302 |
+
return hash.substring(0, 29);
|
| 303 |
+
};
|
| 304 |
+
|
| 305 |
+
//? include("bcrypt/util.js");
|
| 306 |
+
|
| 307 |
+
//? include("bcrypt/impl.js");
|
| 308 |
+
|
| 309 |
+
/**
|
| 310 |
+
* Encodes a byte array to base64 with up to len bytes of input, using the custom bcrypt alphabet.
|
| 311 |
+
* @function
|
| 312 |
+
* @param {!Array.<number>} b Byte array
|
| 313 |
+
* @param {number} len Maximum input length
|
| 314 |
+
* @returns {string}
|
| 315 |
+
* @expose
|
| 316 |
+
*/
|
| 317 |
+
bcrypt.encodeBase64 = base64_encode;
|
| 318 |
+
|
| 319 |
+
/**
|
| 320 |
+
* Decodes a base64 encoded string to up to len bytes of output, using the custom bcrypt alphabet.
|
| 321 |
+
* @function
|
| 322 |
+
* @param {string} s String to decode
|
| 323 |
+
* @param {number} len Maximum output length
|
| 324 |
+
* @returns {!Array.<number>}
|
| 325 |
+
* @expose
|
| 326 |
+
*/
|
| 327 |
+
bcrypt.decodeBase64 = base64_decode;
|
node_modules/bcryptjs/src/bcrypt/impl.js
ADDED
|
@@ -0,0 +1,669 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/**
|
| 2 |
+
* @type {number}
|
| 3 |
+
* @const
|
| 4 |
+
* @inner
|
| 5 |
+
*/
|
| 6 |
+
var BCRYPT_SALT_LEN = 16;
|
| 7 |
+
|
| 8 |
+
/**
|
| 9 |
+
* @type {number}
|
| 10 |
+
* @const
|
| 11 |
+
* @inner
|
| 12 |
+
*/
|
| 13 |
+
var GENSALT_DEFAULT_LOG2_ROUNDS = 10;
|
| 14 |
+
|
| 15 |
+
/**
|
| 16 |
+
* @type {number}
|
| 17 |
+
* @const
|
| 18 |
+
* @inner
|
| 19 |
+
*/
|
| 20 |
+
var BLOWFISH_NUM_ROUNDS = 16;
|
| 21 |
+
|
| 22 |
+
/**
|
| 23 |
+
* @type {number}
|
| 24 |
+
* @const
|
| 25 |
+
* @inner
|
| 26 |
+
*/
|
| 27 |
+
var MAX_EXECUTION_TIME = 100;
|
| 28 |
+
|
| 29 |
+
/**
|
| 30 |
+
* @type {Array.<number>}
|
| 31 |
+
* @const
|
| 32 |
+
* @inner
|
| 33 |
+
*/
|
| 34 |
+
var P_ORIG = [
|
| 35 |
+
0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822,
|
| 36 |
+
0x299f31d0, 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377,
|
| 37 |
+
0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5,
|
| 38 |
+
0xb5470917, 0x9216d5d9, 0x8979fb1b
|
| 39 |
+
];
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* @type {Array.<number>}
|
| 43 |
+
* @const
|
| 44 |
+
* @inner
|
| 45 |
+
*/
|
| 46 |
+
var S_ORIG = [
|
| 47 |
+
0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed,
|
| 48 |
+
0x6a267e96, 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7,
|
| 49 |
+
0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3,
|
| 50 |
+
0xf4933d7e, 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
|
| 51 |
+
0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, 0xc5d1b023,
|
| 52 |
+
0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e,
|
| 53 |
+
0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda,
|
| 54 |
+
0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
|
| 55 |
+
0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af,
|
| 56 |
+
0x7c72e993, 0xb3ee1411, 0x636fbc2a, 0x2ba9c55d, 0x741831f6,
|
| 57 |
+
0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381,
|
| 58 |
+
0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
|
| 59 |
+
0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d,
|
| 60 |
+
0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5,
|
| 61 |
+
0x0f6d6ff3, 0x83f44239, 0x2e0b4482, 0xa4842004, 0x69c8f04a,
|
| 62 |
+
0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
|
| 63 |
+
0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c,
|
| 64 |
+
0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176,
|
| 65 |
+
0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3,
|
| 66 |
+
0x3b8b5ebe, 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
|
| 67 |
+
0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 0x37d0d724,
|
| 68 |
+
0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b,
|
| 69 |
+
0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, 0x976ce0bd,
|
| 70 |
+
0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
|
| 71 |
+
0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f,
|
| 72 |
+
0x9b30952c, 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd,
|
| 73 |
+
0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39,
|
| 74 |
+
0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
|
| 75 |
+
0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, 0x3c7516df,
|
| 76 |
+
0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760,
|
| 77 |
+
0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e,
|
| 78 |
+
0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
|
| 79 |
+
0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98,
|
| 80 |
+
0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, 0x9a53e479, 0xb6f84565,
|
| 81 |
+
0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341,
|
| 82 |
+
0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
|
| 83 |
+
0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0,
|
| 84 |
+
0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64,
|
| 85 |
+
0x8888b812, 0x900df01c, 0x4fad5ea0, 0x688fc31c, 0xd1cff191,
|
| 86 |
+
0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
|
| 87 |
+
0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0,
|
| 88 |
+
0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705,
|
| 89 |
+
0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5,
|
| 90 |
+
0xfb9d35cf, 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
|
| 91 |
+
0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, 0x2464369b,
|
| 92 |
+
0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f,
|
| 93 |
+
0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9, 0x11c81968,
|
| 94 |
+
0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
|
| 95 |
+
0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5,
|
| 96 |
+
0x571be91f, 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6,
|
| 97 |
+
0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799,
|
| 98 |
+
0x6e85076a, 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
|
| 99 |
+
0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, 0xecaa8c71,
|
| 100 |
+
0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29,
|
| 101 |
+
0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, 0x6b8fe4d6,
|
| 102 |
+
0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
|
| 103 |
+
0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f,
|
| 104 |
+
0x3ebaefc9, 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286,
|
| 105 |
+
0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec,
|
| 106 |
+
0x5716f2b8, 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
|
| 107 |
+
0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 0xd19113f9,
|
| 108 |
+
0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc,
|
| 109 |
+
0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e,
|
| 110 |
+
0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
|
| 111 |
+
0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290,
|
| 112 |
+
0x24977c79, 0x5679b072, 0xbcaf89af, 0xde9a771f, 0xd9930810,
|
| 113 |
+
0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6,
|
| 114 |
+
0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
|
| 115 |
+
0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847,
|
| 116 |
+
0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451,
|
| 117 |
+
0x50940002, 0x133ae4dd, 0x71dff89e, 0x10314e55, 0x81ac77d6,
|
| 118 |
+
0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
|
| 119 |
+
0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570,
|
| 120 |
+
0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa,
|
| 121 |
+
0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978,
|
| 122 |
+
0x9c10b36a, 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
|
| 123 |
+
0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 0x5223a708,
|
| 124 |
+
0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883,
|
| 125 |
+
0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, 0x65582185,
|
| 126 |
+
0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
|
| 127 |
+
0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830,
|
| 128 |
+
0xeb61bd96, 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239,
|
| 129 |
+
0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab,
|
| 130 |
+
0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
|
| 131 |
+
0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 0x9b540b19,
|
| 132 |
+
0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77,
|
| 133 |
+
0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1,
|
| 134 |
+
0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
|
| 135 |
+
0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef,
|
| 136 |
+
0x34c6ffea, 0xfe28ed61, 0xee7c3c73, 0x5d4a14d9, 0xe864b7e3,
|
| 137 |
+
0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15,
|
| 138 |
+
0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
|
| 139 |
+
0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2,
|
| 140 |
+
0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492,
|
| 141 |
+
0x47848a0b, 0x5692b285, 0x095bbf00, 0xad19489d, 0x1462b174,
|
| 142 |
+
0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
|
| 143 |
+
0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759,
|
| 144 |
+
0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e,
|
| 145 |
+
0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc,
|
| 146 |
+
0x800bcadc, 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
|
| 147 |
+
0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, 0xc5c43465,
|
| 148 |
+
0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a,
|
| 149 |
+
0xe6e39f2b, 0xdb83adf7, 0xe93d5a68, 0x948140f7, 0xf64c261c,
|
| 150 |
+
0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
|
| 151 |
+
0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e,
|
| 152 |
+
0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af,
|
| 153 |
+
0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0,
|
| 154 |
+
0x31cb8504, 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
|
| 155 |
+
0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, 0x68dc1462,
|
| 156 |
+
0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c,
|
| 157 |
+
0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, 0xce78a399,
|
| 158 |
+
0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
|
| 159 |
+
0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74,
|
| 160 |
+
0xdd5b4332, 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397,
|
| 161 |
+
0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7,
|
| 162 |
+
0xd096954b, 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
|
| 163 |
+
0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, 0xfdf8e802,
|
| 164 |
+
0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22,
|
| 165 |
+
0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4,
|
| 166 |
+
0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
|
| 167 |
+
0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2,
|
| 168 |
+
0x02e1329e, 0xaf664fd1, 0xcad18115, 0x6b2395e0, 0x333e92e1,
|
| 169 |
+
0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c,
|
| 170 |
+
0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
|
| 171 |
+
0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341,
|
| 172 |
+
0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8,
|
| 173 |
+
0x991be14c, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, 0x2765d43b,
|
| 174 |
+
0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
|
| 175 |
+
0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88,
|
| 176 |
+
0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979,
|
| 177 |
+
0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc,
|
| 178 |
+
0x782ef11c, 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
|
| 179 |
+
0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, 0x44421659,
|
| 180 |
+
0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f,
|
| 181 |
+
0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, 0x60787bf8,
|
| 182 |
+
0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
|
| 183 |
+
0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be,
|
| 184 |
+
0xbde8ae24, 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2,
|
| 185 |
+
0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255,
|
| 186 |
+
0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
|
| 187 |
+
0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 0xb90bace1,
|
| 188 |
+
0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09,
|
| 189 |
+
0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025,
|
| 190 |
+
0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
|
| 191 |
+
0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01,
|
| 192 |
+
0xa70683fa, 0xa002b5c4, 0x0de6d027, 0x9af88c27, 0x773f8641,
|
| 193 |
+
0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa,
|
| 194 |
+
0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
|
| 195 |
+
0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409,
|
| 196 |
+
0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9,
|
| 197 |
+
0x1ac15bb4, 0xd39eb8fc, 0xed545578, 0x08fca5b5, 0xd83d7cd3,
|
| 198 |
+
0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
|
| 199 |
+
0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234,
|
| 200 |
+
0x92638212, 0x670efa8e, 0x406000e0, 0x3a39ce37, 0xd3faf5cf,
|
| 201 |
+
0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740,
|
| 202 |
+
0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
|
| 203 |
+
0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f,
|
| 204 |
+
0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d,
|
| 205 |
+
0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, 0xa9ba4650, 0xac9526e8,
|
| 206 |
+
0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
|
| 207 |
+
0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba,
|
| 208 |
+
0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1,
|
| 209 |
+
0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69,
|
| 210 |
+
0x77fa0a59, 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
|
| 211 |
+
0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a,
|
| 212 |
+
0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b,
|
| 213 |
+
0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6, 0x47b0acfd,
|
| 214 |
+
0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
|
| 215 |
+
0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4,
|
| 216 |
+
0x88f46dba, 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2,
|
| 217 |
+
0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb,
|
| 218 |
+
0x26dcf319, 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
|
| 219 |
+
0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 0x4de81751,
|
| 220 |
+
0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce,
|
| 221 |
+
0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369,
|
| 222 |
+
0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
|
| 223 |
+
0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd,
|
| 224 |
+
0x1b588d40, 0xccd2017f, 0x6bb4e3bb, 0xdda26a7e, 0x3a59ff45,
|
| 225 |
+
0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae,
|
| 226 |
+
0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
|
| 227 |
+
0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08,
|
| 228 |
+
0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d,
|
| 229 |
+
0x06b89fb4, 0xce6ea048, 0x6f3f3b82, 0x3520ab82, 0x011a1d4b,
|
| 230 |
+
0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
|
| 231 |
+
0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e,
|
| 232 |
+
0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a,
|
| 233 |
+
0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c,
|
| 234 |
+
0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
|
| 235 |
+
0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 0xfae59361,
|
| 236 |
+
0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c,
|
| 237 |
+
0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be,
|
| 238 |
+
0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
|
| 239 |
+
0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d,
|
| 240 |
+
0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891,
|
| 241 |
+
0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5,
|
| 242 |
+
0xf6fb2299, 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
|
| 243 |
+
0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 0xde966292,
|
| 244 |
+
0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a,
|
| 245 |
+
0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2,
|
| 246 |
+
0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
|
| 247 |
+
0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c,
|
| 248 |
+
0xf746ce76, 0x77afa1c5, 0x20756060, 0x85cbfe4e, 0x8ae88dd8,
|
| 249 |
+
0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4,
|
| 250 |
+
0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
|
| 251 |
+
0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
|
| 252 |
+
];
|
| 253 |
+
|
| 254 |
+
/**
|
| 255 |
+
* @type {Array.<number>}
|
| 256 |
+
* @const
|
| 257 |
+
* @inner
|
| 258 |
+
*/
|
| 259 |
+
var C_ORIG = [
|
| 260 |
+
0x4f727068, 0x65616e42, 0x65686f6c, 0x64657253, 0x63727944,
|
| 261 |
+
0x6f756274
|
| 262 |
+
];
|
| 263 |
+
|
| 264 |
+
/**
|
| 265 |
+
* @param {Array.<number>} lr
|
| 266 |
+
* @param {number} off
|
| 267 |
+
* @param {Array.<number>} P
|
| 268 |
+
* @param {Array.<number>} S
|
| 269 |
+
* @returns {Array.<number>}
|
| 270 |
+
* @inner
|
| 271 |
+
*/
|
| 272 |
+
function _encipher(lr, off, P, S) { // This is our bottleneck: 1714/1905 ticks / 90% - see profile.txt
|
| 273 |
+
var n,
|
| 274 |
+
l = lr[off],
|
| 275 |
+
r = lr[off + 1];
|
| 276 |
+
|
| 277 |
+
l ^= P[0];
|
| 278 |
+
|
| 279 |
+
/*
|
| 280 |
+
for (var i=0, k=BLOWFISH_NUM_ROUNDS-2; i<=k;)
|
| 281 |
+
// Feistel substitution on left word
|
| 282 |
+
n = S[l >>> 24],
|
| 283 |
+
n += S[0x100 | ((l >> 16) & 0xff)],
|
| 284 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)],
|
| 285 |
+
n += S[0x300 | (l & 0xff)],
|
| 286 |
+
r ^= n ^ P[++i],
|
| 287 |
+
// Feistel substitution on right word
|
| 288 |
+
n = S[r >>> 24],
|
| 289 |
+
n += S[0x100 | ((r >> 16) & 0xff)],
|
| 290 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)],
|
| 291 |
+
n += S[0x300 | (r & 0xff)],
|
| 292 |
+
l ^= n ^ P[++i];
|
| 293 |
+
*/
|
| 294 |
+
|
| 295 |
+
//The following is an unrolled version of the above loop.
|
| 296 |
+
//Iteration 0
|
| 297 |
+
n = S[l >>> 24];
|
| 298 |
+
n += S[0x100 | ((l >> 16) & 0xff)];
|
| 299 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
| 300 |
+
n += S[0x300 | (l & 0xff)];
|
| 301 |
+
r ^= n ^ P[1];
|
| 302 |
+
n = S[r >>> 24];
|
| 303 |
+
n += S[0x100 | ((r >> 16) & 0xff)];
|
| 304 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
| 305 |
+
n += S[0x300 | (r & 0xff)];
|
| 306 |
+
l ^= n ^ P[2];
|
| 307 |
+
//Iteration 1
|
| 308 |
+
n = S[l >>> 24];
|
| 309 |
+
n += S[0x100 | ((l >> 16) & 0xff)];
|
| 310 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
| 311 |
+
n += S[0x300 | (l & 0xff)];
|
| 312 |
+
r ^= n ^ P[3];
|
| 313 |
+
n = S[r >>> 24];
|
| 314 |
+
n += S[0x100 | ((r >> 16) & 0xff)];
|
| 315 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
| 316 |
+
n += S[0x300 | (r & 0xff)];
|
| 317 |
+
l ^= n ^ P[4];
|
| 318 |
+
//Iteration 2
|
| 319 |
+
n = S[l >>> 24];
|
| 320 |
+
n += S[0x100 | ((l >> 16) & 0xff)];
|
| 321 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
| 322 |
+
n += S[0x300 | (l & 0xff)];
|
| 323 |
+
r ^= n ^ P[5];
|
| 324 |
+
n = S[r >>> 24];
|
| 325 |
+
n += S[0x100 | ((r >> 16) & 0xff)];
|
| 326 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
| 327 |
+
n += S[0x300 | (r & 0xff)];
|
| 328 |
+
l ^= n ^ P[6];
|
| 329 |
+
//Iteration 3
|
| 330 |
+
n = S[l >>> 24];
|
| 331 |
+
n += S[0x100 | ((l >> 16) & 0xff)];
|
| 332 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
| 333 |
+
n += S[0x300 | (l & 0xff)];
|
| 334 |
+
r ^= n ^ P[7];
|
| 335 |
+
n = S[r >>> 24];
|
| 336 |
+
n += S[0x100 | ((r >> 16) & 0xff)];
|
| 337 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
| 338 |
+
n += S[0x300 | (r & 0xff)];
|
| 339 |
+
l ^= n ^ P[8];
|
| 340 |
+
//Iteration 4
|
| 341 |
+
n = S[l >>> 24];
|
| 342 |
+
n += S[0x100 | ((l >> 16) & 0xff)];
|
| 343 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
| 344 |
+
n += S[0x300 | (l & 0xff)];
|
| 345 |
+
r ^= n ^ P[9];
|
| 346 |
+
n = S[r >>> 24];
|
| 347 |
+
n += S[0x100 | ((r >> 16) & 0xff)];
|
| 348 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
| 349 |
+
n += S[0x300 | (r & 0xff)];
|
| 350 |
+
l ^= n ^ P[10];
|
| 351 |
+
//Iteration 5
|
| 352 |
+
n = S[l >>> 24];
|
| 353 |
+
n += S[0x100 | ((l >> 16) & 0xff)];
|
| 354 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
| 355 |
+
n += S[0x300 | (l & 0xff)];
|
| 356 |
+
r ^= n ^ P[11];
|
| 357 |
+
n = S[r >>> 24];
|
| 358 |
+
n += S[0x100 | ((r >> 16) & 0xff)];
|
| 359 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
| 360 |
+
n += S[0x300 | (r & 0xff)];
|
| 361 |
+
l ^= n ^ P[12];
|
| 362 |
+
//Iteration 6
|
| 363 |
+
n = S[l >>> 24];
|
| 364 |
+
n += S[0x100 | ((l >> 16) & 0xff)];
|
| 365 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
| 366 |
+
n += S[0x300 | (l & 0xff)];
|
| 367 |
+
r ^= n ^ P[13];
|
| 368 |
+
n = S[r >>> 24];
|
| 369 |
+
n += S[0x100 | ((r >> 16) & 0xff)];
|
| 370 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
| 371 |
+
n += S[0x300 | (r & 0xff)];
|
| 372 |
+
l ^= n ^ P[14];
|
| 373 |
+
//Iteration 7
|
| 374 |
+
n = S[l >>> 24];
|
| 375 |
+
n += S[0x100 | ((l >> 16) & 0xff)];
|
| 376 |
+
n ^= S[0x200 | ((l >> 8) & 0xff)];
|
| 377 |
+
n += S[0x300 | (l & 0xff)];
|
| 378 |
+
r ^= n ^ P[15];
|
| 379 |
+
n = S[r >>> 24];
|
| 380 |
+
n += S[0x100 | ((r >> 16) & 0xff)];
|
| 381 |
+
n ^= S[0x200 | ((r >> 8) & 0xff)];
|
| 382 |
+
n += S[0x300 | (r & 0xff)];
|
| 383 |
+
l ^= n ^ P[16];
|
| 384 |
+
|
| 385 |
+
lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1];
|
| 386 |
+
lr[off + 1] = l;
|
| 387 |
+
return lr;
|
| 388 |
+
}
|
| 389 |
+
|
| 390 |
+
/**
|
| 391 |
+
* @param {Array.<number>} data
|
| 392 |
+
* @param {number} offp
|
| 393 |
+
* @returns {{key: number, offp: number}}
|
| 394 |
+
* @inner
|
| 395 |
+
*/
|
| 396 |
+
function _streamtoword(data, offp) {
|
| 397 |
+
for (var i = 0, word = 0; i < 4; ++i)
|
| 398 |
+
word = (word << 8) | (data[offp] & 0xff),
|
| 399 |
+
offp = (offp + 1) % data.length;
|
| 400 |
+
return { key: word, offp: offp };
|
| 401 |
+
}
|
| 402 |
+
|
| 403 |
+
/**
|
| 404 |
+
* @param {Array.<number>} key
|
| 405 |
+
* @param {Array.<number>} P
|
| 406 |
+
* @param {Array.<number>} S
|
| 407 |
+
* @inner
|
| 408 |
+
*/
|
| 409 |
+
function _key(key, P, S) {
|
| 410 |
+
var offset = 0,
|
| 411 |
+
lr = [0, 0],
|
| 412 |
+
plen = P.length,
|
| 413 |
+
slen = S.length,
|
| 414 |
+
sw;
|
| 415 |
+
for (var i = 0; i < plen; i++)
|
| 416 |
+
sw = _streamtoword(key, offset),
|
| 417 |
+
offset = sw.offp,
|
| 418 |
+
P[i] = P[i] ^ sw.key;
|
| 419 |
+
for (i = 0; i < plen; i += 2)
|
| 420 |
+
lr = _encipher(lr, 0, P, S),
|
| 421 |
+
P[i] = lr[0],
|
| 422 |
+
P[i + 1] = lr[1];
|
| 423 |
+
for (i = 0; i < slen; i += 2)
|
| 424 |
+
lr = _encipher(lr, 0, P, S),
|
| 425 |
+
S[i] = lr[0],
|
| 426 |
+
S[i + 1] = lr[1];
|
| 427 |
+
}
|
| 428 |
+
|
| 429 |
+
/**
|
| 430 |
+
* Expensive key schedule Blowfish.
|
| 431 |
+
* @param {Array.<number>} data
|
| 432 |
+
* @param {Array.<number>} key
|
| 433 |
+
* @param {Array.<number>} P
|
| 434 |
+
* @param {Array.<number>} S
|
| 435 |
+
* @inner
|
| 436 |
+
*/
|
| 437 |
+
function _ekskey(data, key, P, S) {
|
| 438 |
+
var offp = 0,
|
| 439 |
+
lr = [0, 0],
|
| 440 |
+
plen = P.length,
|
| 441 |
+
slen = S.length,
|
| 442 |
+
sw;
|
| 443 |
+
for (var i = 0; i < plen; i++)
|
| 444 |
+
sw = _streamtoword(key, offp),
|
| 445 |
+
offp = sw.offp,
|
| 446 |
+
P[i] = P[i] ^ sw.key;
|
| 447 |
+
offp = 0;
|
| 448 |
+
for (i = 0; i < plen; i += 2)
|
| 449 |
+
sw = _streamtoword(data, offp),
|
| 450 |
+
offp = sw.offp,
|
| 451 |
+
lr[0] ^= sw.key,
|
| 452 |
+
sw = _streamtoword(data, offp),
|
| 453 |
+
offp = sw.offp,
|
| 454 |
+
lr[1] ^= sw.key,
|
| 455 |
+
lr = _encipher(lr, 0, P, S),
|
| 456 |
+
P[i] = lr[0],
|
| 457 |
+
P[i + 1] = lr[1];
|
| 458 |
+
for (i = 0; i < slen; i += 2)
|
| 459 |
+
sw = _streamtoword(data, offp),
|
| 460 |
+
offp = sw.offp,
|
| 461 |
+
lr[0] ^= sw.key,
|
| 462 |
+
sw = _streamtoword(data, offp),
|
| 463 |
+
offp = sw.offp,
|
| 464 |
+
lr[1] ^= sw.key,
|
| 465 |
+
lr = _encipher(lr, 0, P, S),
|
| 466 |
+
S[i] = lr[0],
|
| 467 |
+
S[i + 1] = lr[1];
|
| 468 |
+
}
|
| 469 |
+
|
| 470 |
+
/**
|
| 471 |
+
* Internaly crypts a string.
|
| 472 |
+
* @param {Array.<number>} b Bytes to crypt
|
| 473 |
+
* @param {Array.<number>} salt Salt bytes to use
|
| 474 |
+
* @param {number} rounds Number of rounds
|
| 475 |
+
* @param {function(Error, Array.<number>=)=} callback Callback receiving the error, if any, and the resulting bytes. If
|
| 476 |
+
* omitted, the operation will be performed synchronously.
|
| 477 |
+
* @param {function(number)=} progressCallback Callback called with the current progress
|
| 478 |
+
* @returns {!Array.<number>|undefined} Resulting bytes if callback has been omitted, otherwise `undefined`
|
| 479 |
+
* @inner
|
| 480 |
+
*/
|
| 481 |
+
function _crypt(b, salt, rounds, callback, progressCallback) {
|
| 482 |
+
var cdata = C_ORIG.slice(),
|
| 483 |
+
clen = cdata.length,
|
| 484 |
+
err;
|
| 485 |
+
|
| 486 |
+
// Validate
|
| 487 |
+
if (rounds < 4 || rounds > 31) {
|
| 488 |
+
err = Error("Illegal number of rounds (4-31): "+rounds);
|
| 489 |
+
if (callback) {
|
| 490 |
+
nextTick(callback.bind(this, err));
|
| 491 |
+
return;
|
| 492 |
+
} else
|
| 493 |
+
throw err;
|
| 494 |
+
}
|
| 495 |
+
if (salt.length !== BCRYPT_SALT_LEN) {
|
| 496 |
+
err =Error("Illegal salt length: "+salt.length+" != "+BCRYPT_SALT_LEN);
|
| 497 |
+
if (callback) {
|
| 498 |
+
nextTick(callback.bind(this, err));
|
| 499 |
+
return;
|
| 500 |
+
} else
|
| 501 |
+
throw err;
|
| 502 |
+
}
|
| 503 |
+
rounds = (1 << rounds) >>> 0;
|
| 504 |
+
|
| 505 |
+
var P, S, i = 0, j;
|
| 506 |
+
|
| 507 |
+
//Use typed arrays when available - huge speedup!
|
| 508 |
+
if (Int32Array) {
|
| 509 |
+
P = new Int32Array(P_ORIG);
|
| 510 |
+
S = new Int32Array(S_ORIG);
|
| 511 |
+
} else {
|
| 512 |
+
P = P_ORIG.slice();
|
| 513 |
+
S = S_ORIG.slice();
|
| 514 |
+
}
|
| 515 |
+
|
| 516 |
+
_ekskey(salt, b, P, S);
|
| 517 |
+
|
| 518 |
+
/**
|
| 519 |
+
* Calcualtes the next round.
|
| 520 |
+
* @returns {Array.<number>|undefined} Resulting array if callback has been omitted, otherwise `undefined`
|
| 521 |
+
* @inner
|
| 522 |
+
*/
|
| 523 |
+
function next() {
|
| 524 |
+
if (progressCallback)
|
| 525 |
+
progressCallback(i / rounds);
|
| 526 |
+
if (i < rounds) {
|
| 527 |
+
var start = Date.now();
|
| 528 |
+
for (; i < rounds;) {
|
| 529 |
+
i = i + 1;
|
| 530 |
+
_key(b, P, S);
|
| 531 |
+
_key(salt, P, S);
|
| 532 |
+
if (Date.now() - start > MAX_EXECUTION_TIME)
|
| 533 |
+
break;
|
| 534 |
+
}
|
| 535 |
+
} else {
|
| 536 |
+
for (i = 0; i < 64; i++)
|
| 537 |
+
for (j = 0; j < (clen >> 1); j++)
|
| 538 |
+
_encipher(cdata, j << 1, P, S);
|
| 539 |
+
var ret = [];
|
| 540 |
+
for (i = 0; i < clen; i++)
|
| 541 |
+
ret.push(((cdata[i] >> 24) & 0xff) >>> 0),
|
| 542 |
+
ret.push(((cdata[i] >> 16) & 0xff) >>> 0),
|
| 543 |
+
ret.push(((cdata[i] >> 8) & 0xff) >>> 0),
|
| 544 |
+
ret.push((cdata[i] & 0xff) >>> 0);
|
| 545 |
+
if (callback) {
|
| 546 |
+
callback(null, ret);
|
| 547 |
+
return;
|
| 548 |
+
} else
|
| 549 |
+
return ret;
|
| 550 |
+
}
|
| 551 |
+
if (callback)
|
| 552 |
+
nextTick(next);
|
| 553 |
+
}
|
| 554 |
+
|
| 555 |
+
// Async
|
| 556 |
+
if (typeof callback !== 'undefined') {
|
| 557 |
+
next();
|
| 558 |
+
|
| 559 |
+
// Sync
|
| 560 |
+
} else {
|
| 561 |
+
var res;
|
| 562 |
+
while (true)
|
| 563 |
+
if (typeof(res = next()) !== 'undefined')
|
| 564 |
+
return res || [];
|
| 565 |
+
}
|
| 566 |
+
}
|
| 567 |
+
|
| 568 |
+
/**
|
| 569 |
+
* Internally hashes a string.
|
| 570 |
+
* @param {string} s String to hash
|
| 571 |
+
* @param {?string} salt Salt to use, actually never null
|
| 572 |
+
* @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash. If omitted,
|
| 573 |
+
* hashing is perormed synchronously.
|
| 574 |
+
* @param {function(number)=} progressCallback Callback called with the current progress
|
| 575 |
+
* @returns {string|undefined} Resulting hash if callback has been omitted, otherwise `undefined`
|
| 576 |
+
* @inner
|
| 577 |
+
*/
|
| 578 |
+
function _hash(s, salt, callback, progressCallback) {
|
| 579 |
+
var err;
|
| 580 |
+
if (typeof s !== 'string' || typeof salt !== 'string') {
|
| 581 |
+
err = Error("Invalid string / salt: Not a string");
|
| 582 |
+
if (callback) {
|
| 583 |
+
nextTick(callback.bind(this, err));
|
| 584 |
+
return;
|
| 585 |
+
}
|
| 586 |
+
else
|
| 587 |
+
throw err;
|
| 588 |
+
}
|
| 589 |
+
|
| 590 |
+
// Validate the salt
|
| 591 |
+
var minor, offset;
|
| 592 |
+
if (salt.charAt(0) !== '$' || salt.charAt(1) !== '2') {
|
| 593 |
+
err = Error("Invalid salt version: "+salt.substring(0,2));
|
| 594 |
+
if (callback) {
|
| 595 |
+
nextTick(callback.bind(this, err));
|
| 596 |
+
return;
|
| 597 |
+
}
|
| 598 |
+
else
|
| 599 |
+
throw err;
|
| 600 |
+
}
|
| 601 |
+
if (salt.charAt(2) === '$')
|
| 602 |
+
minor = String.fromCharCode(0),
|
| 603 |
+
offset = 3;
|
| 604 |
+
else {
|
| 605 |
+
minor = salt.charAt(2);
|
| 606 |
+
if ((minor !== 'a' && minor !== 'b' && minor !== 'y') || salt.charAt(3) !== '$') {
|
| 607 |
+
err = Error("Invalid salt revision: "+salt.substring(2,4));
|
| 608 |
+
if (callback) {
|
| 609 |
+
nextTick(callback.bind(this, err));
|
| 610 |
+
return;
|
| 611 |
+
} else
|
| 612 |
+
throw err;
|
| 613 |
+
}
|
| 614 |
+
offset = 4;
|
| 615 |
+
}
|
| 616 |
+
|
| 617 |
+
// Extract number of rounds
|
| 618 |
+
if (salt.charAt(offset + 2) > '$') {
|
| 619 |
+
err = Error("Missing salt rounds");
|
| 620 |
+
if (callback) {
|
| 621 |
+
nextTick(callback.bind(this, err));
|
| 622 |
+
return;
|
| 623 |
+
} else
|
| 624 |
+
throw err;
|
| 625 |
+
}
|
| 626 |
+
var r1 = parseInt(salt.substring(offset, offset + 1), 10) * 10,
|
| 627 |
+
r2 = parseInt(salt.substring(offset + 1, offset + 2), 10),
|
| 628 |
+
rounds = r1 + r2,
|
| 629 |
+
real_salt = salt.substring(offset + 3, offset + 25);
|
| 630 |
+
s += minor >= 'a' ? "\x00" : "";
|
| 631 |
+
|
| 632 |
+
var passwordb = stringToBytes(s),
|
| 633 |
+
saltb = base64_decode(real_salt, BCRYPT_SALT_LEN);
|
| 634 |
+
|
| 635 |
+
/**
|
| 636 |
+
* Finishes hashing.
|
| 637 |
+
* @param {Array.<number>} bytes Byte array
|
| 638 |
+
* @returns {string}
|
| 639 |
+
* @inner
|
| 640 |
+
*/
|
| 641 |
+
function finish(bytes) {
|
| 642 |
+
var res = [];
|
| 643 |
+
res.push("$2");
|
| 644 |
+
if (minor >= 'a')
|
| 645 |
+
res.push(minor);
|
| 646 |
+
res.push("$");
|
| 647 |
+
if (rounds < 10)
|
| 648 |
+
res.push("0");
|
| 649 |
+
res.push(rounds.toString());
|
| 650 |
+
res.push("$");
|
| 651 |
+
res.push(base64_encode(saltb, saltb.length));
|
| 652 |
+
res.push(base64_encode(bytes, C_ORIG.length * 4 - 1));
|
| 653 |
+
return res.join('');
|
| 654 |
+
}
|
| 655 |
+
|
| 656 |
+
// Sync
|
| 657 |
+
if (typeof callback == 'undefined')
|
| 658 |
+
return finish(_crypt(passwordb, saltb, rounds));
|
| 659 |
+
|
| 660 |
+
// Async
|
| 661 |
+
else {
|
| 662 |
+
_crypt(passwordb, saltb, rounds, function(err, bytes) {
|
| 663 |
+
if (err)
|
| 664 |
+
callback(err, null);
|
| 665 |
+
else
|
| 666 |
+
callback(null, finish(bytes));
|
| 667 |
+
}, progressCallback);
|
| 668 |
+
}
|
| 669 |
+
}
|
node_modules/bcryptjs/src/bcrypt/prng/README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Because of [reasonable security doubts](https://github.com/dcodeIO/bcrypt.js/issues/16), these files, which used to be
|
| 2 |
+
a part of bcrypt-isaac.js, are no longer used but are kept here for reference only.
|
| 3 |
+
|
| 4 |
+
What is required instead is a proper way to collect entropy sources (using an intermediate stream cipher) which is then
|
| 5 |
+
used to seed the CSPRNG. Pick one and use `bcrypt.setRandomFallback` instead.
|
node_modules/bcryptjs/src/bcrypt/prng/accum.js
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* basic entropy accumulator */
|
| 2 |
+
var accum = (function() {
|
| 3 |
+
|
| 4 |
+
var pool, // randomness pool
|
| 5 |
+
time, // start timestamp
|
| 6 |
+
last; // last step timestamp
|
| 7 |
+
|
| 8 |
+
/* initialize with default pool */
|
| 9 |
+
function init() {
|
| 10 |
+
pool = [];
|
| 11 |
+
time = new Date().getTime();
|
| 12 |
+
last = time;
|
| 13 |
+
// use Math.random
|
| 14 |
+
pool.push((Math.random() * 0xffffffff)|0);
|
| 15 |
+
// use current time
|
| 16 |
+
pool.push(time|0);
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
/* perform one step */
|
| 20 |
+
function step() {
|
| 21 |
+
if (!to)
|
| 22 |
+
return;
|
| 23 |
+
if (pool.length >= 255) { // stop at 255 values (1 more is added on fetch)
|
| 24 |
+
stop();
|
| 25 |
+
return;
|
| 26 |
+
}
|
| 27 |
+
var now = new Date().getTime();
|
| 28 |
+
// use actual time difference
|
| 29 |
+
pool.push(now-last);
|
| 30 |
+
// always compute, occasionally use Math.random
|
| 31 |
+
var rnd = (Math.random() * 0xffffffff)|0;
|
| 32 |
+
if (now % 2)
|
| 33 |
+
pool[pool.length-1] += rnd;
|
| 34 |
+
last = now;
|
| 35 |
+
to = setTimeout(step, 100+Math.random()*512); // use hypothetical time difference
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
var to = null;
|
| 39 |
+
|
| 40 |
+
/* starts accumulating */
|
| 41 |
+
function start() {
|
| 42 |
+
if (to) return;
|
| 43 |
+
to = setTimeout(step, 100+Math.random()*512);
|
| 44 |
+
if (console.log)
|
| 45 |
+
console.log("bcrypt-isaac: collecting entropy...");
|
| 46 |
+
// install collectors
|
| 47 |
+
if (typeof window !== 'undefined' && window && window.addEventListener)
|
| 48 |
+
window.addEventListener("load", loadCollector, false),
|
| 49 |
+
window.addEventListener("mousemove", mouseCollector, false),
|
| 50 |
+
window.addEventListener("touchmove", touchCollector, false);
|
| 51 |
+
else if (typeof document !== 'undefined' && document && document.attachEvent)
|
| 52 |
+
document.attachEvent("onload", loadCollector),
|
| 53 |
+
document.attachEvent("onmousemove", mouseCollector);
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
/* stops accumulating */
|
| 57 |
+
function stop() {
|
| 58 |
+
if (!to) return;
|
| 59 |
+
clearTimeout(to); to = null;
|
| 60 |
+
// uninstall collectors
|
| 61 |
+
if (typeof window !== 'undefined' && window && window.removeEventListener)
|
| 62 |
+
window.removeEventListener("load", loadCollector, false),
|
| 63 |
+
window.removeEventListener("mousemove", mouseCollector, false),
|
| 64 |
+
window.removeEventListener("touchmove", touchCollector, false);
|
| 65 |
+
else if (typeof document !== 'undefined' && document && document.detachEvent)
|
| 66 |
+
document.detachEvent("onload", loadCollector),
|
| 67 |
+
document.detachEvent("onmousemove", mouseCollector);
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
/* fetches the randomness pool */
|
| 71 |
+
function fetch() {
|
| 72 |
+
// add overall time difference
|
| 73 |
+
pool.push((new Date().getTime()-time)|0);
|
| 74 |
+
var res = pool;
|
| 75 |
+
init();
|
| 76 |
+
if (console.log)
|
| 77 |
+
console.log("bcrypt-isaac: using "+res.length+"/256 samples of entropy");
|
| 78 |
+
// console.log(res);
|
| 79 |
+
return res;
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
/* adds the current time to the top of the pool */
|
| 83 |
+
function addTime() {
|
| 84 |
+
pool[pool.length-1] += new Date().getTime() - time;
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
/* page load collector */
|
| 88 |
+
function loadCollector() {
|
| 89 |
+
if (!to || pool.length >= 255)
|
| 90 |
+
return;
|
| 91 |
+
pool.push(0);
|
| 92 |
+
addTime();
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
/* mouse events collector */
|
| 96 |
+
function mouseCollector(ev) {
|
| 97 |
+
if (!to || pool.length >= 255)
|
| 98 |
+
return;
|
| 99 |
+
try {
|
| 100 |
+
var x = ev.x || ev.clientX || ev.offsetX || 0,
|
| 101 |
+
y = ev.y || ev.clientY || ev.offsetY || 0;
|
| 102 |
+
if (x != 0 || y != 0)
|
| 103 |
+
pool[pool.length-1] += ((x-mouseCollector.last[0]) ^ (y-mouseCollector.last[1])),
|
| 104 |
+
addTime(),
|
| 105 |
+
mouseCollector.last = [x,y];
|
| 106 |
+
} catch (e) {}
|
| 107 |
+
}
|
| 108 |
+
mouseCollector.last = [0,0];
|
| 109 |
+
|
| 110 |
+
/* touch events collector */
|
| 111 |
+
function touchCollector(ev) {
|
| 112 |
+
if (!to || pool.length >= 255)
|
| 113 |
+
return;
|
| 114 |
+
try {
|
| 115 |
+
var touch = ev.touches[0] || ev.changedTouches[0];
|
| 116 |
+
var x = touch.pageX || touch.clientX || 0,
|
| 117 |
+
y = touch.pageY || touch.clientY || 0;
|
| 118 |
+
if (x != 0 || y != 0)
|
| 119 |
+
pool[pool.length-1] += (x-touchCollector.last[0]) ^ (y-touchCollector.last[1]),
|
| 120 |
+
addTime(),
|
| 121 |
+
touchCollector.last = [x,y];
|
| 122 |
+
} catch (e) {}
|
| 123 |
+
}
|
| 124 |
+
touchCollector.last = [0,0];
|
| 125 |
+
|
| 126 |
+
init();
|
| 127 |
+
return {
|
| 128 |
+
"start": start,
|
| 129 |
+
"stop": stop,
|
| 130 |
+
"fetch": fetch
|
| 131 |
+
}
|
| 132 |
+
|
| 133 |
+
})();
|
node_modules/bcryptjs/src/bcrypt/prng/isaac.js
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*
|
| 2 |
+
isaac.js Copyright (c) 2012 Yves-Marie K. Rinquin
|
| 3 |
+
|
| 4 |
+
Permission is hereby granted, free of charge, to any person obtaining
|
| 5 |
+
a copy of this software and associated documentation files (the
|
| 6 |
+
"Software"), to deal in the Software without restriction, including
|
| 7 |
+
without limitation the rights to use, copy, modify, merge, publish,
|
| 8 |
+
distribute, sublicense, and/or sell copies of the Software, and to
|
| 9 |
+
permit persons to whom the Software is furnished to do so, subject to
|
| 10 |
+
the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be
|
| 13 |
+
included in all copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
| 16 |
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| 17 |
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
| 18 |
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
| 19 |
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
| 20 |
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
| 21 |
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 22 |
+
*/
|
| 23 |
+
|
| 24 |
+
/* isaac module pattern */
|
| 25 |
+
var isaac = (function(){
|
| 26 |
+
|
| 27 |
+
/* internal states */
|
| 28 |
+
var m = Array(256), // internal memory
|
| 29 |
+
acc = 0, // accumulator
|
| 30 |
+
brs = 0, // last result
|
| 31 |
+
cnt = 0, // counter
|
| 32 |
+
r = Array(256), // result array
|
| 33 |
+
gnt = 0, // generation counter
|
| 34 |
+
isd = false; // initially seeded
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
/* 32-bit integer safe adder */
|
| 38 |
+
function add(x, y) {
|
| 39 |
+
var lsb = (x & 0xffff) + (y & 0xffff),
|
| 40 |
+
msb = (x >>> 16) + (y >>> 16) + (lsb >>> 16);
|
| 41 |
+
return (msb << 16) | (lsb & 0xffff);
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
/* initialisation */
|
| 45 |
+
function reset() {
|
| 46 |
+
acc = brs = cnt = 0;
|
| 47 |
+
for (var i = 0; i < 256; ++i)
|
| 48 |
+
m[i] = r[i] = 0;
|
| 49 |
+
gnt = 0;
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
/* seeding function */
|
| 53 |
+
function seed(s) {
|
| 54 |
+
var a, b, c, d, e, f, g, h, i;
|
| 55 |
+
|
| 56 |
+
/* seeding the seeds of love */
|
| 57 |
+
a = b = c = d = e = f = g = h = 0x9e3779b9; /* the golden ratio */
|
| 58 |
+
|
| 59 |
+
if (s && typeof(s) === 'number')
|
| 60 |
+
s = [s];
|
| 61 |
+
|
| 62 |
+
if (s instanceof Array) {
|
| 63 |
+
reset();
|
| 64 |
+
for (i = 0; i < s.length; ++i)
|
| 65 |
+
r[i & 0xff] += typeof(s[i]) === 'number' ? s[i] : 0;
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
/* private: seed mixer */
|
| 69 |
+
function seed_mix() {
|
| 70 |
+
a ^= b << 11; d = add(d, a); b = add(b, c);
|
| 71 |
+
b ^= c >>> 2; e = add(e, b); c = add(c, d);
|
| 72 |
+
c ^= d << 8; f = add(f, c); d = add(d, e);
|
| 73 |
+
d ^= e >>> 16; g = add(g, d); e = add(e, f);
|
| 74 |
+
e ^= f << 10; h = add(h, e); f = add(f, g);
|
| 75 |
+
f ^= g >>> 4; a = add(a, f); g = add(g, h);
|
| 76 |
+
g ^= h << 8; b = add(b, g); h = add(h, a);
|
| 77 |
+
h ^= a >>> 9; c = add(c, h); a = add(a, b);
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
for (i = 0; i < 4; i++) /* scramble it */
|
| 81 |
+
seed_mix();
|
| 82 |
+
|
| 83 |
+
for (i = 0; i < 256; i += 8) {
|
| 84 |
+
if (s) /* use all the information in the seed */
|
| 85 |
+
a = add(a, r[i + 0]), b = add(b, r[i + 1]),
|
| 86 |
+
c = add(c, r[i + 2]), d = add(d, r[i + 3]),
|
| 87 |
+
e = add(e, r[i + 4]), f = add(f, r[i + 5]),
|
| 88 |
+
g = add(g, r[i + 6]), h = add(h, r[i + 7]);
|
| 89 |
+
seed_mix();
|
| 90 |
+
/* fill in m[] with messy stuff */
|
| 91 |
+
m[i + 0] = a; m[i + 1] = b; m[i + 2] = c; m[i + 3] = d;
|
| 92 |
+
m[i + 4] = e; m[i + 5] = f; m[i + 6] = g; m[i + 7] = h;
|
| 93 |
+
}
|
| 94 |
+
if (s)
|
| 95 |
+
/* do a second pass to make all of the seed affect all of m[] */
|
| 96 |
+
for (i = 0; i < 256; i += 8)
|
| 97 |
+
a = add(a, m[i + 0]), b = add(b, m[i + 1]),
|
| 98 |
+
c = add(c, m[i + 2]), d = add(d, m[i + 3]),
|
| 99 |
+
e = add(e, m[i + 4]), f = add(f, m[i + 5]),
|
| 100 |
+
g = add(g, m[i + 6]), h = add(h, m[i + 7]),
|
| 101 |
+
seed_mix(),
|
| 102 |
+
/* fill in m[] with messy stuff (again) */
|
| 103 |
+
m[i + 0] = a, m[i + 1] = b, m[i + 2] = c, m[i + 3] = d,
|
| 104 |
+
m[i + 4] = e, m[i + 5] = f, m[i + 6] = g, m[i + 7] = h;
|
| 105 |
+
prng(); /* fill in the first set of results */
|
| 106 |
+
gnt = 256; /* prepare to use the first set of results */;
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
/* isaac generator, n = number of run */
|
| 110 |
+
function prng(n) {
|
| 111 |
+
var i, x, y;
|
| 112 |
+
n = n && typeof(n) === 'number' ? Math.abs(Math.floor(n)) : 1;
|
| 113 |
+
while (n--) {
|
| 114 |
+
cnt = add(cnt, 1);
|
| 115 |
+
brs = add(brs, cnt);
|
| 116 |
+
for(i = 0; i < 256; i++) {
|
| 117 |
+
switch(i & 3) {
|
| 118 |
+
case 0: acc ^= acc << 13; break;
|
| 119 |
+
case 1: acc ^= acc >>> 6; break;
|
| 120 |
+
case 2: acc ^= acc << 2; break;
|
| 121 |
+
case 3: acc ^= acc >>> 16; break;
|
| 122 |
+
}
|
| 123 |
+
acc = add(m[(i + 128) & 0xff], acc); x = m[i];
|
| 124 |
+
m[i] = y = add(m[(x >>> 2) & 0xff], add(acc, brs));
|
| 125 |
+
r[i] = brs = add(m[(y >>> 10) & 0xff], x);
|
| 126 |
+
}
|
| 127 |
+
}
|
| 128 |
+
}
|
| 129 |
+
|
| 130 |
+
/* return a random number between */
|
| 131 |
+
return function() {
|
| 132 |
+
if (!isd) // seed from accumulator
|
| 133 |
+
isd = true,
|
| 134 |
+
accum.stop(),
|
| 135 |
+
seed(accum.fetch());
|
| 136 |
+
if (!gnt--)
|
| 137 |
+
prng(), gnt = 255;
|
| 138 |
+
return r[gnt];
|
| 139 |
+
};
|
| 140 |
+
})();
|
node_modules/bcryptjs/src/bcrypt/util.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/**
|
| 2 |
+
* Continues with the callback on the next tick.
|
| 3 |
+
* @function
|
| 4 |
+
* @param {function(...[*])} callback Callback to execute
|
| 5 |
+
* @inner
|
| 6 |
+
*/
|
| 7 |
+
var nextTick = typeof process !== 'undefined' && process && typeof process.nextTick === 'function'
|
| 8 |
+
? (typeof setImmediate === 'function' ? setImmediate : process.nextTick)
|
| 9 |
+
: setTimeout;
|
| 10 |
+
|
| 11 |
+
/**
|
| 12 |
+
* Converts a JavaScript string to UTF8 bytes.
|
| 13 |
+
* @param {string} str String
|
| 14 |
+
* @returns {!Array.<number>} UTF8 bytes
|
| 15 |
+
* @inner
|
| 16 |
+
*/
|
| 17 |
+
function stringToBytes(str) {
|
| 18 |
+
var out = [],
|
| 19 |
+
i = 0;
|
| 20 |
+
utfx.encodeUTF16toUTF8(function() {
|
| 21 |
+
if (i >= str.length) return null;
|
| 22 |
+
return str.charCodeAt(i++);
|
| 23 |
+
}, function(b) {
|
| 24 |
+
out.push(b);
|
| 25 |
+
});
|
| 26 |
+
return out;
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
//? include("util/base64.js");
|
| 30 |
+
|
| 31 |
+
//? include("../../node_modules/utfx/dist/utfx-embeddable.js");
|
| 32 |
+
|
| 33 |
+
Date.now = Date.now || function() { return +new Date; };
|
node_modules/bcryptjs/src/bcrypt/util/base64.js
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// A base64 implementation for the bcrypt algorithm. This is partly non-standard.
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* bcrypt's own non-standard base64 dictionary.
|
| 5 |
+
* @type {!Array.<string>}
|
| 6 |
+
* @const
|
| 7 |
+
* @inner
|
| 8 |
+
**/
|
| 9 |
+
var BASE64_CODE = "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split('');
|
| 10 |
+
|
| 11 |
+
/**
|
| 12 |
+
* @type {!Array.<number>}
|
| 13 |
+
* @const
|
| 14 |
+
* @inner
|
| 15 |
+
**/
|
| 16 |
+
var BASE64_INDEX = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
| 17 |
+
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
| 18 |
+
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
|
| 19 |
+
1, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1,
|
| 20 |
+
-1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
|
| 21 |
+
20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, -1, 28, 29, 30,
|
| 22 |
+
31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
|
| 23 |
+
48, 49, 50, 51, 52, 53, -1, -1, -1, -1, -1];
|
| 24 |
+
|
| 25 |
+
/**
|
| 26 |
+
* @type {!function(...number):string}
|
| 27 |
+
* @inner
|
| 28 |
+
*/
|
| 29 |
+
var stringFromCharCode = String.fromCharCode;
|
| 30 |
+
|
| 31 |
+
/**
|
| 32 |
+
* Encodes a byte array to base64 with up to len bytes of input.
|
| 33 |
+
* @param {!Array.<number>} b Byte array
|
| 34 |
+
* @param {number} len Maximum input length
|
| 35 |
+
* @returns {string}
|
| 36 |
+
* @inner
|
| 37 |
+
*/
|
| 38 |
+
function base64_encode(b, len) {
|
| 39 |
+
var off = 0,
|
| 40 |
+
rs = [],
|
| 41 |
+
c1, c2;
|
| 42 |
+
if (len <= 0 || len > b.length)
|
| 43 |
+
throw Error("Illegal len: "+len);
|
| 44 |
+
while (off < len) {
|
| 45 |
+
c1 = b[off++] & 0xff;
|
| 46 |
+
rs.push(BASE64_CODE[(c1 >> 2) & 0x3f]);
|
| 47 |
+
c1 = (c1 & 0x03) << 4;
|
| 48 |
+
if (off >= len) {
|
| 49 |
+
rs.push(BASE64_CODE[c1 & 0x3f]);
|
| 50 |
+
break;
|
| 51 |
+
}
|
| 52 |
+
c2 = b[off++] & 0xff;
|
| 53 |
+
c1 |= (c2 >> 4) & 0x0f;
|
| 54 |
+
rs.push(BASE64_CODE[c1 & 0x3f]);
|
| 55 |
+
c1 = (c2 & 0x0f) << 2;
|
| 56 |
+
if (off >= len) {
|
| 57 |
+
rs.push(BASE64_CODE[c1 & 0x3f]);
|
| 58 |
+
break;
|
| 59 |
+
}
|
| 60 |
+
c2 = b[off++] & 0xff;
|
| 61 |
+
c1 |= (c2 >> 6) & 0x03;
|
| 62 |
+
rs.push(BASE64_CODE[c1 & 0x3f]);
|
| 63 |
+
rs.push(BASE64_CODE[c2 & 0x3f]);
|
| 64 |
+
}
|
| 65 |
+
return rs.join('');
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
/**
|
| 69 |
+
* Decodes a base64 encoded string to up to len bytes of output.
|
| 70 |
+
* @param {string} s String to decode
|
| 71 |
+
* @param {number} len Maximum output length
|
| 72 |
+
* @returns {!Array.<number>}
|
| 73 |
+
* @inner
|
| 74 |
+
*/
|
| 75 |
+
function base64_decode(s, len) {
|
| 76 |
+
var off = 0,
|
| 77 |
+
slen = s.length,
|
| 78 |
+
olen = 0,
|
| 79 |
+
rs = [],
|
| 80 |
+
c1, c2, c3, c4, o, code;
|
| 81 |
+
if (len <= 0)
|
| 82 |
+
throw Error("Illegal len: "+len);
|
| 83 |
+
while (off < slen - 1 && olen < len) {
|
| 84 |
+
code = s.charCodeAt(off++);
|
| 85 |
+
c1 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
|
| 86 |
+
code = s.charCodeAt(off++);
|
| 87 |
+
c2 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
|
| 88 |
+
if (c1 == -1 || c2 == -1)
|
| 89 |
+
break;
|
| 90 |
+
o = (c1 << 2) >>> 0;
|
| 91 |
+
o |= (c2 & 0x30) >> 4;
|
| 92 |
+
rs.push(stringFromCharCode(o));
|
| 93 |
+
if (++olen >= len || off >= slen)
|
| 94 |
+
break;
|
| 95 |
+
code = s.charCodeAt(off++);
|
| 96 |
+
c3 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
|
| 97 |
+
if (c3 == -1)
|
| 98 |
+
break;
|
| 99 |
+
o = ((c2 & 0x0f) << 4) >>> 0;
|
| 100 |
+
o |= (c3 & 0x3c) >> 2;
|
| 101 |
+
rs.push(stringFromCharCode(o));
|
| 102 |
+
if (++olen >= len || off >= slen)
|
| 103 |
+
break;
|
| 104 |
+
code = s.charCodeAt(off++);
|
| 105 |
+
c4 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;
|
| 106 |
+
o = ((c3 & 0x03) << 6) >>> 0;
|
| 107 |
+
o |= c4;
|
| 108 |
+
rs.push(stringFromCharCode(o));
|
| 109 |
+
++olen;
|
| 110 |
+
}
|
| 111 |
+
var res = [];
|
| 112 |
+
for (off = 0; off<olen; off++)
|
| 113 |
+
res.push(rs[off].charCodeAt(0));
|
| 114 |
+
return res;
|
| 115 |
+
}
|
node_modules/bcryptjs/src/bower.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "bcryptjs",
|
| 3 |
+
"description": "Optimized bcrypt in plain JavaScript with zero dependencies.",
|
| 4 |
+
"version": /*?== VERSION */,
|
| 5 |
+
"main": "dist/bcrypt.min.js",
|
| 6 |
+
"license": "New-BSD",
|
| 7 |
+
"homepage": "http://dcode.io/",
|
| 8 |
+
"repository": {
|
| 9 |
+
"type": "git",
|
| 10 |
+
"url": "git://github.com/dcodeIO/bcrypt.js.git"
|
| 11 |
+
},
|
| 12 |
+
"keywords": ["bcrypt", "password", "auth", "authentication", "encryption", "crypt", "crypto"],
|
| 13 |
+
"dependencies": {},
|
| 14 |
+
"devDependencies": {},
|
| 15 |
+
"ignore": [
|
| 16 |
+
"**/.*",
|
| 17 |
+
"node_modules",
|
| 18 |
+
"bower_components",
|
| 19 |
+
"test",
|
| 20 |
+
"tests"
|
| 21 |
+
]
|
| 22 |
+
}
|
node_modules/bcryptjs/src/wrap.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
//? if (typeof ISAAC === 'undefined') ISAAC = false;
|
| 2 |
+
/*
|
| 3 |
+
Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>
|
| 4 |
+
Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>
|
| 5 |
+
Copyright (c) 2014 Daniel Wirtz <dcode@dcode.io>
|
| 6 |
+
|
| 7 |
+
Redistribution and use in source and binary forms, with or without
|
| 8 |
+
modification, are permitted provided that the following conditions
|
| 9 |
+
are met:
|
| 10 |
+
1. Redistributions of source code must retain the above copyright
|
| 11 |
+
notice, this list of conditions and the following disclaimer.
|
| 12 |
+
2. Redistributions in binary form must reproduce the above copyright
|
| 13 |
+
notice, this list of conditions and the following disclaimer in the
|
| 14 |
+
documentation and/or other materials provided with the distribution.
|
| 15 |
+
3. The name of the author may not be used to endorse or promote products
|
| 16 |
+
derived from this software without specific prior written permission.
|
| 17 |
+
|
| 18 |
+
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
| 19 |
+
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
| 20 |
+
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
| 21 |
+
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
| 22 |
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
| 23 |
+
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| 24 |
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| 25 |
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| 26 |
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
| 27 |
+
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| 28 |
+
*/
|
| 29 |
+
|
| 30 |
+
/**
|
| 31 |
+
* @license bcrypt.js (c) 2013 Daniel Wirtz <dcode@dcode.io>
|
| 32 |
+
* Released under the Apache License, Version 2.0
|
| 33 |
+
* see: https://github.com/dcodeIO/bcrypt.js for details
|
| 34 |
+
*/
|
| 35 |
+
(function(global, factory) {
|
| 36 |
+
|
| 37 |
+
/* AMD */ if (typeof define === 'function' && define["amd"])
|
| 38 |
+
define([], factory);
|
| 39 |
+
/* CommonJS */ else if (typeof require === 'function' && typeof module === "object" && module && module["exports"])
|
| 40 |
+
module["exports"] = factory();
|
| 41 |
+
/* Global */ else
|
| 42 |
+
(global["dcodeIO"] = global["dcodeIO"] || {})["bcrypt"] = factory();
|
| 43 |
+
|
| 44 |
+
}(this, function() {
|
| 45 |
+
"use strict";
|
| 46 |
+
|
| 47 |
+
//? include("bcrypt.js");
|
| 48 |
+
|
| 49 |
+
return bcrypt;
|
| 50 |
+
}));
|
node_modules/bcryptjs/tests/quickbrown.txt
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Sentences that contain all letters commonly used in a language
|
| 2 |
+
--------------------------------------------------------------
|
| 3 |
+
|
| 4 |
+
Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> -- 2012-04-11
|
| 5 |
+
|
| 6 |
+
This is an example of a plain-text file encoded in UTF-8.
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
Danish (da)
|
| 10 |
+
---------
|
| 11 |
+
|
| 12 |
+
Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen
|
| 13 |
+
Wolther spillede på xylofon.
|
| 14 |
+
(= Quiz contestants were eating strawbery with cream while Wolther
|
| 15 |
+
the circus clown played on xylophone.)
|
| 16 |
+
|
| 17 |
+
German (de)
|
| 18 |
+
-----------
|
| 19 |
+
|
| 20 |
+
Falsches Üben von Xylophonmusik quält jeden größeren Zwerg
|
| 21 |
+
(= Wrongful practicing of xylophone music tortures every larger dwarf)
|
| 22 |
+
|
| 23 |
+
Zwölf Boxkämpfer jagten Eva quer über den Sylter Deich
|
| 24 |
+
(= Twelve boxing fighters hunted Eva across the dike of Sylt)
|
| 25 |
+
|
| 26 |
+
Heizölrückstoßabdämpfung
|
| 27 |
+
(= fuel oil recoil absorber)
|
| 28 |
+
(jqvwxy missing, but all non-ASCII letters in one word)
|
| 29 |
+
|
| 30 |
+
Greek (el)
|
| 31 |
+
----------
|
| 32 |
+
|
| 33 |
+
Γαζέες καὶ μυρτιὲς δὲν θὰ βρῶ πιὰ στὸ χρυσαφὶ ξέφωτο
|
| 34 |
+
(= No more shall I see acacias or myrtles in the golden clearing)
|
| 35 |
+
|
| 36 |
+
Ξεσκεπάζω τὴν ψυχοφθόρα βδελυγμία
|
| 37 |
+
(= I uncover the soul-destroying abhorrence)
|
| 38 |
+
|
| 39 |
+
English (en)
|
| 40 |
+
------------
|
| 41 |
+
|
| 42 |
+
The quick brown fox jumps over the lazy dog
|
| 43 |
+
|
| 44 |
+
Spanish (es)
|
| 45 |
+
------------
|
| 46 |
+
|
| 47 |
+
El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y
|
| 48 |
+
frío, añoraba a su querido cachorro.
|
| 49 |
+
(Contains every letter and every accent, but not every combination
|
| 50 |
+
of vowel + acute.)
|
| 51 |
+
|
| 52 |
+
French (fr)
|
| 53 |
+
-----------
|
| 54 |
+
|
| 55 |
+
Portez ce vieux whisky au juge blond qui fume sur son île intérieure, à
|
| 56 |
+
côté de l'alcôve ovoïde, où les bûches se consument dans l'âtre, ce
|
| 57 |
+
qui lui permet de penser à la cænogenèse de l'être dont il est question
|
| 58 |
+
dans la cause ambiguë entendue à Moÿ, dans un capharnaüm qui,
|
| 59 |
+
pense-t-il, diminue çà et là la qualité de son œuvre.
|
| 60 |
+
|
| 61 |
+
l'île exiguë
|
| 62 |
+
Où l'obèse jury mûr
|
| 63 |
+
Fête l'haï volapük,
|
| 64 |
+
Âne ex aéquo au whist,
|
| 65 |
+
Ôtez ce vœu déçu.
|
| 66 |
+
|
| 67 |
+
Le cœur déçu mais l'âme plutôt naïve, Louÿs rêva de crapaüter en
|
| 68 |
+
canoë au delà des îles, près du mälström où brûlent les novæ.
|
| 69 |
+
|
| 70 |
+
Irish Gaelic (ga)
|
| 71 |
+
-----------------
|
| 72 |
+
|
| 73 |
+
D'fhuascail Íosa, Úrmhac na hÓighe Beannaithe, pór Éava agus Ádhaimh
|
| 74 |
+
|
| 75 |
+
Hungarian (hu)
|
| 76 |
+
--------------
|
| 77 |
+
|
| 78 |
+
Árvíztűrő tükörfúrógép
|
| 79 |
+
(= flood-proof mirror-drilling machine, only all non-ASCII letters)
|
| 80 |
+
|
| 81 |
+
Icelandic (is)
|
| 82 |
+
--------------
|
| 83 |
+
|
| 84 |
+
Kæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa
|
| 85 |
+
|
| 86 |
+
Sævör grét áðan því úlpan var ónýt
|
| 87 |
+
(some ASCII letters missing)
|
| 88 |
+
|
| 89 |
+
Japanese (jp)
|
| 90 |
+
-------------
|
| 91 |
+
|
| 92 |
+
Hiragana: (Iroha)
|
| 93 |
+
|
| 94 |
+
いろはにほへとちりぬるを
|
| 95 |
+
わかよたれそつねならむ
|
| 96 |
+
うゐのおくやまけふこえて
|
| 97 |
+
あさきゆめみしゑひもせす
|
| 98 |
+
|
| 99 |
+
Katakana:
|
| 100 |
+
|
| 101 |
+
イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム
|
| 102 |
+
ウヰノオクヤマ ケフコエテ アサキユメミシ ヱヒモセスン
|
| 103 |
+
|
| 104 |
+
Hebrew (iw)
|
| 105 |
+
-----------
|
| 106 |
+
|
| 107 |
+
? דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה
|
| 108 |
+
|
| 109 |
+
Polish (pl)
|
| 110 |
+
-----------
|
| 111 |
+
|
| 112 |
+
Pchnąć w tę łódź jeża lub ośm skrzyń fig
|
| 113 |
+
(= To push a hedgehog or eight bins of figs in this boat)
|
| 114 |
+
|
| 115 |
+
Russian (ru)
|
| 116 |
+
------------
|
| 117 |
+
|
| 118 |
+
В чащах юга жил бы цитрус? Да, но фальшивый экземпляр!
|
| 119 |
+
(= Would a citrus live in the bushes of south? Yes, but only a fake one!)
|
| 120 |
+
|
| 121 |
+
Съешь же ещё этих мягких французских булок да выпей чаю
|
| 122 |
+
(= Eat some more of these fresh French loafs and have some tea)
|
| 123 |
+
|
| 124 |
+
Thai (th)
|
| 125 |
+
---------
|
| 126 |
+
|
| 127 |
+
[--------------------------|------------------------]
|
| 128 |
+
๏ เป็นมนุษย์สุดประเสริฐเลิศคุณค่า กว่าบรรดาฝูงสัตว์เดรัจฉาน
|
| 129 |
+
จงฝ่าฟันพัฒนาวิชาการ อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร
|
| 130 |
+
ไม่ถือโทษโกรธแช่งซัดฮึดฮัดด่า หัดอภัยเหมือนกีฬาอัชฌาสัย
|
| 131 |
+
ปฏิบัติประพฤติกฎกำหนดใจ พูดจาให้จ๊ะๆ จ๋าๆ น่าฟังเอย ฯ
|
| 132 |
+
|
| 133 |
+
[The copyright for the Thai example is owned by The Computer
|
| 134 |
+
Association of Thailand under the Royal Patronage of His Majesty the
|
| 135 |
+
King.]
|
| 136 |
+
|
| 137 |
+
Turkish (tr)
|
| 138 |
+
------------
|
| 139 |
+
|
| 140 |
+
Pijamalı hasta, yağız şoföre çabucak güvendi.
|
| 141 |
+
(=Patient with pajamas, trusted swarthy driver quickly)
|
| 142 |
+
|
| 143 |
+
|
| 144 |
+
Special thanks to the people from all over the world who contributed
|
| 145 |
+
these sentences since 1999.
|
| 146 |
+
|
| 147 |
+
A much larger collection of such pangrams is now available at
|
| 148 |
+
|
| 149 |
+
http://en.wikipedia.org/wiki/List_of_pangrams
|
| 150 |
+
|
node_modules/bcryptjs/tests/suite.js
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
var path = require("path"),
|
| 2 |
+
fs = require("fs"),
|
| 3 |
+
binding = require("bcrypt"),
|
| 4 |
+
bcrypt = require(path.join(__dirname, '..', 'index.js'))/*,
|
| 5 |
+
isaac = eval(
|
| 6 |
+
fs.readFileSync(path.join(__dirname, "..", "src", "bcrypt", "prng", "accum.js"))+
|
| 7 |
+
fs.readFileSync(path.join(__dirname, "..", "src", "bcrypt", "prng", "isaac.js"))+
|
| 8 |
+
" accum.start();"+
|
| 9 |
+
" isaac"
|
| 10 |
+
)*/;
|
| 11 |
+
|
| 12 |
+
module.exports = {
|
| 13 |
+
|
| 14 |
+
"encodeBase64": function(test) {
|
| 15 |
+
var str = bcrypt.encodeBase64([0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10], 16);
|
| 16 |
+
test.strictEqual(str, "..CA.uOD/eaGAOmJB.yMBu");
|
| 17 |
+
test.done();
|
| 18 |
+
},
|
| 19 |
+
|
| 20 |
+
"decodeBase64": function(test) {
|
| 21 |
+
var bytes = bcrypt.decodeBase64("..CA.uOD/eaGAOmJB.yMBv.", 16);
|
| 22 |
+
test.deepEqual(bytes, [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F]);
|
| 23 |
+
test.done();
|
| 24 |
+
},
|
| 25 |
+
|
| 26 |
+
"genSaltSync": function(test) {
|
| 27 |
+
var salt = bcrypt.genSaltSync(10);
|
| 28 |
+
test.ok(salt);
|
| 29 |
+
test.ok(typeof salt == 'string');
|
| 30 |
+
test.ok(salt.length > 0);
|
| 31 |
+
test.done();
|
| 32 |
+
},
|
| 33 |
+
|
| 34 |
+
"genSalt": function(test) {
|
| 35 |
+
bcrypt.genSalt(10, function(err, salt) {
|
| 36 |
+
test.ok(salt);
|
| 37 |
+
test.ok(typeof salt == 'string');
|
| 38 |
+
test.ok(salt.length > 0);
|
| 39 |
+
test.done();
|
| 40 |
+
});
|
| 41 |
+
},
|
| 42 |
+
|
| 43 |
+
"hashSync": function(test) {
|
| 44 |
+
test.doesNotThrow(function() {
|
| 45 |
+
bcrypt.hashSync("hello", 10);
|
| 46 |
+
});
|
| 47 |
+
test.notEqual(bcrypt.hashSync("hello", 10), bcrypt.hashSync("hello", 10));
|
| 48 |
+
test.done();
|
| 49 |
+
},
|
| 50 |
+
|
| 51 |
+
"hash": function(test) {
|
| 52 |
+
bcrypt.hash("hello", 10, function(err, hash) {
|
| 53 |
+
test.notOk(err);
|
| 54 |
+
test.ok(hash);
|
| 55 |
+
test.done();
|
| 56 |
+
});
|
| 57 |
+
},
|
| 58 |
+
|
| 59 |
+
"compareSync": function(test) {
|
| 60 |
+
var salt1 = bcrypt.genSaltSync(),
|
| 61 |
+
hash1 = bcrypt.hashSync("hello", salt1); // $2a$
|
| 62 |
+
var salt2 = bcrypt.genSaltSync().replace(/\$2a\$/, "$2y$"),
|
| 63 |
+
hash2 = bcrypt.hashSync("world", salt2);
|
| 64 |
+
var salt3 = bcrypt.genSaltSync().replace(/\$2a\$/, "$2b$"),
|
| 65 |
+
hash3 = bcrypt.hashSync("hello world", salt3);
|
| 66 |
+
|
| 67 |
+
test.strictEqual(hash1.substring(0,4), "$2a$");
|
| 68 |
+
test.ok(bcrypt.compareSync("hello", hash1));
|
| 69 |
+
test.notOk(bcrypt.compareSync("hello", hash2));
|
| 70 |
+
test.notOk(bcrypt.compareSync("hello", hash3));
|
| 71 |
+
|
| 72 |
+
test.strictEqual(hash2.substring(0,4), "$2y$");
|
| 73 |
+
test.ok(bcrypt.compareSync("world", hash2));
|
| 74 |
+
test.notOk(bcrypt.compareSync("world", hash1));
|
| 75 |
+
test.notOk(bcrypt.compareSync("world", hash3));
|
| 76 |
+
|
| 77 |
+
test.strictEqual(hash3.substring(0,4), "$2b$");
|
| 78 |
+
test.ok(bcrypt.compareSync("hello world", hash3));
|
| 79 |
+
test.notOk(bcrypt.compareSync("hello world", hash1));
|
| 80 |
+
test.notOk(bcrypt.compareSync("hello world", hash2));
|
| 81 |
+
|
| 82 |
+
test.done();
|
| 83 |
+
},
|
| 84 |
+
|
| 85 |
+
"compare": function(test) {
|
| 86 |
+
var salt1 = bcrypt.genSaltSync(),
|
| 87 |
+
hash1 = bcrypt.hashSync("hello", salt1); // $2a$
|
| 88 |
+
var salt2 = bcrypt.genSaltSync();
|
| 89 |
+
salt2 = salt2.substring(0,2)+'y'+salt2.substring(3); // $2y$
|
| 90 |
+
var hash2 = bcrypt.hashSync("world", salt2);
|
| 91 |
+
bcrypt.compare("hello", hash1, function(err, same) {
|
| 92 |
+
test.notOk(err);
|
| 93 |
+
test.ok(same);
|
| 94 |
+
bcrypt.compare("hello", hash2, function(err, same) {
|
| 95 |
+
test.notOk(err);
|
| 96 |
+
test.notOk(same);
|
| 97 |
+
bcrypt.compare("world", hash2, function(err, same) {
|
| 98 |
+
test.notOk(err);
|
| 99 |
+
test.ok(same);
|
| 100 |
+
bcrypt.compare("world", hash1, function(err, same) {
|
| 101 |
+
test.notOk(err);
|
| 102 |
+
test.notOk(same);
|
| 103 |
+
test.done();
|
| 104 |
+
});
|
| 105 |
+
});
|
| 106 |
+
});
|
| 107 |
+
});
|
| 108 |
+
},
|
| 109 |
+
|
| 110 |
+
"getSalt": function(test) {
|
| 111 |
+
var hash1 = bcrypt.hashSync("hello", bcrypt.genSaltSync());
|
| 112 |
+
var salt = bcrypt.getSalt(hash1);
|
| 113 |
+
var hash2 = bcrypt.hashSync("hello", salt);
|
| 114 |
+
test.equal(hash1, hash2);
|
| 115 |
+
test.done();
|
| 116 |
+
},
|
| 117 |
+
|
| 118 |
+
"getRounds": function(test) {
|
| 119 |
+
var hash1 = bcrypt.hashSync("hello", bcrypt.genSaltSync());
|
| 120 |
+
test.equal(bcrypt.getRounds(hash1), 10);
|
| 121 |
+
test.done();
|
| 122 |
+
},
|
| 123 |
+
|
| 124 |
+
"progress": function(test) {
|
| 125 |
+
bcrypt.genSalt(12, function(err, salt) {
|
| 126 |
+
test.ok(!err);
|
| 127 |
+
var progress = [];
|
| 128 |
+
bcrypt.hash("hello world", salt, function(err, hash) {
|
| 129 |
+
test.ok(!err);
|
| 130 |
+
test.ok(typeof hash === 'string');
|
| 131 |
+
test.ok(progress.length >= 2);
|
| 132 |
+
test.strictEqual(progress[0], 0);
|
| 133 |
+
test.strictEqual(progress[progress.length-1], 1);
|
| 134 |
+
test.done();
|
| 135 |
+
}, function(n) {
|
| 136 |
+
progress.push(n);
|
| 137 |
+
});
|
| 138 |
+
});
|
| 139 |
+
},
|
| 140 |
+
|
| 141 |
+
"promise": function(test) {
|
| 142 |
+
bcrypt.genSalt(10)
|
| 143 |
+
.then(function(salt) {
|
| 144 |
+
bcrypt.hash("hello", salt)
|
| 145 |
+
.then(function(hash) {
|
| 146 |
+
test.ok(hash);
|
| 147 |
+
bcrypt.compare("hello", hash)
|
| 148 |
+
.then(function(result) {
|
| 149 |
+
test.ok(result);
|
| 150 |
+
bcrypt.genSalt(/* no args */)
|
| 151 |
+
.then(function(salt) {
|
| 152 |
+
test.ok(salt);
|
| 153 |
+
test.done();
|
| 154 |
+
}, function(err) {
|
| 155 |
+
test.fail(err, null, "promise rejected");
|
| 156 |
+
});
|
| 157 |
+
}, function(err) {
|
| 158 |
+
test.fail(err, null, "promise rejected");
|
| 159 |
+
});
|
| 160 |
+
}, function(err) {
|
| 161 |
+
test.fail(err, null, 'promise rejected');
|
| 162 |
+
});
|
| 163 |
+
}, function(err) {
|
| 164 |
+
test.fail(err, null, "promise rejected");
|
| 165 |
+
});
|
| 166 |
+
},
|
| 167 |
+
|
| 168 |
+
"compat": {
|
| 169 |
+
"quickbrown": function(test) {
|
| 170 |
+
var pass = fs.readFileSync(path.join(__dirname, "quickbrown.txt"))+"",
|
| 171 |
+
salt = bcrypt.genSaltSync(),
|
| 172 |
+
hash1 = binding.hashSync(pass, salt),
|
| 173 |
+
hash2 = bcrypt.hashSync(pass, salt);
|
| 174 |
+
test.equal(hash1, hash2);
|
| 175 |
+
test.done();
|
| 176 |
+
},
|
| 177 |
+
|
| 178 |
+
"roundsOOB": function(test) {
|
| 179 |
+
var salt1 = bcrypt.genSaltSync(0), // $10$ like not set
|
| 180 |
+
salt2 = binding.genSaltSync(0);
|
| 181 |
+
test.strictEqual(salt1.substring(0, 7), "$2a$10$");
|
| 182 |
+
test.strictEqual(salt2.substring(0, 7), "$2a$10$");
|
| 183 |
+
|
| 184 |
+
salt1 = bcrypt.genSaltSync(3); // $04$ is lower cap
|
| 185 |
+
salt2 = bcrypt.genSaltSync(3);
|
| 186 |
+
test.strictEqual(salt1.substring(0, 7), "$2a$04$");
|
| 187 |
+
test.strictEqual(salt2.substring(0, 7), "$2a$04$");
|
| 188 |
+
|
| 189 |
+
salt1 = bcrypt.genSaltSync(32); // $31$ is upper cap
|
| 190 |
+
salt2 = bcrypt.genSaltSync(32);
|
| 191 |
+
test.strictEqual(salt1.substring(0, 7), "$2a$31$");
|
| 192 |
+
test.strictEqual(salt2.substring(0, 7), "$2a$31$");
|
| 193 |
+
|
| 194 |
+
test.done();
|
| 195 |
+
}
|
| 196 |
+
}
|
| 197 |
+
};
|
node_modules/body-parser/HISTORY.md
ADDED
|
@@ -0,0 +1,686 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
1.20.5 / 2026-04-24
|
| 2 |
+
===================
|
| 3 |
+
* refactor(json): simplify strict mode error string construction
|
| 4 |
+
* fix: extended urlencoded parsing of arrays with >100 elements (#716)
|
| 5 |
+
* deps: qs@~6.15.1
|
| 6 |
+
|
| 7 |
+
1.20.4 / 2025-12-01
|
| 8 |
+
===================
|
| 9 |
+
|
| 10 |
+
* deps: qs@~6.14.0
|
| 11 |
+
* deps: use tilde notation for dependencies
|
| 12 |
+
* deps: http-errors@~2.0.1
|
| 13 |
+
* deps: raw-body@~2.5.3
|
| 14 |
+
|
| 15 |
+
1.20.3 / 2024-09-10
|
| 16 |
+
===================
|
| 17 |
+
|
| 18 |
+
* deps: qs@6.13.0
|
| 19 |
+
* add `depth` option to customize the depth level in the parser
|
| 20 |
+
* IMPORTANT: The default `depth` level for parsing URL-encoded data is now `32` (previously was `Infinity`)
|
| 21 |
+
|
| 22 |
+
1.20.2 / 2023-02-21
|
| 23 |
+
===================
|
| 24 |
+
|
| 25 |
+
* Fix strict json error message on Node.js 19+
|
| 26 |
+
* deps: content-type@~1.0.5
|
| 27 |
+
- perf: skip value escaping when unnecessary
|
| 28 |
+
* deps: raw-body@2.5.2
|
| 29 |
+
|
| 30 |
+
1.20.1 / 2022-10-06
|
| 31 |
+
===================
|
| 32 |
+
|
| 33 |
+
* deps: qs@6.11.0
|
| 34 |
+
* perf: remove unnecessary object clone
|
| 35 |
+
|
| 36 |
+
1.20.0 / 2022-04-02
|
| 37 |
+
===================
|
| 38 |
+
|
| 39 |
+
* Fix error message for json parse whitespace in `strict`
|
| 40 |
+
* Fix internal error when inflated body exceeds limit
|
| 41 |
+
* Prevent loss of async hooks context
|
| 42 |
+
* Prevent hanging when request already read
|
| 43 |
+
* deps: depd@2.0.0
|
| 44 |
+
- Replace internal `eval` usage with `Function` constructor
|
| 45 |
+
- Use instance methods on `process` to check for listeners
|
| 46 |
+
* deps: http-errors@2.0.0
|
| 47 |
+
- deps: depd@2.0.0
|
| 48 |
+
- deps: statuses@2.0.1
|
| 49 |
+
* deps: on-finished@2.4.1
|
| 50 |
+
* deps: qs@6.10.3
|
| 51 |
+
* deps: raw-body@2.5.1
|
| 52 |
+
- deps: http-errors@2.0.0
|
| 53 |
+
|
| 54 |
+
1.19.2 / 2022-02-15
|
| 55 |
+
===================
|
| 56 |
+
|
| 57 |
+
* deps: bytes@3.1.2
|
| 58 |
+
* deps: qs@6.9.7
|
| 59 |
+
* Fix handling of `__proto__` keys
|
| 60 |
+
* deps: raw-body@2.4.3
|
| 61 |
+
- deps: bytes@3.1.2
|
| 62 |
+
|
| 63 |
+
1.19.1 / 2021-12-10
|
| 64 |
+
===================
|
| 65 |
+
|
| 66 |
+
* deps: bytes@3.1.1
|
| 67 |
+
* deps: http-errors@1.8.1
|
| 68 |
+
- deps: inherits@2.0.4
|
| 69 |
+
- deps: toidentifier@1.0.1
|
| 70 |
+
- deps: setprototypeof@1.2.0
|
| 71 |
+
* deps: qs@6.9.6
|
| 72 |
+
* deps: raw-body@2.4.2
|
| 73 |
+
- deps: bytes@3.1.1
|
| 74 |
+
- deps: http-errors@1.8.1
|
| 75 |
+
* deps: safe-buffer@5.2.1
|
| 76 |
+
* deps: type-is@~1.6.18
|
| 77 |
+
|
| 78 |
+
1.19.0 / 2019-04-25
|
| 79 |
+
===================
|
| 80 |
+
|
| 81 |
+
* deps: bytes@3.1.0
|
| 82 |
+
- Add petabyte (`pb`) support
|
| 83 |
+
* deps: http-errors@1.7.2
|
| 84 |
+
- Set constructor name when possible
|
| 85 |
+
- deps: setprototypeof@1.1.1
|
| 86 |
+
- deps: statuses@'>= 1.5.0 < 2'
|
| 87 |
+
* deps: iconv-lite@0.4.24
|
| 88 |
+
- Added encoding MIK
|
| 89 |
+
* deps: qs@6.7.0
|
| 90 |
+
- Fix parsing array brackets after index
|
| 91 |
+
* deps: raw-body@2.4.0
|
| 92 |
+
- deps: bytes@3.1.0
|
| 93 |
+
- deps: http-errors@1.7.2
|
| 94 |
+
- deps: iconv-lite@0.4.24
|
| 95 |
+
* deps: type-is@~1.6.17
|
| 96 |
+
- deps: mime-types@~2.1.24
|
| 97 |
+
- perf: prevent internal `throw` on invalid type
|
| 98 |
+
|
| 99 |
+
1.18.3 / 2018-05-14
|
| 100 |
+
===================
|
| 101 |
+
|
| 102 |
+
* Fix stack trace for strict json parse error
|
| 103 |
+
* deps: depd@~1.1.2
|
| 104 |
+
- perf: remove argument reassignment
|
| 105 |
+
* deps: http-errors@~1.6.3
|
| 106 |
+
- deps: depd@~1.1.2
|
| 107 |
+
- deps: setprototypeof@1.1.0
|
| 108 |
+
- deps: statuses@'>= 1.3.1 < 2'
|
| 109 |
+
* deps: iconv-lite@0.4.23
|
| 110 |
+
- Fix loading encoding with year appended
|
| 111 |
+
- Fix deprecation warnings on Node.js 10+
|
| 112 |
+
* deps: qs@6.5.2
|
| 113 |
+
* deps: raw-body@2.3.3
|
| 114 |
+
- deps: http-errors@1.6.3
|
| 115 |
+
- deps: iconv-lite@0.4.23
|
| 116 |
+
* deps: type-is@~1.6.16
|
| 117 |
+
- deps: mime-types@~2.1.18
|
| 118 |
+
|
| 119 |
+
1.18.2 / 2017-09-22
|
| 120 |
+
===================
|
| 121 |
+
|
| 122 |
+
* deps: debug@2.6.9
|
| 123 |
+
* perf: remove argument reassignment
|
| 124 |
+
|
| 125 |
+
1.18.1 / 2017-09-12
|
| 126 |
+
===================
|
| 127 |
+
|
| 128 |
+
* deps: content-type@~1.0.4
|
| 129 |
+
- perf: remove argument reassignment
|
| 130 |
+
- perf: skip parameter parsing when no parameters
|
| 131 |
+
* deps: iconv-lite@0.4.19
|
| 132 |
+
- Fix ISO-8859-1 regression
|
| 133 |
+
- Update Windows-1255
|
| 134 |
+
* deps: qs@6.5.1
|
| 135 |
+
- Fix parsing & compacting very deep objects
|
| 136 |
+
* deps: raw-body@2.3.2
|
| 137 |
+
- deps: iconv-lite@0.4.19
|
| 138 |
+
|
| 139 |
+
1.18.0 / 2017-09-08
|
| 140 |
+
===================
|
| 141 |
+
|
| 142 |
+
* Fix JSON strict violation error to match native parse error
|
| 143 |
+
* Include the `body` property on verify errors
|
| 144 |
+
* Include the `type` property on all generated errors
|
| 145 |
+
* Use `http-errors` to set status code on errors
|
| 146 |
+
* deps: bytes@3.0.0
|
| 147 |
+
* deps: debug@2.6.8
|
| 148 |
+
* deps: depd@~1.1.1
|
| 149 |
+
- Remove unnecessary `Buffer` loading
|
| 150 |
+
* deps: http-errors@~1.6.2
|
| 151 |
+
- deps: depd@1.1.1
|
| 152 |
+
* deps: iconv-lite@0.4.18
|
| 153 |
+
- Add support for React Native
|
| 154 |
+
- Add a warning if not loaded as utf-8
|
| 155 |
+
- Fix CESU-8 decoding in Node.js 8
|
| 156 |
+
- Improve speed of ISO-8859-1 encoding
|
| 157 |
+
* deps: qs@6.5.0
|
| 158 |
+
* deps: raw-body@2.3.1
|
| 159 |
+
- Use `http-errors` for standard emitted errors
|
| 160 |
+
- deps: bytes@3.0.0
|
| 161 |
+
- deps: iconv-lite@0.4.18
|
| 162 |
+
- perf: skip buffer decoding on overage chunk
|
| 163 |
+
* perf: prevent internal `throw` when missing charset
|
| 164 |
+
|
| 165 |
+
1.17.2 / 2017-05-17
|
| 166 |
+
===================
|
| 167 |
+
|
| 168 |
+
* deps: debug@2.6.7
|
| 169 |
+
- Fix `DEBUG_MAX_ARRAY_LENGTH`
|
| 170 |
+
- deps: ms@2.0.0
|
| 171 |
+
* deps: type-is@~1.6.15
|
| 172 |
+
- deps: mime-types@~2.1.15
|
| 173 |
+
|
| 174 |
+
1.17.1 / 2017-03-06
|
| 175 |
+
===================
|
| 176 |
+
|
| 177 |
+
* deps: qs@6.4.0
|
| 178 |
+
- Fix regression parsing keys starting with `[`
|
| 179 |
+
|
| 180 |
+
1.17.0 / 2017-03-01
|
| 181 |
+
===================
|
| 182 |
+
|
| 183 |
+
* deps: http-errors@~1.6.1
|
| 184 |
+
- Make `message` property enumerable for `HttpError`s
|
| 185 |
+
- deps: setprototypeof@1.0.3
|
| 186 |
+
* deps: qs@6.3.1
|
| 187 |
+
- Fix compacting nested arrays
|
| 188 |
+
|
| 189 |
+
1.16.1 / 2017-02-10
|
| 190 |
+
===================
|
| 191 |
+
|
| 192 |
+
* deps: debug@2.6.1
|
| 193 |
+
- Fix deprecation messages in WebStorm and other editors
|
| 194 |
+
- Undeprecate `DEBUG_FD` set to `1` or `2`
|
| 195 |
+
|
| 196 |
+
1.16.0 / 2017-01-17
|
| 197 |
+
===================
|
| 198 |
+
|
| 199 |
+
* deps: debug@2.6.0
|
| 200 |
+
- Allow colors in workers
|
| 201 |
+
- Deprecated `DEBUG_FD` environment variable
|
| 202 |
+
- Fix error when running under React Native
|
| 203 |
+
- Use same color for same namespace
|
| 204 |
+
- deps: ms@0.7.2
|
| 205 |
+
* deps: http-errors@~1.5.1
|
| 206 |
+
- deps: inherits@2.0.3
|
| 207 |
+
- deps: setprototypeof@1.0.2
|
| 208 |
+
- deps: statuses@'>= 1.3.1 < 2'
|
| 209 |
+
* deps: iconv-lite@0.4.15
|
| 210 |
+
- Added encoding MS-31J
|
| 211 |
+
- Added encoding MS-932
|
| 212 |
+
- Added encoding MS-936
|
| 213 |
+
- Added encoding MS-949
|
| 214 |
+
- Added encoding MS-950
|
| 215 |
+
- Fix GBK/GB18030 handling of Euro character
|
| 216 |
+
* deps: qs@6.2.1
|
| 217 |
+
- Fix array parsing from skipping empty values
|
| 218 |
+
* deps: raw-body@~2.2.0
|
| 219 |
+
- deps: iconv-lite@0.4.15
|
| 220 |
+
* deps: type-is@~1.6.14
|
| 221 |
+
- deps: mime-types@~2.1.13
|
| 222 |
+
|
| 223 |
+
1.15.2 / 2016-06-19
|
| 224 |
+
===================
|
| 225 |
+
|
| 226 |
+
* deps: bytes@2.4.0
|
| 227 |
+
* deps: content-type@~1.0.2
|
| 228 |
+
- perf: enable strict mode
|
| 229 |
+
* deps: http-errors@~1.5.0
|
| 230 |
+
- Use `setprototypeof` module to replace `__proto__` setting
|
| 231 |
+
- deps: statuses@'>= 1.3.0 < 2'
|
| 232 |
+
- perf: enable strict mode
|
| 233 |
+
* deps: qs@6.2.0
|
| 234 |
+
* deps: raw-body@~2.1.7
|
| 235 |
+
- deps: bytes@2.4.0
|
| 236 |
+
- perf: remove double-cleanup on happy path
|
| 237 |
+
* deps: type-is@~1.6.13
|
| 238 |
+
- deps: mime-types@~2.1.11
|
| 239 |
+
|
| 240 |
+
1.15.1 / 2016-05-05
|
| 241 |
+
===================
|
| 242 |
+
|
| 243 |
+
* deps: bytes@2.3.0
|
| 244 |
+
- Drop partial bytes on all parsed units
|
| 245 |
+
- Fix parsing byte string that looks like hex
|
| 246 |
+
* deps: raw-body@~2.1.6
|
| 247 |
+
- deps: bytes@2.3.0
|
| 248 |
+
* deps: type-is@~1.6.12
|
| 249 |
+
- deps: mime-types@~2.1.10
|
| 250 |
+
|
| 251 |
+
1.15.0 / 2016-02-10
|
| 252 |
+
===================
|
| 253 |
+
|
| 254 |
+
* deps: http-errors@~1.4.0
|
| 255 |
+
- Add `HttpError` export, for `err instanceof createError.HttpError`
|
| 256 |
+
- deps: inherits@2.0.1
|
| 257 |
+
- deps: statuses@'>= 1.2.1 < 2'
|
| 258 |
+
* deps: qs@6.1.0
|
| 259 |
+
* deps: type-is@~1.6.11
|
| 260 |
+
- deps: mime-types@~2.1.9
|
| 261 |
+
|
| 262 |
+
1.14.2 / 2015-12-16
|
| 263 |
+
===================
|
| 264 |
+
|
| 265 |
+
* deps: bytes@2.2.0
|
| 266 |
+
* deps: iconv-lite@0.4.13
|
| 267 |
+
* deps: qs@5.2.0
|
| 268 |
+
* deps: raw-body@~2.1.5
|
| 269 |
+
- deps: bytes@2.2.0
|
| 270 |
+
- deps: iconv-lite@0.4.13
|
| 271 |
+
* deps: type-is@~1.6.10
|
| 272 |
+
- deps: mime-types@~2.1.8
|
| 273 |
+
|
| 274 |
+
1.14.1 / 2015-09-27
|
| 275 |
+
===================
|
| 276 |
+
|
| 277 |
+
* Fix issue where invalid charset results in 400 when `verify` used
|
| 278 |
+
* deps: iconv-lite@0.4.12
|
| 279 |
+
- Fix CESU-8 decoding in Node.js 4.x
|
| 280 |
+
* deps: raw-body@~2.1.4
|
| 281 |
+
- Fix masking critical errors from `iconv-lite`
|
| 282 |
+
- deps: iconv-lite@0.4.12
|
| 283 |
+
* deps: type-is@~1.6.9
|
| 284 |
+
- deps: mime-types@~2.1.7
|
| 285 |
+
|
| 286 |
+
1.14.0 / 2015-09-16
|
| 287 |
+
===================
|
| 288 |
+
|
| 289 |
+
* Fix JSON strict parse error to match syntax errors
|
| 290 |
+
* Provide static `require` analysis in `urlencoded` parser
|
| 291 |
+
* deps: depd@~1.1.0
|
| 292 |
+
- Support web browser loading
|
| 293 |
+
* deps: qs@5.1.0
|
| 294 |
+
* deps: raw-body@~2.1.3
|
| 295 |
+
- Fix sync callback when attaching data listener causes sync read
|
| 296 |
+
* deps: type-is@~1.6.8
|
| 297 |
+
- Fix type error when given invalid type to match against
|
| 298 |
+
- deps: mime-types@~2.1.6
|
| 299 |
+
|
| 300 |
+
1.13.3 / 2015-07-31
|
| 301 |
+
===================
|
| 302 |
+
|
| 303 |
+
* deps: type-is@~1.6.6
|
| 304 |
+
- deps: mime-types@~2.1.4
|
| 305 |
+
|
| 306 |
+
1.13.2 / 2015-07-05
|
| 307 |
+
===================
|
| 308 |
+
|
| 309 |
+
* deps: iconv-lite@0.4.11
|
| 310 |
+
* deps: qs@4.0.0
|
| 311 |
+
- Fix dropping parameters like `hasOwnProperty`
|
| 312 |
+
- Fix user-visible incompatibilities from 3.1.0
|
| 313 |
+
- Fix various parsing edge cases
|
| 314 |
+
* deps: raw-body@~2.1.2
|
| 315 |
+
- Fix error stack traces to skip `makeError`
|
| 316 |
+
- deps: iconv-lite@0.4.11
|
| 317 |
+
* deps: type-is@~1.6.4
|
| 318 |
+
- deps: mime-types@~2.1.2
|
| 319 |
+
- perf: enable strict mode
|
| 320 |
+
- perf: remove argument reassignment
|
| 321 |
+
|
| 322 |
+
1.13.1 / 2015-06-16
|
| 323 |
+
===================
|
| 324 |
+
|
| 325 |
+
* deps: qs@2.4.2
|
| 326 |
+
- Downgraded from 3.1.0 because of user-visible incompatibilities
|
| 327 |
+
|
| 328 |
+
1.13.0 / 2015-06-14
|
| 329 |
+
===================
|
| 330 |
+
|
| 331 |
+
* Add `statusCode` property on `Error`s, in addition to `status`
|
| 332 |
+
* Change `type` default to `application/json` for JSON parser
|
| 333 |
+
* Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser
|
| 334 |
+
* Provide static `require` analysis
|
| 335 |
+
* Use the `http-errors` module to generate errors
|
| 336 |
+
* deps: bytes@2.1.0
|
| 337 |
+
- Slight optimizations
|
| 338 |
+
* deps: iconv-lite@0.4.10
|
| 339 |
+
- The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails
|
| 340 |
+
- Leading BOM is now removed when decoding
|
| 341 |
+
* deps: on-finished@~2.3.0
|
| 342 |
+
- Add defined behavior for HTTP `CONNECT` requests
|
| 343 |
+
- Add defined behavior for HTTP `Upgrade` requests
|
| 344 |
+
- deps: ee-first@1.1.1
|
| 345 |
+
* deps: qs@3.1.0
|
| 346 |
+
- Fix dropping parameters like `hasOwnProperty`
|
| 347 |
+
- Fix various parsing edge cases
|
| 348 |
+
- Parsed object now has `null` prototype
|
| 349 |
+
* deps: raw-body@~2.1.1
|
| 350 |
+
- Use `unpipe` module for unpiping requests
|
| 351 |
+
- deps: iconv-lite@0.4.10
|
| 352 |
+
* deps: type-is@~1.6.3
|
| 353 |
+
- deps: mime-types@~2.1.1
|
| 354 |
+
- perf: reduce try block size
|
| 355 |
+
- perf: remove bitwise operations
|
| 356 |
+
* perf: enable strict mode
|
| 357 |
+
* perf: remove argument reassignment
|
| 358 |
+
* perf: remove delete call
|
| 359 |
+
|
| 360 |
+
1.12.4 / 2015-05-10
|
| 361 |
+
===================
|
| 362 |
+
|
| 363 |
+
* deps: debug@~2.2.0
|
| 364 |
+
* deps: qs@2.4.2
|
| 365 |
+
- Fix allowing parameters like `constructor`
|
| 366 |
+
* deps: on-finished@~2.2.1
|
| 367 |
+
* deps: raw-body@~2.0.1
|
| 368 |
+
- Fix a false-positive when unpiping in Node.js 0.8
|
| 369 |
+
- deps: bytes@2.0.1
|
| 370 |
+
* deps: type-is@~1.6.2
|
| 371 |
+
- deps: mime-types@~2.0.11
|
| 372 |
+
|
| 373 |
+
1.12.3 / 2015-04-15
|
| 374 |
+
===================
|
| 375 |
+
|
| 376 |
+
* Slight efficiency improvement when not debugging
|
| 377 |
+
* deps: depd@~1.0.1
|
| 378 |
+
* deps: iconv-lite@0.4.8
|
| 379 |
+
- Add encoding alias UNICODE-1-1-UTF-7
|
| 380 |
+
* deps: raw-body@1.3.4
|
| 381 |
+
- Fix hanging callback if request aborts during read
|
| 382 |
+
- deps: iconv-lite@0.4.8
|
| 383 |
+
|
| 384 |
+
1.12.2 / 2015-03-16
|
| 385 |
+
===================
|
| 386 |
+
|
| 387 |
+
* deps: qs@2.4.1
|
| 388 |
+
- Fix error when parameter `hasOwnProperty` is present
|
| 389 |
+
|
| 390 |
+
1.12.1 / 2015-03-15
|
| 391 |
+
===================
|
| 392 |
+
|
| 393 |
+
* deps: debug@~2.1.3
|
| 394 |
+
- Fix high intensity foreground color for bold
|
| 395 |
+
- deps: ms@0.7.0
|
| 396 |
+
* deps: type-is@~1.6.1
|
| 397 |
+
- deps: mime-types@~2.0.10
|
| 398 |
+
|
| 399 |
+
1.12.0 / 2015-02-13
|
| 400 |
+
===================
|
| 401 |
+
|
| 402 |
+
* add `debug` messages
|
| 403 |
+
* accept a function for the `type` option
|
| 404 |
+
* use `content-type` to parse `Content-Type` headers
|
| 405 |
+
* deps: iconv-lite@0.4.7
|
| 406 |
+
- Gracefully support enumerables on `Object.prototype`
|
| 407 |
+
* deps: raw-body@1.3.3
|
| 408 |
+
- deps: iconv-lite@0.4.7
|
| 409 |
+
* deps: type-is@~1.6.0
|
| 410 |
+
- fix argument reassignment
|
| 411 |
+
- fix false-positives in `hasBody` `Transfer-Encoding` check
|
| 412 |
+
- support wildcard for both type and subtype (`*/*`)
|
| 413 |
+
- deps: mime-types@~2.0.9
|
| 414 |
+
|
| 415 |
+
1.11.0 / 2015-01-30
|
| 416 |
+
===================
|
| 417 |
+
|
| 418 |
+
* make internal `extended: true` depth limit infinity
|
| 419 |
+
* deps: type-is@~1.5.6
|
| 420 |
+
- deps: mime-types@~2.0.8
|
| 421 |
+
|
| 422 |
+
1.10.2 / 2015-01-20
|
| 423 |
+
===================
|
| 424 |
+
|
| 425 |
+
* deps: iconv-lite@0.4.6
|
| 426 |
+
- Fix rare aliases of single-byte encodings
|
| 427 |
+
* deps: raw-body@1.3.2
|
| 428 |
+
- deps: iconv-lite@0.4.6
|
| 429 |
+
|
| 430 |
+
1.10.1 / 2015-01-01
|
| 431 |
+
===================
|
| 432 |
+
|
| 433 |
+
* deps: on-finished@~2.2.0
|
| 434 |
+
* deps: type-is@~1.5.5
|
| 435 |
+
- deps: mime-types@~2.0.7
|
| 436 |
+
|
| 437 |
+
1.10.0 / 2014-12-02
|
| 438 |
+
===================
|
| 439 |
+
|
| 440 |
+
* make internal `extended: true` array limit dynamic
|
| 441 |
+
|
| 442 |
+
1.9.3 / 2014-11-21
|
| 443 |
+
==================
|
| 444 |
+
|
| 445 |
+
* deps: iconv-lite@0.4.5
|
| 446 |
+
- Fix Windows-31J and X-SJIS encoding support
|
| 447 |
+
* deps: qs@2.3.3
|
| 448 |
+
- Fix `arrayLimit` behavior
|
| 449 |
+
* deps: raw-body@1.3.1
|
| 450 |
+
- deps: iconv-lite@0.4.5
|
| 451 |
+
* deps: type-is@~1.5.3
|
| 452 |
+
- deps: mime-types@~2.0.3
|
| 453 |
+
|
| 454 |
+
1.9.2 / 2014-10-27
|
| 455 |
+
==================
|
| 456 |
+
|
| 457 |
+
* deps: qs@2.3.2
|
| 458 |
+
- Fix parsing of mixed objects and values
|
| 459 |
+
|
| 460 |
+
1.9.1 / 2014-10-22
|
| 461 |
+
==================
|
| 462 |
+
|
| 463 |
+
* deps: on-finished@~2.1.1
|
| 464 |
+
- Fix handling of pipelined requests
|
| 465 |
+
* deps: qs@2.3.0
|
| 466 |
+
- Fix parsing of mixed implicit and explicit arrays
|
| 467 |
+
* deps: type-is@~1.5.2
|
| 468 |
+
- deps: mime-types@~2.0.2
|
| 469 |
+
|
| 470 |
+
1.9.0 / 2014-09-24
|
| 471 |
+
==================
|
| 472 |
+
|
| 473 |
+
* include the charset in "unsupported charset" error message
|
| 474 |
+
* include the encoding in "unsupported content encoding" error message
|
| 475 |
+
* deps: depd@~1.0.0
|
| 476 |
+
|
| 477 |
+
1.8.4 / 2014-09-23
|
| 478 |
+
==================
|
| 479 |
+
|
| 480 |
+
* fix content encoding to be case-insensitive
|
| 481 |
+
|
| 482 |
+
1.8.3 / 2014-09-19
|
| 483 |
+
==================
|
| 484 |
+
|
| 485 |
+
* deps: qs@2.2.4
|
| 486 |
+
- Fix issue with object keys starting with numbers truncated
|
| 487 |
+
|
| 488 |
+
1.8.2 / 2014-09-15
|
| 489 |
+
==================
|
| 490 |
+
|
| 491 |
+
* deps: depd@0.4.5
|
| 492 |
+
|
| 493 |
+
1.8.1 / 2014-09-07
|
| 494 |
+
==================
|
| 495 |
+
|
| 496 |
+
* deps: media-typer@0.3.0
|
| 497 |
+
* deps: type-is@~1.5.1
|
| 498 |
+
|
| 499 |
+
1.8.0 / 2014-09-05
|
| 500 |
+
==================
|
| 501 |
+
|
| 502 |
+
* make empty-body-handling consistent between chunked requests
|
| 503 |
+
- empty `json` produces `{}`
|
| 504 |
+
- empty `raw` produces `new Buffer(0)`
|
| 505 |
+
- empty `text` produces `''`
|
| 506 |
+
- empty `urlencoded` produces `{}`
|
| 507 |
+
* deps: qs@2.2.3
|
| 508 |
+
- Fix issue where first empty value in array is discarded
|
| 509 |
+
* deps: type-is@~1.5.0
|
| 510 |
+
- fix `hasbody` to be true for `content-length: 0`
|
| 511 |
+
|
| 512 |
+
1.7.0 / 2014-09-01
|
| 513 |
+
==================
|
| 514 |
+
|
| 515 |
+
* add `parameterLimit` option to `urlencoded` parser
|
| 516 |
+
* change `urlencoded` extended array limit to 100
|
| 517 |
+
* respond with 413 when over `parameterLimit` in `urlencoded`
|
| 518 |
+
|
| 519 |
+
1.6.7 / 2014-08-29
|
| 520 |
+
==================
|
| 521 |
+
|
| 522 |
+
* deps: qs@2.2.2
|
| 523 |
+
- Remove unnecessary cloning
|
| 524 |
+
|
| 525 |
+
1.6.6 / 2014-08-27
|
| 526 |
+
==================
|
| 527 |
+
|
| 528 |
+
* deps: qs@2.2.0
|
| 529 |
+
- Array parsing fix
|
| 530 |
+
- Performance improvements
|
| 531 |
+
|
| 532 |
+
1.6.5 / 2014-08-16
|
| 533 |
+
==================
|
| 534 |
+
|
| 535 |
+
* deps: on-finished@2.1.0
|
| 536 |
+
|
| 537 |
+
1.6.4 / 2014-08-14
|
| 538 |
+
==================
|
| 539 |
+
|
| 540 |
+
* deps: qs@1.2.2
|
| 541 |
+
|
| 542 |
+
1.6.3 / 2014-08-10
|
| 543 |
+
==================
|
| 544 |
+
|
| 545 |
+
* deps: qs@1.2.1
|
| 546 |
+
|
| 547 |
+
1.6.2 / 2014-08-07
|
| 548 |
+
==================
|
| 549 |
+
|
| 550 |
+
* deps: qs@1.2.0
|
| 551 |
+
- Fix parsing array of objects
|
| 552 |
+
|
| 553 |
+
1.6.1 / 2014-08-06
|
| 554 |
+
==================
|
| 555 |
+
|
| 556 |
+
* deps: qs@1.1.0
|
| 557 |
+
- Accept urlencoded square brackets
|
| 558 |
+
- Accept empty values in implicit array notation
|
| 559 |
+
|
| 560 |
+
1.6.0 / 2014-08-05
|
| 561 |
+
==================
|
| 562 |
+
|
| 563 |
+
* deps: qs@1.0.2
|
| 564 |
+
- Complete rewrite
|
| 565 |
+
- Limits array length to 20
|
| 566 |
+
- Limits object depth to 5
|
| 567 |
+
- Limits parameters to 1,000
|
| 568 |
+
|
| 569 |
+
1.5.2 / 2014-07-27
|
| 570 |
+
==================
|
| 571 |
+
|
| 572 |
+
* deps: depd@0.4.4
|
| 573 |
+
- Work-around v8 generating empty stack traces
|
| 574 |
+
|
| 575 |
+
1.5.1 / 2014-07-26
|
| 576 |
+
==================
|
| 577 |
+
|
| 578 |
+
* deps: depd@0.4.3
|
| 579 |
+
- Fix exception when global `Error.stackTraceLimit` is too low
|
| 580 |
+
|
| 581 |
+
1.5.0 / 2014-07-20
|
| 582 |
+
==================
|
| 583 |
+
|
| 584 |
+
* deps: depd@0.4.2
|
| 585 |
+
- Add `TRACE_DEPRECATION` environment variable
|
| 586 |
+
- Remove non-standard grey color from color output
|
| 587 |
+
- Support `--no-deprecation` argument
|
| 588 |
+
- Support `--trace-deprecation` argument
|
| 589 |
+
* deps: iconv-lite@0.4.4
|
| 590 |
+
- Added encoding UTF-7
|
| 591 |
+
* deps: raw-body@1.3.0
|
| 592 |
+
- deps: iconv-lite@0.4.4
|
| 593 |
+
- Added encoding UTF-7
|
| 594 |
+
- Fix `Cannot switch to old mode now` error on Node.js 0.10+
|
| 595 |
+
* deps: type-is@~1.3.2
|
| 596 |
+
|
| 597 |
+
1.4.3 / 2014-06-19
|
| 598 |
+
==================
|
| 599 |
+
|
| 600 |
+
* deps: type-is@1.3.1
|
| 601 |
+
- fix global variable leak
|
| 602 |
+
|
| 603 |
+
1.4.2 / 2014-06-19
|
| 604 |
+
==================
|
| 605 |
+
|
| 606 |
+
* deps: type-is@1.3.0
|
| 607 |
+
- improve type parsing
|
| 608 |
+
|
| 609 |
+
1.4.1 / 2014-06-19
|
| 610 |
+
==================
|
| 611 |
+
|
| 612 |
+
* fix urlencoded extended deprecation message
|
| 613 |
+
|
| 614 |
+
1.4.0 / 2014-06-19
|
| 615 |
+
==================
|
| 616 |
+
|
| 617 |
+
* add `text` parser
|
| 618 |
+
* add `raw` parser
|
| 619 |
+
* check accepted charset in content-type (accepts utf-8)
|
| 620 |
+
* check accepted encoding in content-encoding (accepts identity)
|
| 621 |
+
* deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed
|
| 622 |
+
* deprecate `urlencoded()` without provided `extended` option
|
| 623 |
+
* lazy-load urlencoded parsers
|
| 624 |
+
* parsers split into files for reduced mem usage
|
| 625 |
+
* support gzip and deflate bodies
|
| 626 |
+
- set `inflate: false` to turn off
|
| 627 |
+
* deps: raw-body@1.2.2
|
| 628 |
+
- Support all encodings from `iconv-lite`
|
| 629 |
+
|
| 630 |
+
1.3.1 / 2014-06-11
|
| 631 |
+
==================
|
| 632 |
+
|
| 633 |
+
* deps: type-is@1.2.1
|
| 634 |
+
- Switch dependency from mime to mime-types@1.0.0
|
| 635 |
+
|
| 636 |
+
1.3.0 / 2014-05-31
|
| 637 |
+
==================
|
| 638 |
+
|
| 639 |
+
* add `extended` option to urlencoded parser
|
| 640 |
+
|
| 641 |
+
1.2.2 / 2014-05-27
|
| 642 |
+
==================
|
| 643 |
+
|
| 644 |
+
* deps: raw-body@1.1.6
|
| 645 |
+
- assert stream encoding on node.js 0.8
|
| 646 |
+
- assert stream encoding on node.js < 0.10.6
|
| 647 |
+
- deps: bytes@1
|
| 648 |
+
|
| 649 |
+
1.2.1 / 2014-05-26
|
| 650 |
+
==================
|
| 651 |
+
|
| 652 |
+
* invoke `next(err)` after request fully read
|
| 653 |
+
- prevents hung responses and socket hang ups
|
| 654 |
+
|
| 655 |
+
1.2.0 / 2014-05-11
|
| 656 |
+
==================
|
| 657 |
+
|
| 658 |
+
* add `verify` option
|
| 659 |
+
* deps: type-is@1.2.0
|
| 660 |
+
- support suffix matching
|
| 661 |
+
|
| 662 |
+
1.1.2 / 2014-05-11
|
| 663 |
+
==================
|
| 664 |
+
|
| 665 |
+
* improve json parser speed
|
| 666 |
+
|
| 667 |
+
1.1.1 / 2014-05-11
|
| 668 |
+
==================
|
| 669 |
+
|
| 670 |
+
* fix repeated limit parsing with every request
|
| 671 |
+
|
| 672 |
+
1.1.0 / 2014-05-10
|
| 673 |
+
==================
|
| 674 |
+
|
| 675 |
+
* add `type` option
|
| 676 |
+
* deps: pin for safety and consistency
|
| 677 |
+
|
| 678 |
+
1.0.2 / 2014-04-14
|
| 679 |
+
==================
|
| 680 |
+
|
| 681 |
+
* use `type-is` module
|
| 682 |
+
|
| 683 |
+
1.0.1 / 2014-03-20
|
| 684 |
+
==================
|
| 685 |
+
|
| 686 |
+
* lower default limits to 100kb
|
node_modules/body-parser/LICENSE
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
(The MIT License)
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
|
| 4 |
+
Copyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>
|
| 5 |
+
|
| 6 |
+
Permission is hereby granted, free of charge, to any person obtaining
|
| 7 |
+
a copy of this software and associated documentation files (the
|
| 8 |
+
'Software'), to deal in the Software without restriction, including
|
| 9 |
+
without limitation the rights to use, copy, modify, merge, publish,
|
| 10 |
+
distribute, sublicense, and/or sell copies of the Software, and to
|
| 11 |
+
permit persons to whom the Software is furnished to do so, subject to
|
| 12 |
+
the following conditions:
|
| 13 |
+
|
| 14 |
+
The above copyright notice and this permission notice shall be
|
| 15 |
+
included in all copies or substantial portions of the Software.
|
| 16 |
+
|
| 17 |
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
| 18 |
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| 19 |
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
| 20 |
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
| 21 |
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
| 22 |
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
| 23 |
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
node_modules/body-parser/README.md
ADDED
|
@@ -0,0 +1,476 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# body-parser
|
| 2 |
+
|
| 3 |
+
[![NPM Version][npm-version-image]][npm-url]
|
| 4 |
+
[![NPM Downloads][npm-downloads-image]][npm-url]
|
| 5 |
+
[![Build Status][ci-image]][ci-url]
|
| 6 |
+
[![Test Coverage][coveralls-image]][coveralls-url]
|
| 7 |
+
[![OpenSSF Scorecard Badge][ossf-scorecard-badge]][ossf-scorecard-visualizer]
|
| 8 |
+
|
| 9 |
+
Node.js body parsing middleware.
|
| 10 |
+
|
| 11 |
+
Parse incoming request bodies in a middleware before your handlers, available
|
| 12 |
+
under the `req.body` property.
|
| 13 |
+
|
| 14 |
+
**Note** As `req.body`'s shape is based on user-controlled input, all
|
| 15 |
+
properties and values in this object are untrusted and should be validated
|
| 16 |
+
before trusting. For example, `req.body.foo.toString()` may fail in multiple
|
| 17 |
+
ways, for example the `foo` property may not be there or may not be a string,
|
| 18 |
+
and `toString` may not be a function and instead a string or other user input.
|
| 19 |
+
|
| 20 |
+
[Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/).
|
| 21 |
+
|
| 22 |
+
_This does not handle multipart bodies_, due to their complex and typically
|
| 23 |
+
large nature. For multipart bodies, you may be interested in the following
|
| 24 |
+
modules:
|
| 25 |
+
|
| 26 |
+
* [busboy](https://www.npmjs.org/package/busboy#readme) and
|
| 27 |
+
[connect-busboy](https://www.npmjs.org/package/connect-busboy#readme)
|
| 28 |
+
* [multiparty](https://www.npmjs.org/package/multiparty#readme) and
|
| 29 |
+
[connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme)
|
| 30 |
+
* [formidable](https://www.npmjs.org/package/formidable#readme)
|
| 31 |
+
* [multer](https://www.npmjs.org/package/multer#readme)
|
| 32 |
+
|
| 33 |
+
This module provides the following parsers:
|
| 34 |
+
|
| 35 |
+
* [JSON body parser](#bodyparserjsonoptions)
|
| 36 |
+
* [Raw body parser](#bodyparserrawoptions)
|
| 37 |
+
* [Text body parser](#bodyparsertextoptions)
|
| 38 |
+
* [URL-encoded form body parser](#bodyparserurlencodedoptions)
|
| 39 |
+
|
| 40 |
+
Other body parsers you might be interested in:
|
| 41 |
+
|
| 42 |
+
- [body](https://www.npmjs.org/package/body#readme)
|
| 43 |
+
- [co-body](https://www.npmjs.org/package/co-body#readme)
|
| 44 |
+
|
| 45 |
+
## Installation
|
| 46 |
+
|
| 47 |
+
```sh
|
| 48 |
+
$ npm install body-parser
|
| 49 |
+
```
|
| 50 |
+
|
| 51 |
+
## API
|
| 52 |
+
|
| 53 |
+
```js
|
| 54 |
+
var bodyParser = require('body-parser')
|
| 55 |
+
```
|
| 56 |
+
|
| 57 |
+
The `bodyParser` object exposes various factories to create middlewares. All
|
| 58 |
+
middlewares will populate the `req.body` property with the parsed body when
|
| 59 |
+
the `Content-Type` request header matches the `type` option, or an empty
|
| 60 |
+
object (`{}`) if there was no body to parse, the `Content-Type` was not matched,
|
| 61 |
+
or an error occurred.
|
| 62 |
+
|
| 63 |
+
The various errors returned by this module are described in the
|
| 64 |
+
[errors section](#errors).
|
| 65 |
+
|
| 66 |
+
### bodyParser.json([options])
|
| 67 |
+
|
| 68 |
+
Returns middleware that only parses `json` and only looks at requests where
|
| 69 |
+
the `Content-Type` header matches the `type` option. This parser accepts any
|
| 70 |
+
Unicode encoding of the body and supports automatic inflation of `gzip` and
|
| 71 |
+
`deflate` encodings.
|
| 72 |
+
|
| 73 |
+
A new `body` object containing the parsed data is populated on the `request`
|
| 74 |
+
object after the middleware (i.e. `req.body`).
|
| 75 |
+
|
| 76 |
+
#### Options
|
| 77 |
+
|
| 78 |
+
The `json` function takes an optional `options` object that may contain any of
|
| 79 |
+
the following keys:
|
| 80 |
+
|
| 81 |
+
##### inflate
|
| 82 |
+
|
| 83 |
+
When set to `true`, then deflated (compressed) bodies will be inflated; when
|
| 84 |
+
`false`, deflated bodies are rejected. Defaults to `true`.
|
| 85 |
+
|
| 86 |
+
##### limit
|
| 87 |
+
|
| 88 |
+
Controls the maximum request body size. If this is a number, then the value
|
| 89 |
+
specifies the number of bytes; if it is a string, the value is passed to the
|
| 90 |
+
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
|
| 91 |
+
to `'100kb'`.
|
| 92 |
+
|
| 93 |
+
##### reviver
|
| 94 |
+
|
| 95 |
+
The `reviver` option is passed directly to `JSON.parse` as the second
|
| 96 |
+
argument. You can find more information on this argument
|
| 97 |
+
[in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter).
|
| 98 |
+
|
| 99 |
+
##### strict
|
| 100 |
+
|
| 101 |
+
When set to `true`, will only accept arrays and objects; when `false` will
|
| 102 |
+
accept anything `JSON.parse` accepts. Defaults to `true`.
|
| 103 |
+
|
| 104 |
+
##### type
|
| 105 |
+
|
| 106 |
+
The `type` option is used to determine what media type the middleware will
|
| 107 |
+
parse. This option can be a string, array of strings, or a function. If not a
|
| 108 |
+
function, `type` option is passed directly to the
|
| 109 |
+
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
|
| 110 |
+
be an extension name (like `json`), a mime type (like `application/json`), or
|
| 111 |
+
a mime type with a wildcard (like `*/*` or `*/json`). If a function, the `type`
|
| 112 |
+
option is called as `fn(req)` and the request is parsed if it returns a truthy
|
| 113 |
+
value. Defaults to `application/json`.
|
| 114 |
+
|
| 115 |
+
##### verify
|
| 116 |
+
|
| 117 |
+
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
|
| 118 |
+
where `buf` is a `Buffer` of the raw request body and `encoding` is the
|
| 119 |
+
encoding of the request. The parsing can be aborted by throwing an error.
|
| 120 |
+
|
| 121 |
+
### bodyParser.raw([options])
|
| 122 |
+
|
| 123 |
+
Returns middleware that parses all bodies as a `Buffer` and only looks at
|
| 124 |
+
requests where the `Content-Type` header matches the `type` option. This
|
| 125 |
+
parser supports automatic inflation of `gzip` and `deflate` encodings.
|
| 126 |
+
|
| 127 |
+
A new `body` object containing the parsed data is populated on the `request`
|
| 128 |
+
object after the middleware (i.e. `req.body`). This will be a `Buffer` object
|
| 129 |
+
of the body.
|
| 130 |
+
|
| 131 |
+
#### Options
|
| 132 |
+
|
| 133 |
+
The `raw` function takes an optional `options` object that may contain any of
|
| 134 |
+
the following keys:
|
| 135 |
+
|
| 136 |
+
##### inflate
|
| 137 |
+
|
| 138 |
+
When set to `true`, then deflated (compressed) bodies will be inflated; when
|
| 139 |
+
`false`, deflated bodies are rejected. Defaults to `true`.
|
| 140 |
+
|
| 141 |
+
##### limit
|
| 142 |
+
|
| 143 |
+
Controls the maximum request body size. If this is a number, then the value
|
| 144 |
+
specifies the number of bytes; if it is a string, the value is passed to the
|
| 145 |
+
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
|
| 146 |
+
to `'100kb'`.
|
| 147 |
+
|
| 148 |
+
##### type
|
| 149 |
+
|
| 150 |
+
The `type` option is used to determine what media type the middleware will
|
| 151 |
+
parse. This option can be a string, array of strings, or a function.
|
| 152 |
+
If not a function, `type` option is passed directly to the
|
| 153 |
+
[type-is](https://www.npmjs.org/package/type-is#readme) library and this
|
| 154 |
+
can be an extension name (like `bin`), a mime type (like
|
| 155 |
+
`application/octet-stream`), or a mime type with a wildcard (like `*/*` or
|
| 156 |
+
`application/*`). If a function, the `type` option is called as `fn(req)`
|
| 157 |
+
and the request is parsed if it returns a truthy value. Defaults to
|
| 158 |
+
`application/octet-stream`.
|
| 159 |
+
|
| 160 |
+
##### verify
|
| 161 |
+
|
| 162 |
+
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
|
| 163 |
+
where `buf` is a `Buffer` of the raw request body and `encoding` is the
|
| 164 |
+
encoding of the request. The parsing can be aborted by throwing an error.
|
| 165 |
+
|
| 166 |
+
### bodyParser.text([options])
|
| 167 |
+
|
| 168 |
+
Returns middleware that parses all bodies as a string and only looks at
|
| 169 |
+
requests where the `Content-Type` header matches the `type` option. This
|
| 170 |
+
parser supports automatic inflation of `gzip` and `deflate` encodings.
|
| 171 |
+
|
| 172 |
+
A new `body` string containing the parsed data is populated on the `request`
|
| 173 |
+
object after the middleware (i.e. `req.body`). This will be a string of the
|
| 174 |
+
body.
|
| 175 |
+
|
| 176 |
+
#### Options
|
| 177 |
+
|
| 178 |
+
The `text` function takes an optional `options` object that may contain any of
|
| 179 |
+
the following keys:
|
| 180 |
+
|
| 181 |
+
##### defaultCharset
|
| 182 |
+
|
| 183 |
+
Specify the default character set for the text content if the charset is not
|
| 184 |
+
specified in the `Content-Type` header of the request. Defaults to `utf-8`.
|
| 185 |
+
|
| 186 |
+
##### inflate
|
| 187 |
+
|
| 188 |
+
When set to `true`, then deflated (compressed) bodies will be inflated; when
|
| 189 |
+
`false`, deflated bodies are rejected. Defaults to `true`.
|
| 190 |
+
|
| 191 |
+
##### limit
|
| 192 |
+
|
| 193 |
+
Controls the maximum request body size. If this is a number, then the value
|
| 194 |
+
specifies the number of bytes; if it is a string, the value is passed to the
|
| 195 |
+
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
|
| 196 |
+
to `'100kb'`.
|
| 197 |
+
|
| 198 |
+
##### type
|
| 199 |
+
|
| 200 |
+
The `type` option is used to determine what media type the middleware will
|
| 201 |
+
parse. This option can be a string, array of strings, or a function. If not
|
| 202 |
+
a function, `type` option is passed directly to the
|
| 203 |
+
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
|
| 204 |
+
be an extension name (like `txt`), a mime type (like `text/plain`), or a mime
|
| 205 |
+
type with a wildcard (like `*/*` or `text/*`). If a function, the `type`
|
| 206 |
+
option is called as `fn(req)` and the request is parsed if it returns a
|
| 207 |
+
truthy value. Defaults to `text/plain`.
|
| 208 |
+
|
| 209 |
+
##### verify
|
| 210 |
+
|
| 211 |
+
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
|
| 212 |
+
where `buf` is a `Buffer` of the raw request body and `encoding` is the
|
| 213 |
+
encoding of the request. The parsing can be aborted by throwing an error.
|
| 214 |
+
|
| 215 |
+
### bodyParser.urlencoded([options])
|
| 216 |
+
|
| 217 |
+
Returns middleware that only parses `urlencoded` bodies and only looks at
|
| 218 |
+
requests where the `Content-Type` header matches the `type` option. This
|
| 219 |
+
parser accepts only UTF-8 encoding of the body and supports automatic
|
| 220 |
+
inflation of `gzip` and `deflate` encodings.
|
| 221 |
+
|
| 222 |
+
A new `body` object containing the parsed data is populated on the `request`
|
| 223 |
+
object after the middleware (i.e. `req.body`). This object will contain
|
| 224 |
+
key-value pairs, where the value can be a string or array (when `extended` is
|
| 225 |
+
`false`), or any type (when `extended` is `true`).
|
| 226 |
+
|
| 227 |
+
#### Options
|
| 228 |
+
|
| 229 |
+
The `urlencoded` function takes an optional `options` object that may contain
|
| 230 |
+
any of the following keys:
|
| 231 |
+
|
| 232 |
+
##### extended
|
| 233 |
+
|
| 234 |
+
The `extended` option allows to choose between parsing the URL-encoded data
|
| 235 |
+
with the `querystring` library (when `false`) or the `qs` library (when
|
| 236 |
+
`true`). The "extended" syntax allows for rich objects and arrays to be
|
| 237 |
+
encoded into the URL-encoded format, allowing for a JSON-like experience
|
| 238 |
+
with URL-encoded. For more information, please
|
| 239 |
+
[see the qs library](https://www.npmjs.org/package/qs#readme).
|
| 240 |
+
|
| 241 |
+
Defaults to `true`, but using the default has been deprecated. Please
|
| 242 |
+
research into the difference between `qs` and `querystring` and choose the
|
| 243 |
+
appropriate setting.
|
| 244 |
+
|
| 245 |
+
##### inflate
|
| 246 |
+
|
| 247 |
+
When set to `true`, then deflated (compressed) bodies will be inflated; when
|
| 248 |
+
`false`, deflated bodies are rejected. Defaults to `true`.
|
| 249 |
+
|
| 250 |
+
##### limit
|
| 251 |
+
|
| 252 |
+
Controls the maximum request body size. If this is a number, then the value
|
| 253 |
+
specifies the number of bytes; if it is a string, the value is passed to the
|
| 254 |
+
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
|
| 255 |
+
to `'100kb'`.
|
| 256 |
+
|
| 257 |
+
##### parameterLimit
|
| 258 |
+
|
| 259 |
+
The `parameterLimit` option controls the maximum number of parameters that
|
| 260 |
+
are allowed in the URL-encoded data. If a request contains more parameters
|
| 261 |
+
than this value, a 413 will be returned to the client. Defaults to `1000`.
|
| 262 |
+
|
| 263 |
+
##### type
|
| 264 |
+
|
| 265 |
+
The `type` option is used to determine what media type the middleware will
|
| 266 |
+
parse. This option can be a string, array of strings, or a function. If not
|
| 267 |
+
a function, `type` option is passed directly to the
|
| 268 |
+
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
|
| 269 |
+
be an extension name (like `urlencoded`), a mime type (like
|
| 270 |
+
`application/x-www-form-urlencoded`), or a mime type with a wildcard (like
|
| 271 |
+
`*/x-www-form-urlencoded`). If a function, the `type` option is called as
|
| 272 |
+
`fn(req)` and the request is parsed if it returns a truthy value. Defaults
|
| 273 |
+
to `application/x-www-form-urlencoded`.
|
| 274 |
+
|
| 275 |
+
##### verify
|
| 276 |
+
|
| 277 |
+
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
|
| 278 |
+
where `buf` is a `Buffer` of the raw request body and `encoding` is the
|
| 279 |
+
encoding of the request. The parsing can be aborted by throwing an error.
|
| 280 |
+
|
| 281 |
+
#### depth
|
| 282 |
+
|
| 283 |
+
The `depth` option is used to configure the maximum depth of the `qs` library when `extended` is `true`. This allows you to limit the amount of keys that are parsed and can be useful to prevent certain types of abuse. Defaults to `32`. It is recommended to keep this value as low as possible.
|
| 284 |
+
|
| 285 |
+
## Errors
|
| 286 |
+
|
| 287 |
+
The middlewares provided by this module create errors using the
|
| 288 |
+
[`http-errors` module](https://www.npmjs.com/package/http-errors). The errors
|
| 289 |
+
will typically have a `status`/`statusCode` property that contains the suggested
|
| 290 |
+
HTTP response code, an `expose` property to determine if the `message` property
|
| 291 |
+
should be displayed to the client, a `type` property to determine the type of
|
| 292 |
+
error without matching against the `message`, and a `body` property containing
|
| 293 |
+
the read body, if available.
|
| 294 |
+
|
| 295 |
+
The following are the common errors created, though any error can come through
|
| 296 |
+
for various reasons.
|
| 297 |
+
|
| 298 |
+
### content encoding unsupported
|
| 299 |
+
|
| 300 |
+
This error will occur when the request had a `Content-Encoding` header that
|
| 301 |
+
contained an encoding but the "inflation" option was set to `false`. The
|
| 302 |
+
`status` property is set to `415`, the `type` property is set to
|
| 303 |
+
`'encoding.unsupported'`, and the `charset` property will be set to the
|
| 304 |
+
encoding that is unsupported.
|
| 305 |
+
|
| 306 |
+
### entity parse failed
|
| 307 |
+
|
| 308 |
+
This error will occur when the request contained an entity that could not be
|
| 309 |
+
parsed by the middleware. The `status` property is set to `400`, the `type`
|
| 310 |
+
property is set to `'entity.parse.failed'`, and the `body` property is set to
|
| 311 |
+
the entity value that failed parsing.
|
| 312 |
+
|
| 313 |
+
### entity verify failed
|
| 314 |
+
|
| 315 |
+
This error will occur when the request contained an entity that could not be
|
| 316 |
+
failed verification by the defined `verify` option. The `status` property is
|
| 317 |
+
set to `403`, the `type` property is set to `'entity.verify.failed'`, and the
|
| 318 |
+
`body` property is set to the entity value that failed verification.
|
| 319 |
+
|
| 320 |
+
### request aborted
|
| 321 |
+
|
| 322 |
+
This error will occur when the request is aborted by the client before reading
|
| 323 |
+
the body has finished. The `received` property will be set to the number of
|
| 324 |
+
bytes received before the request was aborted and the `expected` property is
|
| 325 |
+
set to the number of expected bytes. The `status` property is set to `400`
|
| 326 |
+
and `type` property is set to `'request.aborted'`.
|
| 327 |
+
|
| 328 |
+
### request entity too large
|
| 329 |
+
|
| 330 |
+
This error will occur when the request body's size is larger than the "limit"
|
| 331 |
+
option. The `limit` property will be set to the byte limit and the `length`
|
| 332 |
+
property will be set to the request body's length. The `status` property is
|
| 333 |
+
set to `413` and the `type` property is set to `'entity.too.large'`.
|
| 334 |
+
|
| 335 |
+
### request size did not match content length
|
| 336 |
+
|
| 337 |
+
This error will occur when the request's length did not match the length from
|
| 338 |
+
the `Content-Length` header. This typically occurs when the request is malformed,
|
| 339 |
+
typically when the `Content-Length` header was calculated based on characters
|
| 340 |
+
instead of bytes. The `status` property is set to `400` and the `type` property
|
| 341 |
+
is set to `'request.size.invalid'`.
|
| 342 |
+
|
| 343 |
+
### stream encoding should not be set
|
| 344 |
+
|
| 345 |
+
This error will occur when something called the `req.setEncoding` method prior
|
| 346 |
+
to this middleware. This module operates directly on bytes only and you cannot
|
| 347 |
+
call `req.setEncoding` when using this module. The `status` property is set to
|
| 348 |
+
`500` and the `type` property is set to `'stream.encoding.set'`.
|
| 349 |
+
|
| 350 |
+
### stream is not readable
|
| 351 |
+
|
| 352 |
+
This error will occur when the request is no longer readable when this middleware
|
| 353 |
+
attempts to read it. This typically means something other than a middleware from
|
| 354 |
+
this module read the request body already and the middleware was also configured to
|
| 355 |
+
read the same request. The `status` property is set to `500` and the `type`
|
| 356 |
+
property is set to `'stream.not.readable'`.
|
| 357 |
+
|
| 358 |
+
### too many parameters
|
| 359 |
+
|
| 360 |
+
This error will occur when the content of the request exceeds the configured
|
| 361 |
+
`parameterLimit` for the `urlencoded` parser. The `status` property is set to
|
| 362 |
+
`413` and the `type` property is set to `'parameters.too.many'`.
|
| 363 |
+
|
| 364 |
+
### unsupported charset "BOGUS"
|
| 365 |
+
|
| 366 |
+
This error will occur when the request had a charset parameter in the
|
| 367 |
+
`Content-Type` header, but the `iconv-lite` module does not support it OR the
|
| 368 |
+
parser does not support it. The charset is contained in the message as well
|
| 369 |
+
as in the `charset` property. The `status` property is set to `415`, the
|
| 370 |
+
`type` property is set to `'charset.unsupported'`, and the `charset` property
|
| 371 |
+
is set to the charset that is unsupported.
|
| 372 |
+
|
| 373 |
+
### unsupported content encoding "bogus"
|
| 374 |
+
|
| 375 |
+
This error will occur when the request had a `Content-Encoding` header that
|
| 376 |
+
contained an unsupported encoding. The encoding is contained in the message
|
| 377 |
+
as well as in the `encoding` property. The `status` property is set to `415`,
|
| 378 |
+
the `type` property is set to `'encoding.unsupported'`, and the `encoding`
|
| 379 |
+
property is set to the encoding that is unsupported.
|
| 380 |
+
|
| 381 |
+
### The input exceeded the depth
|
| 382 |
+
|
| 383 |
+
This error occurs when using `bodyParser.urlencoded` with the `extended` property set to `true` and the input exceeds the configured `depth` option. The `status` property is set to `400`. It is recommended to review the `depth` option and evaluate if it requires a higher value. When the `depth` option is set to `32` (default value), the error will not be thrown.
|
| 384 |
+
|
| 385 |
+
## Examples
|
| 386 |
+
|
| 387 |
+
### Express/Connect top-level generic
|
| 388 |
+
|
| 389 |
+
This example demonstrates adding a generic JSON and URL-encoded parser as a
|
| 390 |
+
top-level middleware, which will parse the bodies of all incoming requests.
|
| 391 |
+
This is the simplest setup.
|
| 392 |
+
|
| 393 |
+
```js
|
| 394 |
+
var express = require('express')
|
| 395 |
+
var bodyParser = require('body-parser')
|
| 396 |
+
|
| 397 |
+
var app = express()
|
| 398 |
+
|
| 399 |
+
// parse application/x-www-form-urlencoded
|
| 400 |
+
app.use(bodyParser.urlencoded({ extended: false }))
|
| 401 |
+
|
| 402 |
+
// parse application/json
|
| 403 |
+
app.use(bodyParser.json())
|
| 404 |
+
|
| 405 |
+
app.use(function (req, res) {
|
| 406 |
+
res.setHeader('Content-Type', 'text/plain')
|
| 407 |
+
res.write('you posted:\n')
|
| 408 |
+
res.end(JSON.stringify(req.body, null, 2))
|
| 409 |
+
})
|
| 410 |
+
```
|
| 411 |
+
|
| 412 |
+
### Express route-specific
|
| 413 |
+
|
| 414 |
+
This example demonstrates adding body parsers specifically to the routes that
|
| 415 |
+
need them. In general, this is the most recommended way to use body-parser with
|
| 416 |
+
Express.
|
| 417 |
+
|
| 418 |
+
```js
|
| 419 |
+
var express = require('express')
|
| 420 |
+
var bodyParser = require('body-parser')
|
| 421 |
+
|
| 422 |
+
var app = express()
|
| 423 |
+
|
| 424 |
+
// create application/json parser
|
| 425 |
+
var jsonParser = bodyParser.json()
|
| 426 |
+
|
| 427 |
+
// create application/x-www-form-urlencoded parser
|
| 428 |
+
var urlencodedParser = bodyParser.urlencoded({ extended: false })
|
| 429 |
+
|
| 430 |
+
// POST /login gets urlencoded bodies
|
| 431 |
+
app.post('/login', urlencodedParser, function (req, res) {
|
| 432 |
+
res.send('welcome, ' + req.body.username)
|
| 433 |
+
})
|
| 434 |
+
|
| 435 |
+
// POST /api/users gets JSON bodies
|
| 436 |
+
app.post('/api/users', jsonParser, function (req, res) {
|
| 437 |
+
// create user in req.body
|
| 438 |
+
})
|
| 439 |
+
```
|
| 440 |
+
|
| 441 |
+
### Change accepted type for parsers
|
| 442 |
+
|
| 443 |
+
All the parsers accept a `type` option which allows you to change the
|
| 444 |
+
`Content-Type` that the middleware will parse.
|
| 445 |
+
|
| 446 |
+
```js
|
| 447 |
+
var express = require('express')
|
| 448 |
+
var bodyParser = require('body-parser')
|
| 449 |
+
|
| 450 |
+
var app = express()
|
| 451 |
+
|
| 452 |
+
// parse various different custom JSON types as JSON
|
| 453 |
+
app.use(bodyParser.json({ type: 'application/*+json' }))
|
| 454 |
+
|
| 455 |
+
// parse some custom thing into a Buffer
|
| 456 |
+
app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))
|
| 457 |
+
|
| 458 |
+
// parse an HTML body into a string
|
| 459 |
+
app.use(bodyParser.text({ type: 'text/html' }))
|
| 460 |
+
```
|
| 461 |
+
|
| 462 |
+
## License
|
| 463 |
+
|
| 464 |
+
[MIT](LICENSE)
|
| 465 |
+
|
| 466 |
+
[ci-image]: https://badgen.net/github/checks/expressjs/body-parser/master?label=ci
|
| 467 |
+
[ci-url]: https://github.com/expressjs/body-parser/actions/workflows/ci.yml
|
| 468 |
+
[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/body-parser/master
|
| 469 |
+
[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master
|
| 470 |
+
[node-version-image]: https://badgen.net/npm/node/body-parser
|
| 471 |
+
[node-version-url]: https://nodejs.org/en/download
|
| 472 |
+
[npm-downloads-image]: https://badgen.net/npm/dm/body-parser
|
| 473 |
+
[npm-url]: https://npmjs.org/package/body-parser
|
| 474 |
+
[npm-version-image]: https://badgen.net/npm/v/body-parser
|
| 475 |
+
[ossf-scorecard-badge]: https://api.scorecard.dev/projects/github.com/expressjs/body-parser/badge
|
| 476 |
+
[ossf-scorecard-visualizer]: https://ossf.github.io/scorecard-visualizer/#/projects/github.com/expressjs/body-parser
|
node_modules/body-parser/index.js
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*!
|
| 2 |
+
* body-parser
|
| 3 |
+
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
| 4 |
+
* MIT Licensed
|
| 5 |
+
*/
|
| 6 |
+
|
| 7 |
+
'use strict'
|
| 8 |
+
|
| 9 |
+
/**
|
| 10 |
+
* Module dependencies.
|
| 11 |
+
* @private
|
| 12 |
+
*/
|
| 13 |
+
|
| 14 |
+
var deprecate = require('depd')('body-parser')
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Cache of loaded parsers.
|
| 18 |
+
* @private
|
| 19 |
+
*/
|
| 20 |
+
|
| 21 |
+
var parsers = Object.create(null)
|
| 22 |
+
|
| 23 |
+
/**
|
| 24 |
+
* @typedef Parsers
|
| 25 |
+
* @type {function}
|
| 26 |
+
* @property {function} json
|
| 27 |
+
* @property {function} raw
|
| 28 |
+
* @property {function} text
|
| 29 |
+
* @property {function} urlencoded
|
| 30 |
+
*/
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* Module exports.
|
| 34 |
+
* @type {Parsers}
|
| 35 |
+
*/
|
| 36 |
+
|
| 37 |
+
exports = module.exports = deprecate.function(bodyParser,
|
| 38 |
+
'bodyParser: use individual json/urlencoded middlewares')
|
| 39 |
+
|
| 40 |
+
/**
|
| 41 |
+
* JSON parser.
|
| 42 |
+
* @public
|
| 43 |
+
*/
|
| 44 |
+
|
| 45 |
+
Object.defineProperty(exports, 'json', {
|
| 46 |
+
configurable: true,
|
| 47 |
+
enumerable: true,
|
| 48 |
+
get: createParserGetter('json')
|
| 49 |
+
})
|
| 50 |
+
|
| 51 |
+
/**
|
| 52 |
+
* Raw parser.
|
| 53 |
+
* @public
|
| 54 |
+
*/
|
| 55 |
+
|
| 56 |
+
Object.defineProperty(exports, 'raw', {
|
| 57 |
+
configurable: true,
|
| 58 |
+
enumerable: true,
|
| 59 |
+
get: createParserGetter('raw')
|
| 60 |
+
})
|
| 61 |
+
|
| 62 |
+
/**
|
| 63 |
+
* Text parser.
|
| 64 |
+
* @public
|
| 65 |
+
*/
|
| 66 |
+
|
| 67 |
+
Object.defineProperty(exports, 'text', {
|
| 68 |
+
configurable: true,
|
| 69 |
+
enumerable: true,
|
| 70 |
+
get: createParserGetter('text')
|
| 71 |
+
})
|
| 72 |
+
|
| 73 |
+
/**
|
| 74 |
+
* URL-encoded parser.
|
| 75 |
+
* @public
|
| 76 |
+
*/
|
| 77 |
+
|
| 78 |
+
Object.defineProperty(exports, 'urlencoded', {
|
| 79 |
+
configurable: true,
|
| 80 |
+
enumerable: true,
|
| 81 |
+
get: createParserGetter('urlencoded')
|
| 82 |
+
})
|
| 83 |
+
|
| 84 |
+
/**
|
| 85 |
+
* Create a middleware to parse json and urlencoded bodies.
|
| 86 |
+
*
|
| 87 |
+
* @param {object} [options]
|
| 88 |
+
* @return {function}
|
| 89 |
+
* @deprecated
|
| 90 |
+
* @public
|
| 91 |
+
*/
|
| 92 |
+
|
| 93 |
+
function bodyParser (options) {
|
| 94 |
+
// use default type for parsers
|
| 95 |
+
var opts = Object.create(options || null, {
|
| 96 |
+
type: {
|
| 97 |
+
configurable: true,
|
| 98 |
+
enumerable: true,
|
| 99 |
+
value: undefined,
|
| 100 |
+
writable: true
|
| 101 |
+
}
|
| 102 |
+
})
|
| 103 |
+
|
| 104 |
+
var _urlencoded = exports.urlencoded(opts)
|
| 105 |
+
var _json = exports.json(opts)
|
| 106 |
+
|
| 107 |
+
return function bodyParser (req, res, next) {
|
| 108 |
+
_json(req, res, function (err) {
|
| 109 |
+
if (err) return next(err)
|
| 110 |
+
_urlencoded(req, res, next)
|
| 111 |
+
})
|
| 112 |
+
}
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
/**
|
| 116 |
+
* Create a getter for loading a parser.
|
| 117 |
+
* @private
|
| 118 |
+
*/
|
| 119 |
+
|
| 120 |
+
function createParserGetter (name) {
|
| 121 |
+
return function get () {
|
| 122 |
+
return loadParser(name)
|
| 123 |
+
}
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
/**
|
| 127 |
+
* Load a parser module.
|
| 128 |
+
* @private
|
| 129 |
+
*/
|
| 130 |
+
|
| 131 |
+
function loadParser (parserName) {
|
| 132 |
+
var parser = parsers[parserName]
|
| 133 |
+
|
| 134 |
+
if (parser !== undefined) {
|
| 135 |
+
return parser
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
// this uses a switch for static require analysis
|
| 139 |
+
switch (parserName) {
|
| 140 |
+
case 'json':
|
| 141 |
+
parser = require('./lib/types/json')
|
| 142 |
+
break
|
| 143 |
+
case 'raw':
|
| 144 |
+
parser = require('./lib/types/raw')
|
| 145 |
+
break
|
| 146 |
+
case 'text':
|
| 147 |
+
parser = require('./lib/types/text')
|
| 148 |
+
break
|
| 149 |
+
case 'urlencoded':
|
| 150 |
+
parser = require('./lib/types/urlencoded')
|
| 151 |
+
break
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
+
// store to prevent invoking require()
|
| 155 |
+
return (parsers[parserName] = parser)
|
| 156 |
+
}
|
node_modules/body-parser/lib/read.js
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*!
|
| 2 |
+
* body-parser
|
| 3 |
+
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
| 4 |
+
* MIT Licensed
|
| 5 |
+
*/
|
| 6 |
+
|
| 7 |
+
'use strict'
|
| 8 |
+
|
| 9 |
+
/**
|
| 10 |
+
* Module dependencies.
|
| 11 |
+
* @private
|
| 12 |
+
*/
|
| 13 |
+
|
| 14 |
+
var createError = require('http-errors')
|
| 15 |
+
var destroy = require('destroy')
|
| 16 |
+
var getBody = require('raw-body')
|
| 17 |
+
var iconv = require('iconv-lite')
|
| 18 |
+
var onFinished = require('on-finished')
|
| 19 |
+
var unpipe = require('unpipe')
|
| 20 |
+
var zlib = require('zlib')
|
| 21 |
+
|
| 22 |
+
/**
|
| 23 |
+
* Module exports.
|
| 24 |
+
*/
|
| 25 |
+
|
| 26 |
+
module.exports = read
|
| 27 |
+
|
| 28 |
+
/**
|
| 29 |
+
* Read a request into a buffer and parse.
|
| 30 |
+
*
|
| 31 |
+
* @param {object} req
|
| 32 |
+
* @param {object} res
|
| 33 |
+
* @param {function} next
|
| 34 |
+
* @param {function} parse
|
| 35 |
+
* @param {function} debug
|
| 36 |
+
* @param {object} options
|
| 37 |
+
* @private
|
| 38 |
+
*/
|
| 39 |
+
|
| 40 |
+
function read (req, res, next, parse, debug, options) {
|
| 41 |
+
var length
|
| 42 |
+
var opts = options
|
| 43 |
+
var stream
|
| 44 |
+
|
| 45 |
+
// flag as parsed
|
| 46 |
+
req._body = true
|
| 47 |
+
|
| 48 |
+
// read options
|
| 49 |
+
var encoding = opts.encoding !== null
|
| 50 |
+
? opts.encoding
|
| 51 |
+
: null
|
| 52 |
+
var verify = opts.verify
|
| 53 |
+
|
| 54 |
+
try {
|
| 55 |
+
// get the content stream
|
| 56 |
+
stream = contentstream(req, debug, opts.inflate)
|
| 57 |
+
length = stream.length
|
| 58 |
+
stream.length = undefined
|
| 59 |
+
} catch (err) {
|
| 60 |
+
return next(err)
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
// set raw-body options
|
| 64 |
+
opts.length = length
|
| 65 |
+
opts.encoding = verify
|
| 66 |
+
? null
|
| 67 |
+
: encoding
|
| 68 |
+
|
| 69 |
+
// assert charset is supported
|
| 70 |
+
if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {
|
| 71 |
+
return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
|
| 72 |
+
charset: encoding.toLowerCase(),
|
| 73 |
+
type: 'charset.unsupported'
|
| 74 |
+
}))
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
// read body
|
| 78 |
+
debug('read body')
|
| 79 |
+
getBody(stream, opts, function (error, body) {
|
| 80 |
+
if (error) {
|
| 81 |
+
var _error
|
| 82 |
+
|
| 83 |
+
if (error.type === 'encoding.unsupported') {
|
| 84 |
+
// echo back charset
|
| 85 |
+
_error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
|
| 86 |
+
charset: encoding.toLowerCase(),
|
| 87 |
+
type: 'charset.unsupported'
|
| 88 |
+
})
|
| 89 |
+
} else {
|
| 90 |
+
// set status code on error
|
| 91 |
+
_error = createError(400, error)
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
// unpipe from stream and destroy
|
| 95 |
+
if (stream !== req) {
|
| 96 |
+
unpipe(req)
|
| 97 |
+
destroy(stream, true)
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
// read off entire request
|
| 101 |
+
dump(req, function onfinished () {
|
| 102 |
+
next(createError(400, _error))
|
| 103 |
+
})
|
| 104 |
+
return
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
// verify
|
| 108 |
+
if (verify) {
|
| 109 |
+
try {
|
| 110 |
+
debug('verify body')
|
| 111 |
+
verify(req, res, body, encoding)
|
| 112 |
+
} catch (err) {
|
| 113 |
+
next(createError(403, err, {
|
| 114 |
+
body: body,
|
| 115 |
+
type: err.type || 'entity.verify.failed'
|
| 116 |
+
}))
|
| 117 |
+
return
|
| 118 |
+
}
|
| 119 |
+
}
|
| 120 |
+
|
| 121 |
+
// parse
|
| 122 |
+
var str = body
|
| 123 |
+
try {
|
| 124 |
+
debug('parse body')
|
| 125 |
+
str = typeof body !== 'string' && encoding !== null
|
| 126 |
+
? iconv.decode(body, encoding)
|
| 127 |
+
: body
|
| 128 |
+
req.body = parse(str)
|
| 129 |
+
} catch (err) {
|
| 130 |
+
next(createError(400, err, {
|
| 131 |
+
body: str,
|
| 132 |
+
type: err.type || 'entity.parse.failed'
|
| 133 |
+
}))
|
| 134 |
+
return
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
next()
|
| 138 |
+
})
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
/**
|
| 142 |
+
* Get the content stream of the request.
|
| 143 |
+
*
|
| 144 |
+
* @param {object} req
|
| 145 |
+
* @param {function} debug
|
| 146 |
+
* @param {boolean} [inflate=true]
|
| 147 |
+
* @return {object}
|
| 148 |
+
* @api private
|
| 149 |
+
*/
|
| 150 |
+
|
| 151 |
+
function contentstream (req, debug, inflate) {
|
| 152 |
+
var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()
|
| 153 |
+
var length = req.headers['content-length']
|
| 154 |
+
var stream
|
| 155 |
+
|
| 156 |
+
debug('content-encoding "%s"', encoding)
|
| 157 |
+
|
| 158 |
+
if (inflate === false && encoding !== 'identity') {
|
| 159 |
+
throw createError(415, 'content encoding unsupported', {
|
| 160 |
+
encoding: encoding,
|
| 161 |
+
type: 'encoding.unsupported'
|
| 162 |
+
})
|
| 163 |
+
}
|
| 164 |
+
|
| 165 |
+
switch (encoding) {
|
| 166 |
+
case 'deflate':
|
| 167 |
+
stream = zlib.createInflate()
|
| 168 |
+
debug('inflate body')
|
| 169 |
+
req.pipe(stream)
|
| 170 |
+
break
|
| 171 |
+
case 'gzip':
|
| 172 |
+
stream = zlib.createGunzip()
|
| 173 |
+
debug('gunzip body')
|
| 174 |
+
req.pipe(stream)
|
| 175 |
+
break
|
| 176 |
+
case 'identity':
|
| 177 |
+
stream = req
|
| 178 |
+
stream.length = length
|
| 179 |
+
break
|
| 180 |
+
default:
|
| 181 |
+
throw createError(415, 'unsupported content encoding "' + encoding + '"', {
|
| 182 |
+
encoding: encoding,
|
| 183 |
+
type: 'encoding.unsupported'
|
| 184 |
+
})
|
| 185 |
+
}
|
| 186 |
+
|
| 187 |
+
return stream
|
| 188 |
+
}
|
| 189 |
+
|
| 190 |
+
/**
|
| 191 |
+
* Dump the contents of a request.
|
| 192 |
+
*
|
| 193 |
+
* @param {object} req
|
| 194 |
+
* @param {function} callback
|
| 195 |
+
* @api private
|
| 196 |
+
*/
|
| 197 |
+
|
| 198 |
+
function dump (req, callback) {
|
| 199 |
+
if (onFinished.isFinished(req)) {
|
| 200 |
+
callback(null)
|
| 201 |
+
} else {
|
| 202 |
+
onFinished(req, callback)
|
| 203 |
+
req.resume()
|
| 204 |
+
}
|
| 205 |
+
}
|