parse-server 8.0.1 → 8.0.2-alpha.1
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/Adapters/Auth/AuthAdapter.js +16 -9
- package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +99 -0
- package/lib/Adapters/Auth/apple.js +45 -1
- package/lib/Adapters/Auth/facebook.js +61 -1
- package/lib/Adapters/Auth/gcenter.js +201 -157
- package/lib/Adapters/Auth/github.js +119 -31
- package/lib/Adapters/Auth/google.js +45 -1
- package/lib/Adapters/Auth/gpgames.js +120 -27
- package/lib/Adapters/Auth/index.js +33 -33
- package/lib/Adapters/Auth/instagram.js +114 -24
- package/lib/Adapters/Auth/janraincapture.js +45 -1
- package/lib/Adapters/Auth/janrainengage.js +11 -2
- package/lib/Adapters/Auth/keycloak.js +68 -35
- package/lib/Adapters/Auth/ldap.js +75 -1
- package/lib/Adapters/Auth/line.js +119 -32
- package/lib/Adapters/Auth/linkedin.js +111 -35
- package/lib/Adapters/Auth/meetup.js +16 -8
- package/lib/Adapters/Auth/mfa.js +80 -2
- package/lib/Adapters/Auth/microsoft.js +105 -30
- package/lib/Adapters/Auth/oauth2.js +96 -109
- package/lib/Adapters/Auth/phantauth.js +16 -8
- package/lib/Adapters/Auth/qq.js +107 -36
- package/lib/Adapters/Auth/spotify.js +108 -39
- package/lib/Adapters/Auth/twitter.js +187 -40
- package/lib/Adapters/Auth/vkontakte.js +20 -13
- package/lib/Adapters/Auth/wechat.js +105 -25
- package/lib/Adapters/Auth/weibo.js +135 -37
- package/lib/Auth.js +26 -17
- package/lib/Config.js +14 -1
- package/lib/Deprecator/Deprecations.js +5 -2
- package/lib/Options/Definitions.js +7 -1
- package/lib/Options/docs.js +2 -1
- package/lib/Options/index.js +1 -1
- package/lib/RestWrite.js +4 -5
- package/lib/Security/CheckGroups/CheckGroupServerConfig.js +10 -1
- package/lib/cli/parse-server.js +1 -1
- package/package.json +6 -6
|
@@ -1,22 +1,29 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
// Helper functions for accessing the vkontakte API.
|
|
4
|
+
var _Config = _interopRequireDefault(require("../../Config"));
|
|
5
|
+
var _Deprecator = _interopRequireDefault(require("../../Deprecator/Deprecator"));
|
|
6
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
4
7
|
const httpsRequest = require('./httpsRequest');
|
|
5
8
|
var Parse = require('parse/node').Parse;
|
|
6
|
-
|
|
7
9
|
// Returns a promise that fulfills iff this user id is valid.
|
|
8
|
-
function validateAuthData(authData, params) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
if (response && response.response && response.response.length && response.response[0].id == authData.id) {
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Vk auth is invalid for this user.');
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Vk appIds or appSecret is incorrect.');
|
|
10
|
+
async function validateAuthData(authData, params) {
|
|
11
|
+
const config = _Config.default.get(Parse.applicationId);
|
|
12
|
+
_Deprecator.default.logRuntimeDeprecation({
|
|
13
|
+
usage: 'vkontakte adapter'
|
|
19
14
|
});
|
|
15
|
+
const vkConfig = config.auth.vkontakte;
|
|
16
|
+
if (!vkConfig?.enableInsecureAuth || !config.enableInsecureAuthAdapters) {
|
|
17
|
+
throw new Parse.Error('Vk only works with enableInsecureAuth: true');
|
|
18
|
+
}
|
|
19
|
+
const response = await vkOAuth2Request(params);
|
|
20
|
+
if (!response?.access_token) {
|
|
21
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Vk appIds or appSecret is incorrect.');
|
|
22
|
+
}
|
|
23
|
+
const vkUser = await request('api.vk.com', `method/users.get?access_token=${authData.access_token}&v=${params.apiVersion}`);
|
|
24
|
+
if (!vkUser?.response?.length || vkUser.response[0].id !== authData.id) {
|
|
25
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Vk auth is invalid for this user.');
|
|
26
|
+
}
|
|
20
27
|
}
|
|
21
28
|
function vkOAuth2Request(params) {
|
|
22
29
|
return new Promise(function (resolve) {
|
|
@@ -45,4 +52,4 @@ module.exports = {
|
|
|
45
52
|
validateAppId: validateAppId,
|
|
46
53
|
validateAuthData: validateAuthData
|
|
47
54
|
};
|
|
48
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQ29uZmlnIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfRGVwcmVjYXRvciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImh0dHBzUmVxdWVzdCIsIlBhcnNlIiwidmFsaWRhdGVBdXRoRGF0YSIsImF1dGhEYXRhIiwicGFyYW1zIiwiY29uZmlnIiwiQ29uZmlnIiwiZ2V0IiwiYXBwbGljYXRpb25JZCIsIkRlcHJlY2F0b3IiLCJsb2dSdW50aW1lRGVwcmVjYXRpb24iLCJ1c2FnZSIsInZrQ29uZmlnIiwiYXV0aCIsInZrb250YWt0ZSIsImVuYWJsZUluc2VjdXJlQXV0aCIsImVuYWJsZUluc2VjdXJlQXV0aEFkYXB0ZXJzIiwiRXJyb3IiLCJyZXNwb25zZSIsInZrT0F1dGgyUmVxdWVzdCIsImFjY2Vzc190b2tlbiIsIk9CSkVDVF9OT1RfRk9VTkQiLCJ2a1VzZXIiLCJyZXF1ZXN0IiwiYXBpVmVyc2lvbiIsImxlbmd0aCIsImlkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhcHBJZHMiLCJhcHBTZWNyZXQiLCJ0aGVuIiwidmFsaWRhdGVBcHBJZCIsImhvc3QiLCJwYXRoIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL3Zrb250YWt0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgdmtvbnRha3RlIEFQSS5cblxuY29uc3QgaHR0cHNSZXF1ZXN0ID0gcmVxdWlyZSgnLi9odHRwc1JlcXVlc3QnKTtcbnZhciBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vLi4vQ29uZmlnJztcbmltcG9ydCBEZXByZWNhdG9yIGZyb20gJy4uLy4uL0RlcHJlY2F0b3IvRGVwcmVjYXRvcic7XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWZmIHRoaXMgdXNlciBpZCBpcyB2YWxpZC5cbmFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIHBhcmFtcykge1xuICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KFBhcnNlLmFwcGxpY2F0aW9uSWQpO1xuICBEZXByZWNhdG9yLmxvZ1J1bnRpbWVEZXByZWNhdGlvbih7IHVzYWdlOiAndmtvbnRha3RlIGFkYXB0ZXInIH0pO1xuXG4gIGNvbnN0IHZrQ29uZmlnID0gY29uZmlnLmF1dGgudmtvbnRha3RlO1xuICBpZiAoIXZrQ29uZmlnPy5lbmFibGVJbnNlY3VyZUF1dGggfHwgIWNvbmZpZy5lbmFibGVJbnNlY3VyZUF1dGhBZGFwdGVycykge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcignVmsgb25seSB3b3JrcyB3aXRoIGVuYWJsZUluc2VjdXJlQXV0aDogdHJ1ZScpO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB2a09BdXRoMlJlcXVlc3QocGFyYW1zKTtcbiAgaWYgKCFyZXNwb25zZT8uYWNjZXNzX3Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdWayBhcHBJZHMgb3IgYXBwU2VjcmV0IGlzIGluY29ycmVjdC4nKTtcbiAgfVxuXG4gIGNvbnN0IHZrVXNlciA9IGF3YWl0IHJlcXVlc3QoXG4gICAgJ2FwaS52ay5jb20nLFxuICAgIGBtZXRob2QvdXNlcnMuZ2V0P2FjY2Vzc190b2tlbj0ke2F1dGhEYXRhLmFjY2Vzc190b2tlbn0mdj0ke3BhcmFtcy5hcGlWZXJzaW9ufWBcbiAgKTtcblxuICBpZiAoIXZrVXNlcj8ucmVzcG9uc2U/Lmxlbmd0aCB8fCB2a1VzZXIucmVzcG9uc2VbMF0uaWQgIT09IGF1dGhEYXRhLmlkKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdWayBhdXRoIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2a09BdXRoMlJlcXVlc3QocGFyYW1zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgIGlmIChcbiAgICAgICFwYXJhbXMgfHxcbiAgICAgICFwYXJhbXMuYXBwSWRzIHx8XG4gICAgICAhcGFyYW1zLmFwcElkcy5sZW5ndGggfHxcbiAgICAgICFwYXJhbXMuYXBwU2VjcmV0IHx8XG4gICAgICAhcGFyYW1zLmFwcFNlY3JldC5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgICAgJ1ZrIGF1dGggaXMgbm90IGNvbmZpZ3VyZWQuIE1pc3NpbmcgYXBwSWRzIG9yIGFwcFNlY3JldC4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXBhcmFtcy5hcGlWZXJzaW9uKSB7XG4gICAgICBwYXJhbXMuYXBpVmVyc2lvbiA9ICc1LjEyNCc7XG4gICAgfVxuICAgIHJlc29sdmUoKTtcbiAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJlcXVlc3QoXG4gICAgICAnb2F1dGgudmsuY29tJyxcbiAgICAgICdhY2Nlc3NfdG9rZW4/Y2xpZW50X2lkPScgK1xuICAgICAgICBwYXJhbXMuYXBwSWRzICtcbiAgICAgICAgJyZjbGllbnRfc2VjcmV0PScgK1xuICAgICAgICBwYXJhbXMuYXBwU2VjcmV0ICtcbiAgICAgICAgJyZ2PScgK1xuICAgICAgICBwYXJhbXMuYXBpVmVyc2lvbiArXG4gICAgICAgICcmZ3JhbnRfdHlwZT1jbGllbnRfY3JlZGVudGlhbHMnXG4gICAgKTtcbiAgfSk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWZmIHRoaXMgYXBwIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBcHBJZCgpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG4vLyBBIHByb21pc2V5IHdyYXBwZXIgZm9yIGFwaSByZXF1ZXN0c1xuZnVuY3Rpb24gcmVxdWVzdChob3N0LCBwYXRoKSB7XG4gIHJldHVybiBodHRwc1JlcXVlc3QuZ2V0KCdodHRwczovLycgKyBob3N0ICsgJy8nICsgcGF0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkOiB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhOiB2YWxpZGF0ZUF1dGhEYXRhLFxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTs7QUFFWjtBQUlBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUFxRCxTQUFBRCx1QkFBQUcsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUhyRCxNQUFNRyxZQUFZLEdBQUdMLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUM5QyxJQUFJTSxLQUFLLEdBQUdOLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ00sS0FBSztBQUl2QztBQUNBLGVBQWVDLGdCQUFnQkEsQ0FBQ0MsUUFBUSxFQUFFQyxNQUFNLEVBQUU7RUFDaEQsTUFBTUMsTUFBTSxHQUFHQyxlQUFNLENBQUNDLEdBQUcsQ0FBQ04sS0FBSyxDQUFDTyxhQUFhLENBQUM7RUFDOUNDLG1CQUFVLENBQUNDLHFCQUFxQixDQUFDO0lBQUVDLEtBQUssRUFBRTtFQUFvQixDQUFDLENBQUM7RUFFaEUsTUFBTUMsUUFBUSxHQUFHUCxNQUFNLENBQUNRLElBQUksQ0FBQ0MsU0FBUztFQUN0QyxJQUFJLENBQUNGLFFBQVEsRUFBRUcsa0JBQWtCLElBQUksQ0FBQ1YsTUFBTSxDQUFDVywwQkFBMEIsRUFBRTtJQUN2RSxNQUFNLElBQUlmLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQztFQUN0RTtFQUVBLE1BQU1DLFFBQVEsR0FBRyxNQUFNQyxlQUFlLENBQUNmLE1BQU0sQ0FBQztFQUM5QyxJQUFJLENBQUNjLFFBQVEsRUFBRUUsWUFBWSxFQUFFO0lBQzNCLE1BQU0sSUFBSW5CLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQ2hCLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQ0ksZ0JBQWdCLEVBQUUsc0NBQXNDLENBQUM7RUFDN0Y7RUFFQSxNQUFNQyxNQUFNLEdBQUcsTUFBTUMsT0FBTyxDQUMxQixZQUFZLEVBQ1osaUNBQWlDcEIsUUFBUSxDQUFDaUIsWUFBWSxNQUFNaEIsTUFBTSxDQUFDb0IsVUFBVSxFQUMvRSxDQUFDO0VBRUQsSUFBSSxDQUFDRixNQUFNLEVBQUVKLFFBQVEsRUFBRU8sTUFBTSxJQUFJSCxNQUFNLENBQUNKLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ1EsRUFBRSxLQUFLdkIsUUFBUSxDQUFDdUIsRUFBRSxFQUFFO0lBQ3RFLE1BQU0sSUFBSXpCLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQ2hCLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQ0ksZ0JBQWdCLEVBQUUsbUNBQW1DLENBQUM7RUFDMUY7QUFDRjtBQUVBLFNBQVNGLGVBQWVBLENBQUNmLE1BQU0sRUFBRTtFQUMvQixPQUFPLElBQUl1QixPQUFPLENBQUMsVUFBVUMsT0FBTyxFQUFFO0lBQ3BDLElBQ0UsQ0FBQ3hCLE1BQU0sSUFDUCxDQUFDQSxNQUFNLENBQUN5QixNQUFNLElBQ2QsQ0FBQ3pCLE1BQU0sQ0FBQ3lCLE1BQU0sQ0FBQ0osTUFBTSxJQUNyQixDQUFDckIsTUFBTSxDQUFDMEIsU0FBUyxJQUNqQixDQUFDMUIsTUFBTSxDQUFDMEIsU0FBUyxDQUFDTCxNQUFNLEVBQ3hCO01BQ0EsTUFBTSxJQUFJeEIsS0FBSyxDQUFDZ0IsS0FBSyxDQUNuQmhCLEtBQUssQ0FBQ2dCLEtBQUssQ0FBQ0ksZ0JBQWdCLEVBQzVCLHlEQUNGLENBQUM7SUFDSDtJQUNBLElBQUksQ0FBQ2pCLE1BQU0sQ0FBQ29CLFVBQVUsRUFBRTtNQUN0QnBCLE1BQU0sQ0FBQ29CLFVBQVUsR0FBRyxPQUFPO0lBQzdCO0lBQ0FJLE9BQU8sQ0FBQyxDQUFDO0VBQ1gsQ0FBQyxDQUFDLENBQUNHLElBQUksQ0FBQyxZQUFZO0lBQ2xCLE9BQU9SLE9BQU8sQ0FDWixjQUFjLEVBQ2QseUJBQXlCLEdBQ3ZCbkIsTUFBTSxDQUFDeUIsTUFBTSxHQUNiLGlCQUFpQixHQUNqQnpCLE1BQU0sQ0FBQzBCLFNBQVMsR0FDaEIsS0FBSyxHQUNMMUIsTUFBTSxDQUFDb0IsVUFBVSxHQUNqQixnQ0FDSixDQUFDO0VBQ0gsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQSxTQUFTUSxhQUFhQSxDQUFBLEVBQUc7RUFDdkIsT0FBT0wsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQztBQUMxQjs7QUFFQTtBQUNBLFNBQVNMLE9BQU9BLENBQUNVLElBQUksRUFBRUMsSUFBSSxFQUFFO0VBQzNCLE9BQU9sQyxZQUFZLENBQUNPLEdBQUcsQ0FBQyxVQUFVLEdBQUcwQixJQUFJLEdBQUcsR0FBRyxHQUFHQyxJQUFJLENBQUM7QUFDekQ7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZkosYUFBYSxFQUFFQSxhQUFhO0VBQzVCOUIsZ0JBQWdCLEVBQUVBO0FBQ3BCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -1,30 +1,110 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _BaseCodeAuthAdapter = _interopRequireDefault(require("./BaseCodeAuthAdapter"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
/**
|
|
10
|
+
* Parse Server authentication adapter for WeChat.
|
|
11
|
+
*
|
|
12
|
+
* @class WeChatAdapter
|
|
13
|
+
* @param {Object} options - The adapter options object.
|
|
14
|
+
* @param {boolean} [options.enableInsecureAuth=false] - **[DEPRECATED]** Enable insecure authentication (not recommended).
|
|
15
|
+
* @param {string} options.clientId - Your WeChat App ID.
|
|
16
|
+
* @param {string} options.clientSecret - Your WeChat App Secret.
|
|
17
|
+
*
|
|
18
|
+
* @description
|
|
19
|
+
* ## Parse Server Configuration
|
|
20
|
+
* To configure Parse Server for WeChat authentication, use the following structure:
|
|
21
|
+
* ### Secure Configuration (Recommended)
|
|
22
|
+
* ```json
|
|
23
|
+
* {
|
|
24
|
+
* "auth": {
|
|
25
|
+
* "wechat": {
|
|
26
|
+
* "clientId": "your-client-id",
|
|
27
|
+
* "clientSecret": "your-client-secret"
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
* ### Insecure Configuration (Not Recommended)
|
|
33
|
+
* ```json
|
|
34
|
+
* {
|
|
35
|
+
* "auth": {
|
|
36
|
+
* "wechat": {
|
|
37
|
+
* "enableInsecureAuth": true
|
|
38
|
+
* }
|
|
39
|
+
* }
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* The adapter requires the following `authData` fields:
|
|
44
|
+
* - **With `enableInsecureAuth` (Not Recommended)**: `id`, `access_token`.
|
|
45
|
+
* - **Without `enableInsecureAuth`**: `code`.
|
|
46
|
+
*
|
|
47
|
+
* ## Auth Payloads
|
|
48
|
+
* ### Secure Authentication Payload (Recommended)
|
|
49
|
+
* ```json
|
|
50
|
+
* {
|
|
51
|
+
* "wechat": {
|
|
52
|
+
* "code": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
53
|
+
* }
|
|
54
|
+
* }
|
|
55
|
+
* ```
|
|
56
|
+
* ### Insecure Authentication Payload (Not Recommended)
|
|
57
|
+
* ```json
|
|
58
|
+
* {
|
|
59
|
+
* "wechat": {
|
|
60
|
+
* "id": "1234567",
|
|
61
|
+
* "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
62
|
+
* }
|
|
63
|
+
* }
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* ## Notes
|
|
67
|
+
* - With `enableInsecureAuth`, the adapter directly validates the `id` and `access_token` sent by the client.
|
|
68
|
+
* - Without `enableInsecureAuth`, the adapter uses the `code` provided by the client to exchange for an access token via WeChat's OAuth API.
|
|
69
|
+
* - The `enableInsecureAuth` flag is **deprecated** and may be removed in future versions. Use secure authentication with the `code` field instead.
|
|
70
|
+
*
|
|
71
|
+
* @example <caption>Auth Data Example</caption>
|
|
72
|
+
* // Example authData provided by the client:
|
|
73
|
+
* const authData = {
|
|
74
|
+
* wechat: {
|
|
75
|
+
* code: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
76
|
+
* }
|
|
77
|
+
* };
|
|
78
|
+
*
|
|
79
|
+
* @see {@link https://developers.weixin.qq.com/doc/offiaccount/en/OA_Web_Apps/Wechat_webpage_authorization.html WeChat Authentication Documentation}
|
|
80
|
+
*/
|
|
6
81
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
82
|
+
class WeChatAdapter extends _BaseCodeAuthAdapter.default {
|
|
83
|
+
constructor() {
|
|
84
|
+
super('WeChat');
|
|
85
|
+
}
|
|
86
|
+
async getUserFromAccessToken(access_token, authData) {
|
|
87
|
+
const response = await fetch(`https://api.weixin.qq.com/sns/auth?access_token=${access_token}&openid=${authData.id}`);
|
|
88
|
+
const data = await response.json();
|
|
89
|
+
if (!response.ok || data.errcode !== 0) {
|
|
90
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'WeChat auth is invalid for this user.');
|
|
12
91
|
}
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
92
|
+
return data;
|
|
93
|
+
}
|
|
94
|
+
async getAccessTokenFromCode(authData) {
|
|
95
|
+
if (!authData.code) {
|
|
96
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'WeChat auth requires a code to be sent.');
|
|
97
|
+
}
|
|
98
|
+
const appId = this.clientId;
|
|
99
|
+
const appSecret = this.clientSecret;
|
|
100
|
+
const response = await fetch(`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appId}&secret=${appSecret}&code=${authData.code}&grant_type=authorization_code`);
|
|
101
|
+
const data = await response.json();
|
|
102
|
+
if (!response.ok || data.errcode) {
|
|
103
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'WeChat auth is invalid for this user.');
|
|
104
|
+
}
|
|
105
|
+
authData.id = data.openid;
|
|
106
|
+
return data.access_token;
|
|
107
|
+
}
|
|
25
108
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
validateAuthData
|
|
29
|
-
};
|
|
30
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJodHRwc1JlcXVlc3QiLCJyZXF1aXJlIiwiUGFyc2UiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJncmFwaFJlcXVlc3QiLCJhY2Nlc3NfdG9rZW4iLCJpZCIsInRoZW4iLCJkYXRhIiwiZXJyY29kZSIsIkVycm9yIiwiT0JKRUNUX05PVF9GT1VORCIsInZhbGlkYXRlQXBwSWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInBhdGgiLCJnZXQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvd2VjaGF0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgV2VDaGF0IEdyYXBoIEFQSS5cbmNvbnN0IGh0dHBzUmVxdWVzdCA9IHJlcXVpcmUoJy4vaHR0cHNSZXF1ZXN0Jyk7XG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWZmIHRoaXMgdXNlciBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEpIHtcbiAgcmV0dXJuIGdyYXBoUmVxdWVzdCgnYXV0aD9hY2Nlc3NfdG9rZW49JyArIGF1dGhEYXRhLmFjY2Vzc190b2tlbiArICcmb3BlbmlkPScgKyBhdXRoRGF0YS5pZCkudGhlbihcbiAgICBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEuZXJyY29kZSA9PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnd2VjaGF0IGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICAgIH1cbiAgKTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZiB0aGlzIGFwcCBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXBwSWQoKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxuLy8gQSBwcm9taXNleSB3cmFwcGVyIGZvciBXZUNoYXQgZ3JhcGggcmVxdWVzdHMuXG5mdW5jdGlvbiBncmFwaFJlcXVlc3QocGF0aCkge1xuICByZXR1cm4gaHR0cHNSZXF1ZXN0LmdldCgnaHR0cHM6Ly9hcGkud2VpeGluLnFxLmNvbS9zbnMvJyArIHBhdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVBcHBJZCxcbiAgdmFsaWRhdGVBdXRoRGF0YSxcbn07XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQSxNQUFNQSxZQUFZLEdBQUdDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUM5QyxJQUFJQyxLQUFLLEdBQUdELE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ0MsS0FBSzs7QUFFdkM7QUFDQSxTQUFTQyxnQkFBZ0JBLENBQUNDLFFBQVEsRUFBRTtFQUNsQyxPQUFPQyxZQUFZLENBQUMsb0JBQW9CLEdBQUdELFFBQVEsQ0FBQ0UsWUFBWSxHQUFHLFVBQVUsR0FBR0YsUUFBUSxDQUFDRyxFQUFFLENBQUMsQ0FBQ0MsSUFBSSxDQUMvRixVQUFVQyxJQUFJLEVBQUU7SUFDZCxJQUFJQSxJQUFJLENBQUNDLE9BQU8sSUFBSSxDQUFDLEVBQUU7TUFDckI7SUFDRjtJQUNBLE1BQU0sSUFBSVIsS0FBSyxDQUFDUyxLQUFLLENBQUNULEtBQUssQ0FBQ1MsS0FBSyxDQUFDQyxnQkFBZ0IsRUFBRSx1Q0FBdUMsQ0FBQztFQUM5RixDQUNGLENBQUM7QUFDSDs7QUFFQTtBQUNBLFNBQVNDLGFBQWFBLENBQUEsRUFBRztFQUN2QixPQUFPQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDO0FBQzFCOztBQUVBO0FBQ0EsU0FBU1YsWUFBWUEsQ0FBQ1csSUFBSSxFQUFFO0VBQzFCLE9BQU9oQixZQUFZLENBQUNpQixHQUFHLENBQUMsZ0NBQWdDLEdBQUdELElBQUksQ0FBQztBQUNsRTtBQUVBRSxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmTixhQUFhO0VBQ2JWO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
109
|
+
var _default = exports.default = new WeChatAdapter();
|
|
110
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQmFzZUNvZGVBdXRoQWRhcHRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiV2VDaGF0QWRhcHRlciIsIkJhc2VBdXRoQ29kZUFkYXB0ZXIiLCJjb25zdHJ1Y3RvciIsImdldFVzZXJGcm9tQWNjZXNzVG9rZW4iLCJhY2Nlc3NfdG9rZW4iLCJhdXRoRGF0YSIsInJlc3BvbnNlIiwiZmV0Y2giLCJpZCIsImRhdGEiLCJqc29uIiwib2siLCJlcnJjb2RlIiwiUGFyc2UiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJnZXRBY2Nlc3NUb2tlbkZyb21Db2RlIiwiY29kZSIsImFwcElkIiwiY2xpZW50SWQiLCJhcHBTZWNyZXQiLCJjbGllbnRTZWNyZXQiLCJvcGVuaWQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvQXV0aC93ZWNoYXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXJzZSBTZXJ2ZXIgYXV0aGVudGljYXRpb24gYWRhcHRlciBmb3IgV2VDaGF0LlxuICpcbiAqIEBjbGFzcyBXZUNoYXRBZGFwdGVyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBhZGFwdGVyIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5lbmFibGVJbnNlY3VyZUF1dGg9ZmFsc2VdIC0gKipbREVQUkVDQVRFRF0qKiBFbmFibGUgaW5zZWN1cmUgYXV0aGVudGljYXRpb24gKG5vdCByZWNvbW1lbmRlZCkuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5jbGllbnRJZCAtIFlvdXIgV2VDaGF0IEFwcCBJRC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmNsaWVudFNlY3JldCAtIFlvdXIgV2VDaGF0IEFwcCBTZWNyZXQuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiAjIyBQYXJzZSBTZXJ2ZXIgQ29uZmlndXJhdGlvblxuICogVG8gY29uZmlndXJlIFBhcnNlIFNlcnZlciBmb3IgV2VDaGF0IGF1dGhlbnRpY2F0aW9uLCB1c2UgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XG4gKiAjIyMgU2VjdXJlIENvbmZpZ3VyYXRpb24gKFJlY29tbWVuZGVkKVxuICogYGBganNvblxuICoge1xuICogICBcImF1dGhcIjoge1xuICogICAgIFwid2VjaGF0XCI6IHtcbiAqICAgICAgIFwiY2xpZW50SWRcIjogXCJ5b3VyLWNsaWVudC1pZFwiLFxuICogICAgICAgXCJjbGllbnRTZWNyZXRcIjogXCJ5b3VyLWNsaWVudC1zZWNyZXRcIlxuICogICAgIH1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKiAjIyMgSW5zZWN1cmUgQ29uZmlndXJhdGlvbiAoTm90IFJlY29tbWVuZGVkKVxuICogYGBganNvblxuICoge1xuICogICBcImF1dGhcIjoge1xuICogICAgIFwid2VjaGF0XCI6IHtcbiAqICAgICAgIFwiZW5hYmxlSW5zZWN1cmVBdXRoXCI6IHRydWVcbiAqICAgICB9XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIFRoZSBhZGFwdGVyIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgYGF1dGhEYXRhYCBmaWVsZHM6XG4gKiAtICoqV2l0aCBgZW5hYmxlSW5zZWN1cmVBdXRoYCAoTm90IFJlY29tbWVuZGVkKSoqOiBgaWRgLCBgYWNjZXNzX3Rva2VuYC5cbiAqIC0gKipXaXRob3V0IGBlbmFibGVJbnNlY3VyZUF1dGhgKio6IGBjb2RlYC5cbiAqXG4gKiAjIyBBdXRoIFBheWxvYWRzXG4gKiAjIyMgU2VjdXJlIEF1dGhlbnRpY2F0aW9uIFBheWxvYWQgKFJlY29tbWVuZGVkKVxuICogYGBganNvblxuICoge1xuICogICBcIndlY2hhdFwiOiB7XG4gKiAgICAgXCJjb2RlXCI6IFwieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcIlxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqICMjIyBJbnNlY3VyZSBBdXRoZW50aWNhdGlvbiBQYXlsb2FkIChOb3QgUmVjb21tZW5kZWQpXG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwid2VjaGF0XCI6IHtcbiAqICAgICBcImlkXCI6IFwiMTIzNDU2N1wiLFxuICogICAgIFwiYWNjZXNzX3Rva2VuXCI6IFwieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcIlxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyBOb3Rlc1xuICogLSBXaXRoIGBlbmFibGVJbnNlY3VyZUF1dGhgLCB0aGUgYWRhcHRlciBkaXJlY3RseSB2YWxpZGF0ZXMgdGhlIGBpZGAgYW5kIGBhY2Nlc3NfdG9rZW5gIHNlbnQgYnkgdGhlIGNsaWVudC5cbiAqIC0gV2l0aG91dCBgZW5hYmxlSW5zZWN1cmVBdXRoYCwgdGhlIGFkYXB0ZXIgdXNlcyB0aGUgYGNvZGVgIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgdG8gZXhjaGFuZ2UgZm9yIGFuIGFjY2VzcyB0b2tlbiB2aWEgV2VDaGF0J3MgT0F1dGggQVBJLlxuICogLSBUaGUgYGVuYWJsZUluc2VjdXJlQXV0aGAgZmxhZyBpcyAqKmRlcHJlY2F0ZWQqKiBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiBVc2Ugc2VjdXJlIGF1dGhlbnRpY2F0aW9uIHdpdGggdGhlIGBjb2RlYCBmaWVsZCBpbnN0ZWFkLlxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkF1dGggRGF0YSBFeGFtcGxlPC9jYXB0aW9uPlxuICogLy8gRXhhbXBsZSBhdXRoRGF0YSBwcm92aWRlZCBieSB0aGUgY2xpZW50OlxuICogY29uc3QgYXV0aERhdGEgPSB7XG4gKiAgIHdlY2hhdDoge1xuICogICAgIGNvZGU6IFwieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcIlxuICogICB9XG4gKiB9O1xuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVycy53ZWl4aW4ucXEuY29tL2RvYy9vZmZpYWNjb3VudC9lbi9PQV9XZWJfQXBwcy9XZWNoYXRfd2VicGFnZV9hdXRob3JpemF0aW9uLmh0bWwgV2VDaGF0IEF1dGhlbnRpY2F0aW9uIERvY3VtZW50YXRpb259XG4gKi9cblxuaW1wb3J0IEJhc2VBdXRoQ29kZUFkYXB0ZXIgZnJvbSAnLi9CYXNlQ29kZUF1dGhBZGFwdGVyJztcblxuY2xhc3MgV2VDaGF0QWRhcHRlciBleHRlbmRzIEJhc2VBdXRoQ29kZUFkYXB0ZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignV2VDaGF0Jyk7XG4gIH1cblxuICBhc3luYyBnZXRVc2VyRnJvbUFjY2Vzc1Rva2VuKGFjY2Vzc190b2tlbiwgYXV0aERhdGEpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgYGh0dHBzOi8vYXBpLndlaXhpbi5xcS5jb20vc25zL2F1dGg/YWNjZXNzX3Rva2VuPSR7YWNjZXNzX3Rva2VufSZvcGVuaWQ9JHthdXRoRGF0YS5pZH1gXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rIHx8IGRhdGEuZXJyY29kZSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdXZUNoYXQgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBnZXRBY2Nlc3NUb2tlbkZyb21Db2RlKGF1dGhEYXRhKSB7XG4gICAgaWYgKCFhdXRoRGF0YS5jb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ1dlQ2hhdCBhdXRoIHJlcXVpcmVzIGEgY29kZSB0byBiZSBzZW50LicpO1xuICAgIH1cblxuICAgIGNvbnN0IGFwcElkID0gdGhpcy5jbGllbnRJZDtcbiAgICBjb25zdCBhcHBTZWNyZXQgPSB0aGlzLmNsaWVudFNlY3JldFxuXG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgYGh0dHBzOi8vYXBpLndlaXhpbi5xcS5jb20vc25zL29hdXRoMi9hY2Nlc3NfdG9rZW4/YXBwaWQ9JHthcHBJZH0mc2VjcmV0PSR7YXBwU2VjcmV0fSZjb2RlPSR7YXV0aERhdGEuY29kZX0mZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGVgXG4gICAgKTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rIHx8IGRhdGEuZXJyY29kZSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdXZUNoYXQgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gICAgfVxuXG4gICAgYXV0aERhdGEuaWQgPSBkYXRhLm9wZW5pZDtcblxuICAgIHJldHVybiBkYXRhLmFjY2Vzc190b2tlbjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgV2VDaGF0QWRhcHRlcigpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUF5RUEsSUFBQUEsb0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUF3RCxTQUFBRCx1QkFBQUUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQXpFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUlBLE1BQU1HLGFBQWEsU0FBU0MsNEJBQW1CLENBQUM7RUFDOUNDLFdBQVdBLENBQUEsRUFBRztJQUNaLEtBQUssQ0FBQyxRQUFRLENBQUM7RUFDakI7RUFFQSxNQUFNQyxzQkFBc0JBLENBQUNDLFlBQVksRUFBRUMsUUFBUSxFQUFFO0lBQ25ELE1BQU1DLFFBQVEsR0FBRyxNQUFNQyxLQUFLLENBQzFCLG1EQUFtREgsWUFBWSxXQUFXQyxRQUFRLENBQUNHLEVBQUUsRUFDdkYsQ0FBQztJQUVELE1BQU1DLElBQUksR0FBRyxNQUFNSCxRQUFRLENBQUNJLElBQUksQ0FBQyxDQUFDO0lBRWxDLElBQUksQ0FBQ0osUUFBUSxDQUFDSyxFQUFFLElBQUlGLElBQUksQ0FBQ0csT0FBTyxLQUFLLENBQUMsRUFBRTtNQUN0QyxNQUFNLElBQUlDLEtBQUssQ0FBQ0MsS0FBSyxDQUFDRCxLQUFLLENBQUNDLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUUsdUNBQXVDLENBQUM7SUFDOUY7SUFFQSxPQUFPTixJQUFJO0VBQ2I7RUFFQSxNQUFNTyxzQkFBc0JBLENBQUNYLFFBQVEsRUFBRTtJQUNyQyxJQUFJLENBQUNBLFFBQVEsQ0FBQ1ksSUFBSSxFQUFFO01BQ2xCLE1BQU0sSUFBSUosS0FBSyxDQUFDQyxLQUFLLENBQUNELEtBQUssQ0FBQ0MsS0FBSyxDQUFDQyxnQkFBZ0IsRUFBRSx5Q0FBeUMsQ0FBQztJQUNoRztJQUVBLE1BQU1HLEtBQUssR0FBRyxJQUFJLENBQUNDLFFBQVE7SUFDM0IsTUFBTUMsU0FBUyxHQUFHLElBQUksQ0FBQ0MsWUFBWTtJQUduQyxNQUFNZixRQUFRLEdBQUcsTUFBTUMsS0FBSyxDQUMxQiwyREFBMkRXLEtBQUssV0FBV0UsU0FBUyxTQUFTZixRQUFRLENBQUNZLElBQUksZ0NBQzVHLENBQUM7SUFFRCxNQUFNUixJQUFJLEdBQUcsTUFBTUgsUUFBUSxDQUFDSSxJQUFJLENBQUMsQ0FBQztJQUVsQyxJQUFJLENBQUNKLFFBQVEsQ0FBQ0ssRUFBRSxJQUFJRixJQUFJLENBQUNHLE9BQU8sRUFBRTtNQUNoQyxNQUFNLElBQUlDLEtBQUssQ0FBQ0MsS0FBSyxDQUFDRCxLQUFLLENBQUNDLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUUsdUNBQXVDLENBQUM7SUFDOUY7SUFFQVYsUUFBUSxDQUFDRyxFQUFFLEdBQUdDLElBQUksQ0FBQ2EsTUFBTTtJQUV6QixPQUFPYixJQUFJLENBQUNMLFlBQVk7RUFDMUI7QUFDRjtBQUFDLElBQUFtQixRQUFBLEdBQUFDLE9BQUEsQ0FBQXpCLE9BQUEsR0FFYyxJQUFJQyxhQUFhLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -1,43 +1,141 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _BaseCodeAuthAdapter = _interopRequireDefault(require("./BaseCodeAuthAdapter"));
|
|
8
|
+
var _querystring = _interopRequireDefault(require("querystring"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
/**
|
|
11
|
+
* Parse Server authentication adapter for Weibo.
|
|
12
|
+
*
|
|
13
|
+
* @class WeiboAdapter
|
|
14
|
+
* @param {Object} options - The adapter configuration options.
|
|
15
|
+
* @param {boolean} [options.enableInsecureAuth=false] - **[DEPRECATED]** Enable insecure authentication (not recommended).
|
|
16
|
+
* @param {string} options.clientId - Your Weibo client ID.
|
|
17
|
+
* @param {string} options.clientSecret - Your Weibo client secret.
|
|
18
|
+
*
|
|
19
|
+
* @description
|
|
20
|
+
* ## Parse Server Configuration
|
|
21
|
+
* To configure Parse Server for Weibo authentication, use the following structure:
|
|
22
|
+
* ### Secure Configuration
|
|
23
|
+
* ```json
|
|
24
|
+
* {
|
|
25
|
+
* "auth": {
|
|
26
|
+
* "weibo": {
|
|
27
|
+
* "clientId": "your-client-id",
|
|
28
|
+
* "clientSecret": "your-client-secret"
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
* ### Insecure Configuration (Not Recommended)
|
|
34
|
+
* ```json
|
|
35
|
+
* {
|
|
36
|
+
* "auth": {
|
|
37
|
+
* "weibo": {
|
|
38
|
+
* "enableInsecureAuth": true
|
|
39
|
+
* }
|
|
40
|
+
* }
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* The adapter requires the following `authData` fields:
|
|
45
|
+
* - **Secure Authentication**: `code`, `redirect_uri`.
|
|
46
|
+
* - **Insecure Authentication (Not Recommended)**: `id`, `access_token`.
|
|
47
|
+
*
|
|
48
|
+
* ## Auth Payloads
|
|
49
|
+
* ### Secure Authentication Payload
|
|
50
|
+
* ```json
|
|
51
|
+
* {
|
|
52
|
+
* "weibo": {
|
|
53
|
+
* "code": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
54
|
+
* "redirect_uri": "https://example.com/callback"
|
|
55
|
+
* }
|
|
56
|
+
* }
|
|
57
|
+
* ```
|
|
58
|
+
* ### Insecure Authentication Payload (Not Recommended)
|
|
59
|
+
* ```json
|
|
60
|
+
* {
|
|
61
|
+
* "weibo": {
|
|
62
|
+
* "id": "1234567",
|
|
63
|
+
* "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
64
|
+
* }
|
|
65
|
+
* }
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* ## Notes
|
|
69
|
+
* - **Insecure Authentication**: When `enableInsecureAuth` is enabled, the adapter directly validates the `id` and `access_token` provided by the client.
|
|
70
|
+
* - **Secure Authentication**: When `enableInsecureAuth` is disabled, the adapter exchanges the `code` and `redirect_uri` for an access token using Weibo's OAuth API.
|
|
71
|
+
* - `enableInsecureAuth` is **deprecated** and may be removed in future versions. Use secure authentication with `code` and `redirect_uri`.
|
|
72
|
+
*
|
|
73
|
+
* @example <caption>Auth Data Example (Secure)</caption>
|
|
74
|
+
* const authData = {
|
|
75
|
+
* weibo: {
|
|
76
|
+
* code: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
77
|
+
* redirect_uri: "https://example.com/callback"
|
|
78
|
+
* }
|
|
79
|
+
* };
|
|
80
|
+
*
|
|
81
|
+
* @example <caption>Auth Data Example (Insecure - Not Recommended)</caption>
|
|
82
|
+
* const authData = {
|
|
83
|
+
* weibo: {
|
|
84
|
+
* id: "1234567",
|
|
85
|
+
* access_token: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
86
|
+
* }
|
|
87
|
+
* };
|
|
88
|
+
*
|
|
89
|
+
* @see {@link https://open.weibo.com/wiki/Oauth2/access_token Weibo Authentication Documentation}
|
|
90
|
+
*/
|
|
7
91
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
92
|
+
class WeiboAdapter extends _BaseCodeAuthAdapter.default {
|
|
93
|
+
constructor() {
|
|
94
|
+
super('Weibo');
|
|
95
|
+
}
|
|
96
|
+
async getUserFromAccessToken(access_token) {
|
|
97
|
+
const postData = _querystring.default.stringify({
|
|
98
|
+
access_token: access_token
|
|
99
|
+
});
|
|
100
|
+
const response = await fetch('https://api.weibo.com/oauth2/get_token_info', {
|
|
101
|
+
method: 'POST',
|
|
102
|
+
headers: {
|
|
103
|
+
'Content-Type': 'application/x-www-form-urlencoded'
|
|
104
|
+
},
|
|
105
|
+
body: postData
|
|
106
|
+
});
|
|
107
|
+
const data = await response.json();
|
|
108
|
+
if (!response.ok) {
|
|
109
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Weibo auth is invalid for this user.');
|
|
13
110
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
111
|
+
return {
|
|
112
|
+
id: data.uid
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
async getAccessTokenFromCode(authData) {
|
|
116
|
+
if (!authData?.code || !authData?.redirect_uri) {
|
|
117
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Weibo auth requires code and redirect_uri to be sent.');
|
|
118
|
+
}
|
|
119
|
+
const postData = _querystring.default.stringify({
|
|
120
|
+
client_id: this.clientId,
|
|
121
|
+
client_secret: this.clientSecret,
|
|
122
|
+
grant_type: 'authorization_code',
|
|
123
|
+
code: authData.code,
|
|
124
|
+
redirect_uri: authData.redirect_uri
|
|
125
|
+
});
|
|
126
|
+
const response = await fetch('https://api.weibo.com/oauth2/access_token', {
|
|
127
|
+
method: 'POST',
|
|
128
|
+
headers: {
|
|
129
|
+
'Content-Type': 'application/x-www-form-urlencoded'
|
|
130
|
+
},
|
|
131
|
+
body: postData
|
|
132
|
+
});
|
|
133
|
+
const data = await response.json();
|
|
134
|
+
if (!response.ok || data.errcode) {
|
|
135
|
+
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Weibo auth is invalid for this user.');
|
|
35
136
|
}
|
|
36
|
-
|
|
37
|
-
|
|
137
|
+
return data.access_token;
|
|
138
|
+
}
|
|
38
139
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
validateAuthData
|
|
42
|
-
};
|
|
43
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJodHRwc1JlcXVlc3QiLCJyZXF1aXJlIiwiUGFyc2UiLCJxdWVyeXN0cmluZyIsInZhbGlkYXRlQXV0aERhdGEiLCJhdXRoRGF0YSIsImdyYXBoUmVxdWVzdCIsImFjY2Vzc190b2tlbiIsInRoZW4iLCJkYXRhIiwidWlkIiwiaWQiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJ2YWxpZGF0ZUFwcElkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJwb3N0RGF0YSIsInN0cmluZ2lmeSIsIm9wdGlvbnMiLCJob3N0bmFtZSIsInBhdGgiLCJtZXRob2QiLCJoZWFkZXJzIiwiQnVmZmVyIiwiYnl0ZUxlbmd0aCIsInJlcXVlc3QiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvd2VpYm8uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIHRoZSB3ZWlibyBHcmFwaCBBUEkuXG52YXIgaHR0cHNSZXF1ZXN0ID0gcmVxdWlyZSgnLi9odHRwc1JlcXVlc3QnKTtcbnZhciBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbnZhciBxdWVyeXN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJyk7XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWZmIHRoaXMgdXNlciBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEpIHtcbiAgcmV0dXJuIGdyYXBoUmVxdWVzdChhdXRoRGF0YS5hY2Nlc3NfdG9rZW4pLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBpZiAoZGF0YSAmJiBkYXRhLnVpZCA9PSBhdXRoRGF0YS5pZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ3dlaWJvIGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICB9KTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZiB0aGlzIGFwcCBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXBwSWQoKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxuLy8gQSBwcm9taXNleSB3cmFwcGVyIGZvciB3ZWlibyBncmFwaCByZXF1ZXN0cy5cbmZ1bmN0aW9uIGdyYXBoUmVxdWVzdChhY2Nlc3NfdG9rZW4pIHtcbiAgdmFyIHBvc3REYXRhID0gcXVlcnlzdHJpbmcuc3RyaW5naWZ5KHtcbiAgICBhY2Nlc3NfdG9rZW46IGFjY2Vzc190b2tlbixcbiAgfSk7XG4gIHZhciBvcHRpb25zID0ge1xuICAgIGhvc3RuYW1lOiAnYXBpLndlaWJvLmNvbScsXG4gICAgcGF0aDogJy9vYXV0aDIvZ2V0X3Rva2VuX2luZm8nLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICdDb250ZW50LUxlbmd0aCc6IEJ1ZmZlci5ieXRlTGVuZ3RoKHBvc3REYXRhKSxcbiAgICB9LFxuICB9O1xuICByZXR1cm4gaHR0cHNSZXF1ZXN0LnJlcXVlc3Qob3B0aW9ucywgcG9zdERhdGEpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVBcHBJZCxcbiAgdmFsaWRhdGVBdXRoRGF0YSxcbn07XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQSxJQUFJQSxZQUFZLEdBQUdDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUM1QyxJQUFJQyxLQUFLLEdBQUdELE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ0MsS0FBSztBQUN2QyxJQUFJQyxXQUFXLEdBQUdGLE9BQU8sQ0FBQyxhQUFhLENBQUM7O0FBRXhDO0FBQ0EsU0FBU0csZ0JBQWdCQSxDQUFDQyxRQUFRLEVBQUU7RUFDbEMsT0FBT0MsWUFBWSxDQUFDRCxRQUFRLENBQUNFLFlBQVksQ0FBQyxDQUFDQyxJQUFJLENBQUMsVUFBVUMsSUFBSSxFQUFFO0lBQzlELElBQUlBLElBQUksSUFBSUEsSUFBSSxDQUFDQyxHQUFHLElBQUlMLFFBQVEsQ0FBQ00sRUFBRSxFQUFFO01BQ25DO0lBQ0Y7SUFDQSxNQUFNLElBQUlULEtBQUssQ0FBQ1UsS0FBSyxDQUFDVixLQUFLLENBQUNVLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUUsc0NBQXNDLENBQUM7RUFDN0YsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQSxTQUFTQyxhQUFhQSxDQUFBLEVBQUc7RUFDdkIsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQztBQUMxQjs7QUFFQTtBQUNBLFNBQVNWLFlBQVlBLENBQUNDLFlBQVksRUFBRTtFQUNsQyxJQUFJVSxRQUFRLEdBQUdkLFdBQVcsQ0FBQ2UsU0FBUyxDQUFDO0lBQ25DWCxZQUFZLEVBQUVBO0VBQ2hCLENBQUMsQ0FBQztFQUNGLElBQUlZLE9BQU8sR0FBRztJQUNaQyxRQUFRLEVBQUUsZUFBZTtJQUN6QkMsSUFBSSxFQUFFLHdCQUF3QjtJQUM5QkMsTUFBTSxFQUFFLE1BQU07SUFDZEMsT0FBTyxFQUFFO01BQ1AsY0FBYyxFQUFFLG1DQUFtQztNQUNuRCxnQkFBZ0IsRUFBRUMsTUFBTSxDQUFDQyxVQUFVLENBQUNSLFFBQVE7SUFDOUM7RUFDRixDQUFDO0VBQ0QsT0FBT2pCLFlBQVksQ0FBQzBCLE9BQU8sQ0FBQ1AsT0FBTyxFQUFFRixRQUFRLENBQUM7QUFDaEQ7QUFFQVUsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZmQsYUFBYTtFQUNiVjtBQUNGLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
140
|
+
var _default = exports.default = new WeiboAdapter();
|
|
141
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQmFzZUNvZGVBdXRoQWRhcHRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3F1ZXJ5c3RyaW5nIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiV2VpYm9BZGFwdGVyIiwiQmFzZUF1dGhDb2RlQWRhcHRlciIsImNvbnN0cnVjdG9yIiwiZ2V0VXNlckZyb21BY2Nlc3NUb2tlbiIsImFjY2Vzc190b2tlbiIsInBvc3REYXRhIiwicXVlcnlzdHJpbmciLCJzdHJpbmdpZnkiLCJyZXNwb25zZSIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJkYXRhIiwianNvbiIsIm9rIiwiUGFyc2UiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJpZCIsInVpZCIsImdldEFjY2Vzc1Rva2VuRnJvbUNvZGUiLCJhdXRoRGF0YSIsImNvZGUiLCJyZWRpcmVjdF91cmkiLCJjbGllbnRfaWQiLCJjbGllbnRJZCIsImNsaWVudF9zZWNyZXQiLCJjbGllbnRTZWNyZXQiLCJncmFudF90eXBlIiwiZXJyY29kZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL3dlaWJvLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGFyc2UgU2VydmVyIGF1dGhlbnRpY2F0aW9uIGFkYXB0ZXIgZm9yIFdlaWJvLlxuICpcbiAqIEBjbGFzcyBXZWlib0FkYXB0ZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIGFkYXB0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5lbmFibGVJbnNlY3VyZUF1dGg9ZmFsc2VdIC0gKipbREVQUkVDQVRFRF0qKiBFbmFibGUgaW5zZWN1cmUgYXV0aGVudGljYXRpb24gKG5vdCByZWNvbW1lbmRlZCkuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5jbGllbnRJZCAtIFlvdXIgV2VpYm8gY2xpZW50IElELlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuY2xpZW50U2VjcmV0IC0gWW91ciBXZWlibyBjbGllbnQgc2VjcmV0LlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogIyMgUGFyc2UgU2VydmVyIENvbmZpZ3VyYXRpb25cbiAqIFRvIGNvbmZpZ3VyZSBQYXJzZSBTZXJ2ZXIgZm9yIFdlaWJvIGF1dGhlbnRpY2F0aW9uLCB1c2UgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XG4gKiAjIyMgU2VjdXJlIENvbmZpZ3VyYXRpb25cbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJhdXRoXCI6IHtcbiAqICAgICBcIndlaWJvXCI6IHtcbiAqICAgICAgIFwiY2xpZW50SWRcIjogXCJ5b3VyLWNsaWVudC1pZFwiLFxuICogICAgICAgXCJjbGllbnRTZWNyZXRcIjogXCJ5b3VyLWNsaWVudC1zZWNyZXRcIlxuICogICAgIH1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKiAjIyMgSW5zZWN1cmUgQ29uZmlndXJhdGlvbiAoTm90IFJlY29tbWVuZGVkKVxuICogYGBganNvblxuICoge1xuICogICBcImF1dGhcIjoge1xuICogICAgIFwid2VpYm9cIjoge1xuICogICAgICAgXCJlbmFibGVJbnNlY3VyZUF1dGhcIjogdHJ1ZVxuICogICAgIH1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKlxuICogVGhlIGFkYXB0ZXIgcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBgYXV0aERhdGFgIGZpZWxkczpcbiAqIC0gKipTZWN1cmUgQXV0aGVudGljYXRpb24qKjogYGNvZGVgLCBgcmVkaXJlY3RfdXJpYC5cbiAqIC0gKipJbnNlY3VyZSBBdXRoZW50aWNhdGlvbiAoTm90IFJlY29tbWVuZGVkKSoqOiBgaWRgLCBgYWNjZXNzX3Rva2VuYC5cbiAqXG4gKiAjIyBBdXRoIFBheWxvYWRzXG4gKiAjIyMgU2VjdXJlIEF1dGhlbnRpY2F0aW9uIFBheWxvYWRcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJ3ZWlib1wiOiB7XG4gKiAgICAgXCJjb2RlXCI6IFwieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcIixcbiAqICAgICBcInJlZGlyZWN0X3VyaVwiOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vY2FsbGJhY2tcIlxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqICMjIyBJbnNlY3VyZSBBdXRoZW50aWNhdGlvbiBQYXlsb2FkIChOb3QgUmVjb21tZW5kZWQpXG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwid2VpYm9cIjoge1xuICogICAgIFwiaWRcIjogXCIxMjM0NTY3XCIsXG4gKiAgICAgXCJhY2Nlc3NfdG9rZW5cIjogXCJ4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eFwiXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIE5vdGVzXG4gKiAtICoqSW5zZWN1cmUgQXV0aGVudGljYXRpb24qKjogV2hlbiBgZW5hYmxlSW5zZWN1cmVBdXRoYCBpcyBlbmFibGVkLCB0aGUgYWRhcHRlciBkaXJlY3RseSB2YWxpZGF0ZXMgdGhlIGBpZGAgYW5kIGBhY2Nlc3NfdG9rZW5gIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQuXG4gKiAtICoqU2VjdXJlIEF1dGhlbnRpY2F0aW9uKio6IFdoZW4gYGVuYWJsZUluc2VjdXJlQXV0aGAgaXMgZGlzYWJsZWQsIHRoZSBhZGFwdGVyIGV4Y2hhbmdlcyB0aGUgYGNvZGVgIGFuZCBgcmVkaXJlY3RfdXJpYCBmb3IgYW4gYWNjZXNzIHRva2VuIHVzaW5nIFdlaWJvJ3MgT0F1dGggQVBJLlxuICogLSBgZW5hYmxlSW5zZWN1cmVBdXRoYCBpcyAqKmRlcHJlY2F0ZWQqKiBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiBVc2Ugc2VjdXJlIGF1dGhlbnRpY2F0aW9uIHdpdGggYGNvZGVgIGFuZCBgcmVkaXJlY3RfdXJpYC5cbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5BdXRoIERhdGEgRXhhbXBsZSAoU2VjdXJlKTwvY2FwdGlvbj5cbiAqIGNvbnN0IGF1dGhEYXRhID0ge1xuICogICB3ZWlibzoge1xuICogICAgIGNvZGU6IFwieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcIixcbiAqICAgICByZWRpcmVjdF91cmk6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9jYWxsYmFja1wiXG4gKiAgIH1cbiAqIH07XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+QXV0aCBEYXRhIEV4YW1wbGUgKEluc2VjdXJlIC0gTm90IFJlY29tbWVuZGVkKTwvY2FwdGlvbj5cbiAqIGNvbnN0IGF1dGhEYXRhID0ge1xuICogICB3ZWlibzoge1xuICogICAgIGlkOiBcIjEyMzQ1NjdcIixcbiAqICAgICBhY2Nlc3NfdG9rZW46IFwieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHhcIlxuICogICB9XG4gKiB9O1xuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vb3Blbi53ZWliby5jb20vd2lraS9PYXV0aDIvYWNjZXNzX3Rva2VuIFdlaWJvIEF1dGhlbnRpY2F0aW9uIERvY3VtZW50YXRpb259XG4gKi9cblxuaW1wb3J0IEJhc2VBdXRoQ29kZUFkYXB0ZXIgZnJvbSAnLi9CYXNlQ29kZUF1dGhBZGFwdGVyJztcbmltcG9ydCBxdWVyeXN0cmluZyBmcm9tICdxdWVyeXN0cmluZyc7XG5cbmNsYXNzIFdlaWJvQWRhcHRlciBleHRlbmRzIEJhc2VBdXRoQ29kZUFkYXB0ZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignV2VpYm8nKTtcbiAgfVxuXG4gIGFzeW5jIGdldFVzZXJGcm9tQWNjZXNzVG9rZW4oYWNjZXNzX3Rva2VuKSB7XG4gICAgY29uc3QgcG9zdERhdGEgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkoe1xuICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL2FwaS53ZWliby5jb20vb2F1dGgyL2dldF90b2tlbl9pbmZvJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgIH0sXG4gICAgICBib2R5OiBwb3N0RGF0YSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ1dlaWJvIGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogZGF0YS51aWQsXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QWNjZXNzVG9rZW5Gcm9tQ29kZShhdXRoRGF0YSkge1xuICAgIGlmICghYXV0aERhdGE/LmNvZGUgfHwgIWF1dGhEYXRhPy5yZWRpcmVjdF91cmkpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgICAgJ1dlaWJvIGF1dGggcmVxdWlyZXMgY29kZSBhbmQgcmVkaXJlY3RfdXJpIHRvIGJlIHNlbnQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3N0RGF0YSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh7XG4gICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudFNlY3JldCxcbiAgICAgIGdyYW50X3R5cGU6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgICAgY29kZTogYXV0aERhdGEuY29kZSxcbiAgICAgIHJlZGlyZWN0X3VyaTogYXV0aERhdGEucmVkaXJlY3RfdXJpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9hcGkud2VpYm8uY29tL29hdXRoMi9hY2Nlc3NfdG9rZW4nLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IHBvc3REYXRhLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2sgfHwgZGF0YS5lcnJjb2RlKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ1dlaWJvIGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhLmFjY2Vzc190b2tlbjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgV2VpYm9BZGFwdGVyKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQWtGQSxJQUFBQSxvQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsWUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQXNDLFNBQUFELHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBbkZ0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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
|