@steedos/auth 2.2.55-beta.9 → 2.2.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/apikey.js +12 -12
- package/lib/apikey.js.map +1 -1
- package/lib/auth-middleware.js +2 -2
- package/lib/auth-middleware.js.map +1 -1
- package/lib/endpoints/jwt.js +12 -23
- package/lib/endpoints/jwt.js.map +1 -1
- package/lib/endpoints/login.js +6 -8
- package/lib/endpoints/login.js.map +1 -1
- package/lib/endpoints/logout.js +1 -1
- package/lib/endpoints/logout.js.map +1 -1
- package/lib/endpoints/validate.js +12 -12
- package/lib/endpoints/validate.js.map +1 -1
- package/lib/express-middleware.js +0 -1
- package/lib/express-middleware.js.map +1 -1
- package/lib/session.js +22 -31
- package/lib/session.js.map +1 -1
- package/lib/spaceUserSession.js +36 -60
- package/lib/spaceUserSession.js.map +1 -1
- package/lib/tokenMap.js +7 -7
- package/lib/tokenMap.js.map +1 -1
- package/lib/userSession.js +7 -18
- package/lib/userSession.js.map +1 -1
- package/lib/utils/index.js +3 -3
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/random.js +6 -72
- package/lib/utils/random.js.map +1 -1
- package/package.json +4 -4
package/lib/utils/random.js
CHANGED
|
@@ -1,16 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// We use cryptographically strong PRNGs (crypto.getRandomBytes() on the server,
|
|
3
|
-
// window.crypto.getRandomValues() in the browser) when available. If these
|
|
4
|
-
// PRNGs fail, we fall back to the Alea PRNG, which is not cryptographically
|
|
5
|
-
// strong, and we seed it with various sources such as the date, Math.random,
|
|
6
|
-
// and window size on the client. When using crypto.getRandomValues(), our
|
|
7
|
-
// primitive is hexString(), from which we construct fraction(). When using
|
|
8
|
-
// window.crypto.getRandomValues() or alea, the primitive is fraction and we use
|
|
9
|
-
// that to construct hex string.
|
|
10
2
|
exports.__esModule = true;
|
|
11
3
|
var nodeCrypto = require('crypto');
|
|
12
|
-
// see http://baagoe.org/en/wiki/Better_random_numbers_for_javascript
|
|
13
|
-
// for a full discussion and Alea implementation.
|
|
14
4
|
var Alea = function () {
|
|
15
5
|
function Mash() {
|
|
16
6
|
var n = 0xefc8249d;
|
|
@@ -24,9 +14,9 @@ var Alea = function () {
|
|
|
24
14
|
h *= n;
|
|
25
15
|
n = h >>> 0;
|
|
26
16
|
h -= n;
|
|
27
|
-
n += h * 0x100000000;
|
|
17
|
+
n += h * 0x100000000;
|
|
28
18
|
}
|
|
29
|
-
return (n >>> 0) * 2.3283064365386963e-10;
|
|
19
|
+
return (n >>> 0) * 2.3283064365386963e-10;
|
|
30
20
|
};
|
|
31
21
|
mash['version'] = 'Mash 0.9';
|
|
32
22
|
return mash;
|
|
@@ -59,17 +49,17 @@ var Alea = function () {
|
|
|
59
49
|
}
|
|
60
50
|
mash = null;
|
|
61
51
|
var random = function () {
|
|
62
|
-
var t = 2091639 * s0 + c * 2.3283064365386963e-10;
|
|
52
|
+
var t = 2091639 * s0 + c * 2.3283064365386963e-10;
|
|
63
53
|
s0 = s1;
|
|
64
54
|
s1 = s2;
|
|
65
55
|
return s2 = t - (c = t | 0);
|
|
66
56
|
};
|
|
67
57
|
random['uint32'] = function () {
|
|
68
|
-
return random() * 0x100000000;
|
|
58
|
+
return random() * 0x100000000;
|
|
69
59
|
};
|
|
70
60
|
random['fract53'] = function () {
|
|
71
61
|
return random() +
|
|
72
|
-
(random() * 0x200000 | 0) * 1.1102230246251565e-16;
|
|
62
|
+
(random() * 0x200000 | 0) * 1.1102230246251565e-16;
|
|
73
63
|
};
|
|
74
64
|
random['version'] = 'Alea 0.9';
|
|
75
65
|
random['args'] = args;
|
|
@@ -79,12 +69,6 @@ var Alea = function () {
|
|
|
79
69
|
var UNMISTAKABLE_CHARS = "23456789ABCDEFGHJKLMNPQRSTWXYZabcdefghijkmnopqrstuvwxyz";
|
|
80
70
|
var BASE64_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" +
|
|
81
71
|
"0123456789-_";
|
|
82
|
-
// `type` is one of `RandomGenerator.Type` as defined below.
|
|
83
|
-
//
|
|
84
|
-
// options:
|
|
85
|
-
// - seeds: (required, only for RandomGenerator.Type.ALEA) an array
|
|
86
|
-
// whose items will be `toString`ed and used as the seed to the Alea
|
|
87
|
-
// algorithm
|
|
88
72
|
var RandomGenerator = function (type, options) {
|
|
89
73
|
var self = this;
|
|
90
74
|
self.type = type;
|
|
@@ -98,22 +82,10 @@ var RandomGenerator = function (type, options) {
|
|
|
98
82
|
self.alea = Alea.apply(null, options.seeds);
|
|
99
83
|
}
|
|
100
84
|
};
|
|
101
|
-
// Types of PRNGs supported by the `RandomGenerator` class
|
|
102
85
|
RandomGenerator['Type'] = {
|
|
103
|
-
// Use Node's built-in `crypto.getRandomBytes` (cryptographically
|
|
104
|
-
// secure but not seedable, runs only on the server). Reverts to
|
|
105
|
-
// `crypto.getPseudoRandomBytes` in the extremely uncommon case that
|
|
106
|
-
// there isn't enough entropy yet
|
|
107
86
|
NODE_CRYPTO: "NODE_CRYPTO",
|
|
108
|
-
// Use the *fast*, seedaable and not cryptographically secure
|
|
109
|
-
// Alea algorithm
|
|
110
87
|
ALEA: "ALEA"
|
|
111
88
|
};
|
|
112
|
-
/**
|
|
113
|
-
* @name Random.fraction
|
|
114
|
-
* @summary Return a number between 0 and 1, like `Math.random`.
|
|
115
|
-
* @locus Anywhere
|
|
116
|
-
*/
|
|
117
89
|
RandomGenerator.prototype.fraction = function () {
|
|
118
90
|
var self = this;
|
|
119
91
|
if (self.type === RandomGenerator['Type'].ALEA) {
|
|
@@ -121,35 +93,24 @@ RandomGenerator.prototype.fraction = function () {
|
|
|
121
93
|
}
|
|
122
94
|
else if (self.type === RandomGenerator['Type'].NODE_CRYPTO) {
|
|
123
95
|
var numerator = parseInt(self.hexString(8), 16);
|
|
124
|
-
return numerator * 2.3283064365386963e-10;
|
|
96
|
+
return numerator * 2.3283064365386963e-10;
|
|
125
97
|
}
|
|
126
98
|
else {
|
|
127
99
|
throw new Error('Unknown random generator type: ' + self.type);
|
|
128
100
|
}
|
|
129
101
|
};
|
|
130
|
-
/**
|
|
131
|
-
* @name Random.hexString
|
|
132
|
-
* @summary Return a random string of `n` hexadecimal digits.
|
|
133
|
-
* @locus Anywhere
|
|
134
|
-
* @param {Number} n Length of the string
|
|
135
|
-
*/
|
|
136
102
|
RandomGenerator.prototype.hexString = function (digits) {
|
|
137
103
|
var self = this;
|
|
138
104
|
if (self.type === RandomGenerator['Type'].NODE_CRYPTO) {
|
|
139
105
|
var numBytes = Math.ceil(digits / 2);
|
|
140
106
|
var bytes;
|
|
141
|
-
// Try to get cryptographically strong randomness. Fall back to
|
|
142
|
-
// non-cryptographically strong if not available.
|
|
143
107
|
try {
|
|
144
108
|
bytes = nodeCrypto.randomBytes(numBytes);
|
|
145
109
|
}
|
|
146
110
|
catch (e) {
|
|
147
|
-
// XXX should re-throw any error except insufficient entropy
|
|
148
111
|
bytes = nodeCrypto.pseudoRandomBytes(numBytes);
|
|
149
112
|
}
|
|
150
113
|
var result = bytes.toString("hex");
|
|
151
|
-
// If the number of digits is odd, we'll have generated an extra 4 bits
|
|
152
|
-
// of randomness, so we need to trim the last digit.
|
|
153
114
|
return result.substring(0, digits);
|
|
154
115
|
}
|
|
155
116
|
else {
|
|
@@ -164,45 +125,18 @@ RandomGenerator.prototype._randomString = function (charsCount, alphabet) {
|
|
|
164
125
|
}
|
|
165
126
|
return digits.join("");
|
|
166
127
|
};
|
|
167
|
-
/**
|
|
168
|
-
* @name Random.id
|
|
169
|
-
* @summary Return a unique identifier, such as `"Jjwjg6gouWLXhMGKW"`, that is
|
|
170
|
-
* likely to be unique in the whole world.
|
|
171
|
-
* @locus Anywhere
|
|
172
|
-
* @param {Number} [n] Optional length of the identifier in characters
|
|
173
|
-
* (defaults to 17)
|
|
174
|
-
*/
|
|
175
128
|
RandomGenerator.prototype.id = function (charsCount) {
|
|
176
129
|
var self = this;
|
|
177
|
-
// 17 characters is around 96 bits of entropy, which is the amount of
|
|
178
|
-
// state in the Alea PRNG.
|
|
179
130
|
if (charsCount === undefined)
|
|
180
131
|
charsCount = 17;
|
|
181
132
|
return self._randomString(charsCount, UNMISTAKABLE_CHARS);
|
|
182
133
|
};
|
|
183
|
-
/**
|
|
184
|
-
* @name Random.secret
|
|
185
|
-
* @summary Return a random string of printable characters with 6 bits of
|
|
186
|
-
* entropy per character. Use `Random.secret` for security-critical secrets
|
|
187
|
-
* that are intended for machine, rather than human, consumption.
|
|
188
|
-
* @locus Anywhere
|
|
189
|
-
* @param {Number} [n] Optional length of the secret string (defaults to 43
|
|
190
|
-
* characters, or 256 bits of entropy)
|
|
191
|
-
*/
|
|
192
134
|
RandomGenerator.prototype.secret = function (charsCount) {
|
|
193
135
|
var self = this;
|
|
194
|
-
// Default to 256 bits of entropy, or 43 characters at 6 bits per
|
|
195
|
-
// character.
|
|
196
136
|
if (charsCount === undefined)
|
|
197
137
|
charsCount = 43;
|
|
198
138
|
return self._randomString(charsCount, BASE64_CHARS);
|
|
199
139
|
};
|
|
200
|
-
/**
|
|
201
|
-
* @name Random.choice
|
|
202
|
-
* @summary Return a random element of the given array or string.
|
|
203
|
-
* @locus Anywhere
|
|
204
|
-
* @param {Array|String} arrayOrString Array or string to choose from
|
|
205
|
-
*/
|
|
206
140
|
RandomGenerator.prototype.choice = function (arrayOrString) {
|
|
207
141
|
var index = Math.floor(this.fraction() * arrayOrString.length);
|
|
208
142
|
if (typeof arrayOrString === "string")
|
package/lib/utils/random.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random.js","sourceRoot":"","sources":["../../src/utils/random.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"random.js","sourceRoot":"","sources":["../../src/utils/random.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steedos/auth",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "2.2.55
|
|
4
|
+
"version": "2.2.55",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"watch": "tsc --watch",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
"access": "public"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@steedos/cachers": "2.2.55
|
|
17
|
-
"@steedos/objectql": "2.2.55
|
|
16
|
+
"@steedos/cachers": "2.2.55",
|
|
17
|
+
"@steedos/objectql": "2.2.55",
|
|
18
18
|
"cookies": "^0.8.0",
|
|
19
19
|
"express": "^4.16.4",
|
|
20
20
|
"ismobilejs": "^1.1.1",
|
|
@@ -25,5 +25,5 @@
|
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"typescript": "4.6.3"
|
|
27
27
|
},
|
|
28
|
-
"gitHead": "
|
|
28
|
+
"gitHead": "1d94628192d53118f66a75f2399f2b3e1cec184b"
|
|
29
29
|
}
|