parse-server 5.4.1 → 5.4.2
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.
|
@@ -10,6 +10,8 @@ const util = require('util');
|
|
|
10
10
|
|
|
11
11
|
const jwt = require('jsonwebtoken');
|
|
12
12
|
|
|
13
|
+
const authUtils = require('./utils');
|
|
14
|
+
|
|
13
15
|
const TOKEN_ISSUER = 'https://appleid.apple.com';
|
|
14
16
|
|
|
15
17
|
const getAppleKeyByKeyId = async (keyId, cacheMaxEntries, cacheMaxAge) => {
|
|
@@ -31,18 +33,6 @@ const getAppleKeyByKeyId = async (keyId, cacheMaxEntries, cacheMaxAge) => {
|
|
|
31
33
|
return key;
|
|
32
34
|
};
|
|
33
35
|
|
|
34
|
-
const getHeaderFromToken = token => {
|
|
35
|
-
const decodedToken = jwt.decode(token, {
|
|
36
|
-
complete: true
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
if (!decodedToken) {
|
|
40
|
-
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `provided token does not decode as JWT`);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return decodedToken.header;
|
|
44
|
-
};
|
|
45
|
-
|
|
46
36
|
const verifyIdToken = async ({
|
|
47
37
|
token,
|
|
48
38
|
id
|
|
@@ -58,7 +48,7 @@ const verifyIdToken = async ({
|
|
|
58
48
|
const {
|
|
59
49
|
kid: keyId,
|
|
60
50
|
alg: algorithm
|
|
61
|
-
} = getHeaderFromToken(token);
|
|
51
|
+
} = authUtils.getHeaderFromToken(token);
|
|
62
52
|
const ONE_HOUR_IN_MS = 3600000;
|
|
63
53
|
let jwtClaims;
|
|
64
54
|
cacheMaxAge = cacheMaxAge || ONE_HOUR_IN_MS;
|
|
@@ -102,4 +92,4 @@ module.exports = {
|
|
|
102
92
|
validateAppId,
|
|
103
93
|
validateAuthData
|
|
104
94
|
};
|
|
105
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
95
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2FwcGxlLmpzIl0sIm5hbWVzIjpbIlBhcnNlIiwicmVxdWlyZSIsImp3a3NDbGllbnQiLCJ1dGlsIiwiand0IiwiYXV0aFV0aWxzIiwiVE9LRU5fSVNTVUVSIiwiZ2V0QXBwbGVLZXlCeUtleUlkIiwia2V5SWQiLCJjYWNoZU1heEVudHJpZXMiLCJjYWNoZU1heEFnZSIsImNsaWVudCIsImp3a3NVcmkiLCJjYWNoZSIsImFzeW5jR2V0U2lnbmluZ0tleUZ1bmN0aW9uIiwicHJvbWlzaWZ5IiwiZ2V0U2lnbmluZ0tleSIsImtleSIsImVycm9yIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwidmVyaWZ5SWRUb2tlbiIsInRva2VuIiwiaWQiLCJjbGllbnRJZCIsImtpZCIsImFsZyIsImFsZ29yaXRobSIsImdldEhlYWRlckZyb21Ub2tlbiIsIk9ORV9IT1VSX0lOX01TIiwiand0Q2xhaW1zIiwiYXBwbGVLZXkiLCJzaWduaW5nS2V5IiwicHVibGljS2V5IiwicnNhUHVibGljS2V5IiwidmVyaWZ5IiwiYWxnb3JpdGhtcyIsImF1ZGllbmNlIiwiZXhjZXB0aW9uIiwibWVzc2FnZSIsImlzcyIsInN1YiIsInZhbGlkYXRlQXV0aERhdGEiLCJhdXRoRGF0YSIsIm9wdGlvbnMiLCJ2YWxpZGF0ZUFwcElkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFFQSxNQUFNQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxZQUFELENBQVAsQ0FBc0JELEtBQXBDOztBQUNBLE1BQU1FLFVBQVUsR0FBR0QsT0FBTyxDQUFDLFVBQUQsQ0FBMUI7O0FBQ0EsTUFBTUUsSUFBSSxHQUFHRixPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFDQSxNQUFNRyxHQUFHLEdBQUdILE9BQU8sQ0FBQyxjQUFELENBQW5COztBQUNBLE1BQU1JLFNBQVMsR0FBR0osT0FBTyxDQUFD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LENBQWdCbkIsS0FBSyxDQUFDbUIsS0FBTixDQUFZQyxnQkFBNUIsRUFBK0MscUNBQS9DLENBQU47QUFDRDs7QUFDRCxTQUFPVSxTQUFQO0FBQ0QsQ0F0Q0QsQyxDQXdDQTs7O0FBQ0EsU0FBU1ksZ0JBQVQsQ0FBMEJDLFFBQTFCLEVBQW9DQyxPQUFPLEdBQUcsRUFBOUMsRUFBa0Q7QUFDaEQsU0FBT3ZCLGFBQWEsQ0FBQ3NCLFFBQUQsRUFBV0MsT0FBWCxDQUFwQjtBQUNELEMsQ0FFRDs7O0FBQ0EsU0FBU0MsYUFBVCxHQUF5QjtBQUN2QixTQUFPQyxPQUFPLENBQUNDLE9BQVIsRUFBUDtBQUNEOztBQUVEQyxNQUFNLENBQUNDLE9BQVAsR0FBaUI7QUFDZkosRUFBQUEsYUFEZTtBQUVmSCxFQUFBQTtBQUZlLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQXBwbGUgU2lnbkluIEF1dGhcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3NpZ25pbndpdGhhcHBsZXJlc3RhcGlcblxuY29uc3QgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5jb25zdCBqd2tzQ2xpZW50ID0gcmVxdWlyZSgnandrcy1yc2EnKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCBqd3QgPSByZXF1aXJlKCdqc29ud2VidG9rZW4nKTtcbmNvbnN0IGF1dGhVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuY29uc3QgVE9LRU5fSVNTVUVSID0gJ2h0dHBzOi8vYXBwbGVpZC5hcHBsZS5jb20nO1xuXG5jb25zdCBnZXRBcHBsZUtleUJ5S2V5SWQgPSBhc3luYyAoa2V5SWQsIGNhY2hlTWF4RW50cmllcywgY2FjaGVNYXhBZ2UpID0+IHtcbiAgY29uc3QgY2xpZW50ID0gandrc0NsaWVudCh7XG4gICAgandrc1VyaTogYCR7VE9LRU5fSVNTVUVSfS9hdXRoL2tleXNgLFxuICAgIGNhY2hlOiB0cnVlLFxuICAgIGNhY2hlTWF4RW50cmllcyxcbiAgICBjYWNoZU1heEFnZSxcbiAgfSk7XG5cbiAgY29uc3QgYXN5bmNHZXRTaWduaW5nS2V5RnVuY3Rpb24gPSB1dGlsLnByb21pc2lmeShjbGllbnQuZ2V0U2lnbmluZ0tleSk7XG5cbiAgbGV0IGtleTtcbiAgdHJ5IHtcbiAgICBrZXkgPSBhd2FpdCBhc3luY0dldFNpZ25pbmdLZXlGdW5jdGlvbihrZXlJZCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgIGBVbmFibGUgdG8gZmluZCBtYXRjaGluZyBrZXkgZm9yIEtleSBJRDogJHtrZXlJZH1gXG4gICAgKTtcbiAgfVxuICByZXR1cm4ga2V5O1xufTtcblxuY29uc3QgdmVyaWZ5SWRUb2tlbiA9IGFzeW5jICh7IHRva2VuLCBpZCB9LCB7IGNsaWVudElkLCBjYWNoZU1heEVudHJpZXMsIGNhY2hlTWF4QWdlIH0pID0+IHtcbiAgaWYgKCF0b2tlbikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCBgaWQgdG9rZW4gaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLmApO1xuICB9XG5cbiAgY29uc3QgeyBraWQ6IGtleUlkLCBhbGc6IGFsZ29yaXRobSB9ID0gYXV0aFV0aWxzLmdldEhlYWRlckZyb21Ub2tlbih0b2tlbik7XG4gIGNvbnN0IE9ORV9IT1VSX0lOX01TID0gMzYwMDAwMDtcbiAgbGV0IGp3dENsYWltcztcblxuICBjYWNoZU1heEFnZSA9IGNhY2hlTWF4QWdlIHx8IE9ORV9IT1VSX0lOX01TO1xuICBjYWNoZU1heEVudHJpZXMgPSBjYWNoZU1heEVudHJpZXMgfHwgNTtcblxuICBjb25zdCBhcHBsZUtleSA9IGF3YWl0IGdldEFwcGxlS2V5QnlLZXlJZChrZXlJZCwgY2FjaGVNYXhFbnRyaWVzLCBjYWNoZU1heEFnZSk7XG4gIGNvbnN0IHNpZ25pbmdLZXkgPSBhcHBsZUtleS5wdWJsaWNLZXkgfHwgYXBwbGVLZXkucnNhUHVibGljS2V5O1xuXG4gIHRyeSB7XG4gICAgand0Q2xhaW1zID0gand0LnZlcmlmeSh0b2tlbiwgc2lnbmluZ0tleSwge1xuICAgICAgYWxnb3JpdGhtczogYWxnb3JpdGhtLFxuICAgICAgLy8gdGhlIGF1ZGllbmNlIGNhbiBiZSBjaGVja2VkIGFnYWluc3QgYSBzdHJpbmcsIGEgcmVndWxhciBleHByZXNzaW9uIG9yIGEgbGlzdCBvZiBzdHJpbmdzIGFuZC9vciByZWd1bGFyIGV4cHJlc3Npb25zLlxuICAgICAgYXVkaWVuY2U6IGNsaWVudElkLFxuICAgIH0pO1xuICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXhjZXB0aW9uLm1lc3NhZ2U7XG5cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgYCR7bWVzc2FnZX1gKTtcbiAgfVxuXG4gIGlmIChqd3RDbGFpbXMuaXNzICE9PSBUT0tFTl9JU1NVRVIpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgYGlkIHRva2VuIG5vdCBpc3N1ZWQgYnkgY29ycmVjdCBPcGVuSUQgcHJvdmlkZXIgLSBleHBlY3RlZDogJHtUT0tFTl9JU1NVRVJ9IHwgZnJvbTogJHtqd3RDbGFpbXMuaXNzfWBcbiAgICApO1xuICB9XG5cbiAgaWYgKGp3dENsYWltcy5zdWIgIT09IGlkKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGBhdXRoIGRhdGEgaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLmApO1xuICB9XG4gIHJldHVybiBqd3RDbGFpbXM7XG59O1xuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmIHRoaXMgaWQgdG9rZW4gaXMgdmFsaWRcbmZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gdmVyaWZ5SWRUb2tlbihhdXRoRGF0YSwgb3B0aW9ucyk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWYgdGhpcyBhcHAgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUFwcElkKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhLFxufTtcbiJdfQ==
|
|
@@ -13,6 +13,8 @@ const jwt = require('jsonwebtoken');
|
|
|
13
13
|
|
|
14
14
|
const httpsRequest = require('./httpsRequest');
|
|
15
15
|
|
|
16
|
+
const authUtils = require('./utils');
|
|
17
|
+
|
|
16
18
|
const TOKEN_ISSUER = 'https://facebook.com';
|
|
17
19
|
|
|
18
20
|
function getAppSecretPath(authData, options = {}) {
|
|
@@ -77,18 +79,6 @@ const getFacebookKeyByKeyId = async (keyId, cacheMaxEntries, cacheMaxAge) => {
|
|
|
77
79
|
return key;
|
|
78
80
|
};
|
|
79
81
|
|
|
80
|
-
const getHeaderFromToken = token => {
|
|
81
|
-
const decodedToken = jwt.decode(token, {
|
|
82
|
-
complete: true
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
if (!decodedToken) {
|
|
86
|
-
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'provided token does not decode as JWT');
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
return decodedToken.header;
|
|
90
|
-
};
|
|
91
|
-
|
|
92
82
|
const verifyIdToken = async ({
|
|
93
83
|
token,
|
|
94
84
|
id
|
|
@@ -104,7 +94,7 @@ const verifyIdToken = async ({
|
|
|
104
94
|
const {
|
|
105
95
|
kid: keyId,
|
|
106
96
|
alg: algorithm
|
|
107
|
-
} = getHeaderFromToken(token);
|
|
97
|
+
} = authUtils.getHeaderFromToken(token);
|
|
108
98
|
const ONE_HOUR_IN_MS = 3600000;
|
|
109
99
|
let jwtClaims;
|
|
110
100
|
cacheMaxAge = cacheMaxAge || ONE_HOUR_IN_MS;
|
|
@@ -161,4 +151,4 @@ module.exports = {
|
|
|
161
151
|
validateAppId: validateAppId,
|
|
162
152
|
validateAuthData: validateAuthData
|
|
163
153
|
};
|
|
164
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2ZhY2Vib29rLmpzIl0sIm5hbWVzIjpbIlBhcnNlIiwicmVxdWlyZSIsImNyeXB0byIsImp3a3NDbGllbnQiLCJ1dGlsIiwiand0IiwiaHR0cHNSZXF1ZXN0IiwiVE9LRU5fSVNTVUVSIiwiZ2V0QXBwU2VjcmV0UGF0aCIsImF1dGhEYXRhIiwib3B0aW9ucyIsImFwcFNlY3JldCIsImFwcHNlY3JldF9wcm9vZiIsImNyZWF0ZUhtYWMiLCJ1cGRhdGUiLCJhY2Nlc3NfdG9rZW4iLCJkaWdlc3QiLCJ2YWxpZGF0ZUdyYXBoVG9rZW4iLCJncmFwaFJlcXVlc3QiLCJ0aGVuIiwiZGF0YSIsImlkIiwicHJvY2VzcyIsImVudiIsIlRFU1RJTkciLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJ2YWxpZGF0ZUdyYXBoQXBwSWQiLCJhcHBJZHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJpbmNsdWRlcyIsImdldEZhY2Vib29rS2V5QnlLZXlJZCIsImtleUlkIiwiY2FjaGVNYXhFbnRyaWVzIiwiY2FjaGVNYXhBZ2UiLCJjbGllbnQiLCJqd2tzVXJpIiwiY2FjaGUiLCJhc3luY0dldFNpZ25pbmdLZXlGdW5jdGlvbiIsInByb21pc2lmeSIsImdldFNpZ25pbmdLZXkiLCJrZXkiLCJlcnJvciIsImdldEhlYWRlckZyb21Ub2tlbiIsInRva2VuIiwiZGVjb2RlZFRva2VuIiwiZGVjb2RlIiwiY29tcGxldGUiLCJoZWFkZXIiLCJ2ZXJpZnlJZFRva2VuIiwiY2xpZW50SWQiLCJraWQiLCJhbGciLCJhbGdvcml0aG0iLCJPTkVfSE9VUl9JTl9NUyIsImp3dENsYWltcyIsImZhY2Vib29rS2V5Iiwic2lnbmluZ0tleSIsInB1YmxpY0tleSIsInJzYVB1YmxpY0tleSIsInZlcmlmeSIsImFsZ29yaXRobXMiLCJhdWRpZW5jZSIsImV4Y2VwdGlvbiIsIm1lc3NhZ2UiLCJpc3MiLCJzdWIiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwidmFsaWRhdGVBcHBJZCIsIlByb21pc2UiLCJyZXNvbHZlIiwicGF0aCIsImdldCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQSxNQUFNQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxZQUFELENBQVAsQ0FBc0JELEtBQXBDOztBQUNBLE1BQU1FLE1BQU0sR0FBR0QsT0FBTyxDQUFDLFFBQUQsQ0FBdEI7O0FBQ0EsTUFBTUUsVUFBVSxHQUFHRixPQUFPLENBQUMsVUFBRCxDQUExQjs7QUFDQSxNQUFNRyxJQUFJLEdBQUdILE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUNBLE1BQU1JLEdBQUcsR0FBR0osT0FBTyxDQUFDLGNBQUQsQ0FBbkI7O0FBQ0EsTUFBTUssWUFBWSxHQUFHTCxPQUFPLENBQUMsZ0JBQUQsQ0FBNUI7O0FBRUEsTUFBTU0sWUFBWSxHQUFHLHNCQUFyQjs7QUFFQSxTQUFTQyxnQkFBVCxDQUEwQkMsUUFBMUIsRUFBb0NDLE9BQU8sR0FBRyxFQUE5QyxFQUFrRDtBQUNoRCxRQUFNQyxTQUFTLEdBQUdELE9BQU8sQ0FBQ0MsU0FBMUI7O0FBQ0EsTUFBSSxDQUFDQSxTQUFMLEVBQWdCO0FBQ2QsV0FBTyxFQUFQO0FBQ0Q7O0FBQ0QsUUFBTUMsZUFBZSxHQUFHVixNQUFNLENBQzNCVyxVQURxQixDQUNWLFFBRFUsRUFDQUYsU0FEQSxFQUVyQkcsTUFGcUIsQ0FFZEwsUUFBUSxDQUFDTSxZQUZLLEVBR3JCQyxNQUhxQixDQUdkLEtBSGMsQ0FBeEI7QUFLQSxTQUFRLG9CQUFtQkosZUFBZ0IsRUFBM0M7QUFDRDs7QUFFRCxTQUFTSyxrQkFBVCxDQUE0QlIsUUFBNUIsRUFBc0NDLE9BQXRDLEVBQStDO0FBQzdDLFNBQU9RLFlBQVksQ0FDakIsK0JBQStCVCxRQUFRLENBQUNNLFlBQXhDLEdBQXVEUCxnQkFBZ0IsQ0FBQ0MsUUFBRCxFQUFXQyxPQUFYLENBRHRELENBQVosQ0FFTFMsSUFGSyxDQUVBQyxJQUFJLElBQUk7QUFDYixRQUFLQSxJQUFJLElBQUlB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LFlBQVQsQ0FBc0J1RCxJQUF0QixFQUE0QjtBQUMxQixTQUFPbkUsWUFBWSxDQUFDb0UsR0FBYixDQUFpQixnQ0FBZ0NELElBQWpELENBQVA7QUFDRDs7QUFFREUsTUFBTSxDQUFDQyxPQUFQLEdBQWlCO0FBQ2ZOLEVBQUFBLGFBQWEsRUFBRUEsYUFEQTtBQUVmRCxFQUFBQSxnQkFBZ0IsRUFBRUE7QUFGSCxDQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgRmFjZWJvb2sgR3JhcGggQVBJLlxuY29uc3QgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbmNvbnN0IGp3a3NDbGllbnQgPSByZXF1aXJlKCdqd2tzLXJzYScpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IGp3dCA9IHJlcXVpcmUoJ2pzb253ZWJ0b2tlbicpO1xuY29uc3QgaHR0cHNSZXF1ZXN0ID0gcmVxdWlyZSgnLi9odHRwc1JlcXVlc3QnKTtcblxuY29uc3QgVE9LRU5fSVNTVUVSID0gJ2h0dHBzOi8vZmFjZWJvb2suY29tJztcblxuZnVuY3Rpb24gZ2V0QXBwU2VjcmV0UGF0aChhdXRoRGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGFwcFNlY3JldCA9IG9wdGlvbnMuYXBwU2VjcmV0O1xuICBpZiAoIWFwcFNlY3JldCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBhcHBzZWNyZXRfcHJvb2YgPSBjcnlwdG9cbiAgICAuY3JlYXRlSG1hYygnc2hhMjU2JywgYXBwU2VjcmV0KVxuICAgIC51cGRhdGUoYXV0aERhdGEuYWNjZXNzX3Rva2VuKVxuICAgIC5kaWdlc3QoJ2hleCcpO1xuXG4gIHJldHVybiBgJmFwcHNlY3JldF9wcm9vZj0ke2FwcHNlY3JldF9wcm9vZn1gO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUdyYXBoVG9rZW4oYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGdyYXBoUmVxdWVzdChcbiAgICAnbWU/ZmllbGRzPWlkJmFjY2Vzc190b2tlbj0nICsgYXV0aERhdGEuYWNjZXNzX3Rva2VuICsgZ2V0QXBwU2VjcmV0UGF0aChhdXRoRGF0YSwgb3B0aW9ucylcbiAgKS50aGVuKGRhdGEgPT4ge1xuICAgIGlmICgoZGF0YSAmJiBkYXRhLmlkID09IGF1dGhEYXRhLmlkKSB8fCAocHJvY2Vzcy5lbnYuVEVTVElORyAmJiBhdXRoRGF0YS5pZCA9PT0gJ3Rlc3QnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ0ZhY2Vib29rIGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVHcmFwaEFwcElkKGFwcElkcywgYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgdmFyIGFjY2Vzc190b2tlbiA9IGF1dGhEYXRhLmFjY2Vzc190b2tlbjtcbiAgaWYgKHByb2Nlc3MuZW52LlRFU1RJTkcgJiYgYWNjZXNzX3Rva2VuID09PSAndGVzdCcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFBcnJheS5pc0FycmF5KGFwcElkcykpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ2FwcElkcyBtdXN0IGJlIGFuIGFycmF5LicpO1xuICB9XG4gIGlmICghYXBwSWRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnRmFjZWJvb2sgYXV0aCBpcyBub3QgY29uZmlndXJlZC4nKTtcbiAgfVxuICBjb25zdCBkYXRhID0gYXdhaXQgZ3JhcGhSZXF1ZXN0KFxuICAgIGBhcHA/YWNjZXNzX3Rva2VuPSR7YWNjZXNzX3Rva2VufSR7Z2V0QXBwU2VjcmV0UGF0aChhdXRoRGF0YSwgb3B0aW9ucyl9YFxuICApO1xuICBpZiAoIWRhdGEgfHwgIWFwcElkcy5pbmNsdWRlcyhkYXRhLmlkKSkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnRmFjZWJvb2sgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gIH1cbn1cblxuY29uc3QgZ2V0RmFjZWJvb2tLZXlCeUtleUlkID0gYXN5bmMgKGtleUlkLCBjYWNoZU1heEVudHJpZXMsIGNhY2hlTWF4QWdlKSA9PiB7XG4gIGNvbnN0IGNsaWVudCA9IGp3a3NDbGllbnQoe1xuICAgIGp3a3NVcmk6IGAke1RPS0VOX0lTU1VFUn0vLndlbGwta25vd24vb2F1dGgvb3BlbmlkL2p3a3MvYCxcbiAgICBjYWNoZTogdHJ1ZSxcbiAgICBjYWNoZU1heEVudHJpZXMsXG4gICAgY2FjaGVNYXhBZ2UsXG4gIH0pO1xuXG4gIGNvbnN0IGFzeW5jR2V0U2lnbmluZ0tleUZ1bmN0aW9uID0gdXRpbC5wcm9taXNpZnkoY2xpZW50LmdldFNpZ25pbmdLZXkpO1xuXG4gIGxldCBrZXk7XG4gIHRyeSB7XG4gICAga2V5ID0gYXdhaXQgYXN5bmNHZXRTaWduaW5nS2V5RnVuY3Rpb24oa2V5SWQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICBgVW5hYmxlIHRvIGZpbmQgbWF0Y2hpbmcga2V5IGZvciBLZXkgSUQ6ICR7a2V5SWR9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGtleTtcbn07XG5cbmNvbnN0IGdldEhlYWRlckZyb21Ub2tlbiA9IHRva2VuID0+IHtcbiAgY29uc3QgZGVjb2RlZFRva2VuID0gand0LmRlY29kZSh0b2tlbiwgeyBjb21wbGV0ZTogdHJ1ZSB9KTtcbiAgaWYgKCFkZWNvZGVkVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ3Byb3ZpZGVkIHRva2VuIGRvZXMgbm90IGRlY29kZSBhcyBKV1QnKTtcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVkVG9rZW4uaGVhZGVyO1xufTtcblxuY29uc3QgdmVyaWZ5SWRUb2tlbiA9IGFzeW5jICh7IHRva2VuLCBpZCB9LCB7IGNsaWVudElkLCBjYWNoZU1heEVudHJpZXMsIGNhY2hlTWF4QWdlIH0pID0+IHtcbiAgaWYgKCF0b2tlbikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnaWQgdG9rZW4gaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICB9XG5cbiAgY29uc3QgeyBraWQ6IGtleUlkLCBhbGc6IGFsZ29yaXRobSB9ID0gZ2V0SGVhZGVyRnJvbVRva2VuKHRva2VuKTtcbiAgY29uc3QgT05FX0hPVVJfSU5fTVMgPSAzNjAwMDAwO1xuICBsZXQgand0Q2xhaW1zO1xuXG4gIGNhY2hlTWF4QWdlID0gY2FjaGVNYXhBZ2UgfHwgT05FX0hPVVJfSU5fTVM7XG4gIGNhY2hlTWF4RW50cmllcyA9IGNhY2hlTWF4RW50cmllcyB8fCA1O1xuXG4gIGNvbnN0IGZhY2Vib29rS2V5ID0gYXdhaXQgZ2V0RmFjZWJvb2tLZXlCeUtleUlkKGtleUlkLCBjYWNoZU1heEVudHJpZXMsIGNhY2hlTWF4QWdlKTtcbiAgY29uc3Qgc2lnbmluZ0tleSA9IGZhY2Vib29rS2V5LnB1YmxpY0tleSB8fCBmYWNlYm9va0tleS5yc2FQdWJsaWNLZXk7XG5cbiAgdHJ5IHtcbiAgICBqd3RDbGFpbXMgPSBqd3QudmVyaWZ5KHRva2VuLCBzaWduaW5nS2V5LCB7XG4gICAgICBhbGdvcml0aG1zOiBhbGdvcml0aG0sXG4gICAgICAvLyB0aGUgYXVkaWVuY2UgY2FuIGJlIGNoZWNrZWQgYWdhaW5zdCBhIHN0cmluZywgYSByZWd1bGFyIGV4cHJlc3Npb24gb3IgYSBsaXN0IG9mIHN0cmluZ3MgYW5kL29yIHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG4gICAgICBhdWRpZW5jZTogY2xpZW50SWQsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBleGNlcHRpb24ubWVzc2FnZTtcblxuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCBgJHttZXNzYWdlfWApO1xuICB9XG5cbiAgaWYgKGp3dENsYWltcy5pc3MgIT09IFRPS0VOX0lTU1VFUikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICBgaWQgdG9rZW4gbm90IGlzc3VlZCBieSBjb3JyZWN0IE9wZW5JRCBwcm92aWRlciAtIGV4cGVjdGVkOiAke1RPS0VOX0lTU1VFUn0gfCBmcm9tOiAke2p3dENsYWltcy5pc3N9YFxuICAgICk7XG4gIH1cblxuICBpZiAoand0Q2xhaW1zLnN1YiAhPT0gaWQpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ2F1dGggZGF0YSBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gIH1cbiAgcmV0dXJuIGp3dENsYWltcztcbn07XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWZmIHRoaXMgdXNlciBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKGF1dGhEYXRhLnRva2VuKSB7XG4gICAgcmV0dXJuIHZlcmlmeUlkVG9rZW4oYXV0aERhdGEsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWxpZGF0ZUdyYXBoVG9rZW4oYXV0aERhdGEsIG9wdGlvbnMpO1xuICB9XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWZmIHRoaXMgYXBwIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBcHBJZChhcHBJZHMsIGF1dGhEYXRhLCBvcHRpb25zKSB7XG4gIGlmIChhdXRoRGF0YS50b2tlbikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsaWRhdGVHcmFwaEFwcElkKGFwcElkcywgYXV0aERhdGEsIG9wdGlvbnMpO1xuICB9XG59XG5cbi8vIEEgcHJvbWlzZXkgd3JhcHBlciBmb3IgRkIgZ3JhcGggcmVxdWVzdHMuXG5mdW5jdGlvbiBncmFwaFJlcXVlc3QocGF0aCkge1xuICByZXR1cm4gaHR0cHNSZXF1ZXN0LmdldCgnaHR0cHM6Ly9ncmFwaC5mYWNlYm9vay5jb20vJyArIHBhdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVBcHBJZDogdmFsaWRhdGVBcHBJZCxcbiAgdmFsaWRhdGVBdXRoRGF0YTogdmFsaWRhdGVBdXRoRGF0YSxcbn07XG4iXX0=
|
|
154
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2ZhY2Vib29rLmpzIl0sIm5hbWVzIjpbIlBhcnNlIiwicmVxdWlyZSIsImNyeXB0byIsImp3a3NDbGllbnQiLCJ1dGlsIiwiand0IiwiaHR0cHNSZXF1ZXN0IiwiYXV0aFV0aWxzIiwiVE9LRU5fSVNTVUVSIiwiZ2V0QXBwU2VjcmV0UGF0aCIsImF1dGhEYXRhIiwib3B0aW9ucyIsImFwcFNlY3JldCIsImFwcHNlY3JldF9wcm9vZiIsImNyZWF0ZUhtYWMiLCJ1cGRhdGUiLCJhY2Nlc3NfdG9rZW4iLCJkaWdlc3QiLCJ2YWxpZGF0ZUdyYXBoVG9rZW4iLCJncmFwaFJlcXVlc3QiLCJ0aGVuIiwiZGF0YSIsImlkIiwicHJvY2VzcyIsImVudiIsIlRFU1RJTkciLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJ2YWxpZGF0ZUdyYXBoQXBwSWQiLCJhcHBJZHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJpbmNsdWRlcyIsImdldEZhY2Vib29rS2V5QnlLZXlJZCIsImtleUlkIiwiY2FjaGVNYXhFbnRyaWVzIiwiY2FjaGVNYXhBZ2UiLCJjbGllbnQiLCJqd2tzVXJpIiwiY2FjaGUiLCJhc3luY0dldFNpZ25pbmdLZXlGdW5jdGlvbiIsInByb21pc2lmeSIsImdldFNpZ25pbmdLZXkiLCJrZXkiLCJlcnJvciIsInZlcmlmeUlkVG9rZW4iLCJ0b2tlbiIsImNsaWVudElkIiwia2lkIiwiYWxnIiwiYWxnb3JpdGhtIiwiZ2V0SGVhZGVyRnJvbVRva2VuIiwiT05FX0hPVVJfSU5fTVMiLCJqd3RDbGFpbXMiLCJmYWNlYm9va0tleSIsInNpZ25pbmdLZXkiLCJwdWJsaWNLZXkiLCJyc2FQdWJsaWNLZXkiLCJ2ZXJpZnkiLCJhbGdvcml0aG1zIiwiYXVkaWVuY2UiLCJleGNlcHRpb24iLCJtZXNzYWdlIiwiaXNzIiwic3ViIiwidmFsaWRhdGVBdXRoRGF0YSIsInZhbGlkYXRlQXBwSWQiLCJQcm9taXNlIiwi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TUFBSVYsU0FBUyxDQUFDVyxHQUFWLEtBQWtCM0MsRUFBdEIsRUFBMEI7QUFDeEIsVUFBTSxJQUFJdEIsS0FBSyxDQUFDMEIsS0FBVixDQUFnQjFCLEtBQUssQ0FBQzBCLEtBQU4sQ0FBWUMsZ0JBQTVCLEVBQThDLHFDQUE5QyxDQUFOO0FBQ0Q7O0FBQ0QsU0FBTzJCLFNBQVA7QUFDRCxDQXRDRCxDLENBd0NBOzs7QUFDQSxTQUFTWSxnQkFBVCxDQUEwQnhELFFBQTFCLEVBQW9DQyxPQUFwQyxFQUE2QztBQUMzQyxNQUFJRCxRQUFRLENBQUNxQyxLQUFiLEVBQW9CO0FBQ2xCLFdBQU9ELGFBQWEsQ0FBQ3BDLFFBQUQsRUFBV0MsT0FBWCxDQUFwQjtBQUNELEdBRkQsTUFFTztBQUNMLFdBQU9PLGtCQUFrQixDQUFDUixRQUFELEVBQVdDLE9BQVgsQ0FBekI7QUFDRDtBQUNGLEMsQ0FFRDs7O0FBQ0EsU0FBU3dELGFBQVQsQ0FBdUJ0QyxNQUF2QixFQUErQm5CLFFBQS9CLEVBQXlDQyxPQUF6QyxFQUFrRDtBQUNoRCxNQUFJRCxRQUFRLENBQUNxQyxLQUFiLEVBQW9CO0FBQ2xCLFdBQU9xQixPQUFPLENBQUNDLE9BQVIsRUFBUDtBQUNELEdBRkQsTUFFTztBQUNMLFdBQU96QyxrQkFBa0IsQ0FBQ0MsTUFBRCxFQUFTbkIsUUFBVCxFQUFtQkMsT0FBbkIsQ0FBekI7QUFDRDtBQUNGLEMsQ0FFRDs7O0FBQ0EsU0FBU1EsWUFBVCxDQUFzQm1ELElBQXRCLEVBQTRCO0FBQzFCLFNBQU9oRSxZQUFZLENBQUNpRSxHQUFiLENBQWlCLGdDQUFnQ0QsSUFBakQsQ0FBUDtBQUNEOztBQUVERSxNQUFNLENBQUNDLE9BQVAsR0FBaUI7QUFDZk4sRUFBQUEsYUFBYSxFQUFFQSxhQURBO0FBRWZELEVBQUFBLGdCQUFnQixFQUFFQTtBQUZILENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIHRoZSBGYWNlYm9vayBHcmFwaCBBUEkuXG5jb25zdCBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuY29uc3Qgandrc0NsaWVudCA9IHJlcXVpcmUoJ2p3a3MtcnNhJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3Qgand0ID0gcmVxdWlyZSgnanNvbndlYnRva2VuJyk7XG5jb25zdCBodHRwc1JlcXVlc3QgPSByZXF1aXJlKCcuL2h0dHBzUmVxdWVzdCcpO1xuY29uc3QgYXV0aFV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG5jb25zdCBUT0tFTl9JU1NVRVIgPSAnaHR0cHM6Ly9mYWNlYm9vay5jb20nO1xuXG5mdW5jdGlvbiBnZXRBcHBTZWNyZXRQYXRoKGF1dGhEYXRhLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgYXBwU2VjcmV0ID0gb3B0aW9ucy5hcHBTZWNyZXQ7XG4gIGlmICghYXBwU2VjcmV0KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IGFwcHNlY3JldF9wcm9vZiA9IGNyeXB0b1xuICAgIC5jcmVhdGVIbWFjKCdzaGEyNTYnLCBhcHBTZWNyZXQpXG4gICAgLnVwZGF0ZShhdXRoRGF0YS5hY2Nlc3NfdG9rZW4pXG4gICAgLmRpZ2VzdCgnaGV4Jyk7XG5cbiAgcmV0dXJuIGAmYXBwc2VjcmV0X3Byb29mPSR7YXBwc2VjcmV0X3Byb29mfWA7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlR3JhcGhUb2tlbihhdXRoRGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gZ3JhcGhSZXF1ZXN0KFxuICAgICdtZT9maWVsZHM9aWQmYWNjZXNzX3Rva2VuPScgKyBhdXRoRGF0YS5hY2Nlc3NfdG9rZW4gKyBnZXRBcHBTZWNyZXRQYXRoKGF1dGhEYXRhLCBvcHRpb25zKVxuICApLnRoZW4oZGF0YSA9PiB7XG4gICAgaWYgKChkYXRhICYmIGRhdGEuaWQgPT0gYXV0aERhdGEuaWQpIHx8IChwcm9jZXNzLmVudi5URVNUSU5HICYmIGF1dGhEYXRhLmlkID09PSAndGVzdCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnRmFjZWJvb2sgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB2YWxpZGF0ZUdyYXBoQXBwSWQoYXBwSWRzLCBhdXRoRGF0YSwgb3B0aW9ucykge1xuICB2YXIgYWNjZXNzX3Rva2VuID0gYXV0aERhdGEuYWNjZXNzX3Rva2VuO1xuICBpZiAocHJvY2Vzcy5lbnYuVEVTVElORyAmJiBhY2Nlc3NfdG9rZW4gPT09ICd0ZXN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIUFycmF5LmlzQXJyYXkoYXBwSWRzKSkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnYXBwSWRzIG11c3QgYmUgYW4gYXJyYXkuJyk7XG4gIH1cbiAgaWYgKCFhcHBJZHMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdGYWNlYm9vayBhdXRoIGlzIG5vdCBjb25maWd1cmVkLicpO1xuICB9XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBncmFwaFJlcXVlc3QoXG4gICAgYGFwcD9hY2Nlc3NfdG9rZW49JHthY2Nlc3NfdG9rZW59JHtnZXRBcHBTZWNyZXRQYXRoKGF1dGhEYXRhLCBvcHRpb25zKX1gXG4gICk7XG4gIGlmICghZGF0YSB8fCAhYXBwSWRzLmluY2x1ZGVzKGRhdGEuaWQpKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdGYWNlYm9vayBhdXRoIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgfVxufVxuXG5jb25zdCBnZXRGYWNlYm9va0tleUJ5S2V5SWQgPSBhc3luYyAoa2V5SWQsIGNhY2hlTWF4RW50cmllcywgY2FjaGVNYXhBZ2UpID0+IHtcbiAgY29uc3QgY2xpZW50ID0gandrc0NsaWVudCh7XG4gICAgandrc1VyaTogYCR7VE9LRU5fSVNTVUVSfS8ud2VsbC1rbm93bi9vYXV0aC9vcGVuaWQvandrcy9gLFxuICAgIGNhY2hlOiB0cnVlLFxuICAgIGNhY2hlTWF4RW50cmllcyxcbiAgICBjYWNoZU1heEFnZSxcbiAgfSk7XG5cbiAgY29uc3QgYXN5bmNHZXRTaWduaW5nS2V5RnVuY3Rpb24gPSB1dGlsLnByb21pc2lmeShjbGllbnQuZ2V0U2lnbmluZ0tleSk7XG5cbiAgbGV0IGtleTtcbiAgdHJ5IHtcbiAgICBrZXkgPSBhd2FpdCBhc3luY0dldFNpZ25pbmdLZXlGdW5jdGlvbihrZXlJZCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgIGBVbmFibGUgdG8gZmluZCBtYXRjaGluZyBrZXkgZm9yIEtleSBJRDogJHtrZXlJZH1gXG4gICAgKTtcbiAgfVxuICByZXR1cm4ga2V5O1xufTtcblxuY29uc3QgdmVyaWZ5SWRUb2tlbiA9IGFzeW5jICh7IHRva2VuLCBpZCB9LCB7IGNsaWVudElkLCBjYWNoZU1heEVudHJpZXMsIGNhY2hlTWF4QWdlIH0pID0+IHtcbiAgaWYgKCF0b2tlbikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnaWQgdG9rZW4gaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICB9XG5cbiAgY29uc3QgeyBraWQ6IGtleUlkLCBhbGc6IGFsZ29yaXRobSB9ID0gYXV0aFV0aWxzLmdldEhlYWRlckZyb21Ub2tlbih0b2tlbik7XG4gIGNvbnN0IE9ORV9IT1VSX0lOX01TID0gMzYwMDAwMDtcbiAgbGV0IGp3dENsYWltcztcblxuICBjYWNoZU1heEFnZSA9IGNhY2hlTWF4QWdlIHx8IE9ORV9IT1VSX0lOX01TO1xuICBjYWNoZU1heEVudHJpZXMgPSBjYWNoZU1heEVudHJpZXMgfHwgNTtcblxuICBjb25zdCBmYWNlYm9va0tleSA9IGF3YWl0IGdldEZhY2Vib29rS2V5QnlLZXlJZChrZXlJZCwgY2FjaGVNYXhFbnRyaWVzLCBjYWNoZU1heEFnZSk7XG4gIGNvbnN0IHNpZ25pbmdLZXkgPSBmYWNlYm9va0tleS5wdWJsaWNLZXkgfHwgZmFjZWJvb2tLZXkucnNhUHVibGljS2V5O1xuXG4gIHRyeSB7XG4gICAgand0Q2xhaW1zID0gand0LnZlcmlmeSh0b2tlbiwgc2lnbmluZ0tleSwge1xuICAgICAgYWxnb3JpdGhtczogYWxnb3JpdGhtLFxuICAgICAgLy8gdGhlIGF1ZGllbmNlIGNhbiBiZSBjaGVja2VkIGFnYWluc3QgYSBzdHJpbmcsIGEgcmVndWxhciBleHByZXNzaW9uIG9yIGEgbGlzdCBvZiBzdHJpbmdzIGFuZC9vciByZWd1bGFyIGV4cHJlc3Npb25zLlxuICAgICAgYXVkaWVuY2U6IGNsaWVudElkLFxuICAgIH0pO1xuICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXhjZXB0aW9uLm1lc3NhZ2U7XG5cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgYCR7bWVzc2FnZX1gKTtcbiAgfVxuXG4gIGlmIChqd3RDbGFpbXMuaXNzICE9PSBUT0tFTl9JU1NVRVIpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgYGlkIHRva2VuIG5vdCBpc3N1ZWQgYnkgY29ycmVjdCBPcGVuSUQgcHJvdmlkZXIgLSBleHBlY3RlZDogJHtUT0tFTl9JU1NVRVJ9IHwgZnJvbTogJHtqd3RDbGFpbXMuaXNzfWBcbiAgICApO1xuICB9XG5cbiAgaWYgKGp3dENsYWltcy5zdWIgIT09IGlkKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdhdXRoIGRhdGEgaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICB9XG4gIHJldHVybiBqd3RDbGFpbXM7XG59O1xuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmZiB0aGlzIHVzZXIgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUF1dGhEYXRhKGF1dGhEYXRhLCBvcHRpb25zKSB7XG4gIGlmIChhdXRoRGF0YS50b2tlbikge1xuICAgIHJldHVybiB2ZXJpZnlJZFRva2VuKGF1dGhEYXRhLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsaWRhdGVHcmFwaFRva2VuKGF1dGhEYXRhLCBvcHRpb25zKTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmZiB0aGlzIGFwcCBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXBwSWQoYXBwSWRzLCBhdXRoRGF0YSwgb3B0aW9ucykge1xuICBpZiAoYXV0aERhdGEudG9rZW4pIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlR3JhcGhBcHBJZChhcHBJZHMsIGF1dGhEYXRhLCBvcHRpb25zKTtcbiAgfVxufVxuXG4vLyBBIHByb21pc2V5IHdyYXBwZXIgZm9yIEZCIGdyYXBoIHJlcXVlc3RzLlxuZnVuY3Rpb24gZ3JhcGhSZXF1ZXN0KHBhdGgpIHtcbiAgcmV0dXJuIGh0dHBzUmVxdWVzdC5nZXQoJ2h0dHBzOi8vZ3JhcGguZmFjZWJvb2suY29tLycgKyBwYXRoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHZhbGlkYXRlQXBwSWQ6IHZhbGlkYXRlQXBwSWQsXG4gIHZhbGlkYXRlQXV0aERhdGE6IHZhbGlkYXRlQXV0aERhdGEsXG59O1xuIl19
|
|
@@ -6,6 +6,8 @@ const https = require('https');
|
|
|
6
6
|
|
|
7
7
|
const jwt = require('jsonwebtoken');
|
|
8
8
|
|
|
9
|
+
const authUtils = require('./utils');
|
|
10
|
+
|
|
9
11
|
const TOKEN_ISSUER = 'accounts.google.com';
|
|
10
12
|
const HTTPS_TOKEN_ISSUER = 'https://accounts.google.com';
|
|
11
13
|
let cache = {}; // Retrieve Google Signin Keys (with cache control)
|
|
@@ -49,18 +51,6 @@ function getGoogleKeyByKeyId(keyId) {
|
|
|
49
51
|
});
|
|
50
52
|
}
|
|
51
53
|
|
|
52
|
-
function getHeaderFromToken(token) {
|
|
53
|
-
const decodedToken = jwt.decode(token, {
|
|
54
|
-
complete: true
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
if (!decodedToken) {
|
|
58
|
-
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `provided token does not decode as JWT`);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
return decodedToken.header;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
54
|
async function verifyIdToken({
|
|
65
55
|
id_token: token,
|
|
66
56
|
id
|
|
@@ -74,7 +64,7 @@ async function verifyIdToken({
|
|
|
74
64
|
const {
|
|
75
65
|
kid: keyId,
|
|
76
66
|
alg: algorithm
|
|
77
|
-
} = getHeaderFromToken(token);
|
|
67
|
+
} = authUtils.getHeaderFromToken(token);
|
|
78
68
|
let jwtClaims;
|
|
79
69
|
const googleKey = await getGoogleKeyByKeyId(keyId);
|
|
80
70
|
|
|
@@ -164,4 +154,4 @@ function encodeLengthHex(n) {
|
|
|
164
154
|
const lengthOfLengthByte = 128 + nHex.length / 2;
|
|
165
155
|
return toHex(lengthOfLengthByte) + nHex;
|
|
166
156
|
}
|
|
167
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2dvb2dsZS5qcyJdLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJodHRwcyIsImp3dCIsIlRPS0VOX0lTU1VFUiIsIkhUVFBTX1RPS0VOX0lTU1VFUiIsImNhY2hlIiwiZ2V0R29vZ2xlS2V5QnlLZXlJZCIsImtleUlkIiwiZXhwaXJlc0F0IiwiRGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZ2V0IiwicmVzIiwiZGF0YSIsIm9uIiwiY2h1bmsiLCJ0b1N0cmluZyIsImtleXMiLCJKU09OIiwicGFyc2UiLCJwZW1zIiwicmVkdWNlIiwibiIsIm1vZHVsdXMiLCJlIiwiZXhwb3NhbnQiLCJraWQiLCJPYmplY3QiLCJhc3NpZ24iLCJyc2FQdWJsaWNLZXlUb1BFTSIsImhlYWRlcnMiLCJleHBpcmUiLCJtYXRjaCIsImdldFRpbWUiLCJOdW1iZXIiLCJnZXRIZWFkZXJGcm9tVG9rZW4iLCJ0b2tlbiIsImRlY29kZWRUb2tlbiIsImRlY29kZSIsImNvbXBsZXRlIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiaGVhZGVyIiwidmVyaWZ5SWRUb2tlbiIsImlkX3Rva2VuIiwiaWQiLCJjbGllbnRJZCIsImFsZyIsImFsZ29yaXRobSIsImp3dENsYWltcyIsImdvb2dsZUtleSIsInZlcmlmeSIsImFsZ29yaXRobXMiLCJhdWRpZW5jZSIsImV4Y2VwdGlvbiIsIm1lc3NhZ2UiLCJpc3MiLCJzdWIiLCJhdWQiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJvcHRpb25zIiwidmFsaWRhdGVBcHBJZCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtb2R1bHVzQjY0IiwiZXhwb25lbnRCNjQiLCJCdWZmZXIiLCJleHBvbmVudCIsIm1vZHVsdXNIZXgiLCJwcmVwYWRTaWduZWQiLCJleHBvbmVudEhleCIsIm1vZGxlbiIsImxlbmd0aCIsImV4cGxlbiIsImVuY29kZWRNb2RsZW4iLCJlbmNvZGVMZW5ndGhIZXgiLCJlbmNvZGVkRXhwbGVuIiwiZW5jb2RlZFB1YmtleSIsImRlciIsInBlbSIsImpvaW4iLCJoZXhTdHIiLCJtc2IiLCJ0b0hleCIsIm51bWJlciIsIm5zdHIiLCJuSGV4IiwibGVuZ3RoT2ZMZW5ndGhCeXRlIl0sIm1hcHBpbmdzIjoiQUFBQSxhLENBRUE7O0FBQ0EsSUFBSUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBRCxDQUFQLENBQXNCRCxLQUFsQzs7QUFFQSxNQUFNRSxLQUFLLEdBQUdELE9BQU8sQ0FBQyxPQUFELENBQXJCOztBQUNBLE1BQU1FLEdBQUcsR0FBR0YsT0FBTyxDQUFDLGNBQUQsQ0FBbkI7O0FBRUEsTUFBTUcsWUFBWSxHQUFHLHFCQUFyQjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLDZCQUEzQjtBQUVBLElBQUlDLEtBQUssR0FBRyxFQUFaLEMsQ0FFQTs7QUFDQSxTQUFTQyxtQkFBVCxDQUE2QkMsS0FBN0IsRUFBb0M7QUFDbEMsTUFBSUYsS0FBSyxDQUFDRSxLQUFELENBQUwsSUFBZ0JGLEtBQUssQ0FBQ0csU0FBTixHQUFrQixJQUFJQyxJQUFKLEVBQXRDLEVBQWtEO0FBQ2hELFdBQU9KLEtBQUssQ0FBQ0UsS0FBRCxDQUFaO0FBQ0Q7O0FBRUQsU0FBTyxJQUFJRyxPQUFKLENBQVksQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3RDWCxJQUFBQSxLQUFLLENBQ0ZZLEdBREgsQ0FDUSw0Q0FEUixFQUNxREMsR0FBRyxJQUFJO0FBQ3hELFVBQUlDLElBQUksR0FBRyxFQUFYO0FBQ0FELE1BQUFBLEdBQUcsQ0FBQ0UsRUFBSixDQUFPLE1BQVAsRUFBZUMsS0FBSyxJQUFJO0FBQ3RCRixRQUFBQSxJQUFJLElBQUlFLEtBQUssQ0FBQ0MsUUFBTixDQUFlLE1BQWYsQ0FBUjtBQUNELE9BRkQ7QUFHQUosTUFBQUEsR0FBRyxDQUFDRSxFQUFKLENBQU8sS0FBUCxFQUFjLE1BQU07QUFDbEIsY0FBTTtBQUFFRyxVQUFBQTtBQUFGLFlBQVdDLElBQUksQ0FBQ0MsS0FBTCxDQUFXTixJQUFYLENBQWpCO0FBQ0EsY0FBTU8sSUFBSSxHQUFHSCxJQUFJLENBQUNJLE1BQUwsQ0FDWCxDQUFDRCxJQUFELEVBQU87QUFBRUUsVUFBQUEsQ0FBQyxFQUFFQyxPQUFMO0FBQWNDLFVBQUFBLENBQUMsRUFBRUMsUUFBakI7QUFBMkJDLFVBQUFBO0FBQTNCLFNBQVAsS0FDRUMsTUFBTSxDQUFDQyxNQUFQLENBQWNSLElBQWQsRUFBb0I7QUFDbEIsV0FBQ00sR0FBRCxHQUFPRyxpQkFBaUIsQ0FBQ04sT0FBRCxFQUFVRSxRQUFWO0FBRE4sU0FBcEIsQ0FGUyxFQUtYLEVBTFcsQ0FBYjs7QUFRQSxZQUFJYixHQUFHLENBQUNrQixPQUFKLENBQVksZUFBWixDQUFKLEVBQWtDO0FBQ2hDLGNBQUlDLE1BQU0sR0FBR25CLEdBQUcsQ0FBQ2tCLE9BQUosQ0FBWSxlQUFaLEVBQTZCRSxLQUE3QixDQUFtQyxrQkFBbkMsQ0FBYjs7QUFFQSxjQUFJRCxNQUFKLEVBQVk7QUFDVjVCLFlBQUFBLEtBQUssR0FBR3dCLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JSLElBQWxCLEVBQXdCO0FBQzlCZCxjQUFBQSxTQUFTLEVBQUUsSUFBSUMsSUFBSixDQUFTLElBQUlBLElBQUosR0FBVzBCLE9BQVgsS0FBdUJDLE1BQU0sQ0FBQ0gsTUFBTSxDQUFDLENBQUQsQ0FBUCxDQUFOLEdBQW9CLElBQXBEO0FBRG1CLGFBQXhCLENBQVI7QUFHRDtBQUNGOztBQUVEdEIsUUFBQUEsT0FBTyxDQUFDVyxJQUFJLENBQUNmLEtBQUQsQ0FBTCxDQUFQO0FBQ0QsT0FyQkQ7QUFzQkQsS0E1QkgsRUE2QkdTLEVBN0JILENBNkJNLE9BN0JOLEVBNkJlSixNQTdCZjtBQThCRCxHQS9CTSxDQUFQO0FBZ0NEOztBQUVELFNBQVN5QixrQkFBVCxDQUE0QkMsS0FBNUIsRUFBbUM7QUFDakMsUUFBTUMsWUFBWSxHQUFHckMsR0FBRyxDQUFDc0MsTUFBSixDQUFXRixLQUFYLEVBQWtCO0FBQUVHLElBQUFBLFFBQVEsRUFBRTtBQUFaLEdBQWxCLENBQXJCOztBQUVBLE1BQUksQ0FBQ0YsWUFBTCxFQUFtQjtBQUNqQixVQUFNLElBQUl4QyxLQUFLLENBQUMyQyxLQUFWLENBQWdCM0MsS0FBSyxDQUFDMkMsS0FBTixDQUFZQyxnQkFBNUIsRUFBK0MsdUNBQS9DLENBQU47QUFDRDs7QUFFRCxTQUFPSixZQUFZLENBQUNLLE1BQXBCO0FBQ0Q7O0FBRUQsZUFBZUMsYUFBZixDQUE2QjtBQUFFQyxFQUFBQSxRQUFRLEVBQUVSLEtBQVo7QUFBbUJTLEVBQUFBO0FBQW5CLENBQTdCLEVBQXNEO0FBQUVDLEVBQUFBO0FBQUYsQ0FBdEQsRUFBb0U7QUFDbEUsTUFBSSxDQUFDVixLQUFMLEVBQVk7QUFDVixVQUFNLElBQUl2QyxLQUFLLENBQUMyQyxLQUFWLENBQWdCM0MsS0FBSyxDQUFDMkMsS0FBTixDQUFZQyxnQkFBNUIsRUFBK0Msb0NBQS9DLENBQU47QUFDRDs7QUFFRCxRQUFNO0FBQUVmLElBQUFBLEdBQUcsRUFBRXJCLEtBQVA7QUFBYzBDLElBQUFBLEdBQUcsRUFBRUM7QUFBbkIsTUFBaUNiLGtCQUFrQixDQUFDQyxLQUFELENBQXpEO0FBQ0EsTUFBSWEsU0FBSjtBQUNBLFFBQU1DLFNBQVMsR0FBRyxNQUFNOUMsbUJBQW1CLENBQUNDLEtBQUQsQ0FBM0M7O0FBRUEsTUFBSTtBQUNGNEMsSUFBQUEsU0FBUyxHQUFHakQsR0FBRyxDQUFDbUQsTUFBSixDQUFXZixLQUFYLEVBQWtCYyxTQUFsQixFQUE2QjtBQUN2Q0UsTUFBQUEsVUFBVSxFQUFFSixTQUQyQjtBQUV2Q0ssTUFBQUEsUUFBUSxFQUFFUDtBQUY2QixLQUE3QixDQUFaO0FBSUQsR0FMRCxDQUtFLE9BQU9RLFNBQVAsRUFBa0I7QUFDbEIsVUFBTUMsT0FBTyxHQUFHRCxTQUFTLENBQUNDLE9BQTFCO0FBQ0EsVUFBTSxJQUFJMUQsS0FBSyxDQUFDMkMsS0FBVixDQUFnQjNDLEtBQUssQ0FBQzJDLEtBQU4sQ0FBWUMsZ0JBQTVCLEVBQStDLEdBQUVjLE9BQVEsRUFBekQsQ0FBTjtBQUNEOztBQUVELE1BQUlOLFNBQVMsQ0FBQ08sR0FBVixLQUFrQnZELFlBQWxCLElBQWtDZ0QsU0FBUyxDQUFDTyxHQUFWLEtBQWtCdEQsa0JBQXhELEVBQTRFO0FBQzFFLFVBQU0sSUFBSUwsS0FBSyxDQUFDMkMsS0FBVixDQUNKM0MsS0FBSyxDQUFDMkMsS0FBTixDQUFZQyxnQkFEUixFQUVILHVEQUFzRHhDLFlBQWEsT0FBTUMsa0JBQW1CLFlBQVcrQyxTQUFTLENBQUNPLEdBQUksRUFGbEgsQ0FBTjtBQUlEOztBQUVELE1BQUlQLFNBQVMsQ0FBQ1EsR0FBVixLQUFrQlosRUFBdEIsRUFBMEI7QUFDeEIsVUFBTSxJQUFJaEQsS0FBSyxDQUFDMkMsS0FBVixDQUFnQjNDLEtBQUssQ0FBQzJDLEtBQU4sQ0FBWUMsZ0JBQTVCLEVBQStDLHFDQUEvQyxDQUFOO0FBQ0Q7O0FBRUQsTUFBSUssUUFBUSxJQUFJRyxTQUFTLENBQUNTLEdBQVYsS0FBa0JaLFFBQWxDLEVBQTRDO0FBQzFDLFVBQU0sSUFBSWpELEtBQUssQ0FBQzJDLEtBQVYsQ0FDSjNDLEtBQUssQ0FBQzJDLEtBQU4sQ0FBWUMsZ0JBRFIsRUFFSCw0Q0FGRyxDQUFOO0FBSUQ7O0FBRUQsU0FBT1EsU0FBUDtBQUNELEMsQ0FFRDs7O0FBQ0EsU0FBU1UsZ0JBQVQsQ0FBMEJDLFFBQTFCLEVBQW9DQyxPQUFPLEdBQUcsRUFBOUMsRUFBa0Q7QUFDaEQsU0FBT2xCLGFBQWEsQ0FBQ2lCLFFBQUQsRUFBV0MsT0FBWCxDQUFwQjtBQUNELEMsQ0FFRDs7O0FBQ0EsU0FBU0MsYUFBVCxHQUF5QjtBQUN2QixTQUFPdEQsT0FBTyxDQUFDQyxPQUFSLEVBQVA7QUFDRDs7QUFFRHNELE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUNmRixFQUFBQSxhQUFhLEVBQUVBLGFBREE7QUFFZkgsRUFBQUEsZ0JBQWdCLEVBQUVBO0FBRkgsQ0FBakIsQyxDQUtBOztBQUNBLFNBQVM5QixpQkFBVCxDQUEyQm9DLFVBQTNCLEVBQXVDQyxXQUF2QyxFQUFvRDtBQUNsRCxRQUFNM0MsT0FBTyxHQUFHLElBQUk0QyxNQUFKLENBQVdGLFVBQVgsRUFBdUIsUUFBdkIsQ0FBaEI7QUFDQSxRQUFNRyxRQUFRLEdBQUcsSUFBSUQsTUFBSixDQUFXRCxXQUFYLEVBQXdCLFFBQXhCLENBQWpCO0FBQ0EsUUFBTUcsVUFBVSxHQUFHQyxZQUFZLENBQUMvQyxPQUFPLENBQUNQLFFBQVIsQ0FBaUIsS0FBakIsQ0FBRCxDQUEvQjtBQUNBLFFBQU11RCxXQUFXLEdBQUdELFlBQVksQ0FBQ0YsUUFBUSxDQUFDcEQsUUFBVCxDQUFrQixLQUFsQixDQUFELENBQWhDO0FBQ0EsUUFBTXdELE1BQU0sR0FBR0gsVUFBVSxDQUFDSSxNQUFYLEdBQW9CLENBQW5DO0FBQ0EsUUFBTUMsTUFBTSxHQUFHSCxXQUFXLENBQUNFLE1BQVosR0FBcUIsQ0FBcEM7QUFFQSxRQUFNRSxhQUFhLEdBQUdDLGVBQWUsQ0FBQ0osTUFBRCxDQUFyQztBQUNBLFFBQU1LLGFBQWEsR0FBR0QsZUFBZSxDQUFDRixNQUFELENBQXJDO0FBQ0EsUUFBTUksYUFBYSxHQUNqQixPQUNBRixlQUFlLENBQUNKLE1BQU0sR0FBR0UsTUFBVCxHQUFrQkMsYUFBYSxDQUFDRixNQUFkLEdBQXVCLENBQXpDLEdBQTZDSSxhQUFhLENBQUNKLE1BQWQsR0FBdUIsQ0FBcEUsR0FBd0UsQ0FBekUsQ0FEZixHQUVBLElBRkEsR0FHQUUsYUFIQSxHQUlBTixVQUpBLEdBS0EsSUFMQSxHQU1BUSxhQU5BLEdBT0FOLFdBUkY7QUFVQSxRQUFNUSxHQUFHLEdBQUcsSUFBSVosTUFBSixDQUFXVyxhQUFYLEVBQTBCLEtBQTFCLEVBQWlDOUQsUUFBakMsQ0FBMEMsUUFBMUMsQ0FBWjtBQUVBLE1BQUlnRSxHQUFHLEdBQUcsa0NBQVY7QUFDQUEsRUFBQUEsR0FBRyxJQUFLLEdBQUVELEdBQUcsQ0FBQy9DLEtBQUosQ0FBVSxVQUFWLEVBQXNCaUQsSUFBdEIsQ0FBMkIsSUFBM0IsQ0FBaUMsRUFBM0M7QUFDQUQsRUFBQUEsR0FBRyxJQUFJLGtDQUFQO0FBQ0EsU0FBT0EsR0FBUDtBQUNEOztBQUVELFNBQVNWLFlBQVQsQ0FBc0JZLE1BQXRCLEVBQThCO0FBQzVCLFFBQU1DLEdBQUcsR0FBR0QsTUFBTSxDQUFDLENBQUQsQ0FBbEI7O0FBQ0EsTUFBSUMsR0FBRyxHQUFHLEdBQU4sSUFBYUEsR0FBRyxHQUFHLEdBQXZCLEVBQTRCO0FBQzFCLFdBQVEsS0FBSUQsTUFBTyxFQUFuQjtBQUNEOztBQUNELFNBQU9BLE1BQVA7QUFDRDs7QUFFRCxTQUFTRSxLQUFULENBQWVDLE1BQWYsRUFBdUI7QUFDckIsUUFBTUMsSUFBSSxHQUFHRCxNQUFNLENBQUNyRSxRQUFQLENBQWdCLEVBQWhCLENBQWI7O0FBQ0EsTUFBSXNFLElBQUksQ0FBQ2IsTUFBTCxHQUFjLENBQWxCLEVBQXFCO0FBQ25CLFdBQVEsSUFBR2EsSUFBSyxFQUFoQjtBQUNEOztBQUNELFNBQU9BLElBQVA7QUFDRDs7QUFFRCxTQUFTVixlQUFULENBQXlCdEQsQ0FBekIsRUFBNEI7QUFDMUIsTUFBSUEsQ0FBQyxJQUFJLEdBQVQsRUFBYztBQUNaLFdBQU84RCxLQUFLLENBQUM5RCxDQUFELENBQVo7QUFDRDs7QUFDRCxRQUFNaUUsSUFBSSxHQUFHSCxLQUFLLENBQUM5RCxDQUFELENBQWxCO0FBQ0EsUUFBTWtFLGtCQUFrQixHQUFHLE1BQU1ELElBQUksQ0FBQ2QsTUFBTCxHQUFjLENBQS9DO0FBQ0EsU0FBT1csS0FBSyxDQUFDSSxrQkFBRCxDQUFMLEdBQTRCRCxJQUFuQztBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgdGhlIGdvb2dsZSBBUEkuXG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5cbmNvbnN0IGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbmNvbnN0IGp3dCA9IHJlcXVpcmUoJ2pzb253ZWJ0b2tlbicpO1xuXG5jb25zdCBUT0tFTl9JU1NVRVIgPSAnYWNjb3VudHMuZ29vZ2xlLmNvbSc7XG5jb25zdCBIVFRQU19UT0tFTl9JU1NVRVIgPSAnaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tJztcblxubGV0IGNhY2hlID0ge307XG5cbi8vIFJldHJpZXZlIEdvb2dsZSBTaWduaW4gS2V5cyAod2l0aCBjYWNoZSBjb250cm9sKVxuZnVuY3Rpb24gZ2V0R29vZ2xlS2V5QnlLZXlJZChrZXlJZCkge1xuICBpZiAoY2FjaGVba2V5SWRdICYmIGNhY2hlLmV4cGlyZXNBdCA+IG5ldyBEYXRlKCkpIHtcbiAgICByZXR1cm4gY2FjaGVba2V5SWRdO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBodHRwc1xuICAgICAgLmdldChgaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vb2F1dGgyL3YzL2NlcnRzYCwgcmVzID0+IHtcbiAgICAgICAgbGV0IGRhdGEgPSAnJztcbiAgICAgICAgcmVzLm9uKCdkYXRhJywgY2h1bmsgPT4ge1xuICAgICAgICAgIGRhdGEgKz0gY2h1bmsudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsga2V5cyB9ID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICBjb25zdCBwZW1zID0ga2V5cy5yZWR1Y2UoXG4gICAgICAgICAgICAocGVtcywgeyBuOiBtb2R1bHVzLCBlOiBleHBvc2FudCwga2lkIH0pID0+XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocGVtcywge1xuICAgICAgICAgICAgICAgIFtraWRdOiByc2FQdWJsaWNLZXlUb1BFTShtb2R1bHVzLCBleHBvc2FudCksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHJlcy5oZWFkZXJzWydjYWNoZS1jb250cm9sJ10pIHtcbiAgICAgICAgICAgIHZhciBleHBpcmUgPSByZXMuaGVhZGVyc1snY2FjaGUtY29udHJvbCddLm1hdGNoKC9tYXgtYWdlPShbMC05XSspLyk7XG5cbiAgICAgICAgICAgIGlmIChleHBpcmUpIHtcbiAgICAgICAgICAgICAgY2FjaGUgPSBPYmplY3QuYXNzaWduKHt9LCBwZW1zLCB7XG4gICAgICAgICAgICAgICAgZXhwaXJlc0F0OiBuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSArIE51bWJlcihleHBpcmVbMV0pICogMTAwMCksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUocGVtc1trZXlJZF0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEhlYWRlckZyb21Ub2tlbih0b2tlbikge1xuICBjb25zdCBkZWNvZGVkVG9rZW4gPSBqd3QuZGVjb2RlKHRva2VuLCB7IGNvbXBsZXRlOiB0cnVlIH0pO1xuXG4gIGlmICghZGVjb2RlZFRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsIGBwcm92aWRlZCB0b2tlbiBkb2VzIG5vdCBkZWNvZGUgYXMgSldUYCk7XG4gIH1cblxuICByZXR1cm4gZGVjb2RlZFRva2VuLmhlYWRlcjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdmVyaWZ5SWRUb2tlbih7IGlkX3Rva2VuOiB0b2tlbiwgaWQgfSwgeyBjbGllbnRJZCB9KSB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgYGlkIHRva2VuIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci5gKTtcbiAgfVxuXG4gIGNvbnN0IHsga2lkOiBrZXlJZCwgYWxnOiBhbGdvcml0aG0gfSA9IGdldEhlYWRlckZyb21Ub2tlbih0b2tlbik7XG4gIGxldCBqd3RDbGFpbXM7XG4gIGNvbnN0IGdvb2dsZUtleSA9IGF3YWl0IGdldEdvb2dsZUtleUJ5S2V5SWQoa2V5SWQpO1xuXG4gIHRyeSB7XG4gICAgand0Q2xhaW1zID0gand0LnZlcmlmeSh0b2tlbiwgZ29vZ2xlS2V5LCB7XG4gICAgICBhbGdvcml0aG1zOiBhbGdvcml0aG0sXG4gICAgICBhdWRpZW5jZTogY2xpZW50SWQsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBleGNlcHRpb24ubWVzc2FnZTtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgYCR7bWVzc2FnZX1gKTtcbiAgfVxuXG4gIGlmIChqd3RDbGFpbXMuaXNzICE9PSBUT0tFTl9JU1NVRVIgJiYgand0Q2xhaW1zLmlzcyAhPT0gSFRUUFNfVE9LRU5fSVNTVUVSKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgIGBpZCB0b2tlbiBub3QgaXNzdWVkIGJ5IGNvcnJlY3QgcHJvdmlkZXIgLSBleHBlY3RlZDogJHtUT0tFTl9JU1NVRVJ9IG9yICR7SFRUUFNfVE9LRU5fSVNTVUVSfSB8IGZyb206ICR7and0Q2xhaW1zLmlzc31gXG4gICAgKTtcbiAgfVxuXG4gIGlmIChqd3RDbGFpbXMuc3ViICE9PSBpZCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCBgYXV0aCBkYXRhIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci5gKTtcbiAgfVxuXG4gIGlmIChjbGllbnRJZCAmJiBqd3RDbGFpbXMuYXVkICE9PSBjbGllbnRJZCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICBgaWQgdG9rZW4gbm90IGF1dGhvcml6ZWQgZm9yIHRoaXMgY2xpZW50SWQuYFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gand0Q2xhaW1zO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmIHRoaXMgdXNlciBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gdmVyaWZ5SWRUb2tlbihhdXRoRGF0YSwgb3B0aW9ucyk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWYgdGhpcyBhcHAgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUFwcElkKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkOiB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhOiB2YWxpZGF0ZUF1dGhEYXRhLFxufTtcblxuLy8gSGVscGVycyBmdW5jdGlvbnMgdG8gY29udmVydCB0aGUgUlNBIGNlcnRzIHRvIFBFTSAoZnJvbSBqd2tzLXJzYSlcbmZ1bmN0aW9uIHJzYVB1YmxpY0tleVRvUEVNKG1vZHVsdXNCNjQsIGV4cG9uZW50QjY0KSB7XG4gIGNvbnN0IG1vZHVsdXMgPSBuZXcgQnVmZmVyKG1vZHVsdXNCNjQsICdiYXNlNjQnKTtcbiAgY29uc3QgZXhwb25lbnQgPSBuZXcgQnVmZmVyKGV4cG9uZW50QjY0LCAnYmFzZTY0Jyk7XG4gIGNvbnN0IG1vZHVsdXNIZXggPSBwcmVwYWRTaWduZWQobW9kdWx1cy50b1N0cmluZygnaGV4JykpO1xuICBjb25zdCBleHBvbmVudEhleCA9IHByZXBhZFNpZ25lZChleHBvbmVudC50b1N0cmluZygnaGV4JykpO1xuICBjb25zdCBtb2RsZW4gPSBtb2R1bHVzSGV4Lmxlbmd0aCAvIDI7XG4gIGNvbnN0IGV4cGxlbiA9IGV4cG9uZW50SGV4Lmxlbmd0aCAvIDI7XG5cbiAgY29uc3QgZW5jb2RlZE1vZGxlbiA9IGVuY29kZUxlbmd0aEhleChtb2RsZW4pO1xuICBjb25zdCBlbmNvZGVkRXhwbGVuID0gZW5jb2RlTGVuZ3RoSGV4KGV4cGxlbik7XG4gIGNvbnN0IGVuY29kZWRQdWJrZXkgPVxuICAgICczMCcgK1xuICAgIGVuY29kZUxlbmd0aEhleChtb2RsZW4gKyBleHBsZW4gKyBlbmNvZGVkTW9kbGVuLmxlbmd0aCAvIDIgKyBlbmNvZGVkRXhwbGVuLmxlbmd0aCAvIDIgKyAyKSArXG4gICAgJzAyJyArXG4gICAgZW5jb2RlZE1vZGxlbiArXG4gICAgbW9kdWx1c0hleCArXG4gICAgJzAyJyArXG4gICAgZW5jb2RlZEV4cGxlbiArXG4gICAgZXhwb25lbnRIZXg7XG5cbiAgY29uc3QgZGVyID0gbmV3IEJ1ZmZlcihlbmNvZGVkUHVia2V5LCAnaGV4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gIGxldCBwZW0gPSAnLS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tXFxuJztcbiAgcGVtICs9IGAke2Rlci5tYXRjaCgvLnsxLDY0fS9nKS5qb2luKCdcXG4nKX1gO1xuICBwZW0gKz0gJ1xcbi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS1cXG4nO1xuICByZXR1cm4gcGVtO1xufVxuXG5mdW5jdGlvbiBwcmVwYWRTaWduZWQoaGV4U3RyKSB7XG4gIGNvbnN0IG1zYiA9IGhleFN0clswXTtcbiAgaWYgKG1zYiA8ICcwJyB8fCBtc2IgPiAnNycpIHtcbiAgICByZXR1cm4gYDAwJHtoZXhTdHJ9YDtcbiAgfVxuICByZXR1cm4gaGV4U3RyO1xufVxuXG5mdW5jdGlvbiB0b0hleChudW1iZXIpIHtcbiAgY29uc3QgbnN0ciA9IG51bWJlci50b1N0cmluZygxNik7XG4gIGlmIChuc3RyLmxlbmd0aCAlIDIpIHtcbiAgICByZXR1cm4gYDAke25zdHJ9YDtcbiAgfVxuICByZXR1cm4gbnN0cjtcbn1cblxuZnVuY3Rpb24gZW5jb2RlTGVuZ3RoSGV4KG4pIHtcbiAgaWYgKG4gPD0gMTI3KSB7XG4gICAgcmV0dXJuIHRvSGV4KG4pO1xuICB9XG4gIGNvbnN0IG5IZXggPSB0b0hleChuKTtcbiAgY29uc3QgbGVuZ3RoT2ZMZW5ndGhCeXRlID0gMTI4ICsgbkhleC5sZW5ndGggLyAyO1xuICByZXR1cm4gdG9IZXgobGVuZ3RoT2ZMZW5ndGhCeXRlKSArIG5IZXg7XG59XG4iXX0=
|
|
157
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2dvb2dsZS5qcyJdLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJodHRwcyIsImp3dCIsImF1dGhVdGlscyIsIlRPS0VOX0lTU1VFUiIsIkhUVFBTX1RPS0VOX0lTU1VFUiIsImNhY2hlIiwiZ2V0R29vZ2xlS2V5QnlLZXlJZCIsImtleUlkIiwiZXhwaXJlc0F0IiwiRGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZ2V0IiwicmVzIiwiZGF0YSIsIm9uIiwiY2h1bmsiLCJ0b1N0cmluZyIsImtleXMiLCJKU09OIiwicGFyc2UiLCJwZW1zIiwicmVkdWNlIiwibiIsIm1vZHVsdXMiLCJlIiwiZXhwb3NhbnQiLCJraWQiLCJPYmplY3QiLCJhc3NpZ24iLCJyc2FQdWJsaWNLZXlUb1BFTSIsImhlYWRlcnMiLCJleHBpcmUiLCJtYXRjaCIsImdldFRpbWUiLCJOdW1iZXIiLCJ2ZXJpZnlJZFRva2VuIiwiaWRfdG9rZW4iLCJ0b2tlbiIsImlkIiwiY2xpZW50SWQiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJhbGciLCJhbGdvcml0aG0iLCJnZXRIZWFkZXJGcm9tVG9rZW4iLCJqd3RDbGFpbXMiLCJnb29nbGVLZXkiLCJ2ZXJpZnkiLCJhbGdvcml0aG1zIiwiYXVkaWVuY2UiLCJleGNlcHRpb24iLCJtZXNzYWdlIiwiaXNzIiwic3ViIiwiYXVkIiwidmFsaWRhdGVBdXRoRGF0YSIsImF1dGhEYXRhIiwib3B0aW9ucyIsInZhbGlkYXRlQXBwSWQiLCJtb2R1bGUiLCJleHBvcnRzIiwibW9kdWx1c0I2NCIsImV4cG9uZW50QjY0IiwiQnVmZmVyIiwiZXhwb25lbnQiLCJtb2R1bHVzSGV4IiwicHJlcGFkU2lnbmVkIiwiZXhwb25lbnRIZXgiLCJtb2RsZW4iLCJsZW5ndGgiLCJleHBsZW4iLCJlbmNvZGVkTW9kbGVuIiwiZW5jb2RlTGVuZ3RoSGV4IiwiZW5jb2RlZEV4cGxlbiIsImVuY29kZWRQdWJrZXkiLCJkZXIiLCJwZW0iLCJqb2luIiwiaGV4U3RyIiwibXNiIiwidG9IZXgiLCJudW1iZXIiLCJuc3RyIiwibkhleCIsImxlbmd0aE9mTGVuZ3RoQnl0ZSJdLCJtYXBwaW5ncyI6IkFBQUEsYSxDQUVBOztBQUNBLElBQUlBLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQUQsQ0FBUCxDQUFzQkQsS0FBbEM7O0FBRUEsTUFBTUUsS0FBSyxHQUFHRCxPQUFPLENBQUMsT0FBRCxDQUFyQjs7QUFDQSxNQUFNRSxHQUFHLEdBQUdGLE9BQU8sQ0FBQyxjQUFELENBQW5COztBQUNBLE1BQU1HLFNBQVMsR0FBR0gsT0FBTyxDQUFDLFNBQUQsQ0FBekI7O0FBRUEsTUFBTUksWUFBWSxHQUFHLHFCQUFyQjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLDZCQUEzQjtBQUVBLElBQUlDLEtBQUssR0FBRyxFQUFaLEMsQ0FFQTs7QUFDQSxTQUFTQyxtQkFBVCxDQUE2QkMsS0FBN0IsRUFBb0M7QUFDbEMsTUFBSUYsS0FBSyxDQUFDRSxLQUFELENBQUwsSUFBZ0JGLEtBQUssQ0FBQ0csU0FBTixHQUFrQixJQUFJQyxJQUFKLEVBQXRDLEVBQWtEO0FBQ2hELFdBQU9KLEtBQUssQ0FBQ0UsS0FBRCxDQUFaO0FBQ0Q7O0FBRUQsU0FBTyxJQUFJRyxPQUFKLENBQVksQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3RDWixJQUFBQSxLQUFLLENBQ0ZhLEdBREgsQ0FDUSw0Q0FEUixFQUNxREMsR0FBRyxJQUFJO0FBQ3hELFVBQUlDLElBQUksR0FBRyxFQUFYO0FBQ0FELE1BQUFBLEdBQUcsQ0FBQ0UsRUFBSixDQUFPLE1BQVAsRUFBZUMsS0FBSyxJQUFJO0FBQ3RCRixRQUFBQSxJQUFJLElBQUlFLEtBQUssQ0FBQ0MsUUFBTixDQUFlLE1BQWYsQ0FBUjtBQUNELE9BRkQ7QUFHQUosTUFBQUEsR0FBRyxDQUFDRSxFQUFKLENBQU8sS0FBUCxFQUFjLE1BQU07QUFDbEIsY0FBTTtBQUFFRyxVQUFBQTtBQUFGLFlBQVdD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R0QsTUFBTSxDQUFDakUsUUFBUCxDQUFnQixFQUFoQixDQUFiOztBQUNBLE1BQUlrRSxJQUFJLENBQUNiLE1BQUwsR0FBYyxDQUFsQixFQUFxQjtBQUNuQixXQUFRLElBQUdhLElBQUssRUFBaEI7QUFDRDs7QUFDRCxTQUFPQSxJQUFQO0FBQ0Q7O0FBRUQsU0FBU1YsZUFBVCxDQUF5QmxELENBQXpCLEVBQTRCO0FBQzFCLE1BQUlBLENBQUMsSUFBSSxHQUFULEVBQWM7QUFDWixXQUFPMEQsS0FBSyxDQUFDMUQsQ0FBRCxDQUFaO0FBQ0Q7O0FBQ0QsUUFBTTZELElBQUksR0FBR0gsS0FBSyxDQUFDMUQsQ0FBRCxDQUFsQjtBQUNBLFFBQU04RCxrQkFBa0IsR0FBRyxNQUFNRCxJQUFJLENBQUNkLE1BQUwsR0FBYyxDQUEvQztBQUNBLFNBQU9XLEtBQUssQ0FBQ0ksa0JBQUQsQ0FBTCxHQUE0QkQsSUFBbkM7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIHRoZSBnb29nbGUgQVBJLlxudmFyIFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpLlBhcnNlO1xuXG5jb25zdCBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG5jb25zdCBqd3QgPSByZXF1aXJlKCdqc29ud2VidG9rZW4nKTtcbmNvbnN0IGF1dGhVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuY29uc3QgVE9LRU5fSVNTVUVSID0gJ2FjY291bnRzLmdvb2dsZS5jb20nO1xuY29uc3QgSFRUUFNfVE9LRU5fSVNTVUVSID0gJ2h0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbSc7XG5cbmxldCBjYWNoZSA9IHt9O1xuXG4vLyBSZXRyaWV2ZSBHb29nbGUgU2lnbmluIEtleXMgKHdpdGggY2FjaGUgY29udHJvbClcbmZ1bmN0aW9uIGdldEdvb2dsZUtleUJ5S2V5SWQoa2V5SWQpIHtcbiAgaWYgKGNhY2hlW2tleUlkXSAmJiBjYWNoZS5leHBpcmVzQXQgPiBuZXcgRGF0ZSgpKSB7XG4gICAgcmV0dXJuIGNhY2hlW2tleUlkXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaHR0cHNcbiAgICAgIC5nZXQoYGh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL29hdXRoMi92My9jZXJ0c2AsIHJlcyA9PiB7XG4gICAgICAgIGxldCBkYXRhID0gJyc7XG4gICAgICAgIHJlcy5vbignZGF0YScsIGNodW5rID0+IHtcbiAgICAgICAgICBkYXRhICs9IGNodW5rLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGtleXMgfSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgY29uc3QgcGVtcyA9IGtleXMucmVkdWNlKFxuICAgICAgICAgICAgKHBlbXMsIHsgbjogbW9kdWx1cywgZTogZXhwb3NhbnQsIGtpZCB9KSA9PlxuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHBlbXMsIHtcbiAgICAgICAgICAgICAgICBba2lkXTogcnNhUHVibGljS2V5VG9QRU0obW9kdWx1cywgZXhwb3NhbnQpLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChyZXMuaGVhZGVyc1snY2FjaGUtY29udHJvbCddKSB7XG4gICAgICAgICAgICB2YXIgZXhwaXJlID0gcmVzLmhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXS5tYXRjaCgvbWF4LWFnZT0oWzAtOV0rKS8pO1xuXG4gICAgICAgICAgICBpZiAoZXhwaXJlKSB7XG4gICAgICAgICAgICAgIGNhY2hlID0gT2JqZWN0LmFzc2lnbih7fSwgcGVtcywge1xuICAgICAgICAgICAgICAgIGV4cGlyZXNBdDogbmV3IERhdGUobmV3IERhdGUoKS5nZXRUaW1lKCkgKyBOdW1iZXIoZXhwaXJlWzFdKSAqIDEwMDApLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKHBlbXNba2V5SWRdKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlJZFRva2VuKHsgaWRfdG9rZW46IHRva2VuLCBpZCB9LCB7IGNsaWVudElkIH0pIHtcbiAgaWYgKCF0b2tlbikge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCBgaWQgdG9rZW4gaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLmApO1xuICB9XG5cbiAgY29uc3QgeyBraWQ6IGtleUlkLCBhbGc6IGFsZ29yaXRobSB9ID0gYXV0aFV0aWxzLmdldEhlYWRlckZyb21Ub2tlbih0b2tlbik7XG4gIGxldCBqd3RDbGFpbXM7XG4gIGNvbnN0IGdvb2dsZUtleSA9IGF3YWl0IGdldEdvb2dsZUtleUJ5S2V5SWQoa2V5SWQpO1xuXG4gIHRyeSB7XG4gICAgand0Q2xhaW1zID0gand0LnZlcmlmeSh0b2tlbiwgZ29vZ2xlS2V5LCB7XG4gICAgICBhbGdvcml0aG1zOiBhbGdvcml0aG0sXG4gICAgICBhdWRpZW5jZTogY2xpZW50SWQsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBleGNlcHRpb24ubWVzc2FnZTtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgYCR7bWVzc2FnZX1gKTtcbiAgfVxuXG4gIGlmIChqd3RDbGFpbXMuaXNzICE9PSBUT0tFTl9JU1NVRVIgJiYgand0Q2xhaW1zLmlzcyAhPT0gSFRUUFNfVE9LRU5fSVNTVUVSKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgIGBpZCB0b2tlbiBub3QgaXNzdWVkIGJ5IGNvcnJlY3QgcHJvdmlkZXIgLSBleHBlY3RlZDogJHtUT0tFTl9JU1NVRVJ9IG9yICR7SFRUUFNfVE9LRU5fSVNTVUVSfSB8IGZyb206ICR7and0Q2xhaW1zLmlzc31gXG4gICAgKTtcbiAgfVxuXG4gIGlmIChqd3RDbGFpbXMuc3ViICE9PSBpZCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCBgYXV0aCBkYXRhIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci5gKTtcbiAgfVxuXG4gIGlmIChjbGllbnRJZCAmJiBqd3RDbGFpbXMuYXVkICE9PSBjbGllbnRJZCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICBgaWQgdG9rZW4gbm90IGF1dGhvcml6ZWQgZm9yIHRoaXMgY2xpZW50SWQuYFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gand0Q2xhaW1zO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmIHRoaXMgdXNlciBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gdmVyaWZ5SWRUb2tlbihhdXRoRGF0YSwgb3B0aW9ucyk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWYgdGhpcyBhcHAgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUFwcElkKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkOiB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhOiB2YWxpZGF0ZUF1dGhEYXRhLFxufTtcblxuLy8gSGVscGVycyBmdW5jdGlvbnMgdG8gY29udmVydCB0aGUgUlNBIGNlcnRzIHRvIFBFTSAoZnJvbSBqd2tzLXJzYSlcbmZ1bmN0aW9uIHJzYVB1YmxpY0tleVRvUEVNKG1vZHVsdXNCNjQsIGV4cG9uZW50QjY0KSB7XG4gIGNvbnN0IG1vZHVsdXMgPSBuZXcgQnVmZmVyKG1vZHVsdXNCNjQsICdiYXNlNjQnKTtcbiAgY29uc3QgZXhwb25lbnQgPSBuZXcgQnVmZmVyKGV4cG9uZW50QjY0LCAnYmFzZTY0Jyk7XG4gIGNvbnN0IG1vZHVsdXNIZXggPSBwcmVwYWRTaWduZWQobW9kdWx1cy50b1N0cmluZygnaGV4JykpO1xuICBjb25zdCBleHBvbmVudEhleCA9IHByZXBhZFNpZ25lZChleHBvbmVudC50b1N0cmluZygnaGV4JykpO1xuICBjb25zdCBtb2RsZW4gPSBtb2R1bHVzSGV4Lmxlbmd0aCAvIDI7XG4gIGNvbnN0IGV4cGxlbiA9IGV4cG9uZW50SGV4Lmxlbmd0aCAvIDI7XG5cbiAgY29uc3QgZW5jb2RlZE1vZGxlbiA9IGVuY29kZUxlbmd0aEhleChtb2RsZW4pO1xuICBjb25zdCBlbmNvZGVkRXhwbGVuID0gZW5jb2RlTGVuZ3RoSGV4KGV4cGxlbik7XG4gIGNvbnN0IGVuY29kZWRQdWJrZXkgPVxuICAgICczMCcgK1xuICAgIGVuY29kZUxlbmd0aEhleChtb2RsZW4gKyBleHBsZW4gKyBlbmNvZGVkTW9kbGVuLmxlbmd0aCAvIDIgKyBlbmNvZGVkRXhwbGVuLmxlbmd0aCAvIDIgKyAyKSArXG4gICAgJzAyJyArXG4gICAgZW5jb2RlZE1vZGxlbiArXG4gICAgbW9kdWx1c0hleCArXG4gICAgJzAyJyArXG4gICAgZW5jb2RlZEV4cGxlbiArXG4gICAgZXhwb25lbnRIZXg7XG5cbiAgY29uc3QgZGVyID0gbmV3IEJ1ZmZlcihlbmNvZGVkUHVia2V5LCAnaGV4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gIGxldCBwZW0gPSAnLS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tXFxuJztcbiAgcGVtICs9IGAke2Rlci5tYXRjaCgvLnsxLDY0fS9nKS5qb2luKCdcXG4nKX1gO1xuICBwZW0gKz0gJ1xcbi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS1cXG4nO1xuICByZXR1cm4gcGVtO1xufVxuXG5mdW5jdGlvbiBwcmVwYWRTaWduZWQoaGV4U3RyKSB7XG4gIGNvbnN0IG1zYiA9IGhleFN0clswXTtcbiAgaWYgKG1zYiA8ICcwJyB8fCBtc2IgPiAnNycpIHtcbiAgICByZXR1cm4gYDAwJHtoZXhTdHJ9YDtcbiAgfVxuICByZXR1cm4gaGV4U3RyO1xufVxuXG5mdW5jdGlvbiB0b0hleChudW1iZXIpIHtcbiAgY29uc3QgbnN0ciA9IG51bWJlci50b1N0cmluZygxNik7XG4gIGlmIChuc3RyLmxlbmd0aCAlIDIpIHtcbiAgICByZXR1cm4gYDAke25zdHJ9YDtcbiAgfVxuICByZXR1cm4gbnN0cjtcbn1cblxuZnVuY3Rpb24gZW5jb2RlTGVuZ3RoSGV4KG4pIHtcbiAgaWYgKG4gPD0gMTI3KSB7XG4gICAgcmV0dXJuIHRvSGV4KG4pO1xuICB9XG4gIGNvbnN0IG5IZXggPSB0b0hleChuKTtcbiAgY29uc3QgbGVuZ3RoT2ZMZW5ndGhCeXRlID0gMTI4ICsgbkhleC5sZW5ndGggLyAyO1xuICByZXR1cm4gdG9IZXgobGVuZ3RoT2ZMZW5ndGhCeXRlKSArIG5IZXg7XG59XG4iXX0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const jwt = require('jsonwebtoken');
|
|
4
|
+
|
|
5
|
+
const Parse = require('parse/node').Parse;
|
|
6
|
+
|
|
7
|
+
const getHeaderFromToken = token => {
|
|
8
|
+
const decodedToken = jwt.decode(token, {
|
|
9
|
+
complete: true
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
if (!decodedToken) {
|
|
13
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, `provided token does not decode as JWT`);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return decodedToken.header;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
module.exports = {
|
|
20
|
+
getHeaderFromToken
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL3V0aWxzLmpzIl0sIm5hbWVzIjpbImp3dCIsInJlcXVpcmUiLCJQYXJzZSIsImdldEhlYWRlckZyb21Ub2tlbiIsInRva2VuIiwiZGVjb2RlZFRva2VuIiwiZGVjb2RlIiwiY29tcGxldGUiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJoZWFkZXIiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLEdBQUcsR0FBR0MsT0FBTyxDQUFDLGNBQUQsQ0FBbkI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsWUFBRCxDQUFQLENBQXNCQyxLQUFwQzs7QUFDQSxNQUFNQyxrQkFBa0IsR0FBR0MsS0FBSyxJQUFJO0FBQ2xDLFFBQU1DLFlBQVksR0FBR0wsR0FBRyxDQUFDTSxNQUFKLENBQVdGLEtBQVgsRUFBa0I7QUFBRUcsSUFBQUEsUUFBUSxFQUFFO0FBQVosR0FBbEIsQ0FBckI7O0FBQ0EsTUFBSSxDQUFDRixZQUFMLEVBQW1CO0FBQ2pCLFVBQU0sSUFBSUgsS0FBSyxDQUFDTSxLQUFWLENBQWdCTixLQUFLLENBQUNNLEtBQU4sQ0FBWUMsZ0JBQTVCLEVBQStDLHVDQUEvQyxDQUFOO0FBQ0Q7O0FBRUQsU0FBT0osWUFBWSxDQUFDSyxNQUFwQjtBQUNELENBUEQ7O0FBUUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUNmVCxFQUFBQTtBQURlLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgand0ID0gcmVxdWlyZSgnanNvbndlYnRva2VuJyk7XG5jb25zdCBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbmNvbnN0IGdldEhlYWRlckZyb21Ub2tlbiA9IHRva2VuID0+IHtcbiAgY29uc3QgZGVjb2RlZFRva2VuID0gand0LmRlY29kZSh0b2tlbiwgeyBjb21wbGV0ZTogdHJ1ZSB9KTtcbiAgaWYgKCFkZWNvZGVkVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgYHByb3ZpZGVkIHRva2VuIGRvZXMgbm90IGRlY29kZSBhcyBKV1RgKTtcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVkVG9rZW4uaGVhZGVyO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRIZWFkZXJGcm9tVG9rZW4sXG59O1xuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "parse-server",
|
|
3
|
-
"version": "5.4.
|
|
3
|
+
"version": "5.4.2",
|
|
4
4
|
"description": "An express module providing a Parse-compatible API server",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"repository": {
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"graphql-tag": "2.12.6",
|
|
38
38
|
"graphql-relay": "0.10.0",
|
|
39
39
|
"intersect": "1.0.1",
|
|
40
|
-
"jsonwebtoken": "
|
|
40
|
+
"jsonwebtoken": "9.0.0",
|
|
41
41
|
"jwks-rsa": "2.1.4",
|
|
42
42
|
"ldapjs": "2.3.3",
|
|
43
43
|
"lodash": "4.17.21",
|