parse-server 6.0.0-alpha.2 → 6.0.0-alpha.21
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/README.md +45 -17
- package/lib/AccountLockout.js +11 -26
- package/lib/Adapters/AdapterLoader.js +8 -14
- package/lib/Adapters/Analytics/AnalyticsAdapter.js +2 -8
- package/lib/Adapters/Auth/AuthAdapter.js +7 -16
- package/lib/Adapters/Auth/OAuth1Client.js +32 -57
- package/lib/Adapters/Auth/apple.js +6 -22
- package/lib/Adapters/Auth/facebook.js +7 -37
- package/lib/Adapters/Auth/gcenter.js +8 -37
- package/lib/Adapters/Auth/github.js +7 -10
- package/lib/Adapters/Auth/google.js +11 -34
- package/lib/Adapters/Auth/gpgames.js +5 -8
- package/lib/Adapters/Auth/httpsRequest.js +1 -7
- package/lib/Adapters/Auth/index.js +20 -65
- package/lib/Adapters/Auth/instagram.js +5 -9
- package/lib/Adapters/Auth/janraincapture.js +8 -12
- package/lib/Adapters/Auth/janrainengage.js +7 -11
- package/lib/Adapters/Auth/keycloak.js +5 -19
- package/lib/Adapters/Auth/ldap.js +1 -15
- package/lib/Adapters/Auth/line.js +7 -10
- package/lib/Adapters/Auth/linkedin.js +7 -12
- package/lib/Adapters/Auth/meetup.js +7 -10
- package/lib/Adapters/Auth/microsoft.js +7 -10
- package/lib/Adapters/Auth/oauth2.js +6 -18
- package/lib/Adapters/Auth/phantauth.js +8 -10
- package/lib/Adapters/Auth/qq.js +7 -13
- package/lib/Adapters/Auth/spotify.js +7 -14
- package/lib/Adapters/Auth/twitter.js +5 -15
- package/lib/Adapters/Auth/vkontakte.js +9 -15
- package/lib/Adapters/Auth/wechat.js +7 -10
- package/lib/Adapters/Auth/weibo.js +7 -11
- package/lib/Adapters/Cache/CacheAdapter.js +4 -12
- package/lib/Adapters/Cache/InMemoryCache.js +5 -19
- package/lib/Adapters/Cache/InMemoryCacheAdapter.js +1 -11
- package/lib/Adapters/Cache/LRUCache.js +1 -11
- package/lib/Adapters/Cache/NullCacheAdapter.js +1 -8
- package/lib/Adapters/Cache/RedisCacheAdapter.js +46 -87
- package/lib/Adapters/Cache/SchemaCache.js +1 -6
- package/lib/Adapters/Email/MailAdapter.js +2 -7
- package/lib/Adapters/Files/FilesAdapter.js +7 -21
- package/lib/Adapters/Files/GridFSBucketAdapter.js +6 -44
- package/lib/Adapters/Files/GridStoreAdapter.js +1 -1
- package/lib/Adapters/Logger/LoggerAdapter.js +2 -11
- package/lib/Adapters/Logger/WinstonLogger.js +3 -30
- package/lib/Adapters/Logger/WinstonLoggerAdapter.js +5 -16
- package/lib/Adapters/MessageQueue/EventEmitterMQ.js +3 -20
- package/lib/Adapters/PubSub/EventEmitterPubSub.js +1 -16
- package/lib/Adapters/PubSub/PubSubAdapter.js +2 -9
- package/lib/Adapters/PubSub/RedisPubSub.js +13 -10
- package/lib/Adapters/Push/PushAdapter.js +2 -8
- package/lib/Adapters/Storage/Mongo/MongoCollection.js +12 -37
- package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +26 -79
- package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +78 -209
- package/lib/Adapters/Storage/Mongo/MongoTransform.js +82 -371
- package/lib/Adapters/Storage/Postgres/PostgresClient.js +1 -13
- package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +1 -20
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +119 -446
- package/lib/Adapters/Storage/Postgres/sql/index.js +4 -7
- package/lib/Adapters/Storage/StorageAdapter.js +1 -1
- package/lib/Adapters/WebSocketServer/WSAdapter.js +3 -12
- package/lib/Adapters/WebSocketServer/WSSAdapter.js +7 -12
- package/lib/Auth.js +54 -121
- package/lib/ClientSDK.js +3 -11
- package/lib/Config.js +69 -113
- package/lib/Controllers/AdaptableController.js +6 -18
- package/lib/Controllers/AnalyticsController.js +1 -9
- package/lib/Controllers/CacheController.js +3 -23
- package/lib/Controllers/DatabaseController.js +147 -345
- package/lib/Controllers/FilesController.js +5 -34
- package/lib/Controllers/HooksController.js +1 -51
- package/lib/Controllers/LiveQueryController.js +4 -23
- package/lib/Controllers/LoggerController.js +15 -54
- package/lib/Controllers/ParseGraphQLController.js +49 -104
- package/lib/Controllers/PushController.js +20 -59
- package/lib/Controllers/SchemaController.js +154 -344
- package/lib/Controllers/UserController.js +11 -72
- package/lib/Controllers/index.js +19 -68
- package/lib/Controllers/types.js +1 -1
- package/lib/Deprecator/Deprecations.js +1 -8
- package/lib/Deprecator/Deprecator.js +9 -18
- package/lib/GraphQL/ParseGraphQLSchema.js +16 -100
- package/lib/GraphQL/ParseGraphQLServer.js +2 -29
- package/lib/GraphQL/helpers/objectsMutations.js +2 -12
- package/lib/GraphQL/helpers/objectsQueries.js +18 -76
- package/lib/GraphQL/loaders/defaultGraphQLMutations.js +1 -9
- package/lib/GraphQL/loaders/defaultGraphQLQueries.js +1 -8
- package/lib/GraphQL/loaders/defaultGraphQLTypes.js +9 -115
- package/lib/GraphQL/loaders/defaultRelaySchema.js +6 -18
- package/lib/GraphQL/loaders/filesMutations.js +2 -19
- package/lib/GraphQL/loaders/functionsMutations.js +6 -17
- package/lib/GraphQL/loaders/parseClassMutations.js +6 -44
- package/lib/GraphQL/loaders/parseClassQueries.js +1 -26
- package/lib/GraphQL/loaders/parseClassTypes.js +10 -64
- package/lib/GraphQL/loaders/schemaDirectives.js +1 -17
- package/lib/GraphQL/loaders/schemaMutations.js +1 -20
- package/lib/GraphQL/loaders/schemaQueries.js +1 -14
- package/lib/GraphQL/loaders/schemaTypes.js +2 -6
- package/lib/GraphQL/loaders/usersMutations.js +6 -28
- package/lib/GraphQL/loaders/usersQueries.js +4 -26
- package/lib/GraphQL/parseGraphQLUtils.js +6 -19
- package/lib/GraphQL/transformers/className.js +1 -4
- package/lib/GraphQL/transformers/constraintType.js +1 -20
- package/lib/GraphQL/transformers/inputType.js +1 -20
- package/lib/GraphQL/transformers/mutation.js +6 -51
- package/lib/GraphQL/transformers/outputType.js +1 -20
- package/lib/GraphQL/transformers/query.js +6 -42
- package/lib/GraphQL/transformers/schemaFields.js +7 -34
- package/lib/KeyPromiseQueue.js +1 -12
- package/lib/LiveQuery/Client.js +1 -25
- package/lib/LiveQuery/Id.js +1 -7
- package/lib/LiveQuery/ParseCloudCodePublisher.js +13 -19
- package/lib/LiveQuery/ParseLiveQueryServer.js +92 -306
- package/lib/LiveQuery/ParsePubSub.js +1 -12
- package/lib/LiveQuery/ParseWebSocketServer.js +4 -26
- package/lib/LiveQuery/QueryTools.js +14 -116
- package/lib/LiveQuery/RequestSchema.js +1 -1
- package/lib/LiveQuery/SessionTokenCache.js +1 -17
- package/lib/LiveQuery/Subscription.js +4 -18
- package/lib/LiveQuery/equalObjects.js +2 -14
- package/lib/Options/Definitions.js +79 -10
- package/lib/Options/docs.js +23 -3
- package/lib/Options/index.js +4 -12
- package/lib/Options/parsers.js +1 -18
- package/lib/Page.js +1 -9
- package/lib/ParseMessageQueue.js +1 -10
- package/lib/ParseServer.js +144 -182
- package/lib/ParseServerRESTController.js +6 -33
- package/lib/PromiseRouter.js +16 -50
- package/lib/Push/PushQueue.js +3 -15
- package/lib/Push/PushWorker.js +7 -32
- package/lib/Push/utils.js +9 -38
- package/lib/RestQuery.js +105 -242
- package/lib/RestWrite.js +212 -377
- package/lib/Routers/AggregateRouter.js +14 -51
- package/lib/Routers/AnalyticsRouter.js +2 -8
- package/lib/Routers/AudiencesRouter.js +1 -15
- package/lib/Routers/ClassesRouter.js +3 -53
- package/lib/Routers/CloudCodeRouter.js +1 -19
- package/lib/Routers/FeaturesRouter.js +1 -10
- package/lib/Routers/FilesRouter.js +29 -76
- package/lib/Routers/FunctionsRouter.js +5 -28
- package/lib/Routers/GlobalConfigRouter.js +4 -18
- package/lib/Routers/GraphQLRouter.js +1 -14
- package/lib/Routers/HooksRouter.js +1 -29
- package/lib/Routers/IAPValidationRouter.js +6 -29
- package/lib/Routers/InstallationsRouter.js +2 -12
- package/lib/Routers/LogsRouter.js +4 -16
- package/lib/Routers/PagesRouter.js +69 -129
- package/lib/Routers/PublicAPIRouter.js +3 -62
- package/lib/Routers/PurgeRouter.js +1 -15
- package/lib/Routers/PushRouter.js +2 -18
- package/lib/Routers/RolesRouter.js +1 -7
- package/lib/Routers/SchemasRouter.js +4 -34
- package/lib/Routers/SecurityRouter.js +1 -12
- package/lib/Routers/SessionsRouter.js +3 -19
- package/lib/Routers/UsersRouter.js +58 -155
- package/lib/SchemaMigrations/DefinedSchemas.js +56 -115
- package/lib/SchemaMigrations/Migrations.js +2 -8
- package/lib/Security/Check.js +8 -16
- package/lib/Security/CheckGroup.js +4 -11
- package/lib/Security/CheckGroups/CheckGroupDatabase.js +8 -18
- package/lib/Security/CheckGroups/CheckGroupServerConfig.js +5 -15
- package/lib/Security/CheckGroups/CheckGroups.js +1 -4
- package/lib/Security/CheckRunner.js +22 -41
- package/lib/StatusHandler.js +12 -69
- package/lib/TestUtils.js +1 -6
- package/lib/Utils.js +27 -66
- package/lib/batch.js +17 -28
- package/lib/cache.js +1 -3
- package/lib/cli/definitions/parse-live-query-server.js +1 -3
- package/lib/cli/definitions/parse-server.js +1 -3
- package/lib/cli/parse-live-query-server.js +1 -6
- package/lib/cli/parse-server.js +11 -21
- package/lib/cli/utils/commander.js +13 -51
- package/lib/cli/utils/runner.js +1 -14
- package/lib/cloud-code/Parse.Cloud.js +71 -92
- package/lib/cryptoUtils.js +11 -19
- package/lib/defaults.js +2 -14
- package/lib/deprecated.js +1 -2
- package/lib/index.js +16 -34
- package/lib/logger.js +6 -13
- package/lib/middlewares.js +147 -151
- package/lib/password.js +6 -10
- package/lib/request.js +173 -2
- package/lib/requiredParameter.js +1 -3
- package/lib/rest.js +19 -41
- package/lib/triggers.js +54 -252
- package/lib/vendor/mongodbUrl.js +125 -305
- package/package.json +22 -19
- package/lib/cloud-code/HTTPResponse.js +0 -73
- package/lib/cloud-code/httpRequest.js +0 -192
|
@@ -2,32 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
// Helper functions for accessing the instagram API.
|
|
4
4
|
var Parse = require('parse/node').Parse;
|
|
5
|
-
|
|
6
5
|
const httpsRequest = require('./httpsRequest');
|
|
6
|
+
const defaultURL = 'https://graph.instagram.com/';
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
// Returns a promise that fulfills if this user id is valid.
|
|
10
9
|
function validateAuthData(authData) {
|
|
11
10
|
const apiURL = authData.apiURL || defaultURL;
|
|
12
11
|
const path = `${apiURL}me?fields=id&access_token=${authData.access_token}`;
|
|
13
12
|
return httpsRequest.get(path).then(response => {
|
|
14
13
|
const user = response.data ? response.data : response;
|
|
15
|
-
|
|
16
14
|
if (user && user.id == authData.id) {
|
|
17
15
|
return;
|
|
18
16
|
}
|
|
19
|
-
|
|
20
17
|
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Instagram auth is invalid for this user.');
|
|
21
18
|
});
|
|
22
|
-
}
|
|
23
|
-
|
|
19
|
+
}
|
|
24
20
|
|
|
21
|
+
// Returns a promise that fulfills iff this app id is valid.
|
|
25
22
|
function validateAppId() {
|
|
26
23
|
return Promise.resolve();
|
|
27
24
|
}
|
|
28
|
-
|
|
29
25
|
module.exports = {
|
|
30
26
|
validateAppId,
|
|
31
27
|
validateAuthData
|
|
32
28
|
};
|
|
33
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJodHRwc1JlcXVlc3QiLCJkZWZhdWx0VVJMIiwidmFsaWRhdGVBdXRoRGF0YSIsImF1dGhEYXRhIiwiYXBpVVJMIiwicGF0aCIsImFjY2Vzc190b2tlbiIsImdldCIsInRoZW4iLCJyZXNwb25zZSIsInVzZXIiLCJkYXRhIiwiaWQiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJ2YWxpZGF0ZUFwcElkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvaW5zdGFncmFtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgaW5zdGFncmFtIEFQSS5cbnZhciBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbmNvbnN0IGh0dHBzUmVxdWVzdCA9IHJlcXVpcmUoJy4vaHR0cHNSZXF1ZXN0Jyk7XG5jb25zdCBkZWZhdWx0VVJMID0gJ2h0dHBzOi8vZ3JhcGguaW5zdGFncmFtLmNvbS8nO1xuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmIHRoaXMgdXNlciBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEpIHtcbiAgY29uc3QgYXBpVVJMID0gYXV0aERhdGEuYXBpVVJMIHx8IGRlZmF1bHRVUkw7XG4gIGNvbnN0IHBhdGggPSBgJHthcGlVUkx9bWU/ZmllbGRzPWlkJmFjY2Vzc190b2tlbj0ke2F1dGhEYXRhLmFjY2Vzc190b2tlbn1gO1xuICByZXR1cm4gaHR0cHNSZXF1ZXN0LmdldChwYXRoKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICBjb25zdCB1c2VyID0gcmVzcG9uc2UuZGF0YSA/IHJlc3BvbnNlLmRhdGEgOiByZXNwb25zZTtcbiAgICBpZiAodXNlciAmJiB1c2VyLmlkID09IGF1dGhEYXRhLmlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnSW5zdGFncmFtIGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICB9KTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyBhcHAgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUFwcElkKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBLElBQUlBLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDRCxLQUFLO0FBQ3ZDLE1BQU1FLFlBQVksR0FBR0QsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0FBQzlDLE1BQU1FLFVBQVUsR0FBRyw4QkFBOEI7O0FBRWpEO0FBQ0EsU0FBU0MsZ0JBQWdCLENBQUNDLFFBQVEsRUFBRTtFQUNsQyxNQUFNQyxNQUFNLEdBQUdELFFBQVEsQ0FBQ0MsTUFBTSxJQUFJSCxVQUFVO0VBQzVDLE1BQU1JLElBQUksR0FBSSxHQUFFRCxNQUFPLDZCQUE0QkQsUUFBUSxDQUFDRyxZQUFhLEVBQUM7RUFDMUUsT0FBT04sWUFBWSxDQUFDTyxHQUFHLENBQUNGLElBQUksQ0FBQyxDQUFDRyxJQUFJLENBQUNDLFFBQVEsSUFBSTtJQUM3QyxNQUFNQyxJQUFJLEdBQUdELFFBQVEsQ0FBQ0UsSUFBSSxHQUFHRixRQUFRLENBQUNFLElBQUksR0FBR0YsUUFBUTtJQUNyRCxJQUFJQyxJQUFJLElBQUlBLElBQUksQ0FBQ0UsRUFBRSxJQUFJVCxRQUFRLENBQUNTLEVBQUUsRUFBRTtNQUNsQztJQUNGO0lBQ0EsTUFBTSxJQUFJZCxLQUFLLENBQUNlLEtBQUssQ0FBQ2YsS0FBSyxDQUFDZSxLQUFLLENBQUNDLGdCQUFnQixFQUFFLDBDQUEwQyxDQUFDO0VBQ2pHLENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0EsU0FBU0MsYUFBYSxHQUFHO0VBQ3ZCLE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxFQUFFO0FBQzFCO0FBRUFDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2ZKLGFBQWE7RUFDYmI7QUFDRixDQUFDIn0=
|
|
@@ -2,12 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
// Helper functions for accessing the Janrain Capture API.
|
|
4
4
|
var Parse = require('parse/node').Parse;
|
|
5
|
-
|
|
6
5
|
var querystring = require('querystring');
|
|
6
|
+
const httpsRequest = require('./httpsRequest');
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
// Returns a promise that fulfills iff this user id is valid.
|
|
11
9
|
function validateAuthData(authData, options) {
|
|
12
10
|
return request(options.janrain_capture_host, authData.access_token).then(data => {
|
|
13
11
|
//successful response will have a "stat" (status) of 'ok' and a result node that stores the uuid, because that's all we asked for
|
|
@@ -15,32 +13,30 @@ function validateAuthData(authData, options) {
|
|
|
15
13
|
if (data && data.stat == 'ok' && data.result == authData.id) {
|
|
16
14
|
return;
|
|
17
15
|
}
|
|
18
|
-
|
|
19
16
|
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Janrain capture auth is invalid for this user.');
|
|
20
17
|
});
|
|
21
|
-
}
|
|
22
|
-
|
|
18
|
+
}
|
|
23
19
|
|
|
20
|
+
// Returns a promise that fulfills iff this app id is valid.
|
|
24
21
|
function validateAppId() {
|
|
25
22
|
//no-op
|
|
26
23
|
return Promise.resolve();
|
|
27
|
-
}
|
|
28
|
-
|
|
24
|
+
}
|
|
29
25
|
|
|
26
|
+
// A promisey wrapper for api requests
|
|
30
27
|
function request(host, access_token) {
|
|
31
28
|
var query_string_data = querystring.stringify({
|
|
32
29
|
access_token: access_token,
|
|
33
30
|
attribute_name: 'uuid' // we only need to pull the uuid for this access token to make sure it matches
|
|
34
|
-
|
|
35
31
|
});
|
|
32
|
+
|
|
36
33
|
return httpsRequest.get({
|
|
37
34
|
host: host,
|
|
38
35
|
path: '/entity?' + query_string_data
|
|
39
36
|
});
|
|
40
37
|
}
|
|
41
|
-
|
|
42
38
|
module.exports = {
|
|
43
39
|
validateAppId: validateAppId,
|
|
44
40
|
validateAuthData: validateAuthData
|
|
45
41
|
};
|
|
46
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJxdWVyeXN0cmluZyIsImh0dHBzUmVxdWVzdCIsInZhbGlkYXRlQXV0aERhdGEiLCJhdXRoRGF0YSIsIm9wdGlvbnMiLCJyZXF1ZXN0IiwiamFucmFpbl9jYXB0dXJlX2hvc3QiLCJhY2Nlc3NfdG9rZW4iLCJ0aGVuIiwiZGF0YSIsInN0YXQiLCJyZXN1bHQiLCJpZCIsIkVycm9yIiwiT0JKRUNUX05PVF9GT1VORCIsInZhbGlkYXRlQXBwSWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImhvc3QiLCJxdWVyeV9zdHJpbmdfZGF0YSIsInN0cmluZ2lmeSIsImF0dHJpYnV0ZV9uYW1lIiwiZ2V0IiwicGF0aCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvQXV0aC9qYW5yYWluY2FwdHVyZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgdGhlIEphbnJhaW4gQ2FwdHVyZSBBUEkuXG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG52YXIgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuY29uc3QgaHR0cHNSZXF1ZXN0ID0gcmVxdWlyZSgnLi9odHRwc1JlcXVlc3QnKTtcblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyB1c2VyIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBdXRoRGF0YShhdXRoRGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gcmVxdWVzdChvcHRpb25zLmphbnJhaW5fY2FwdHVyZV9ob3N0LCBhdXRoRGF0YS5hY2Nlc3NfdG9rZW4pLnRoZW4oZGF0YSA9PiB7XG4gICAgLy9zdWNjZXNzZnVsIHJlc3BvbnNlIHdpbGwgaGF2ZSBhIFwic3RhdFwiIChzdGF0dXMpIG9mICdvaycgYW5kIGEgcmVzdWx0IG5vZGUgdGhhdCBzdG9yZXMgdGhlIHV1aWQsIGJlY2F1c2UgdGhhdCdzIGFsbCB3ZSBhc2tlZCBmb3JcbiAgICAvL3NlZTogaHR0cHM6Ly9kb2NzLmphbnJhaW4uY29tL2FwaS9yZWdpc3RyYXRpb24vZW50aXR5LyNlbnRpdHlcbiAgICBpZiAoZGF0YSAmJiBkYXRhLnN0YXQgPT0gJ29rJyAmJiBkYXRhLnJlc3VsdCA9PSBhdXRoRGF0YS5pZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgJ0phbnJhaW4gY2FwdHVyZSBhdXRoIGlzIGludmFsaWQgZm9yIHRoaXMgdXNlci4nXG4gICAgKTtcbiAgfSk7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWZmIHRoaXMgYXBwIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBcHBJZCgpIHtcbiAgLy9uby1vcFxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbi8vIEEgcHJvbWlzZXkgd3JhcHBlciBmb3IgYXBpIHJlcXVlc3RzXG5mdW5jdGlvbiByZXF1ZXN0KGhvc3QsIGFjY2Vzc190b2tlbikge1xuICB2YXIgcXVlcnlfc3RyaW5nX2RhdGEgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkoe1xuICAgIGFjY2Vzc190b2tlbjogYWNjZXNzX3Rva2VuLFxuICAgIGF0dHJpYnV0ZV9uYW1lOiAndXVpZCcsIC8vIHdlIG9ubHkgbmVlZCB0byBwdWxsIHRoZSB1dWlkIGZvciB0aGlzIGFjY2VzcyB0b2tlbiB0byBtYWtlIHN1cmUgaXQgbWF0Y2hlc1xuICB9KTtcblxuICByZXR1cm4gaHR0cHNSZXF1ZXN0LmdldCh7IGhvc3Q6IGhvc3QsIHBhdGg6ICcvZW50aXR5PycgKyBxdWVyeV9zdHJpbmdfZGF0YSB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHZhbGlkYXRlQXBwSWQ6IHZhbGlkYXRlQXBwSWQsXG4gIHZhbGlkYXRlQXV0aERhdGE6IHZhbGlkYXRlQXV0aERhdGEsXG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0EsSUFBSUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUNELEtBQUs7QUFDdkMsSUFBSUUsV0FBVyxHQUFHRCxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3hDLE1BQU1FLFlBQVksR0FBR0YsT0FBTyxDQUFDLGdCQUFnQixDQUFDOztBQUU5QztBQUNBLFNBQVNHLGdCQUFnQixDQUFDQyxRQUFRLEVBQUVDLE9BQU8sRUFBRTtFQUMzQyxPQUFPQyxPQUFPLENBQUNELE9BQU8sQ0FBQ0Usb0JBQW9CLEVBQUVILFFBQVEsQ0FBQ0ksWUFBWSxDQUFDLENBQUNDLElBQUksQ0FBQ0MsSUFBSSxJQUFJO0lBQy9FO0lBQ0E7SUFDQSxJQUFJQSxJQUFJLElBQUlBLElBQUksQ0FBQ0MsSUFBSSxJQUFJLElBQUksSUFBSUQsSUFBSSxDQUFDRSxNQUFNLElBQUlSLFFBQVEsQ0FBQ1MsRUFBRSxFQUFFO01BQzNEO0lBQ0Y7SUFDQSxNQUFNLElBQUlkLEtBQUssQ0FBQ2UsS0FBSyxDQUNuQmYsS0FBSyxDQUFDZSxLQUFLLENBQUNDLGdCQUFnQixFQUM1QixnREFBZ0QsQ0FDakQ7RUFDSCxDQUFDLENBQUM7QUFDSjs7QUFFQTtBQUNBLFNBQVNDLGFBQWEsR0FBRztFQUN2QjtFQUNBLE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxFQUFFO0FBQzFCOztBQUVBO0FBQ0EsU0FBU1osT0FBTyxDQUFDYSxJQUFJLEVBQUVYLFlBQVksRUFBRTtFQUNuQyxJQUFJWSxpQkFBaUIsR0FBR25CLFdBQVcsQ0FBQ29CLFNBQVMsQ0FBQztJQUM1Q2IsWUFBWSxFQUFFQSxZQUFZO0lBQzFCYyxjQUFjLEVBQUUsTUFBTSxDQUFFO0VBQzFCLENBQUMsQ0FBQzs7RUFFRixPQUFPcEIsWUFBWSxDQUFDcUIsR0FBRyxDQUFDO0lBQUVKLElBQUksRUFBRUEsSUFBSTtJQUFFSyxJQUFJLEVBQUUsVUFBVSxHQUFHSjtFQUFrQixDQUFDLENBQUM7QUFDL0U7QUFFQUssTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZlYsYUFBYSxFQUFFQSxhQUFhO0VBQzVCYixnQkFBZ0IsRUFBRUE7QUFDcEIsQ0FBQyJ9
|
|
@@ -2,12 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
// Helper functions for accessing the Janrain Engage API.
|
|
4
4
|
var httpsRequest = require('./httpsRequest');
|
|
5
|
-
|
|
6
5
|
var Parse = require('parse/node').Parse;
|
|
6
|
+
var querystring = require('querystring');
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
// Returns a promise that fulfills iff this user id is valid.
|
|
11
9
|
function validateAuthData(authData, options) {
|
|
12
10
|
return apiRequest(options.api_key, authData.auth_token).then(data => {
|
|
13
11
|
//successful response will have a "stat" (status) of 'ok' and a profile node with an identifier
|
|
@@ -15,18 +13,17 @@ function validateAuthData(authData, options) {
|
|
|
15
13
|
if (data && data.stat == 'ok' && data.profile.identifier == authData.id) {
|
|
16
14
|
return;
|
|
17
15
|
}
|
|
18
|
-
|
|
19
16
|
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Janrain engage auth is invalid for this user.');
|
|
20
17
|
});
|
|
21
|
-
}
|
|
22
|
-
|
|
18
|
+
}
|
|
23
19
|
|
|
20
|
+
// Returns a promise that fulfills iff this app id is valid.
|
|
24
21
|
function validateAppId() {
|
|
25
22
|
//no-op
|
|
26
23
|
return Promise.resolve();
|
|
27
|
-
}
|
|
28
|
-
|
|
24
|
+
}
|
|
29
25
|
|
|
26
|
+
// A promisey wrapper for api requests
|
|
30
27
|
function apiRequest(api_key, auth_token) {
|
|
31
28
|
var post_data = querystring.stringify({
|
|
32
29
|
token: auth_token,
|
|
@@ -44,9 +41,8 @@ function apiRequest(api_key, auth_token) {
|
|
|
44
41
|
};
|
|
45
42
|
return httpsRequest.request(post_options, post_data);
|
|
46
43
|
}
|
|
47
|
-
|
|
48
44
|
module.exports = {
|
|
49
45
|
validateAppId: validateAppId,
|
|
50
46
|
validateAuthData: validateAuthData
|
|
51
47
|
};
|
|
52
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJodHRwc1JlcXVlc3QiLCJyZXF1aXJlIiwiUGFyc2UiLCJxdWVyeXN0cmluZyIsInZhbGlkYXRlQXV0aERhdGEiLCJhdXRoRGF0YSIsIm9wdGlvbnMiLCJhcGlSZXF1ZXN0IiwiYXBpX2tleSIsImF1dGhfdG9rZW4iLCJ0aGVuIiwiZGF0YSIsInN0YXQiLCJwcm9maWxlIiwiaWRlbnRpZmllciIsImlkIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwidmFsaWRhdGVBcHBJZCIsIlByb21pc2UiLCJyZXNvbHZlIiwicG9zdF9kYXRhIiwic3RyaW5naWZ5IiwidG9rZW4iLCJhcGlLZXkiLCJmb3JtYXQiLCJwb3N0X29wdGlvbnMiLCJob3N0IiwicGF0aCIsIm1ldGhvZCIsImhlYWRlcnMiLCJsZW5ndGgiLCJyZXF1ZXN0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2phbnJhaW5lbmdhZ2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIHRoZSBKYW5yYWluIEVuZ2FnZSBBUEkuXG52YXIgaHR0cHNSZXF1ZXN0ID0gcmVxdWlyZSgnLi9odHRwc1JlcXVlc3QnKTtcbnZhciBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbnZhciBxdWVyeXN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJyk7XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWZmIHRoaXMgdXNlciBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGFwaVJlcXVlc3Qob3B0aW9ucy5hcGlfa2V5LCBhdXRoRGF0YS5hdXRoX3Rva2VuKS50aGVuKGRhdGEgPT4ge1xuICAgIC8vc3VjY2Vzc2Z1bCByZXNwb25zZSB3aWxsIGhhdmUgYSBcInN0YXRcIiAoc3RhdHVzKSBvZiAnb2snIGFuZCBhIHByb2ZpbGUgbm9kZSB3aXRoIGFuIGlkZW50aWZpZXJcbiAgICAvL3NlZTogaHR0cDovL2RldmVsb3BlcnMuamFucmFpbi5jb20vb3ZlcnZpZXcvc29jaWFsLWxvZ2luL2lkZW50aXR5LXByb3ZpZGVycy91c2VyLXByb2ZpbGUtZGF0YS8jbm9ybWFsaXplZC11c2VyLXByb2ZpbGUtZGF0YVxuICAgIGlmIChkYXRhICYmIGRhdGEuc3RhdCA9PSAnb2snICYmIGRhdGEucHJvZmlsZS5pZGVudGlmaWVyID09IGF1dGhEYXRhLmlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICAnSmFucmFpbiBlbmdhZ2UgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJ1xuICAgICk7XG4gIH0pO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmZiB0aGlzIGFwcCBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXBwSWQoKSB7XG4gIC8vbm8tb3BcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG4vLyBBIHByb21pc2V5IHdyYXBwZXIgZm9yIGFwaSByZXF1ZXN0c1xuZnVuY3Rpb24gYXBpUmVxdWVzdChhcGlfa2V5LCBhdXRoX3Rva2VuKSB7XG4gIHZhciBwb3N0X2RhdGEgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkoe1xuICAgIHRva2VuOiBhdXRoX3Rva2VuLFxuICAgIGFwaUtleTogYXBpX2tleSxcbiAgICBmb3JtYXQ6ICdqc29uJyxcbiAgfSk7XG5cbiAgdmFyIHBvc3Rfb3B0aW9ucyA9IHtcbiAgICBob3N0OiAncnB4bm93LmNvbScsXG4gICAgcGF0aDogJy9hcGkvdjIvYXV0aF9pbmZvJyxcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAnQ29udGVudC1MZW5ndGgnOiBwb3N0X2RhdGEubGVuZ3RoLFxuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIGh0dHBzUmVxdWVzdC5yZXF1ZXN0KHBvc3Rfb3B0aW9ucywgcG9zdF9kYXRhKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHZhbGlkYXRlQXBwSWQ6IHZhbGlkYXRlQXBwSWQsXG4gIHZhbGlkYXRlQXV0aERhdGE6IHZhbGlkYXRlQXV0aERhdGEsXG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0EsSUFBSUEsWUFBWSxHQUFHQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7QUFDNUMsSUFBSUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUNDLEtBQUs7QUFDdkMsSUFBSUMsV0FBVyxHQUFHRixPQUFPLENBQUMsYUFBYSxDQUFDOztBQUV4QztBQUNBLFNBQVNHLGdCQUFnQixDQUFDQyxRQUFRLEVBQUVDLE9BQU8sRUFBRTtFQUMzQyxPQUFPQyxVQUFVLENBQUNELE9BQU8sQ0FBQ0UsT0FBTyxFQUFFSCxRQUFRLENBQUNJLFVBQVUsQ0FBQyxDQUFDQyxJQUFJLENBQUNDLElBQUksSUFBSTtJQUNuRTtJQUNBO0lBQ0EsSUFBSUEsSUFBSSxJQUFJQSxJQUFJLENBQUNDLElBQUksSUFBSSxJQUFJLElBQUlELElBQUksQ0FBQ0UsT0FBTyxDQUFDQyxVQUFVLElBQUlULFFBQVEsQ0FBQ1UsRUFBRSxFQUFFO01BQ3ZFO0lBQ0Y7SUFDQSxNQUFNLElBQUliLEtBQUssQ0FBQ2MsS0FBSyxDQUNuQmQsS0FBSyxDQUFDYyxLQUFLLENBQUNDLGdCQUFnQixFQUM1QiwrQ0FBK0MsQ0FDaEQ7RUFDSCxDQUFDLENBQUM7QUFDSjs7QUFFQTtBQUNBLFNBQVNDLGFBQWEsR0FBRztFQUN2QjtFQUNBLE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxFQUFFO0FBQzFCOztBQUVBO0FBQ0EsU0FBU2IsVUFBVSxDQUFDQyxPQUFPLEVBQUVDLFVBQVUsRUFBRTtFQUN2QyxJQUFJWSxTQUFTLEdBQUdsQixXQUFXLENBQUNtQixTQUFTLENBQUM7SUFDcENDLEtBQUssRUFBRWQsVUFBVTtJQUNqQmUsTUFBTSxFQUFFaEIsT0FBTztJQUNmaUIsTUFBTSxFQUFFO0VBQ1YsQ0FBQyxDQUFDO0VBRUYsSUFBSUMsWUFBWSxHQUFHO0lBQ2pCQyxJQUFJLEVBQUUsWUFBWTtJQUNsQkMsSUFBSSxFQUFFLG1CQUFtQjtJQUN6QkMsTUFBTSxFQUFFLE1BQU07SUFDZEMsT0FBTyxFQUFFO01BQ1AsY0FBYyxFQUFFLG1DQUFtQztNQUNuRCxnQkFBZ0IsRUFBRVQsU0FBUyxDQUFDVTtJQUM5QjtFQUNGLENBQUM7RUFFRCxPQUFPL0IsWUFBWSxDQUFDZ0MsT0FBTyxDQUFDTixZQUFZLEVBQUVMLFNBQVMsQ0FBQztBQUN0RDtBQUVBWSxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmaEIsYUFBYSxFQUFFQSxhQUFhO0VBQzVCZCxnQkFBZ0IsRUFBRUE7QUFDcEIsQ0FBQyJ9
|
|
@@ -34,26 +34,20 @@
|
|
|
34
34
|
}
|
|
35
35
|
```
|
|
36
36
|
*/
|
|
37
|
+
|
|
37
38
|
const {
|
|
38
39
|
Parse
|
|
39
40
|
} = require('parse/node');
|
|
40
|
-
|
|
41
41
|
const httpsRequest = require('./httpsRequest');
|
|
42
|
-
|
|
43
42
|
const arraysEqual = (_arr1, _arr2) => {
|
|
44
43
|
if (!Array.isArray(_arr1) || !Array.isArray(_arr2) || _arr1.length !== _arr2.length) return false;
|
|
45
|
-
|
|
46
44
|
var arr1 = _arr1.concat().sort();
|
|
47
|
-
|
|
48
45
|
var arr2 = _arr2.concat().sort();
|
|
49
|
-
|
|
50
46
|
for (var i = 0; i < arr1.length; i++) {
|
|
51
47
|
if (arr1[i] !== arr2[i]) return false;
|
|
52
48
|
}
|
|
53
|
-
|
|
54
49
|
return true;
|
|
55
50
|
};
|
|
56
|
-
|
|
57
51
|
const handleAuth = async ({
|
|
58
52
|
access_token,
|
|
59
53
|
id,
|
|
@@ -65,11 +59,9 @@ const handleAuth = async ({
|
|
|
65
59
|
if (!(access_token && id)) {
|
|
66
60
|
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Missing access token and/or User id');
|
|
67
61
|
}
|
|
68
|
-
|
|
69
62
|
if (!config || !(config['auth-server-url'] && config['realm'])) {
|
|
70
63
|
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Missing keycloak configuration');
|
|
71
64
|
}
|
|
72
|
-
|
|
73
65
|
try {
|
|
74
66
|
const response = await httpsRequest.get({
|
|
75
67
|
host: config['auth-server-url'],
|
|
@@ -78,19 +70,15 @@ const handleAuth = async ({
|
|
|
78
70
|
Authorization: 'Bearer ' + access_token
|
|
79
71
|
}
|
|
80
72
|
});
|
|
81
|
-
|
|
82
73
|
if (response && response.data && response.data.sub == id && arraysEqual(response.data.roles, roles) && arraysEqual(response.data.groups, groups)) {
|
|
83
74
|
return;
|
|
84
75
|
}
|
|
85
|
-
|
|
86
76
|
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Invalid authentication');
|
|
87
77
|
} catch (e) {
|
|
88
78
|
if (e instanceof Parse.Error) {
|
|
89
79
|
throw e;
|
|
90
80
|
}
|
|
91
|
-
|
|
92
81
|
const error = JSON.parse(e.text);
|
|
93
|
-
|
|
94
82
|
if (error.error_description) {
|
|
95
83
|
throw new Parse.Error(Parse.Error.HOSTING_ERROR, error.error_description);
|
|
96
84
|
} else {
|
|
@@ -98,6 +86,7 @@ const handleAuth = async ({
|
|
|
98
86
|
}
|
|
99
87
|
}
|
|
100
88
|
};
|
|
89
|
+
|
|
101
90
|
/*
|
|
102
91
|
@param {Object} authData: the client provided authData
|
|
103
92
|
@param {string} authData.access_token: the access_token retrieved from client authentication in Keycloak
|
|
@@ -107,19 +96,16 @@ const handleAuth = async ({
|
|
|
107
96
|
@param {Object} options: additional options
|
|
108
97
|
@param {Object} options.config: the config object passed during Parse Server instantiation
|
|
109
98
|
*/
|
|
110
|
-
|
|
111
|
-
|
|
112
99
|
function validateAuthData(authData, options = {}) {
|
|
113
100
|
return handleAuth(authData, options);
|
|
114
|
-
}
|
|
115
|
-
|
|
101
|
+
}
|
|
116
102
|
|
|
103
|
+
// Returns a promise that fulfills if this app id is valid.
|
|
117
104
|
function validateAppId() {
|
|
118
105
|
return Promise.resolve();
|
|
119
106
|
}
|
|
120
|
-
|
|
121
107
|
module.exports = {
|
|
122
108
|
validateAppId,
|
|
123
109
|
validateAuthData
|
|
124
110
|
};
|
|
125
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
111
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJodHRwc1JlcXVlc3QiLCJhcnJheXNFcXVhbCIsIl9hcnIxIiwiX2FycjIiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJhcnIxIiwiY29uY2F0Iiwic29ydCIsImFycjIiLCJpIiwiaGFuZGxlQXV0aCIsImFjY2Vzc190b2tlbiIsImlkIiwicm9sZXMiLCJncm91cHMiLCJjb25maWciLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJyZXNwb25zZSIsImdldCIsImhvc3QiLCJwYXRoIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJkYXRhIiwic3ViIiwiZSIsImVycm9yIiwiSlNPTiIsInBhcnNlIiwidGV4dCIsImVycm9yX2Rlc2NyaXB0aW9uIiwiSE9TVElOR19FUlJPUiIsInZhbGlkYXRlQXV0aERhdGEiLCJhdXRoRGF0YSIsIm9wdGlvbnMiLCJ2YWxpZGF0ZUFwcElkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgva2V5Y2xvYWsuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgIyBQYXJzZSBTZXJ2ZXIgS2V5Y2xvYWsgQXV0aGVudGljYXRpb25cblxuICAjIyBLZXljbG9hayBgYXV0aERhdGFgXG5cbiAgYGBgXG4gICAge1xuICAgICAgXCJrZXljbG9ha1wiOiB7XG4gICAgICAgIFwiYWNjZXNzX3Rva2VuXCI6IFwiYWNjZXNzIHRva2VuIHlvdSBnb3QgZnJvbSBrZXljbG9hayBKUyBjbGllbnQgYXV0aGVudGljYXRpb25cIixcbiAgICAgICAgXCJpZFwiOiBcInRoZSBpZCByZXRyaWV2ZWQgZnJvbSBjbGllbnQgYXV0aGVudGljYXRpb24gaW4gS2V5Y2xvYWtcIixcbiAgICAgICAgXCJyb2xlc1wiOiBbXCJ0aGUgcm9sZXMgcmV0cmlldmVkIGZyb20gY2xpZW50IGF1dGhlbnRpY2F0aW9uIGluIEtleWNsb2FrXCJdLFxuICAgICAgICBcImdyb3Vwc1wiOiBbXCJ0aGUgZ3JvdXBzIHJldHJpZXZlZCBmcm9tIGNsaWVudCBhdXRoZW50aWNhdGlvbiBpbiBLZXljbG9ha1wiXVxuICAgICAgfVxuICAgIH1cbiAgYGBgXG5cbiAgVGhlIGF1dGhlbnRpY2F0aW9uIG1vZHVsZSB3aWxsIHRlc3QgaWYgdGhlIGF1dGhEYXRhIGlzIHRoZSBzYW1lIGFzIHRoZVxuICB1c2VyaW5mbyBvYXV0aCBjYWxsLCBjb21wYXJpbmcgdGhlIGF0dHJpYnV0ZXNcblxuICBDb3B5IHRoZSBKU09OIGNvbmZpZyBmaWxlIGdlbmVyYXRlZCBvbiBLZXljbG9hayAoaHR0cHM6Ly93d3cua2V5Y2xvYWsub3JnL2RvY3MvbGF0ZXN0L3NlY3VyaW5nX2FwcHMvaW5kZXguaHRtbCNfamF2YXNjcmlwdF9hZGFwdGVyKVxuICBhbmQgcGFzdGUgaXQgaW5zaWRlIG9mIGEgZm9sZGVyIChFeC46IGBhdXRoL2tleWNsb2FrLmpzb25gKSBpbiB5b3VyIHNlcnZlci5cblxuICBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gUGFyc2Ugc2VydmVyOlxuXG4gIGBgYFxuICAgIHtcbiAgICAgIGF1dGg6IHtcbiAgICAgICAga2V5Y2xvYWs6IHtcbiAgICAgICAgICBjb25maWc6IHJlcXVpcmUoYC4vYXV0aC9rZXljbG9hay5qc29uYClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgYGBgXG4qL1xuXG5jb25zdCB7IFBhcnNlIH0gPSByZXF1aXJlKCdwYXJzZS9ub2RlJyk7XG5jb25zdCBodHRwc1JlcXVlc3QgPSByZXF1aXJlKCcuL2h0dHBzUmVxdWVzdCcpO1xuXG5jb25zdCBhcnJheXNFcXVhbCA9IChfYXJyMSwgX2FycjIpID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KF9hcnIxKSB8fCAhQXJyYXkuaXNBcnJheShfYXJyMikgfHwgX2FycjEubGVuZ3RoICE9PSBfYXJyMi5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICB2YXIgYXJyMSA9IF9hcnIxLmNvbmNhdCgpLnNvcnQoKTtcbiAgdmFyIGFycjIgPSBfYXJyMi5jb25jYXQoKS5zb3J0KCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFycjFbaV0gIT09IGFycjJbaV0pIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgaGFuZGxlQXV0aCA9IGFzeW5jICh7IGFjY2Vzc190b2tlbiwgaWQsIHJvbGVzLCBncm91cHMgfSA9IHt9LCB7IGNvbmZpZyB9ID0ge30pID0+IHtcbiAgaWYgKCEoYWNjZXNzX3Rva2VuICYmIGlkKSkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnTWlzc2luZyBhY2Nlc3MgdG9rZW4gYW5kL29yIFVzZXIgaWQnKTtcbiAgfVxuICBpZiAoIWNvbmZpZyB8fCAhKGNvbmZpZ1snYXV0aC1zZXJ2ZXItdXJsJ10gJiYgY29uZmlnWydyZWFsbSddKSkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnTWlzc2luZyBrZXljbG9hayBjb25maWd1cmF0aW9uJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGh0dHBzUmVxdWVzdC5nZXQoe1xuICAgICAgaG9zdDogY29uZmlnWydhdXRoLXNlcnZlci11cmwnXSxcbiAgICAgIHBhdGg6IGAvcmVhbG1zLyR7Y29uZmlnWydyZWFsbSddfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC91c2VyaW5mb2AsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIGFjY2Vzc190b2tlbixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2UgJiZcbiAgICAgIHJlc3BvbnNlLmRhdGEgJiZcbiAgICAgIHJlc3BvbnNlLmRhdGEuc3ViID09IGlkICYmXG4gICAgICBhcnJheXNFcXVhbChyZXNwb25zZS5kYXRhLnJvbGVzLCByb2xlcykgJiZcbiAgICAgIGFycmF5c0VxdWFsKHJlc3BvbnNlLmRhdGEuZ3JvdXBzLCBncm91cHMpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnSW52YWxpZCBhdXRoZW50aWNhdGlvbicpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBQYXJzZS5FcnJvcikge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgY29uc3QgZXJyb3IgPSBKU09OLnBhcnNlKGUudGV4dCk7XG4gICAgaWYgKGVycm9yLmVycm9yX2Rlc2NyaXB0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSE9TVElOR19FUlJPUiwgZXJyb3IuZXJyb3JfZGVzY3JpcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLkhPU1RJTkdfRVJST1IsXG4gICAgICAgICdDb3VsZCBub3QgY29ubmVjdCB0byB0aGUgYXV0aGVudGljYXRpb24gc2VydmVyJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qXG4gIEBwYXJhbSB7T2JqZWN0fSBhdXRoRGF0YTogdGhlIGNsaWVudCBwcm92aWRlZCBhdXRoRGF0YVxuICBAcGFyYW0ge3N0cmluZ30gYXV0aERhdGEuYWNjZXNzX3Rva2VuOiB0aGUgYWNjZXNzX3Rva2VuIHJldHJpZXZlZCBmcm9tIGNsaWVudCBhdXRoZW50aWNhdGlvbiBpbiBLZXljbG9ha1xuICBAcGFyYW0ge3N0cmluZ30gYXV0aERhdGEuaWQ6IHRoZSBpZCByZXRyaWV2ZWQgZnJvbSBjbGllbnQgYXV0aGVudGljYXRpb24gaW4gS2V5Y2xvYWtcbiAgQHBhcmFtIHtBcnJheX0gIGF1dGhEYXRhLnJvbGVzOiB0aGUgcm9sZXMgcmV0cmlldmVkIGZyb20gY2xpZW50IGF1dGhlbnRpY2F0aW9uIGluIEtleWNsb2FrXG4gIEBwYXJhbSB7QXJyYXl9ICBhdXRoRGF0YS5ncm91cHM6IHRoZSBncm91cHMgcmV0cmlldmVkIGZyb20gY2xpZW50IGF1dGhlbnRpY2F0aW9uIGluIEtleWNsb2FrXG4gIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zOiBhZGRpdGlvbmFsIG9wdGlvbnNcbiAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMuY29uZmlnOiB0aGUgY29uZmlnIG9iamVjdCBwYXNzZWQgZHVyaW5nIFBhcnNlIFNlcnZlciBpbnN0YW50aWF0aW9uXG4qL1xuZnVuY3Rpb24gdmFsaWRhdGVBdXRoRGF0YShhdXRoRGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBoYW5kbGVBdXRoKGF1dGhEYXRhLCBvcHRpb25zKTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZiB0aGlzIGFwcCBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXBwSWQoKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHZhbGlkYXRlQXBwSWQsXG4gIHZhbGlkYXRlQXV0aERhdGEsXG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU07RUFBRUE7QUFBTSxDQUFDLEdBQUdDLE9BQU8sQ0FBQyxZQUFZLENBQUM7QUFDdkMsTUFBTUMsWUFBWSxHQUFHRCxPQUFPLENBQUMsZ0JBQWdCLENBQUM7QUFFOUMsTUFBTUUs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
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
const ldapjs = require('ldapjs');
|
|
4
|
-
|
|
5
4
|
const Parse = require('parse/node').Parse;
|
|
6
|
-
|
|
7
5
|
function validateAuthData(authData, options) {
|
|
8
6
|
if (!optionsAreValid(options)) {
|
|
9
7
|
return new Promise((_, reject) => {
|
|
10
8
|
reject(new Parse.Error(Parse.Error.INTERNAL_SERVER_ERROR, 'LDAP auth configuration missing'));
|
|
11
9
|
});
|
|
12
10
|
}
|
|
13
|
-
|
|
14
11
|
const clientOptions = options.url.startsWith('ldaps://') ? {
|
|
15
12
|
url: options.url,
|
|
16
13
|
tlsOptions: options.tlsOptions
|
|
@@ -22,28 +19,22 @@ function validateAuthData(authData, options) {
|
|
|
22
19
|
return new Promise((resolve, reject) => {
|
|
23
20
|
client.bind(userCn, authData.password, ldapError => {
|
|
24
21
|
delete authData.password;
|
|
25
|
-
|
|
26
22
|
if (ldapError) {
|
|
27
23
|
let error;
|
|
28
|
-
|
|
29
24
|
switch (ldapError.code) {
|
|
30
25
|
case 49:
|
|
31
26
|
error = new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'LDAP: Wrong username or password');
|
|
32
27
|
break;
|
|
33
|
-
|
|
34
28
|
case 'DEPTH_ZERO_SELF_SIGNED_CERT':
|
|
35
29
|
error = new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'LDAPS: Certificate mismatch');
|
|
36
30
|
break;
|
|
37
|
-
|
|
38
31
|
default:
|
|
39
32
|
error = new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'LDAP: Somthing went wrong (' + ldapError.code + ')');
|
|
40
33
|
}
|
|
41
|
-
|
|
42
34
|
reject(error);
|
|
43
35
|
client.destroy(ldapError);
|
|
44
36
|
return;
|
|
45
37
|
}
|
|
46
|
-
|
|
47
38
|
if (typeof options.groupCn === 'string' && typeof options.groupFilter === 'string') {
|
|
48
39
|
searchForGroup(client, options, authData.id, resolve, reject);
|
|
49
40
|
} else {
|
|
@@ -54,11 +45,9 @@ function validateAuthData(authData, options) {
|
|
|
54
45
|
});
|
|
55
46
|
});
|
|
56
47
|
}
|
|
57
|
-
|
|
58
48
|
function optionsAreValid(options) {
|
|
59
49
|
return typeof options === 'object' && typeof options.suffix === 'string' && typeof options.url === 'string' && (options.url.startsWith('ldap://') || options.url.startsWith('ldaps://') && typeof options.tlsOptions === 'object');
|
|
60
50
|
}
|
|
61
|
-
|
|
62
51
|
function searchForGroup(client, options, id, resolve, reject) {
|
|
63
52
|
const filter = options.groupFilter.replace(/{{id}}/gi, id);
|
|
64
53
|
const opts = {
|
|
@@ -72,7 +61,6 @@ function searchForGroup(client, options, id, resolve, reject) {
|
|
|
72
61
|
client.destroy();
|
|
73
62
|
return reject(new Parse.Error(Parse.Error.INTERNAL_SERVER_ERROR, 'LDAP group search failed'));
|
|
74
63
|
}
|
|
75
|
-
|
|
76
64
|
res.on('searchEntry', entry => {
|
|
77
65
|
if (entry.object.cn === options.groupCn) {
|
|
78
66
|
found = true;
|
|
@@ -95,13 +83,11 @@ function searchForGroup(client, options, id, resolve, reject) {
|
|
|
95
83
|
});
|
|
96
84
|
});
|
|
97
85
|
}
|
|
98
|
-
|
|
99
86
|
function validateAppId() {
|
|
100
87
|
return Promise.resolve();
|
|
101
88
|
}
|
|
102
|
-
|
|
103
89
|
module.exports = {
|
|
104
90
|
validateAppId,
|
|
105
91
|
validateAuthData
|
|
106
92
|
};
|
|
107
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2xkYXAuanMiXSwibmFtZXMiOlsibGRhcGpzIiwicmVxdWlyZSIsIlBhcnNlIiwidmFsaWRhdGVBdXRoRGF0YSIsImF1dGhEYXRhIiwib3B0aW9ucyIsIm9wdGlvbnNBcmVWYWxpZCIsIlByb21pc2UiLCJfIiwicmVqZWN0IiwiRXJyb3IiLCJJTlRFUk5BTF9TRVJWRVJfRVJST1IiLCJjbGllbnRPcHRpb25zIiwidXJsIiwic3RhcnRzV2l0aCIsInRsc09wdGlvbnMiLCJjbGllbnQiLCJjcmVhdGVDbGllbnQiLCJ1c2VyQ24iLCJkbiIsInJlcGxhY2UiLCJpZCIsInN1ZmZpeCIsInJlc29sdmUiLCJiaW5kIiwicGFzc3dvcmQiLCJsZGFwRXJyb3IiLCJlcnJvciIsImNvZGUiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwiZGVzdHJveSIsImdyb3VwQ24iLCJncm91cEZpbHRlciIsInNlYXJjaEZvckdyb3VwIiwidW5iaW5kIiwiZmlsdGVyIiwib3B0cyIsInNjb3BlIiwiZm91bmQiLCJzZWFyY2giLCJzZWFyY2hFcnJvciIsInJlcyIsIm9uIiwiZW50cnkiLCJvYmplY3QiLCJjbiIsInZhbGlkYXRlQXBwSWQiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLE1BQU0sR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBdEI7O0FBQ0EsTUFBTUMsS0FBSyxHQUFHRCxPQUFPLENBQUMsWUFBRCxDQUFQLENBQXNCQyxLQUFwQzs7QUFFQSxTQUFTQyxnQkFBVCxDQUEwQkMsUUFBMUIsRUFBb0NDLE9BQXBDLEVBQTZDO0FBQzNDLE1BQUksQ0FBQ0MsZUFBZSxDQUFDRCxPQUFELENBQXBCLEVBQStCO0FBQzdCLFdBQU8sSUFBSUUsT0FBSixDQUFZLENBQUNDLENBQUQsRUFBSUMsTUFBSixLQUFlO0FBQ2hDQSxNQUFBQSxNQUFNLENBQUMsSUFBSVAsS0FBSyxDQUFDUSxLQUFWLENBQWdCUixLQUFLLENB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TTtBQUNsQixVQUFJLENBQUNKLEtBQUwsRUFBWTtBQUNWdEIsUUFBQUEsTUFBTSxDQUFDa0IsTUFBUDtBQUNBbEIsUUFBQUEsTUFBTSxDQUFDYyxPQUFQO0FBQ0EsZUFBT3JCLE1BQU0sQ0FDWCxJQUFJUCxLQUFLLENBQUNRLEtBQVYsQ0FBZ0JSLEtBQUssQ0FBQ1EsS0FBTixDQUFZQyxxQkFBNUIsRUFBbUQseUJBQW5ELENBRFcsQ0FBYjtBQUdEO0FBQ0YsS0FSRDtBQVNBOEIsSUFBQUEsR0FBRyxDQUFDQyxFQUFKLENBQU8sT0FBUCxFQUFnQixNQUFNO0FBQ3BCMUIsTUFBQUEsTUFBTSxDQUFDa0IsTUFBUDtBQUNBbEIsTUFBQUEsTUFBTSxDQUFDYyxPQUFQO0FBQ0EsYUFBT3JCLE1BQU0sQ0FBQyxJQUFJUCxLQUFLLENBQUNRLEtBQVYsQ0FBZ0JSLEtBQUssQ0FBQ1EsS0FBTixDQUFZQyxxQkFBNUIsRUFBbUQsMEJBQW5ELENBQUQsQ0FBYjtBQUNELEtBSkQ7QUFLRCxHQTVCRDtBQTZCRDs7QUFFRCxTQUFTbUMsYUFBVCxHQUF5QjtBQUN2QixTQUFPdkMsT0FBTyxDQUFDZ0IsT0FBUixFQUFQO0FBQ0Q7O0FBRUR3QixNQUFNLENBQUNDLE9BQVAsR0FBaUI7QUFDZkYsRUFBQUEsYUFEZTtBQUVmM0MsRUFBQUE7QUFGZSxDQUFqQiIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGxkYXBqcyA9IHJlcXVpcmUoJ2xkYXBqcycpO1xuY29uc3QgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zQXJlVmFsaWQob3B0aW9ucykpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgcmVqZWN0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlRFUk5BTF9TRVJWRVJfRVJST1IsICdMREFQIGF1dGggY29uZmlndXJhdGlvbiBtaXNzaW5nJykpO1xuICAgIH0pO1xuICB9XG4gIGNvbnN0IGNsaWVudE9wdGlvbnMgPSBvcHRpb25zLnVybC5zdGFydHNXaXRoKCdsZGFwczovLycpXG4gICAgPyB7IHVybDogb3B0aW9ucy51cmwsIHRsc09wdGlvbnM6IG9wdGlvbnMudGxzT3B0aW9ucyB9XG4gICAgOiB7IHVybDogb3B0aW9ucy51cmwgfTtcblxuICBjb25zdCBjbGllbnQgPSBsZGFwanMuY3JlYXRlQ2xpZW50KGNsaWVudE9wdGlvbnMpO1xuICBjb25zdCB1c2VyQ24gPVxuICAgIHR5cGVvZiBvcHRpb25zLmRuID09PSAnc3RyaW5nJ1xuICAgICAgPyBvcHRpb25zLmRuLnJlcGxhY2UoJ3t7aWR9fScsIGF1dGhEYXRhLmlkKVxuICAgICAgOiBgdWlkPSR7YXV0aERhdGEuaWR9LCR7b3B0aW9ucy5zdWZmaXh9YDtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNsaWVudC5iaW5kKHVzZXJDbiwgYXV0aERhdGEucGFzc3dvcmQsIGxkYXBFcnJvciA9PiB7XG4gICAgICBkZWxldGUgYXV0aERhdGEucGFzc3dvcmQ7XG4gICAgICBpZiAobGRhcEVycm9yKSB7XG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgc3dpdGNoIChsZGFwRXJyb3IuY29kZSkge1xuICAgICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgICBlcnJvciA9IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgICAgICAgICAgJ0xEQVA6IFdyb25nIHVzZXJuYW1lIG9yIHBhc3N3b3JkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ0RFUFRIX1pFUk9fU0VMRl9TSUdORURfQ0VSVCc6XG4gICAgICAgICAgICBlcnJvciA9IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnTERBUFM6IENlcnRpZmljYXRlIG1pc21hdGNoJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZXJyb3IgPSBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICAgICAgICAgICdMREFQOiBTb210aGluZyB3ZW50IHdyb25nICgnICsgbGRhcEVycm9yLmNvZGUgKyAnKSdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgY2xpZW50LmRlc3Ryb3kobGRhcEVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZ3JvdXBDbiA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIG9wdGlvbnMuZ3JvdXBGaWx0ZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNlYXJjaEZvckdyb3VwKGNsaWVudCwgb3B0aW9ucywgYXV0aERhdGEuaWQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnQudW5iaW5kKCk7XG4gICAgICAgIGNsaWVudC5kZXN0cm95KCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9wdGlvbnNBcmVWYWxpZChvcHRpb25zKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9wdGlvbnMuc3VmZml4ID09PSAnc3RyaW5nJyAmJlxuICAgIHR5cGVvZiBvcHRpb25zLnVybCA9PT0gJ3N0cmluZycgJiZcbiAgICAob3B0aW9ucy51cmwuc3RhcnRzV2l0aCgnbGRhcDovLycpIHx8XG4gICAgICAob3B0aW9ucy51cmwuc3RhcnRzV2l0aCgnbGRhcHM6Ly8nKSAmJiB0eXBlb2Ygb3B0aW9ucy50bHNPcHRpb25zID09PSAnb2JqZWN0JykpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNlYXJjaEZvckdyb3VwKGNsaWVudCwgb3B0aW9ucywgaWQsIHJlc29sdmUsIHJlamVjdCkge1xuICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zLmdyb3VwRmlsdGVyLnJlcGxhY2UoL3t7aWR9fS9naSwgaWQpO1xuICBjb25zdCBvcHRzID0ge1xuICAgIHNjb3BlOiAnc3ViJyxcbiAgICBmaWx0ZXI6IGZpbHRlcixcbiAgfTtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIGNsaWVudC5zZWFyY2gob3B0aW9ucy5zdWZmaXgsIG9wdHMsIChzZWFyY2hFcnJvciwgcmVzKSA9PiB7XG4gICAgaWYgKHNlYXJjaEVycm9yKSB7XG4gICAgICBjbGllbnQudW5iaW5kKCk7XG4gICAgICBjbGllbnQuZGVzdHJveSgpO1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCAnTERBUCBncm91cCBzZWFyY2ggZmFpbGVkJykpO1xuICAgIH1cbiAgICByZXMub24oJ3NlYXJjaEVudHJ5JywgZW50cnkgPT4ge1xuICAgICAgaWYgKGVudHJ5Lm9iamVjdC5jbiA9PT0gb3B0aW9ucy5ncm91cENuKSB7XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgY2xpZW50LnVuYmluZCgpO1xuICAgICAgICBjbGllbnQuZGVzdHJveSgpO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJlcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICBjbGllbnQudW5iaW5kKCk7XG4gICAgICAgIGNsaWVudC5kZXN0cm95KCk7XG4gICAgICAgIHJldHVybiByZWplY3QoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgJ0xEQVA6IFVzZXIgbm90IGluIGdyb3VwJylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXMub24oJ2Vycm9yJywgKCkgPT4ge1xuICAgICAgY2xpZW50LnVuYmluZCgpO1xuICAgICAgY2xpZW50LmRlc3Ryb3koKTtcbiAgICAgIHJldHVybiByZWplY3QobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgJ0xEQVAgZ3JvdXAgc2VhcmNoIGZhaWxlZCcpKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQXBwSWQoKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHZhbGlkYXRlQXBwSWQsXG4gIHZhbGlkYXRlQXV0aERhdGEsXG59O1xuIl19
|
|
93
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsZGFwanMiLCJyZXF1aXJlIiwiUGFyc2UiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJvcHRpb25zIiwib3B0aW9uc0FyZVZhbGlkIiwiUHJvbWlzZSIsIl8iLCJyZWplY3QiLCJFcnJvciIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsImNsaWVudE9wdGlvbnMiLCJ1cmwiLCJzdGFydHNXaXRoIiwidGxzT3B0aW9ucyIsImNsaWVudCIsImNyZWF0ZUNsaWVudCIsInVzZXJDbiIsImRuIiwicmVwbGFjZSIsImlkIiwic3VmZml4IiwicmVzb2x2ZSIsImJpbmQiLCJwYXNzd29yZCIsImxkYXBFcnJvciIsImVycm9yIiwiY29kZSIsIk9CSkVDVF9OT1RfRk9VTkQiLCJkZXN0cm95IiwiZ3JvdXBDbiIsImdyb3VwRmlsdGVyIiwic2VhcmNoRm9yR3JvdXAiLCJ1bmJpbmQiLCJmaWx0ZXIiLCJvcHRzIiwic2NvcGUiLCJmb3VuZCIsInNlYXJjaCIsInNlYXJjaEVycm9yIiwicmVzIiwib24iLCJlbnRyeSIsIm9iamVjdCIsImNuIiwidmFsaWRhdGVBcHBJZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvQXV0aC9sZGFwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGxkYXBqcyA9IHJlcXVpcmUoJ2xkYXBqcycpO1xuY29uc3QgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zQXJlVmFsaWQob3B0aW9ucykpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgcmVqZWN0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlRFUk5BTF9TRVJWRVJfRVJST1IsICdMREFQIGF1dGggY29uZmlndXJhdGlvbiBtaXNzaW5nJykpO1xuICAgIH0pO1xuICB9XG4gIGNvbnN0IGNsaWVudE9wdGlvbnMgPSBvcHRpb25zLnVybC5zdGFydHNXaXRoKCdsZGFwczovLycpXG4gICAgPyB7IHVybDogb3B0aW9ucy51cmwsIHRsc09wdGlvbnM6IG9wdGlvbnMudGxzT3B0aW9ucyB9XG4gICAgOiB7IHVybDogb3B0aW9ucy51cmwgfTtcblxuICBjb25zdCBjbGllbnQgPSBsZGFwanMuY3JlYXRlQ2xpZW50KGNsaWVudE9wdGlvbnMpO1xuICBjb25zdCB1c2VyQ24gPVxuICAgIHR5cGVvZiBvcHRpb25zLmRuID09PSAnc3RyaW5nJ1xuICAgICAgPyBvcHRpb25zLmRuLnJlcGxhY2UoJ3t7aWR9fScsIGF1dGhEYXRhLmlkKVxuICAgICAgOiBgdWlkPSR7YXV0aERhdGEuaWR9LCR7b3B0aW9ucy5zdWZmaXh9YDtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNsaWVudC5iaW5kKHVzZXJDbiwgYXV0aERhdGEucGFzc3dvcmQsIGxkYXBFcnJvciA9PiB7XG4gICAgICBkZWxldGUgYXV0aERhdGEucGFzc3dvcmQ7XG4gICAgICBpZiAobGRhcEVycm9yKSB7XG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgc3dpdGNoIChsZGFwRXJyb3IuY29kZSkge1xuICAgICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgICBlcnJvciA9IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCxcbiAgICAgICAgICAgICAgJ0xEQVA6IFdyb25nIHVzZXJuYW1lIG9yIHBhc3N3b3JkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ0RFUFRIX1pFUk9fU0VMRl9TSUdORURfQ0VSVCc6XG4gICAgICAgICAgICBlcnJvciA9IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnTERBUFM6IENlcnRpZmljYXRlIG1pc21hdGNoJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZXJyb3IgPSBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAgIFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsXG4gICAgICAgICAgICAgICdMREFQOiBTb210aGluZyB3ZW50IHdyb25nICgnICsgbGRhcEVycm9yLmNvZGUgKyAnKSdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgY2xpZW50LmRlc3Ryb3kobGRhcEVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZ3JvdXBDbiA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIG9wdGlvbnMuZ3JvdXBGaWx0ZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNlYXJjaEZvckdyb3VwKGNsaWVudCwgb3B0aW9ucywgYXV0aERhdGEuaWQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnQudW5iaW5kKCk7XG4gICAgICAgIGNsaWVudC5kZXN0cm95KCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9wdGlvbnNBcmVWYWxpZChvcHRpb25zKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9wdGlvbnMuc3VmZml4ID09PSAnc3RyaW5nJyAmJlxuICAgIHR5cGVvZiBvcHRpb25zLnVybCA9PT0gJ3N0cmluZycgJiZcbiAgICAob3B0aW9ucy51cmwuc3RhcnRzV2l0aCgnbGRhcDovLycpIHx8XG4gICAgICAob3B0aW9ucy51cmwuc3RhcnRzV2l0aCgnbGRhcHM6Ly8nKSAmJiB0eXBlb2Ygb3B0aW9ucy50bHNPcHRpb25zID09PSAnb2JqZWN0JykpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNlYXJjaEZvckdyb3VwKGNsaWVudCwgb3B0aW9ucywgaWQsIHJlc29sdmUsIHJlamVjdCkge1xuICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zLmdyb3VwRmlsdGVyLnJlcGxhY2UoL3t7aWR9fS9naSwgaWQpO1xuICBjb25zdCBvcHRzID0ge1xuICAgIHNjb3BlOiAnc3ViJyxcbiAgICBmaWx0ZXI6IGZpbHRlcixcbiAgfTtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIGNsaWVudC5zZWFyY2gob3B0aW9ucy5zdWZmaXgsIG9wdHMsIChzZWFyY2hFcnJvciwgcmVzKSA9PiB7XG4gICAgaWYgKHNlYXJjaEVycm9yKSB7XG4gICAgICBjbGllbnQudW5iaW5kKCk7XG4gICAgICBjbGllbnQuZGVzdHJveSgpO1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCAnTERBUCBncm91cCBzZWFyY2ggZmFpbGVkJykpO1xuICAgIH1cbiAgICByZXMub24oJ3NlYXJjaEVudHJ5JywgZW50cnkgPT4ge1xuICAgICAgaWYgKGVudHJ5Lm9iamVjdC5jbiA9PT0gb3B0aW9ucy5ncm91cENuKSB7XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgY2xpZW50LnVuYmluZCgpO1xuICAgICAgICBjbGllbnQuZGVzdHJveSgpO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJlcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICBjbGllbnQudW5iaW5kKCk7XG4gICAgICAgIGNsaWVudC5kZXN0cm95KCk7XG4gICAgICAgIHJldHVybiByZWplY3QoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgJ0xEQVA6IFVzZXIgbm90IGluIGdyb3VwJylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXMub24oJ2Vycm9yJywgKCkgPT4ge1xuICAgICAgY2xpZW50LnVuYmluZCgpO1xuICAgICAgY2xpZW50LmRlc3Ryb3koKTtcbiAgICAgIHJldHVybiByZWplY3QobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgJ0xEQVAgZ3JvdXAgc2VhcmNoIGZhaWxlZCcpKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQXBwSWQoKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHZhbGlkYXRlQXBwSWQsXG4gIHZhbGlkYXRlQXV0aERhdGEsXG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLE1BQU0sR0FBR0MsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNoQyxNQUFNQyxLQUFLLEdBQUdELE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ0MsS0FBSztBQUV6QyxTQUFTQyxnQkFBZ0IsQ0FBQ0MsUUFBUSxFQUFFQyxPQUFPLEVBQUU7RUFDM0MsSUFBSSxDQUFDQyxlQUFlLENBQUNELE9BQU8sQ0FBQyxFQUFFO0lBQzdCLE9BQU8sSUFBSUUsT0FBTyxDQUFDLENBQUNDLENBQUMsRUFBRUMsTUFBTSxLQUFLO01BQ2hDQSxNQUFNLENBQUMsSUFBSVAsS0FBSyxDQUFDUSxLQUFLLENBQUNSLEtBQUssQ0FBQ1EsS0FBSyxDQUFDQyxxQkFBcUIsRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDO0lBQy9GLENBQUMsQ0FBQztFQUNKO0VBQ0EsTUFBTUMsYUFBYSxHQUFHUCxPQUFPLENBQUNRLEdBQUcsQ0FBQ0MsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUNwRDtJQUFFRCxHQUFHLEVBQUVSLE9BQU8sQ0FBQ1EsR0FBRztJQUFFRSxVQUFVLEVBQUVWLE9BQU8sQ0FBQ1U7RUFBVyxDQUFDLEdBQ3BEO0lBQUVGLEdBQUcs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
|
|
@@ -2,26 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
// Helper functions for accessing the line API.
|
|
4
4
|
var Parse = require('parse/node').Parse;
|
|
5
|
+
const httpsRequest = require('./httpsRequest');
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
// Returns a promise that fulfills if this user id is valid.
|
|
9
8
|
function validateAuthData(authData) {
|
|
10
9
|
return request('profile', authData.access_token).then(response => {
|
|
11
10
|
if (response && response.userId && response.userId === authData.id) {
|
|
12
11
|
return;
|
|
13
12
|
}
|
|
14
|
-
|
|
15
13
|
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Line auth is invalid for this user.');
|
|
16
14
|
});
|
|
17
|
-
}
|
|
18
|
-
|
|
15
|
+
}
|
|
19
16
|
|
|
17
|
+
// Returns a promise that fulfills iff this app id is valid.
|
|
20
18
|
function validateAppId() {
|
|
21
19
|
return Promise.resolve();
|
|
22
|
-
}
|
|
23
|
-
|
|
20
|
+
}
|
|
24
21
|
|
|
22
|
+
// A promisey wrapper for api requests
|
|
25
23
|
function request(path, access_token) {
|
|
26
24
|
var options = {
|
|
27
25
|
host: 'api.line.me',
|
|
@@ -33,9 +31,8 @@ function request(path, access_token) {
|
|
|
33
31
|
};
|
|
34
32
|
return httpsRequest.get(options);
|
|
35
33
|
}
|
|
36
|
-
|
|
37
34
|
module.exports = {
|
|
38
35
|
validateAppId: validateAppId,
|
|
39
36
|
validateAuthData: validateAuthData
|
|
40
37
|
};
|
|
41
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJodHRwc1JlcXVlc3QiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJyZXF1ZXN0IiwiYWNjZXNzX3Rva2VuIiwidGhlbiIsInJlc3BvbnNlIiwidXNlcklkIiwiaWQiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJ2YWxpZGF0ZUFwcElkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJwYXRoIiwib3B0aW9ucyIsImhvc3QiLCJtZXRob2QiLCJoZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsImdldCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvQXV0aC9saW5lLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgbGluZSBBUEkuXG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5jb25zdCBodHRwc1JlcXVlc3QgPSByZXF1aXJlKCcuL2h0dHBzUmVxdWVzdCcpO1xuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmIHRoaXMgdXNlciBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEpIHtcbiAgcmV0dXJuIHJlcXVlc3QoJ3Byb2ZpbGUnLCBhdXRoRGF0YS5hY2Nlc3NfdG9rZW4pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS51c2VySWQgJiYgcmVzcG9uc2UudXNlcklkID09PSBhdXRoRGF0YS5pZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ0xpbmUgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gIH0pO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmZiB0aGlzIGFwcCBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXBwSWQoKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxuLy8gQSBwcm9taXNleSB3cmFwcGVyIGZvciBhcGkgcmVxdWVzdHNcbmZ1bmN0aW9uIHJlcXVlc3QocGF0aCwgYWNjZXNzX3Rva2VuKSB7XG4gIHZhciBvcHRpb25zID0ge1xuICAgIGhvc3Q6ICdhcGkubGluZS5tZScsXG4gICAgcGF0aDogJy92Mi8nICsgcGF0aCxcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIGFjY2Vzc190b2tlbixcbiAgICB9LFxuICB9O1xuICByZXR1cm4gaHR0cHNSZXF1ZXN0LmdldChvcHRpb25zKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHZhbGlkYXRlQXBwSWQ6IHZhbGlkYXRlQXBwSWQsXG4gIHZhbGlkYXRlQXV0aERhdGE6IHZhbGlkYXRlQXV0aERhdGEsXG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0EsSUFBSUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUNELEtBQUs7QUFDdkMsTUFBTUUsWUFBWSxHQUFHRCxPQUFPLENBQUMsZ0JBQWdCLENBQUM7O0FBRTlDO0FBQ0EsU0FBU0UsZ0JBQWdCLENBQUNDLFFBQVEsRUFBRTtFQUNsQyxPQUFPQyxPQUFPLENBQUMsU0FBUyxFQUFFRCxRQUFRLENBQUNFLFlBQVksQ0FBQyxDQUFDQyxJQUFJLENBQUNDLFFBQVEsSUFBSTtJQUNoRSxJQUFJQSxRQUFRLElBQUlBLFFBQVEsQ0FBQ0MsTUFBTSxJQUFJRCxRQUFRLENBQUNDLE1BQU0sS0FBS0wsUUFBUSxDQUFDTSxFQUFFLEVBQUU7TUFDbEU7SUFDRjtJQUNBLE1BQU0sSUFBSVYsS0FBSyxDQUFDVyxLQUFLLENBQUNYLEtBQUssQ0FBQ1csS0FBSyxDQUFDQyxnQkFBZ0IsRUFBRSxxQ0FBcUMsQ0FBQztFQUM1RixDQUFDLENBQUM7QUFDSjs7QUFFQTtBQUNBLFNBQVNDLGFBQWEsR0FBRztFQUN2QixPQUFPQyxPQUFPLENBQUNDLE9BQU8sRUFBRTtBQUMxQjs7QUFFQTtBQUNBLFNBQVNWLE9BQU8sQ0FBQ1csSUFBSSxFQUFFVixZQUFZLEVBQUU7RUFDbkMsSUFBSVcsT0FBTyxHQUFHO0lBQ1pDLElBQUksRUFBRSxhQUFhO0lBQ25CRixJQUFJLEVBQUUsTUFBTSxHQUFHQSxJQUFJO0lBQ25CRyxNQUFNLEVBQUUsS0FBSztJQUNiQyxPQUFPLEVBQUU7TUFDUEMsYUFBYSxFQUFFLFNBQVMsR0FBR2Y7SUFDN0I7RUFDRixDQUFDO0VBQ0QsT0FBT0osWUFBWSxDQUFDb0IsR0FBRyxDQUFDTCxPQUFPLENBQUM7QUFDbEM7QUFFQU0sTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZlgsYUFBYSxFQUFFQSxhQUFhO0VBQzVCVixnQkFBZ0IsRUFBRUE7QUFDcEIsQ0FBQyJ9
|
|
@@ -2,45 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
// Helper functions for accessing the linkedin API.
|
|
4
4
|
var Parse = require('parse/node').Parse;
|
|
5
|
+
const httpsRequest = require('./httpsRequest');
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
// Returns a promise that fulfills iff this user id is valid.
|
|
9
8
|
function validateAuthData(authData) {
|
|
10
9
|
return request('me', authData.access_token, authData.is_mobile_sdk).then(data => {
|
|
11
10
|
if (data && data.id == authData.id) {
|
|
12
11
|
return;
|
|
13
12
|
}
|
|
14
|
-
|
|
15
13
|
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Linkedin auth is invalid for this user.');
|
|
16
14
|
});
|
|
17
|
-
}
|
|
18
|
-
|
|
15
|
+
}
|
|
19
16
|
|
|
17
|
+
// Returns a promise that fulfills iff this app id is valid.
|
|
20
18
|
function validateAppId() {
|
|
21
19
|
return Promise.resolve();
|
|
22
|
-
}
|
|
23
|
-
|
|
20
|
+
}
|
|
24
21
|
|
|
22
|
+
// A promisey wrapper for api requests
|
|
25
23
|
function request(path, access_token, is_mobile_sdk) {
|
|
26
24
|
var headers = {
|
|
27
25
|
Authorization: 'Bearer ' + access_token,
|
|
28
26
|
'x-li-format': 'json'
|
|
29
27
|
};
|
|
30
|
-
|
|
31
28
|
if (is_mobile_sdk) {
|
|
32
29
|
headers['x-li-src'] = 'msdk';
|
|
33
30
|
}
|
|
34
|
-
|
|
35
31
|
return httpsRequest.get({
|
|
36
32
|
host: 'api.linkedin.com',
|
|
37
33
|
path: '/v2/' + path,
|
|
38
34
|
headers: headers
|
|
39
35
|
});
|
|
40
36
|
}
|
|
41
|
-
|
|
42
37
|
module.exports = {
|
|
43
38
|
validateAppId: validateAppId,
|
|
44
39
|
validateAuthData: validateAuthData
|
|
45
40
|
};
|
|
46
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJodHRwc1JlcXVlc3QiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJyZXF1ZXN0IiwiYWNjZXNzX3Rva2VuIiwiaXNfbW9iaWxlX3NkayIsInRoZW4iLCJkYXRhIiwiaWQiLCJFcnJvciIsIk9CSkVDVF9OT1RfRk9VTkQiLCJ2YWxpZGF0ZUFwcElkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJwYXRoIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJnZXQiLCJob3N0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2xpbmtlZGluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgbGlua2VkaW4gQVBJLlxudmFyIFBhcnNlID0gcmVxdWlyZSgncGFyc2Uvbm9kZScpLlBhcnNlO1xuY29uc3QgaHR0cHNSZXF1ZXN0ID0gcmVxdWlyZSgnLi9odHRwc1JlcXVlc3QnKTtcblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyB1c2VyIGlkIGlzIHZhbGlkLlxuZnVuY3Rpb24gdmFsaWRhdGVBdXRoRGF0YShhdXRoRGF0YSkge1xuICByZXR1cm4gcmVxdWVzdCgnbWUnLCBhdXRoRGF0YS5hY2Nlc3NfdG9rZW4sIGF1dGhEYXRhLmlzX21vYmlsZV9zZGspLnRoZW4oZGF0YSA9PiB7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5pZCA9PSBhdXRoRGF0YS5pZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ0xpbmtlZGluIGF1dGggaXMgaW52YWxpZCBmb3IgdGhpcyB1c2VyLicpO1xuICB9KTtcbn1cblxuLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyBpZmYgdGhpcyBhcHAgaWQgaXMgdmFsaWQuXG5mdW5jdGlvbiB2YWxpZGF0ZUFwcElkKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbi8vIEEgcHJvbWlzZXkgd3JhcHBlciBmb3IgYXBpIHJlcXVlc3RzXG5mdW5jdGlvbiByZXF1ZXN0KHBhdGgsIGFjY2Vzc190b2tlbiwgaXNfbW9iaWxlX3Nkaykge1xuICB2YXIgaGVhZGVycyA9IHtcbiAgICBBdXRob3JpemF0aW9uOiAnQmVhcmVyICcgKyBhY2Nlc3NfdG9rZW4sXG4gICAgJ3gtbGktZm9ybWF0JzogJ2pzb24nLFxuICB9O1xuXG4gIGlmIChpc19tb2JpbGVfc2RrKSB7XG4gICAgaGVhZGVyc1sneC1saS1zcmMnXSA9ICdtc2RrJztcbiAgfVxuICByZXR1cm4gaHR0cHNSZXF1ZXN0LmdldCh7XG4gICAgaG9zdDogJ2FwaS5saW5rZWRpbi5jb20nLFxuICAgIHBhdGg6ICcvdjIvJyArIHBhdGgsXG4gICAgaGVhZGVyczogaGVhZGVycyxcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkOiB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhOiB2YWxpZGF0ZUF1dGhEYXRhLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBLElBQUlBLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDRCxLQUFLO0FBQ3ZDLE1BQU1FLFlBQVksR0FBR0QsT0FBTyxDQUFDLGdCQUFnQixDQUFDOztBQUU5QztBQUNBLFNBQVNFLGdCQUFnQixDQUFDQyxRQUFRLEVBQUU7RUFDbEMsT0FBT0MsT0FBTyxDQUFDLElBQUksRUFBRUQsUUFBUSxDQUFDRSxZQUFZLEVBQUVGLFFBQVEsQ0FBQ0csYUFBYSxDQUFDLENBQUNDLElBQUksQ0FBQ0MsSUFBSSxJQUFJO0lBQy9FLElBQUlBLElBQUksSUFBSUEsSUFBSSxDQUFDQyxFQUFFLElBQUlOLFFBQVEsQ0FBQ00sRUFBRSxFQUFFO01BQ2xDO0lBQ0Y7SUFDQSxNQUFNLElBQUlWLEtBQUssQ0FBQ1csS0FBSyxDQUFDWCxLQUFLLENBQUNXLEtBQUssQ0FBQ0MsZ0JBQWdCLEVBQUUseUNBQXlDLENBQUM7RUFDaEcsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQSxTQUFTQyxhQUFhLEdBQUc7RUFDdkIsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLEVBQUU7QUFDMUI7O0FBRUE7QUFDQSxTQUFTVixPQUFPLENBQUNXLElBQUksRUFBRVYsWUFBWSxFQUFFQyxhQUFhLEVBQUU7RUFDbEQsSUFBSVUsT0FBTyxHQUFHO0lBQ1pDLGFBQWEsRUFBRSxTQUFTLEdBQUdaLFlBQVk7SUFDdkMsYUFBYSxFQUFFO0VBQ2pCLENBQUM7RUFFRCxJQUFJQyxhQUFhLEVBQUU7SUFDakJVLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNO0VBQzlCO0VBQ0EsT0FBT2YsWUFBWSxDQUFDaUIsR0FBRyxDQUFDO0lBQ3RCQyxJQUFJLEVBQUUsa0JBQWtCO0lBQ3hCSixJQUFJLEVBQUUsTUFBTSxHQUFHQSxJQUFJO0lBQ25CQyxPQUFPLEVBQUVBO0VBQ1gsQ0FBQyxDQUFDO0FBQ0o7QUFFQUksTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZlQsYUFBYSxFQUFFQSxhQUFhO0VBQzVCVixnQkFBZ0IsRUFBRUE7QUFDcEIsQ0FBQyJ9
|
|
@@ -2,26 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
// Helper functions for accessing the meetup API.
|
|
4
4
|
var Parse = require('parse/node').Parse;
|
|
5
|
+
const httpsRequest = require('./httpsRequest');
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
// Returns a promise that fulfills iff this user id is valid.
|
|
9
8
|
function validateAuthData(authData) {
|
|
10
9
|
return request('member/self', authData.access_token).then(data => {
|
|
11
10
|
if (data && data.id == authData.id) {
|
|
12
11
|
return;
|
|
13
12
|
}
|
|
14
|
-
|
|
15
13
|
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Meetup auth is invalid for this user.');
|
|
16
14
|
});
|
|
17
|
-
}
|
|
18
|
-
|
|
15
|
+
}
|
|
19
16
|
|
|
17
|
+
// Returns a promise that fulfills iff this app id is valid.
|
|
20
18
|
function validateAppId() {
|
|
21
19
|
return Promise.resolve();
|
|
22
|
-
}
|
|
23
|
-
|
|
20
|
+
}
|
|
24
21
|
|
|
22
|
+
// A promisey wrapper for api requests
|
|
25
23
|
function request(path, access_token) {
|
|
26
24
|
return httpsRequest.get({
|
|
27
25
|
host: 'api.meetup.com',
|
|
@@ -31,9 +29,8 @@ function request(path, access_token) {
|
|
|
31
29
|
}
|
|
32
30
|
});
|
|
33
31
|
}
|
|
34
|
-
|
|
35
32
|
module.exports = {
|
|
36
33
|
validateAppId: validateAppId,
|
|
37
34
|
validateAuthData: validateAuthData
|
|
38
35
|
};
|
|
39
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJodHRwc1JlcXVlc3QiLCJ2YWxpZGF0ZUF1dGhEYXRhIiwiYXV0aERhdGEiLCJyZXF1ZXN0IiwiYWNjZXNzX3Rva2VuIiwidGhlbiIsImRhdGEiLCJpZCIsIkVycm9yIiwiT0JKRUNUX05PVF9GT1VORCIsInZhbGlkYXRlQXBwSWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInBhdGgiLCJnZXQiLCJob3N0IiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0F1dGgvbWVldHVwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyB0aGUgbWVldHVwIEFQSS5cbnZhciBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbmNvbnN0IGh0dHBzUmVxdWVzdCA9IHJlcXVpcmUoJy4vaHR0cHNSZXF1ZXN0Jyk7XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgaWZmIHRoaXMgdXNlciBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEpIHtcbiAgcmV0dXJuIHJlcXVlc3QoJ21lbWJlci9zZWxmJywgYXV0aERhdGEuYWNjZXNzX3Rva2VuKS50aGVuKGRhdGEgPT4ge1xuICAgIGlmIChkYXRhICYmIGRhdGEuaWQgPT0gYXV0aERhdGEuaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdNZWV0dXAgYXV0aCBpcyBpbnZhbGlkIGZvciB0aGlzIHVzZXIuJyk7XG4gIH0pO1xufVxuXG4vLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIGlmZiB0aGlzIGFwcCBpZCBpcyB2YWxpZC5cbmZ1bmN0aW9uIHZhbGlkYXRlQXBwSWQoKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cblxuLy8gQSBwcm9taXNleSB3cmFwcGVyIGZvciBhcGkgcmVxdWVzdHNcbmZ1bmN0aW9uIHJlcXVlc3QocGF0aCwgYWNjZXNzX3Rva2VuKSB7XG4gIHJldHVybiBodHRwc1JlcXVlc3QuZ2V0KHtcbiAgICBob3N0OiAnYXBpLm1lZXR1cC5jb20nLFxuICAgIHBhdGg6ICcvMi8nICsgcGF0aCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBBdXRob3JpemF0aW9uOiAnYmVhcmVyICcgKyBhY2Nlc3NfdG9rZW4sXG4gICAgfSxcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB2YWxpZGF0ZUFwcElkOiB2YWxpZGF0ZUFwcElkLFxuICB2YWxpZGF0ZUF1dGhEYXRhOiB2YWxpZGF0ZUF1dGhEYXRhLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBLElBQUlBLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDRCxLQUFLO0FBQ3ZDLE1BQU1FLFlBQVksR0FBR0QsT0FBTyxDQUFDLGdCQUFnQixDQUFDOztBQUU5QztBQUNBLFNBQVNFLGdCQUFnQixDQUFDQyxRQUFRLEVBQUU7RUFDbEMsT0FBT0MsT0FBTyxDQUFDLGFBQWEsRUFBRUQsUUFBUSxDQUFDRSxZQUFZLENBQUMsQ0FBQ0MsSUFBSSxDQUFDQyxJQUFJLElBQUk7SUFDaEUsSUFBSUEsSUFBSSxJQUFJQSxJQUFJLENBQUNDLEVBQUUsSUFBSUwsUUFBUSxDQUFDSyxFQUFFLEVBQUU7TUFDbEM7SUFDRjtJQUNBLE1BQU0sSUFBSVQsS0FBSyxDQUFDVSxLQUFLLENBQUNWLEtBQUssQ0FBQ1UsS0FBSyxDQUFDQyxnQkFBZ0IsRUFBRSx1Q0FBdUMsQ0FBQztFQUM5RixDQUFDLENBQUM7QUFDSjs7QUFFQTtBQUNBLFNBQVNDLGFBQWEsR0FBRztFQUN2QixPQUFPQyxPQUFPLENBQUNDLE9BQU8sRUFBRTtBQUMxQjs7QUFFQTtBQUNBLFNBQVNULE9BQU8sQ0FBQ1UsSUFBSSxFQUFFVCxZQUFZLEVBQUU7RUFDbkMsT0FBT0osWUFBWSxDQUFDYyxHQUFHLENBQUM7SUFDdEJDLElBQUksRUFBRSxnQkFBZ0I7SUFDdEJGLElBQUksRUFBRSxLQUFLLEdBQUdBLElBQUk7SUFDbEJHLE9BQU8sRUFBRTtNQUNQQyxhQUFhLEVBQUUsU0FBUyxHQUFHYjtJQUM3QjtFQUNGLENBQUMsQ0FBQztBQUNKO0FBRUFjLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2ZULGFBQWEsRUFBRUEsYUFBYTtFQUM1QlQsZ0JBQWdCLEVBQUVBO0FBQ3BCLENBQUMifQ==
|