@beiguancyc/parse-server 9.9.0-ruixiang.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/LICENSE +176 -0
- package/NOTICE +10 -0
- package/README.md +1311 -0
- package/bin/parse-live-query-server +3 -0
- package/bin/parse-server +3 -0
- package/lib/AccountLockout.js +149 -0
- package/lib/Adapters/AdapterLoader.js +60 -0
- package/lib/Adapters/Analytics/AnalyticsAdapter.js +32 -0
- package/lib/Adapters/Auth/AuthAdapter.js +132 -0
- package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +119 -0
- package/lib/Adapters/Auth/OAuth1Client.js +204 -0
- package/lib/Adapters/Auth/apple.js +125 -0
- package/lib/Adapters/Auth/facebook.js +187 -0
- package/lib/Adapters/Auth/gcenter.js +217 -0
- package/lib/Adapters/Auth/github.js +125 -0
- package/lib/Adapters/Auth/google.js +122 -0
- package/lib/Adapters/Auth/gpgames.js +125 -0
- package/lib/Adapters/Auth/httpsRequest.js +41 -0
- package/lib/Adapters/Auth/index.js +248 -0
- package/lib/Adapters/Auth/instagram.js +118 -0
- package/lib/Adapters/Auth/janraincapture.js +85 -0
- package/lib/Adapters/Auth/janrainengage.js +57 -0
- package/lib/Adapters/Auth/keycloak.js +168 -0
- package/lib/Adapters/Auth/ldap.js +193 -0
- package/lib/Adapters/Auth/line.js +125 -0
- package/lib/Adapters/Auth/linkedin.js +117 -0
- package/lib/Adapters/Auth/meetup.js +44 -0
- package/lib/Adapters/Auth/mfa.js +334 -0
- package/lib/Adapters/Auth/microsoft.js +111 -0
- package/lib/Adapters/Auth/oauth2.js +115 -0
- package/lib/Adapters/Auth/phantauth.js +53 -0
- package/lib/Adapters/Auth/qq.js +113 -0
- package/lib/Adapters/Auth/spotify.js +115 -0
- package/lib/Adapters/Auth/twitter.js +197 -0
- package/lib/Adapters/Auth/utils.js +28 -0
- package/lib/Adapters/Auth/vkontakte.js +55 -0
- package/lib/Adapters/Auth/wechat.js +110 -0
- package/lib/Adapters/Auth/weibo.js +141 -0
- package/lib/Adapters/Cache/CacheAdapter.js +40 -0
- package/lib/Adapters/Cache/InMemoryCache.js +61 -0
- package/lib/Adapters/Cache/InMemoryCacheAdapter.js +34 -0
- package/lib/Adapters/Cache/LRUCache.js +35 -0
- package/lib/Adapters/Cache/NullCacheAdapter.js +26 -0
- package/lib/Adapters/Cache/RedisCacheAdapter.js +109 -0
- package/lib/Adapters/Cache/SchemaCache.js +25 -0
- package/lib/Adapters/Email/MailAdapter.js +32 -0
- package/lib/Adapters/Files/FilesAdapter.js +129 -0
- package/lib/Adapters/Files/GridFSBucketAdapter.js +280 -0
- package/lib/Adapters/Files/GridStoreAdapter.js +5 -0
- package/lib/Adapters/Logger/LoggerAdapter.js +27 -0
- package/lib/Adapters/Logger/WinstonLogger.js +107 -0
- package/lib/Adapters/Logger/WinstonLoggerAdapter.js +63 -0
- package/lib/Adapters/MessageQueue/EventEmitterMQ.js +55 -0
- package/lib/Adapters/PubSub/EventEmitterPubSub.js +53 -0
- package/lib/Adapters/PubSub/PubSubAdapter.js +34 -0
- package/lib/Adapters/PubSub/RedisPubSub.js +49 -0
- package/lib/Adapters/Push/PushAdapter.js +40 -0
- package/lib/Adapters/Storage/Mongo/MongoCollection.js +212 -0
- package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +334 -0
- package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +1047 -0
- package/lib/Adapters/Storage/Mongo/MongoTransform.js +1397 -0
- package/lib/Adapters/Storage/Postgres/PostgresClient.js +38 -0
- package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +73 -0
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +2409 -0
- package/lib/Adapters/Storage/Postgres/sql/array/add-unique.sql +11 -0
- package/lib/Adapters/Storage/Postgres/sql/array/add.sql +11 -0
- package/lib/Adapters/Storage/Postgres/sql/array/contains-all-regex.sql +14 -0
- package/lib/Adapters/Storage/Postgres/sql/array/contains-all.sql +14 -0
- package/lib/Adapters/Storage/Postgres/sql/array/contains.sql +11 -0
- package/lib/Adapters/Storage/Postgres/sql/array/remove.sql +11 -0
- package/lib/Adapters/Storage/Postgres/sql/index.js +32 -0
- package/lib/Adapters/Storage/Postgres/sql/misc/json-object-set-keys.sql +19 -0
- package/lib/Adapters/Storage/StorageAdapter.js +2 -0
- package/lib/Adapters/WebSocketServer/WSAdapter.js +35 -0
- package/lib/Adapters/WebSocketServer/WSSAdapter.js +66 -0
- package/lib/Auth.js +687 -0
- package/lib/AuthDataLock.js +53 -0
- package/lib/ClientSDK.js +39 -0
- package/lib/Config.js +879 -0
- package/lib/Controllers/AdaptableController.js +72 -0
- package/lib/Controllers/AnalyticsController.js +43 -0
- package/lib/Controllers/CacheController.js +71 -0
- package/lib/Controllers/DatabaseController.js +1685 -0
- package/lib/Controllers/FilesController.js +122 -0
- package/lib/Controllers/HooksController.js +254 -0
- package/lib/Controllers/LiveQueryController.js +72 -0
- package/lib/Controllers/LoggerController.js +222 -0
- package/lib/Controllers/ParseGraphQLController.js +294 -0
- package/lib/Controllers/PushController.js +224 -0
- package/lib/Controllers/SchemaController.js +1563 -0
- package/lib/Controllers/UserController.js +364 -0
- package/lib/Controllers/index.js +251 -0
- package/lib/Controllers/types.js +2 -0
- package/lib/Deprecator/Deprecations.js +100 -0
- package/lib/Deprecator/Deprecator.js +140 -0
- package/lib/Error.js +50 -0
- package/lib/FileUrlValidator.js +69 -0
- package/lib/GraphQL/ParseGraphQLSchema.js +375 -0
- package/lib/GraphQL/ParseGraphQLServer.js +241 -0
- package/lib/GraphQL/helpers/objectsMutations.js +30 -0
- package/lib/GraphQL/helpers/objectsQueries.js +246 -0
- package/lib/GraphQL/helpers/queryComplexity.js +138 -0
- package/lib/GraphQL/loaders/configMutations.js +87 -0
- package/lib/GraphQL/loaders/configQueries.js +79 -0
- package/lib/GraphQL/loaders/defaultGraphQLMutations.js +21 -0
- package/lib/GraphQL/loaders/defaultGraphQLQueries.js +23 -0
- package/lib/GraphQL/loaders/defaultGraphQLTypes.js +1099 -0
- package/lib/GraphQL/loaders/defaultRelaySchema.js +53 -0
- package/lib/GraphQL/loaders/filesMutations.js +107 -0
- package/lib/GraphQL/loaders/functionsMutations.js +77 -0
- package/lib/GraphQL/loaders/parseClassMutations.js +267 -0
- package/lib/GraphQL/loaders/parseClassQueries.js +126 -0
- package/lib/GraphQL/loaders/parseClassTypes.js +493 -0
- package/lib/GraphQL/loaders/schemaDirectives.js +62 -0
- package/lib/GraphQL/loaders/schemaMutations.js +161 -0
- package/lib/GraphQL/loaders/schemaQueries.js +80 -0
- package/lib/GraphQL/loaders/schemaTypes.js +341 -0
- package/lib/GraphQL/loaders/usersMutations.js +433 -0
- package/lib/GraphQL/loaders/usersQueries.js +90 -0
- package/lib/GraphQL/parseGraphQLUtils.js +71 -0
- package/lib/GraphQL/transformers/className.js +14 -0
- package/lib/GraphQL/transformers/constraintType.js +53 -0
- package/lib/GraphQL/transformers/inputType.js +51 -0
- package/lib/GraphQL/transformers/mutation.js +280 -0
- package/lib/GraphQL/transformers/outputType.js +51 -0
- package/lib/GraphQL/transformers/query.js +237 -0
- package/lib/GraphQL/transformers/schemaFields.js +99 -0
- package/lib/InstallationDedup.js +178 -0
- package/lib/KeyPromiseQueue.js +48 -0
- package/lib/LiveQuery/Client.js +90 -0
- package/lib/LiveQuery/Id.js +20 -0
- package/lib/LiveQuery/ParseCloudCodePublisher.js +54 -0
- package/lib/LiveQuery/ParseLiveQueryServer.js +1071 -0
- package/lib/LiveQuery/ParsePubSub.js +37 -0
- package/lib/LiveQuery/ParseWebSocketServer.js +66 -0
- package/lib/LiveQuery/QueryTools.js +443 -0
- package/lib/LiveQuery/RequestSchema.js +161 -0
- package/lib/LiveQuery/SessionTokenCache.js +51 -0
- package/lib/LiveQuery/Subscription.js +47 -0
- package/lib/LiveQuery/equalObjects.js +50 -0
- package/lib/Options/Definitions.js +1599 -0
- package/lib/Options/docs.js +389 -0
- package/lib/Options/index.js +12 -0
- package/lib/Options/parsers.js +89 -0
- package/lib/Page.js +44 -0
- package/lib/ParseMessageQueue.js +24 -0
- package/lib/ParseServer.js +632 -0
- package/lib/ParseServerRESTController.js +173 -0
- package/lib/PromiseRouter.js +208 -0
- package/lib/Push/PushQueue.js +67 -0
- package/lib/Push/PushWorker.js +101 -0
- package/lib/Push/utils.js +129 -0
- package/lib/RestQuery.js +1208 -0
- package/lib/RestWrite.js +1671 -0
- package/lib/Routers/AggregateRouter.js +150 -0
- package/lib/Routers/AnalyticsRouter.js +26 -0
- package/lib/Routers/AudiencesRouter.js +54 -0
- package/lib/Routers/ClassesRouter.js +191 -0
- package/lib/Routers/CloudCodeRouter.js +87 -0
- package/lib/Routers/FeaturesRouter.js +72 -0
- package/lib/Routers/FilesRouter.js +772 -0
- package/lib/Routers/FunctionsRouter.js +341 -0
- package/lib/Routers/GlobalConfigRouter.js +123 -0
- package/lib/Routers/GraphQLRouter.js +41 -0
- package/lib/Routers/HooksRouter.js +121 -0
- package/lib/Routers/IAPValidationRouter.js +113 -0
- package/lib/Routers/InstallationsRouter.js +46 -0
- package/lib/Routers/LogsRouter.js +57 -0
- package/lib/Routers/PagesRouter.js +676 -0
- package/lib/Routers/PurgeRouter.js +45 -0
- package/lib/Routers/PushRouter.js +75 -0
- package/lib/Routers/RolesRouter.js +33 -0
- package/lib/Routers/SchemasRouter.js +118 -0
- package/lib/Routers/SecurityRouter.js +34 -0
- package/lib/Routers/SessionsRouter.js +126 -0
- package/lib/Routers/UsersRouter.js +733 -0
- package/lib/SchemaMigrations/DefinedSchemas.js +379 -0
- package/lib/SchemaMigrations/Migrations.js +30 -0
- package/lib/Security/Check.js +109 -0
- package/lib/Security/CheckGroup.js +44 -0
- package/lib/Security/CheckGroups/CheckGroupDatabase.js +44 -0
- package/lib/Security/CheckGroups/CheckGroupServerConfig.js +160 -0
- package/lib/Security/CheckGroups/CheckGroups.js +21 -0
- package/lib/Security/CheckRunner.js +213 -0
- package/lib/SharedRest.js +34 -0
- package/lib/StatusHandler.js +329 -0
- package/lib/TestUtils.js +87 -0
- package/lib/Utils.js +577 -0
- package/lib/batch.js +185 -0
- package/lib/cache.js +12 -0
- package/lib/cli/definitions/parse-live-query-server.js +9 -0
- package/lib/cli/definitions/parse-server.js +9 -0
- package/lib/cli/parse-live-query-server.js +14 -0
- package/lib/cli/parse-server.js +101 -0
- package/lib/cli/utils/commander.js +132 -0
- package/lib/cli/utils/runner.js +53 -0
- package/lib/cloud-code/Parse.Cloud.js +797 -0
- package/lib/cloud-code/Parse.Server.js +21 -0
- package/lib/cryptoUtils.js +54 -0
- package/lib/defaults.js +58 -0
- package/lib/deprecated.js +12 -0
- package/lib/index.js +89 -0
- package/lib/logger.js +40 -0
- package/lib/middlewares.js +810 -0
- package/lib/password.js +40 -0
- package/lib/request.js +175 -0
- package/lib/requiredParameter.js +11 -0
- package/lib/rest.js +264 -0
- package/lib/triggers.js +949 -0
- package/lib/vendor/README.md +8 -0
- package/lib/vendor/mongodbUrl.js +1012 -0
- package/package.json +172 -0
- package/postinstall.js +38 -0
- package/public/custom_json.html +17 -0
- package/public/custom_json.json +23 -0
- package/public/custom_page.html +15 -0
- package/public/de/email_verification_link_expired.html +24 -0
- package/public/de/email_verification_link_invalid.html +21 -0
- package/public/de/email_verification_send_fail.html +21 -0
- package/public/de/email_verification_send_success.html +19 -0
- package/public/de/email_verification_success.html +18 -0
- package/public/de/password_reset.html +65 -0
- package/public/de/password_reset_link_invalid.html +19 -0
- package/public/de/password_reset_success.html +18 -0
- package/public/de-AT/email_verification_link_expired.html +24 -0
- package/public/de-AT/email_verification_link_invalid.html +21 -0
- package/public/de-AT/email_verification_send_fail.html +21 -0
- package/public/de-AT/email_verification_send_success.html +19 -0
- package/public/de-AT/email_verification_success.html +18 -0
- package/public/de-AT/password_reset.html +65 -0
- package/public/de-AT/password_reset_link_invalid.html +19 -0
- package/public/de-AT/password_reset_success.html +18 -0
- package/public/email_verification_link_expired.html +24 -0
- package/public/email_verification_link_invalid.html +21 -0
- package/public/email_verification_send_fail.html +21 -0
- package/public/email_verification_send_success.html +19 -0
- package/public/email_verification_success.html +18 -0
- package/public/password_reset.html +65 -0
- package/public/password_reset_link_invalid.html +19 -0
- package/public/password_reset_success.html +18 -0
- package/types/@types/@parse/fs-files-adapter/index.d.ts +5 -0
- package/types/@types/deepcopy/index.d.ts +5 -0
- package/types/LiveQuery/ParseLiveQueryServer.d.ts +40 -0
- package/types/Options/index.d.ts +320 -0
- package/types/ParseServer.d.ts +65 -0
- package/types/eslint.config.mjs +30 -0
- package/types/index.d.ts +21 -0
- package/types/logger.d.ts +2 -0
- package/types/tests.ts +44 -0
- package/types/tsconfig.json +24 -0
- package/views/choose_password +215 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.PurgeRouter = void 0;
|
|
7
|
+
var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
|
|
8
|
+
var middleware = _interopRequireWildcard(require("../middlewares"));
|
|
9
|
+
var _node = _interopRequireDefault(require("parse/node"));
|
|
10
|
+
var _Error = require("../Error");
|
|
11
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
class PurgeRouter extends _PromiseRouter.default {
|
|
14
|
+
handlePurge(req) {
|
|
15
|
+
if (req.auth.isReadOnly) {
|
|
16
|
+
throw (0, _Error.createSanitizedError)(_node.default.Error.OPERATION_FORBIDDEN, "read-only masterKey isn't allowed to purge a schema.", req.config);
|
|
17
|
+
}
|
|
18
|
+
return req.config.database.purgeCollection(req.params.className).then(() => {
|
|
19
|
+
var cacheAdapter = req.config.cacheController;
|
|
20
|
+
if (req.params.className == '_Session') {
|
|
21
|
+
cacheAdapter.user.clear();
|
|
22
|
+
} else if (req.params.className == '_Role') {
|
|
23
|
+
cacheAdapter.role.clear();
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
response: {}
|
|
27
|
+
};
|
|
28
|
+
}).catch(error => {
|
|
29
|
+
if (!error || error && error.code === _node.default.Error.OBJECT_NOT_FOUND) {
|
|
30
|
+
return {
|
|
31
|
+
response: {}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
throw error;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
mountRoutes() {
|
|
38
|
+
this.route('DELETE', '/purge/:className', middleware.promiseEnforceMasterKeyAccess, req => {
|
|
39
|
+
return this.handlePurge(req);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.PurgeRouter = PurgeRouter;
|
|
44
|
+
var _default = exports.default = PurgeRouter;
|
|
45
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUHJvbWlzZVJvdXRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwibWlkZGxld2FyZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX25vZGUiLCJfRXJyb3IiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJQdXJnZVJvdXRlciIsIlByb21pc2VSb3V0ZXIiLCJoYW5kbGVQdXJnZSIsInJlcSIsImF1dGgiLCJpc1JlYWRPbmx5IiwiY3JlYXRlU2FuaXRpemVkRXJyb3IiLCJQYXJzZSIsIkVycm9yIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImNvbmZpZyIsImRhdGFiYXNlIiwicHVyZ2VDb2xsZWN0aW9uIiwicGFyYW1zIiwiY2xhc3NOYW1lIiwidGhlbiIsImNhY2hlQWRhcHRlciIsImNhY2hlQ29udHJvbGxlciIsInVzZXIiLCJjbGVhciIsInJvbGUiLCJyZXNwb25zZSIsImNhdGNoIiwiZXJyb3IiLCJjb2RlIiwiT0JKRUNUX05PVF9GT1VORCIsIm1vdW50Um91dGVzIiwicm91dGUiLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL1B1cmdlUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm9taXNlUm91dGVyIGZyb20gJy4uL1Byb21pc2VSb3V0ZXInO1xuaW1wb3J0ICogYXMgbWlkZGxld2FyZSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgeyBjcmVhdGVTYW5pdGl6ZWRFcnJvciB9IGZyb20gJy4uL0Vycm9yJztcblxuZXhwb3J0IGNsYXNzIFB1cmdlUm91dGVyIGV4dGVuZHMgUHJvbWlzZVJvdXRlciB7XG4gIGhhbmRsZVB1cmdlKHJlcSkge1xuICAgIGlmIChyZXEuYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICB0aHJvdyBjcmVhdGVTYW5pdGl6ZWRFcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgXCJyZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gcHVyZ2UgYSBzY2hlbWEuXCIsXG4gICAgICAgIHJlcS5jb25maWdcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXEuY29uZmlnLmRhdGFiYXNlXG4gICAgICAucHVyZ2VDb2xsZWN0aW9uKHJlcS5wYXJhbXMuY2xhc3NOYW1lKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB2YXIgY2FjaGVBZGFwdGVyID0gcmVxLmNvbmZpZy5jYWNoZUNvbnRyb2xsZXI7XG4gICAgICAgIGlmIChyZXEucGFyYW1zLmNsYXNzTmFtZSA9PSAnX1Nlc3Npb24nKSB7XG4gICAgICAgICAgY2FjaGVBZGFwdGVyLnVzZXIuY2xlYXIoKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXEucGFyYW1zLmNsYXNzTmFtZSA9PSAnX1JvbGUnKSB7XG4gICAgICAgICAgY2FjaGVBZGFwdGVyLnJvbGUuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyByZXNwb25zZToge30gfTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBpZiAoIWVycm9yIHx8IChlcnJvciAmJiBlcnJvci5jb2RlID09PSBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5EKSkge1xuICAgICAgICAgIHJldHVybiB7IHJlc3BvbnNlOiB7fSB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSk7XG4gIH1cblxuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKCdERUxFVEUnLCAnL3B1cmdlLzpjbGFzc05hbWUnLCBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUHVyZ2UocmVxKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQdXJnZVJvdXRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsY0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBQWdELFNBQUFFLHdCQUFBRyxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBTCx1QkFBQSxZQUFBQSxDQUFBRyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQUMsT0FBQSxFQUFBVixDQUFBLGlCQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFNBQUFRLENBQUEsTUFBQUYsQ0FBQSxHQUFBTCxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxRQUFBRyxDQUFBLENBQUFLLEdBQUEsQ0FBQVgsQ0FBQSxVQUFBTSxDQUFBLENBQUFNLEdBQUEsQ0FBQVosQ0FBQSxHQUFBTSxDQUFBLENBQUFPLEdBQUEsQ0FBQWIsQ0FBQSxFQUFBUSxDQUFBLGdCQUFBUCxDQUFBLElBQUFELENBQUEsZ0JBQUFDLENBQUEsT0FBQWEsY0FBQSxDQUFBQyxJQUFBLENBQUFmLENBQUEsRUFBQUMsQ0FBQSxPQUFBTSxDQUFBLElBQUFELENBQUEsR0FBQVUsTUFBQSxDQUFBQyxjQUFBLEtBQUFELE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWxCLENBQUEsRUFBQUMsQ0FBQSxPQUFBTSxDQUFBLENBQUFLLEdBQUEsSUFBQUwsQ0FBQSxDQUFBTSxHQUFBLElBQUFQLENBQUEsQ0FBQUUsQ0FBQSxFQUFBUCxDQUFBLEVBQUFNLENBQUEsSUFBQUMsQ0FBQSxDQUFBUCxDQUFBLElBQUFELENBQUEsQ0FBQUMsQ0FBQSxXQUFBTyxDQUFBLEtBQUFSLENBQUEsRUFBQUMsQ0FBQTtBQUFBLFNBQUFQLHVCQUFBTSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLEdBQUFMLENBQUEsS0FBQVUsT0FBQSxFQUFBVixDQUFBO0FBRXpDLE1BQU1tQixXQUFXLFNBQVNDLHNCQUFhLENBQUM7RUFDN0NDLFdBQVdBLENBQUNDLEdBQUcsRUFBRTtJQUNmLElBQUlBLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDQyxVQUFVLEVBQUU7TUFDdkIsTUFBTSxJQUFBQywyQkFBb0IsRUFDeEJDLGFBQUssQ0FBQ0MsS0FBSyxDQUFDQyxtQkFBbUIsRUFDL0Isc0RBQXNELEVBQ3RETixHQUFHLENBQUNPLE1BQ04sQ0FBQztJQUNIO0lBQ0EsT0FBT1AsR0FBRyxDQUFDTyxNQUFNLENBQUNDLFFBQVEsQ0FDdkJDLGVBQWUsQ0FBQ1QsR0FBRyxDQUFDVSxNQUFNLENBQUNDLFNBQVMsQ0FBQyxDQUNyQ0MsSUFBSSxDQUFDLE1BQU07TUFDVixJQUFJQyxZQUFZLEdBQUdiLEdBQUcsQ0FBQ08sTUFBTSxDQUFDTyxlQUFlO01BQzdDLElBQUlkLEdBQUcsQ0FBQ1UsTUFBTSxDQUFDQyxTQUFTLElBQUksVUFBVSxFQUFFO1FBQ3RDRSxZQUFZLENBQUNFLElBQUksQ0FBQ0MsS0FBSyxDQUFDLENBQUM7TUFDM0IsQ0FBQyxNQUFNLElBQUloQixHQUFHLENBQUNVLE1BQU0sQ0FBQ0MsU0FBUyxJQUFJLE9BQU8sRUFBRTtRQUMxQ0UsWUFBWSxDQUFDSSxJQUFJLENBQUNELEtBQUssQ0FBQyxDQUFDO01BQzNCO01BQ0EsT0FBTztRQUFFRSxRQUFRLEVBQUUsQ0FBQztNQUFFLENBQUM7SUFDekIsQ0FBQyxDQUFDLENBQ0RDLEtBQUssQ0FBQ0MsS0FBSyxJQUFJO01BQ2QsSUFBSSxDQUFDQSxLQUFLLElBQUtBLEtBQUssSUFBSUEsS0FBSyxDQUFDQyxJQUFJLEtBQUtqQixhQUFLLENBQUNDLEtBQUssQ0FBQ2lCLGdCQUFpQixFQUFFO1FBQ3BFLE9BQU87VUFBRUosUUFBUSxFQUFFLENBQUM7UUFBRSxDQUFDO01BQ3pCO01BQ0EsTUFBTUUsS0FBSztJQUNiLENBQUMsQ0FBQztFQUNOO0VBRUFHLFdBQVdBLENBQUEsRUFBRztJQUNaLElBQUksQ0FBQ0MsS0FBSyxDQUFDLFFBQVEsRUFBRSxtQkFBbUIsRUFBRWxELFVBQVUsQ0FBQ21ELDZCQUE2QixFQUFFekIsR0FBRyxJQUFJO01BQ3pGLE9BQU8sSUFBSSxDQUFDRCxXQUFXLENBQUNDLEdBQUcsQ0FBQztJQUM5QixDQUFDLENBQUM7RUFDSjtBQUNGO0FBQUMwQixPQUFBLENBQUE3QixXQUFBLEdBQUFBLFdBQUE7QUFBQSxJQUFBOEIsUUFBQSxHQUFBRCxPQUFBLENBQUF0QyxPQUFBLEdBRWNTLFdBQVciLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.PushRouter = void 0;
|
|
7
|
+
var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
|
|
8
|
+
var middleware = _interopRequireWildcard(require("../middlewares"));
|
|
9
|
+
var _node = require("parse/node");
|
|
10
|
+
var _Error = require("../Error");
|
|
11
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
class PushRouter extends _PromiseRouter.default {
|
|
14
|
+
mountRoutes() {
|
|
15
|
+
this.route('POST', '/push', middleware.promiseEnforceMasterKeyAccess, PushRouter.handlePOST);
|
|
16
|
+
}
|
|
17
|
+
static handlePOST(req) {
|
|
18
|
+
if (req.auth.isReadOnly) {
|
|
19
|
+
throw (0, _Error.createSanitizedError)(_node.Parse.Error.OPERATION_FORBIDDEN, "read-only masterKey isn't allowed to send push notifications.", req.config);
|
|
20
|
+
}
|
|
21
|
+
const pushController = req.config.pushController;
|
|
22
|
+
if (!pushController) {
|
|
23
|
+
throw new _node.Parse.Error(_node.Parse.Error.PUSH_MISCONFIGURED, 'Push controller is not set');
|
|
24
|
+
}
|
|
25
|
+
const where = PushRouter.getQueryCondition(req);
|
|
26
|
+
let resolve;
|
|
27
|
+
const promise = new Promise(_resolve => {
|
|
28
|
+
resolve = _resolve;
|
|
29
|
+
});
|
|
30
|
+
let pushStatusId;
|
|
31
|
+
pushController.sendPush(req.body || {}, where, req.config, req.auth, objectId => {
|
|
32
|
+
pushStatusId = objectId;
|
|
33
|
+
resolve({
|
|
34
|
+
headers: {
|
|
35
|
+
'X-Parse-Push-Status-Id': pushStatusId
|
|
36
|
+
},
|
|
37
|
+
response: {
|
|
38
|
+
result: true
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}).catch(err => {
|
|
42
|
+
req.config.loggerController.error(`_PushStatus ${pushStatusId}: error while sending push`, err);
|
|
43
|
+
});
|
|
44
|
+
return promise;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Get query condition from the request body.
|
|
49
|
+
* @param {Object} req A request object
|
|
50
|
+
* @returns {Object} The query condition, the where field in a query api call
|
|
51
|
+
*/
|
|
52
|
+
static getQueryCondition(req) {
|
|
53
|
+
const body = req.body || {};
|
|
54
|
+
const hasWhere = typeof body.where !== 'undefined';
|
|
55
|
+
const hasChannels = typeof body.channels !== 'undefined';
|
|
56
|
+
let where;
|
|
57
|
+
if (hasWhere && hasChannels) {
|
|
58
|
+
throw new _node.Parse.Error(_node.Parse.Error.PUSH_MISCONFIGURED, 'Channels and query can not be set at the same time.');
|
|
59
|
+
} else if (hasWhere) {
|
|
60
|
+
where = body.where;
|
|
61
|
+
} else if (hasChannels) {
|
|
62
|
+
where = {
|
|
63
|
+
channels: {
|
|
64
|
+
$in: body.channels
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
} else {
|
|
68
|
+
throw new _node.Parse.Error(_node.Parse.Error.PUSH_MISCONFIGURED, 'Sending a push requires either "channels" or a "where" query.');
|
|
69
|
+
}
|
|
70
|
+
return where;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.PushRouter = PushRouter;
|
|
74
|
+
var _default = exports.default = PushRouter;
|
|
75
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUHJvbWlzZVJvdXRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwibWlkZGxld2FyZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX25vZGUiLCJfRXJyb3IiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJQdXNoUm91dGVyIiwiUHJvbWlzZVJvdXRlciIsIm1vdW50Um91dGVzIiwicm91dGUiLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyIsImhhbmRsZVBPU1QiLCJyZXEiLCJhdXRoIiwiaXNSZWFkT25seSIsImNyZWF0ZVNhbml0aXplZEVycm9yIiwiUGFyc2UiLCJFcnJvciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJjb25maWciLCJwdXNoQ29udHJvbGxlciIsIlBVU0hfTUlTQ09ORklHVVJFRCIsIndoZXJlIiwiZ2V0UXVlcnlDb25kaXRpb24iLCJyZXNvbHZlIiwicHJvbWlzZSIsIlByb21pc2UiLCJfcmVzb2x2ZSIsInB1c2hTdGF0dXNJZCIsInNlbmRQdXNoIiwiYm9keSIsIm9iamVjdElkIiwiaGVhZGVycyIsInJlc3BvbnNlIiwicmVzdWx0IiwiY2F0Y2giLCJlcnIiLCJsb2dnZXJDb250cm9sbGVyIiwiZXJyb3IiLCJoYXNXaGVyZSIsImhhc0NoYW5uZWxzIiwiY2hhbm5lbHMiLCIkaW4iLCJleHBvcnRzIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9QdXNoUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm9taXNlUm91dGVyIGZyb20gJy4uL1Byb21pc2VSb3V0ZXInO1xuaW1wb3J0ICogYXMgbWlkZGxld2FyZSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgeyBQYXJzZSB9IGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IHsgY3JlYXRlU2FuaXRpemVkRXJyb3IgfSBmcm9tICcuLi9FcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBQdXNoUm91dGVyIGV4dGVuZHMgUHJvbWlzZVJvdXRlciB7XG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL3B1c2gnLCBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLCBQdXNoUm91dGVyLmhhbmRsZVBPU1QpO1xuICB9XG5cbiAgc3RhdGljIGhhbmRsZVBPU1QocmVxKSB7XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byBzZW5kIHB1c2ggbm90aWZpY2F0aW9ucy5cIixcbiAgICAgICAgcmVxLmNvbmZpZ1xuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgcHVzaENvbnRyb2xsZXIgPSByZXEuY29uZmlnLnB1c2hDb250cm9sbGVyO1xuICAgIGlmICghcHVzaENvbnRyb2xsZXIpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5QVVNIX01JU0NPTkZJR1VSRUQsICdQdXNoIGNvbnRyb2xsZXIgaXMgbm90IHNldCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHdoZXJlID0gUHVzaFJvdXRlci5nZXRRdWVyeUNvbmRpdGlvbihyZXEpO1xuICAgIGxldCByZXNvbHZlO1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShfcmVzb2x2ZSA9PiB7XG4gICAgICByZXNvbHZlID0gX3Jlc29sdmU7XG4gICAgfSk7XG4gICAgbGV0IHB1c2hTdGF0dXNJZDtcbiAgICBwdXNoQ29udHJvbGxlclxuICAgICAgLnNlbmRQdXNoKHJlcS5ib2R5IHx8IHt9LCB3aGVyZSwgcmVxLmNvbmZpZywgcmVxLmF1dGgsIG9iamVjdElkID0+IHtcbiAgICAgICAgcHVzaFN0YXR1c0lkID0gb2JqZWN0SWQ7XG4gICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdYLVBhcnNlLVB1c2gtU3RhdHVzLUlkJzogcHVzaFN0YXR1c0lkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICAgIHJlc3VsdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgcmVxLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyLmVycm9yKFxuICAgICAgICAgIGBfUHVzaFN0YXR1cyAke3B1c2hTdGF0dXNJZH06IGVycm9yIHdoaWxlIHNlbmRpbmcgcHVzaGAsXG4gICAgICAgICAgZXJyXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcXVlcnkgY29uZGl0aW9uIGZyb20gdGhlIHJlcXVlc3QgYm9keS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcSBBIHJlcXVlc3Qgb2JqZWN0XG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBxdWVyeSBjb25kaXRpb24sIHRoZSB3aGVyZSBmaWVsZCBpbiBhIHF1ZXJ5IGFwaSBjYWxsXG4gICAqL1xuICBzdGF0aWMgZ2V0UXVlcnlDb25kaXRpb24ocmVxKSB7XG4gICAgY29uc3QgYm9keSA9IHJlcS5ib2R5IHx8IHt9O1xuICAgIGNvbnN0IGhhc1doZXJlID0gdHlwZW9mIGJvZHkud2hlcmUgIT09ICd1bmRlZmluZWQnO1xuICAgIGNvbnN0IGhhc0NoYW5uZWxzID0gdHlwZW9mIGJvZHkuY2hhbm5lbHMgIT09ICd1bmRlZmluZWQnO1xuXG4gICAgbGV0IHdoZXJlO1xuICAgIGlmIChoYXNXaGVyZSAmJiBoYXNDaGFubmVscykge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5QVVNIX01JU0NPTkZJR1VSRUQsXG4gICAgICAgICdDaGFubmVscyBhbmQgcXVlcnkgY2FuIG5vdCBiZSBzZXQgYXQgdGhlIHNhbWUgdGltZS4nXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaGFzV2hlcmUpIHtcbiAgICAgIHdoZXJlID0gYm9keS53aGVyZTtcbiAgICB9IGVsc2UgaWYgKGhhc0NoYW5uZWxzKSB7XG4gICAgICB3aGVyZSA9IHtcbiAgICAgICAgY2hhbm5lbHM6IHtcbiAgICAgICAgICAkaW46IGJvZHkuY2hhbm5lbHMsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLlBVU0hfTUlTQ09ORklHVVJFRCxcbiAgICAgICAgJ1NlbmRpbmcgYSBwdXNoIHJlcXVpcmVzIGVpdGhlciBcImNoYW5uZWxzXCIgb3IgYSBcIndoZXJlXCIgcXVlcnkuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHdoZXJlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFB1c2hSb3V0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLGNBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQUFnRCxTQUFBRSx3QkFBQUcsQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUwsdUJBQUEsWUFBQUEsQ0FBQUcsQ0FBQSxFQUFB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
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.RolesRouter = void 0;
|
|
7
|
+
var _ClassesRouter = _interopRequireDefault(require("./ClassesRouter"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
class RolesRouter extends _ClassesRouter.default {
|
|
10
|
+
className() {
|
|
11
|
+
return '_Role';
|
|
12
|
+
}
|
|
13
|
+
mountRoutes() {
|
|
14
|
+
this.route('GET', '/roles', req => {
|
|
15
|
+
return this.handleFind(req);
|
|
16
|
+
});
|
|
17
|
+
this.route('GET', '/roles/:objectId', req => {
|
|
18
|
+
return this.handleGet(req);
|
|
19
|
+
});
|
|
20
|
+
this.route('POST', '/roles', req => {
|
|
21
|
+
return this.handleCreate(req);
|
|
22
|
+
});
|
|
23
|
+
this.route('PUT', '/roles/:objectId', req => {
|
|
24
|
+
return this.handleUpdate(req);
|
|
25
|
+
});
|
|
26
|
+
this.route('DELETE', '/roles/:objectId', req => {
|
|
27
|
+
return this.handleDelete(req);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.RolesRouter = RolesRouter;
|
|
32
|
+
var _default = exports.default = RolesRouter;
|
|
33
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQ2xhc3Nlc1JvdXRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiUm9sZXNSb3V0ZXIiLCJDbGFzc2VzUm91dGVyIiwiY2xhc3NOYW1lIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsInJlcSIsImhhbmRsZUZpbmQiLCJoYW5kbGVHZXQiLCJoYW5kbGVDcmVhdGUiLCJoYW5kbGVVcGRhdGUiLCJoYW5kbGVEZWxldGUiLCJleHBvcnRzIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9Sb2xlc1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ2xhc3Nlc1JvdXRlciBmcm9tICcuL0NsYXNzZXNSb3V0ZXInO1xuXG5leHBvcnQgY2xhc3MgUm9sZXNSb3V0ZXIgZXh0ZW5kcyBDbGFzc2VzUm91dGVyIHtcbiAgY2xhc3NOYW1lKCkge1xuICAgIHJldHVybiAnX1JvbGUnO1xuICB9XG5cbiAgbW91bnRSb3V0ZXMoKSB7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy9yb2xlcycsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVGaW5kKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy9yb2xlcy86b2JqZWN0SWQnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlR2V0KHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvcm9sZXMnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlQ3JlYXRlKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUFVUJywgJy9yb2xlcy86b2JqZWN0SWQnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVXBkYXRlKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnREVMRVRFJywgJy9yb2xlcy86b2JqZWN0SWQnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRGVsZXRlKHJlcSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUm9sZXNSb3V0ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLGNBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUE0QyxTQUFBRCx1QkFBQUUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUVyQyxNQUFNRyxXQUFXLFNBQVNDLHNCQUFhLENBQUM7RUFDN0NDLFNBQVNBLENBQUEsRUFBRztJQUNWLE9BQU8sT0FBTztFQUNoQjtFQUVBQyxXQUFXQSxDQUFBLEVBQUc7SUFDWixJQUFJLENBQUNDLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFQyxHQUFHLElBQUk7TUFDakMsT0FBTyxJQUFJLENBQUNDLFVBQVUsQ0FBQ0QsR0FBRyxDQUFDO0lBQzdCLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQ0QsS0FBSyxDQUFDLEtBQUssRUFBRSxrQkFBa0IsRUFBRUMsR0FBRyxJQUFJO01BQzNDLE9BQU8sSUFBSSxDQUFDRSxTQUFTLENBQUNGLEdBQUcsQ0FBQztJQUM1QixDQUFDLENBQUM7SUFDRixJQUFJLENBQUNELEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFQyxHQUFHLElBQUk7TUFDbEMsT0FBTyxJQUFJLENBQUNHLFlBQVksQ0FBQ0gsR0FBRyxDQUFDO0lBQy9CLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQ0QsS0FBSyxDQUFDLEtBQUssRUFBRSxrQkFBa0IsRUFBRUMsR0FBRyxJQUFJO01BQzNDLE9BQU8sSUFBSSxDQUFDSSxZQUFZLENBQUNKLEdBQUcsQ0FBQztJQUMvQixDQUFDLENBQUM7SUFDRixJQUFJLENBQUNELEtBQUssQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLEVBQUVDLEdBQUcsSUFBSTtNQUM5QyxPQUFPLElBQUksQ0FBQ0ssWUFBWSxDQUFDTCxHQUFHLENBQUM7SUFDL0IsQ0FBQyxDQUFDO0VBQ0o7QUFDRjtBQUFDTSxPQUFBLENBQUFYLFdBQUEsR0FBQUEsV0FBQTtBQUFBLElBQUFZLFFBQUEsR0FBQUQsT0FBQSxDQUFBWixPQUFBLEdBRWNDLFdBQVciLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.internalUpdateSchema = exports.internalCreateSchema = exports.SchemasRouter = void 0;
|
|
7
|
+
var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
|
|
8
|
+
var middleware = _interopRequireWildcard(require("../middlewares"));
|
|
9
|
+
var _Error = require("../Error");
|
|
10
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
// schemas.js
|
|
13
|
+
|
|
14
|
+
var Parse = require('parse/node').Parse,
|
|
15
|
+
SchemaController = require('../Controllers/SchemaController');
|
|
16
|
+
function classNameMismatchResponse(bodyClass, pathClass) {
|
|
17
|
+
throw new Parse.Error(Parse.Error.INVALID_CLASS_NAME, `Class name mismatch between ${bodyClass} and ${pathClass}.`);
|
|
18
|
+
}
|
|
19
|
+
function getAllSchemas(req) {
|
|
20
|
+
return req.config.database.loadSchema({
|
|
21
|
+
clearCache: true
|
|
22
|
+
}).then(schemaController => schemaController.getAllClasses({
|
|
23
|
+
clearCache: true
|
|
24
|
+
})).then(schemas => ({
|
|
25
|
+
response: {
|
|
26
|
+
results: schemas
|
|
27
|
+
}
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
function getOneSchema(req) {
|
|
31
|
+
const className = req.params.className;
|
|
32
|
+
return req.config.database.loadSchema({
|
|
33
|
+
clearCache: true
|
|
34
|
+
}).then(schemaController => schemaController.getOneSchema(className, true)).then(schema => ({
|
|
35
|
+
response: schema
|
|
36
|
+
})).catch(error => {
|
|
37
|
+
if (error === undefined) {
|
|
38
|
+
throw new Parse.Error(Parse.Error.INVALID_CLASS_NAME, `Class ${className} does not exist.`);
|
|
39
|
+
} else {
|
|
40
|
+
throw new Parse.Error(Parse.Error.INTERNAL_SERVER_ERROR, 'Database adapter error.');
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
const checkIfDefinedSchemasIsUsed = req => {
|
|
45
|
+
if (req.config?.schema?.lockSchemas === true) {
|
|
46
|
+
throw new Parse.Error(Parse.Error.OPERATION_FORBIDDEN, 'Cannot perform this operation when schemas options is used.');
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const internalCreateSchema = async (className, body, config) => {
|
|
50
|
+
const controller = await config.database.loadSchema({
|
|
51
|
+
clearCache: true
|
|
52
|
+
});
|
|
53
|
+
const response = await controller.addClassIfNotExists(className, body.fields, body.classLevelPermissions, body.indexes);
|
|
54
|
+
return {
|
|
55
|
+
response
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
exports.internalCreateSchema = internalCreateSchema;
|
|
59
|
+
const internalUpdateSchema = async (className, body, config) => {
|
|
60
|
+
const controller = await config.database.loadSchema({
|
|
61
|
+
clearCache: true
|
|
62
|
+
});
|
|
63
|
+
const response = await controller.updateClass(className, body.fields || {}, body.classLevelPermissions, body.indexes, config.database);
|
|
64
|
+
return {
|
|
65
|
+
response
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
exports.internalUpdateSchema = internalUpdateSchema;
|
|
69
|
+
async function createSchema(req) {
|
|
70
|
+
checkIfDefinedSchemasIsUsed(req);
|
|
71
|
+
if (req.auth.isReadOnly) {
|
|
72
|
+
throw (0, _Error.createSanitizedError)(Parse.Error.OPERATION_FORBIDDEN, "read-only masterKey isn't allowed to create a schema.", req.config);
|
|
73
|
+
}
|
|
74
|
+
if (req.params.className && req.body?.className) {
|
|
75
|
+
if (req.params.className != req.body.className) {
|
|
76
|
+
return classNameMismatchResponse(req.body.className, req.params.className);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const className = req.params.className || req.body?.className;
|
|
80
|
+
if (!className) {
|
|
81
|
+
throw new Parse.Error(135, `POST ${req.path} needs a class name.`);
|
|
82
|
+
}
|
|
83
|
+
return await internalCreateSchema(className, req.body || {}, req.config);
|
|
84
|
+
}
|
|
85
|
+
function modifySchema(req) {
|
|
86
|
+
checkIfDefinedSchemasIsUsed(req);
|
|
87
|
+
if (req.auth.isReadOnly) {
|
|
88
|
+
throw (0, _Error.createSanitizedError)(Parse.Error.OPERATION_FORBIDDEN, "read-only masterKey isn't allowed to update a schema.", req.config);
|
|
89
|
+
}
|
|
90
|
+
if (req.body?.className && req.body.className != req.params.className) {
|
|
91
|
+
return classNameMismatchResponse(req.body.className, req.params.className);
|
|
92
|
+
}
|
|
93
|
+
const className = req.params.className;
|
|
94
|
+
return internalUpdateSchema(className, req.body || {}, req.config);
|
|
95
|
+
}
|
|
96
|
+
const deleteSchema = req => {
|
|
97
|
+
if (req.auth.isReadOnly) {
|
|
98
|
+
throw (0, _Error.createSanitizedError)(Parse.Error.OPERATION_FORBIDDEN, "read-only masterKey isn't allowed to delete a schema.", req.config);
|
|
99
|
+
}
|
|
100
|
+
if (!SchemaController.classNameIsValid(req.params.className)) {
|
|
101
|
+
throw new Parse.Error(Parse.Error.INVALID_CLASS_NAME, SchemaController.invalidClassNameMessage(req.params.className));
|
|
102
|
+
}
|
|
103
|
+
return req.config.database.deleteSchema(req.params.className).then(() => ({
|
|
104
|
+
response: {}
|
|
105
|
+
}));
|
|
106
|
+
};
|
|
107
|
+
class SchemasRouter extends _PromiseRouter.default {
|
|
108
|
+
mountRoutes() {
|
|
109
|
+
this.route('GET', '/schemas', middleware.promiseEnforceMasterKeyAccess, getAllSchemas);
|
|
110
|
+
this.route('GET', '/schemas/:className', middleware.promiseEnforceMasterKeyAccess, getOneSchema);
|
|
111
|
+
this.route('POST', '/schemas', middleware.promiseEnforceMasterKeyAccess, createSchema);
|
|
112
|
+
this.route('POST', '/schemas/:className', middleware.promiseEnforceMasterKeyAccess, createSchema);
|
|
113
|
+
this.route('PUT', '/schemas/:className', middleware.promiseEnforceMasterKeyAccess, modifySchema);
|
|
114
|
+
this.route('DELETE', '/schemas/:className', middleware.promiseEnforceMasterKeyAccess, deleteSchema);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.SchemasRouter = SchemasRouter;
|
|
118
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUHJvbWlzZVJvdXRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwibWlkZGxld2FyZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX0Vycm9yIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiUGFyc2UiLCJTY2hlbWFDb250cm9sbGVyIiwiY2xhc3NOYW1lTWlzbWF0Y2hSZXNwb25zZSIsImJvZHlDbGFzcyIsInBhdGhDbGFzcyIsIkVycm9yIiwiSU5WQUxJRF9DTEFTU19OQU1FIiwiZ2V0QWxsU2NoZW1hcyIsInJlcSIsImNvbmZpZyIsImRhdGFiYXNlIiwibG9hZFNjaGVtYSIsImNsZWFyQ2FjaGUiLCJ0aGVuIiwic2NoZW1hQ29udHJvbGxlciIsImdldEFsbENsYXNzZXMiLCJzY2hlbWFzIiwicmVzcG9uc2UiLCJyZXN1bHRzIiwiZ2V0T25lU2NoZW1hIiwiY2xhc3NOYW1lIiwicGFyYW1zIiwic2NoZW1hIiwiY2F0Y2giLCJlcnJvciIsInVuZGVmaW5lZCIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsImNoZWNrSWZEZWZpbmVkU2NoZW1hc0lzVXNlZCIsImxvY2tTY2hlbWFzIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImludGVybmFsQ3JlYXRlU2NoZW1hIiwiYm9keSIsImNvbnRyb2xsZXIiLCJhZGRDbGFzc0lmTm90RXhpc3RzIiwiZmllbGRzIiwiY2xhc3NMZXZlbFBlcm1pc3Npb25zIiwiaW5kZXhlcyIsImV4cG9ydHMiLCJpbnRlcm5hbFVwZGF0ZVNjaGVtYSIsInVwZGF0ZUNsYXNzIiwiY3JlYXRlU2NoZW1hIiwiYXV0aCIsImlzUmVhZE9ubHkiLCJjcmVhdGVTYW5pdGl6ZWRFcnJvciIsInBhdGgiLCJtb2RpZnlTY2hlbWEiLCJkZWxldGVTY2hlbWEiLCJjbGFzc05hbWVJc1ZhbGlkIiwiaW52YWxpZENsYXNzTmFtZU1lc3NhZ2UiLCJTY2hlbWFzUm91dGVyIiwiUHJvbWlzZVJvdXRlciIsIm1vdW50Um91dGVzIiwicm91dGUiLCJwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL1NjaGVtYXNSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gc2NoZW1hcy5qc1xuXG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2UsXG4gIFNjaGVtYUNvbnRyb2xsZXIgPSByZXF1aXJlKCcuLi9Db250cm9sbGVycy9TY2hlbWFDb250cm9sbGVyJyk7XG5cbmltcG9ydCBQcm9taXNlUm91dGVyIGZyb20gJy4uL1Byb21pc2VSb3V0ZXInO1xuaW1wb3J0ICogYXMgbWlkZGxld2FyZSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgeyBjcmVhdGVTYW5pdGl6ZWRFcnJvciB9IGZyb20gJy4uL0Vycm9yJztcblxuZnVuY3Rpb24gY2xhc3NOYW1lTWlzbWF0Y2hSZXNwb25zZShib2R5Q2xhc3MsIHBhdGhDbGFzcykge1xuICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9DTEFTU19OQU1FLFxuICAgIGBDbGFzcyBuYW1lIG1pc21hdGNoIGJldHdlZW4gJHtib2R5Q2xhc3N9IGFuZCAke3BhdGhDbGFzc30uYFxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRBbGxTY2hlbWFzKHJlcSkge1xuICByZXR1cm4gcmVxLmNvbmZpZy5kYXRhYmFzZVxuICAgIC5sb2FkU2NoZW1hKHsgY2xlYXJDYWNoZTogdHJ1ZSB9KVxuICAgIC50aGVuKHNjaGVtYUNvbnRyb2xsZXIgPT4gc2NoZW1hQ29udHJvbGxlci5nZXRBbGxDbGFzc2VzKHsgY2xlYXJDYWNoZTogdHJ1ZSB9KSlcbiAgICAudGhlbihzY2hlbWFzID0+ICh7IHJlc3BvbnNlOiB7IHJlc3VsdHM6IHNjaGVtYXMgfSB9KSk7XG59XG5cbmZ1bmN0aW9uIGdldE9uZVNjaGVtYShyZXEpIHtcbiAgY29uc3QgY2xhc3NOYW1lID0gcmVxLnBhcmFtcy5jbGFzc05hbWU7XG4gIHJldHVybiByZXEuY29uZmlnLmRhdGFiYXNlXG4gICAgLmxvYWRTY2hlbWEoeyBjbGVhckNhY2hlOiB0cnVlIH0pXG4gICAgLnRoZW4oc2NoZW1hQ29udHJvbGxlciA9PiBzY2hlbWFDb250cm9sbGVyLmdldE9uZVNjaGVtYShjbGFzc05hbWUsIHRydWUpKVxuICAgIC50aGVuKHNjaGVtYSA9PiAoeyByZXNwb25zZTogc2NoZW1hIH0pKVxuICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICBpZiAoZXJyb3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9DTEFTU19OQU1FLCBgQ2xhc3MgJHtjbGFzc05hbWV9IGRvZXMgbm90IGV4aXN0LmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgJ0RhdGFiYXNlIGFkYXB0ZXIgZXJyb3IuJyk7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbmNvbnN0IGNoZWNrSWZEZWZpbmVkU2NoZW1hc0lzVXNlZCA9IHJlcSA9PiB7XG4gIGlmIChyZXEuY29uZmlnPy5zY2hlbWE/LmxvY2tTY2hlbWFzID09PSB0cnVlKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICdDYW5ub3QgcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiB3aGVuIHNjaGVtYXMgb3B0aW9ucyBpcyB1c2VkLidcbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaW50ZXJuYWxDcmVhdGVTY2hlbWEgPSBhc3luYyAoY2xhc3NOYW1lLCBib2R5LCBjb25maWcpID0+IHtcbiAgY29uc3QgY29udHJvbGxlciA9IGF3YWl0IGNvbmZpZy5kYXRhYmFzZS5sb2FkU2NoZW1hKHsgY2xlYXJDYWNoZTogdHJ1ZSB9KTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjb250cm9sbGVyLmFkZENsYXNzSWZOb3RFeGlzdHMoXG4gICAgY2xhc3NOYW1lLFxuICAgIGJvZHkuZmllbGRzLFxuICAgIGJvZHkuY2xhc3NMZXZlbFBlcm1pc3Npb25zLFxuICAgIGJvZHkuaW5kZXhlc1xuICApO1xuICByZXR1cm4ge1xuICAgIHJlc3BvbnNlLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGludGVybmFsVXBkYXRlU2NoZW1hID0gYXN5bmMgKGNsYXNzTmFtZSwgYm9keSwgY29uZmlnKSA9PiB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBhd2FpdCBjb25maWcuZGF0YWJhc2UubG9hZFNjaGVtYSh7IGNsZWFyQ2FjaGU6IHRydWUgfSk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29udHJvbGxlci51cGRhdGVDbGFzcyhcbiAgICBjbGFzc05hbWUsXG4gICAgYm9keS5maWVsZHMgfHwge30sXG4gICAgYm9keS5jbGFzc0xldmVsUGVybWlzc2lvbnMsXG4gICAgYm9keS5pbmRleGVzLFxuICAgIGNvbmZpZy5kYXRhYmFzZVxuICApO1xuICByZXR1cm4geyByZXNwb25zZSB9O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlU2NoZW1hKHJlcSkge1xuICBjaGVja0lmRGVmaW5lZFNjaGVtYXNJc1VzZWQocmVxKTtcbiAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICB0aHJvdyBjcmVhdGVTYW5pdGl6ZWRFcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byBjcmVhdGUgYSBzY2hlbWEuXCIsXG4gICAgICByZXEuY29uZmlnXG4gICAgKTtcbiAgfVxuICBpZiAocmVxLnBhcmFtcy5jbGFzc05hbWUgJiYgcmVxLmJvZHk/LmNsYXNzTmFtZSkge1xuICAgIGlmIChyZXEucGFyYW1zLmNsYXNzTmFtZSAhPSByZXEuYm9keS5jbGFzc05hbWUpIHtcbiAgICAgIHJldHVybiBjbGFzc05hbWVNaXNtYXRjaFJlc3BvbnNlKHJlcS5ib2R5LmNsYXNzTmFtZSwgcmVxLnBhcmFtcy5jbGFzc05hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNsYXNzTmFtZSA9IHJlcS5wYXJhbXMuY2xhc3NOYW1lIHx8IHJlcS5ib2R5Py5jbGFzc05hbWU7XG4gIGlmICghY2xhc3NOYW1lKSB7XG4gICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKDEzNSwgYFBPU1QgJHtyZXEucGF0aH0gbmVlZHMgYSBjbGFzcyBuYW1lLmApO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGludGVybmFsQ3JlYXRlU2NoZW1hKGNsYXNzTmFtZSwgcmVxLmJvZHkgfHwge30sIHJlcS5jb25maWcpO1xufVxuXG5mdW5jdGlvbiBtb2RpZnlTY2hlbWEocmVxKSB7XG4gIGNoZWNrSWZEZWZpbmVkU2NoZW1hc0lzVXNlZChyZXEpO1xuICBpZiAocmVxLmF1dGguaXNSZWFkT25seSkge1xuICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFxuICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgIFwicmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIHVwZGF0ZSBhIHNjaGVtYS5cIixcbiAgICAgIHJlcS5jb25maWdcbiAgICApO1xuICB9XG4gIGlmIChyZXEuYm9keT8uY2xhc3NOYW1lICYmIHJlcS5ib2R5LmNsYXNzTmFtZSAhPSByZXEucGFyYW1zLmNsYXNzTmFtZSkge1xuICAgIHJldHVybiBjbGFzc05hbWVNaXNtYXRjaFJlc3BvbnNlKHJlcS5ib2R5LmNsYXNzTmFtZSwgcmVxLnBhcmFtcy5jbGFzc05hbWUpO1xuICB9XG4gIGNvbnN0IGNsYXNzTmFtZSA9IHJlcS5wYXJhbXMuY2xhc3NOYW1lO1xuXG4gIHJldHVybiBpbnRlcm5hbFVwZGF0ZVNjaGVtYShjbGFzc05hbWUsIHJlcS5ib2R5IHx8IHt9LCByZXEuY29uZmlnKTtcbn1cblxuY29uc3QgZGVsZXRlU2NoZW1hID0gcmVxID0+IHtcbiAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICB0aHJvdyBjcmVhdGVTYW5pdGl6ZWRFcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byBkZWxldGUgYSBzY2hlbWEuXCIsXG4gICAgICByZXEuY29uZmlnXG4gICAgKTtcbiAgfVxuICBpZiAoIVNjaGVtYUNvbnRyb2xsZXIuY2xhc3NOYW1lSXNWYWxpZChyZXEucGFyYW1zLmNsYXNzTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0NMQVNTX05BTUUsXG4gICAgICBTY2hlbWFDb250cm9sbGVyLmludmFsaWRDbGFzc05hbWVNZXNzYWdlKHJlcS5wYXJhbXMuY2xhc3NOYW1lKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJlcS5jb25maWcuZGF0YWJhc2UuZGVsZXRlU2NoZW1hKHJlcS5wYXJhbXMuY2xhc3NOYW1lKS50aGVuKCgpID0+ICh7IHJlc3BvbnNlOiB7fSB9KSk7XG59O1xuXG5leHBvcnQgY2xhc3MgU2NoZW1hc1JvdXRlciBleHRlbmRzIFByb21pc2VSb3V0ZXIge1xuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCAnL3NjaGVtYXMnLCBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLCBnZXRBbGxTY2hlbWFzKTtcbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ0dFVCcsXG4gICAgICAnL3NjaGVtYXMvOmNsYXNzTmFtZScsXG4gICAgICBtaWRkbGV3YXJlLnByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgZ2V0T25lU2NoZW1hXG4gICAgKTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9zY2hlbWFzJywgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcywgY3JlYXRlU2NoZW1hKTtcbiAgICB0aGlzLnJvdXRlKFxuICAgICAgJ1BPU1QnLFxuICAgICAgJy9zY2hlbWFzLzpjbGFzc05hbWUnLFxuICAgICAgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyxcbiAgICAgIGNyZWF0ZVNjaGVtYVxuICAgICk7XG4gICAgdGhpcy5yb3V0ZShcbiAgICAgICdQVVQnLFxuICAgICAgJy9zY2hlbWFzLzpjbGFzc05hbWUnLFxuICAgICAgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyxcbiAgICAgIG1vZGlmeVNjaGVtYVxuICAgICk7XG4gICAgdGhpcy5yb3V0ZShcbiAgICAgICdERUxFVEUnLFxuICAgICAgJy9zY2hlbWFzLzpjbGFzc05hbWUnLFxuICAgICAgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyxcbiAgICAgIGRlbGV0ZVNjaGVtYVxuICAgICk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBS0EsSUFBQUEsY0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQWdELFNBQUFFLHdCQUFBRSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBSix1QkFBQSxZQUFBQSxDQUFBRSxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFB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
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.SecurityRouter = void 0;
|
|
7
|
+
var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
|
|
8
|
+
var middleware = _interopRequireWildcard(require("../middlewares"));
|
|
9
|
+
var _CheckRunner = _interopRequireDefault(require("../Security/CheckRunner"));
|
|
10
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
class SecurityRouter extends _PromiseRouter.default {
|
|
13
|
+
mountRoutes() {
|
|
14
|
+
this.route('GET', '/security', middleware.promiseEnforceMasterKeyAccess, this._enforceSecurityCheckEnabled, async req => {
|
|
15
|
+
const report = await new _CheckRunner.default(req.config.security).run();
|
|
16
|
+
return {
|
|
17
|
+
status: 200,
|
|
18
|
+
response: report
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
async _enforceSecurityCheckEnabled(req) {
|
|
23
|
+
const config = req.config;
|
|
24
|
+
if (!config.security || !config.security.enableCheck) {
|
|
25
|
+
const error = new Error();
|
|
26
|
+
error.status = 409;
|
|
27
|
+
error.message = 'Enable Parse Server option `security.enableCheck` to run security check.';
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.SecurityRouter = SecurityRouter;
|
|
33
|
+
var _default = exports.default = SecurityRouter;
|
|
34
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUHJvbWlzZVJvdXRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwibWlkZGxld2FyZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX0NoZWNrUnVubmVyIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiU2VjdXJpdHlSb3V0ZXIiLCJQcm9taXNlUm91dGVyIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsInByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiX2VuZm9yY2VTZWN1cml0eUNoZWNrRW5hYmxlZCIsInJlcSIsInJlcG9ydCIsIkNoZWNrUnVubmVyIiwiY29uZmlnIiwic2VjdXJpdHkiLCJydW4iLCJzdGF0dXMiLCJyZXNwb25zZSIsImVuYWJsZUNoZWNrIiwiZXJyb3IiLCJFcnJvciIsIm1lc3NhZ2UiLCJleHBvcnRzIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9TZWN1cml0eVJvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUHJvbWlzZVJvdXRlciBmcm9tICcuLi9Qcm9taXNlUm91dGVyJztcbmltcG9ydCAqIGFzIG1pZGRsZXdhcmUgZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0IENoZWNrUnVubmVyIGZyb20gJy4uL1NlY3VyaXR5L0NoZWNrUnVubmVyJztcblxuZXhwb3J0IGNsYXNzIFNlY3VyaXR5Um91dGVyIGV4dGVuZHMgUHJvbWlzZVJvdXRlciB7XG4gIG1vdW50Um91dGVzKCkge1xuICAgIHRoaXMucm91dGUoXG4gICAgICAnR0VUJyxcbiAgICAgICcvc2VjdXJpdHknLFxuICAgICAgbWlkZGxld2FyZS5wcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyxcbiAgICAgIHRoaXMuX2VuZm9yY2VTZWN1cml0eUNoZWNrRW5hYmxlZCxcbiAgICAgIGFzeW5jIHJlcSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcG9ydCA9IGF3YWl0IG5ldyBDaGVja1J1bm5lcihyZXEuY29uZmlnLnNlY3VyaXR5KS5ydW4oKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICByZXNwb25zZTogcmVwb3J0LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBhc3luYyBfZW5mb3JjZVNlY3VyaXR5Q2hlY2tFbmFibGVkKHJlcSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgaWYgKCFjb25maWcuc2VjdXJpdHkgfHwgIWNvbmZpZy5zZWN1cml0eS5lbmFibGVDaGVjaykge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICAgIGVycm9yLnN0YXR1cyA9IDQwOTtcbiAgICAgIGVycm9yLm1lc3NhZ2UgPSAnRW5hYmxlIFBhcnNlIFNlcnZlciBvcHRpb24gYHNlY3VyaXR5LmVuYWJsZUNoZWNrYCB0byBydW4gc2VjdXJpdHkgY2hlY2suJztcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTZWN1cml0eVJvdXRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsY0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQWtELFNBQUFFLHdCQUFBRSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBSix1QkFBQSxZQUFBQSxDQUFBRSxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQUMsT0FBQSxFQUFBVixDQUFBLGlCQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFNBQUFRLENBQUEsTUFBQUYsQ0FBQSxHQUFBTCxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxRQUFBRyxDQUFBLENBQUFLLEdBQUEsQ0FBQVgsQ0FBQSxVQUFBTSxDQUFBLENBQUFNLEdBQUEsQ0FBQVosQ0FBQSxHQUFBTSxDQUFBLENBQUFPLEdBQUEsQ0FBQWIsQ0FBQSxFQUFBUSxDQUFBLGdCQUFBUCxDQUFBLElBQUFELENBQUEsZ0JBQUFDLENBQUEsT0FBQWEsY0FBQSxDQUFBQyxJQUFBLENBQUFmLENBQUEsRUFBQUMsQ0FBQSxPQUFBTSxDQUFBLElBQUFELENBQUEsR0FBQVUsTUFBQSxDQUFBQyxjQUFBLEtBQUFELE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWxCLENBQUEsRUFBQUMsQ0FBQSxPQUFBTSxDQUFBLENBQUFLLEdBQUEsSUFBQUwsQ0FBQSxDQUFBTSxHQUFBLElBQUFQLENBQUEsQ0FBQUUsQ0FBQSxFQUFBUCxDQUFBLEVBQUFNLENBQUEsSUFBQUMsQ0FBQSxDQUFBUCxDQUFBLElBQUFELENBQUEsQ0FBQUMsQ0FBQSxXQUFBTyxDQUFBLEtBQUFSLENBQUEsRUFBQUMsQ0FBQTtBQUFBLFNBQUFOLHVCQUFBSyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLEdBQUFMLENBQUEsS0FBQVUsT0FBQSxFQUFBVixDQUFBO0FBRTNDLE1BQU1tQixjQUFjLFNBQVNDLHNCQUFhLENBQUM7RUFDaERDLFdBQVdBLENBQUEsRUFBRztJQUNaLElBQUksQ0FBQ0MsS0FBSyxDQUNSLEtBQUssRUFDTCxXQUFXLEVBQ1h6QixVQUFVLENBQUMwQiw2QkFBNkIsRUFDeEMsSUFBSSxDQUFDQyw0QkFBNEIsRUFDakMsTUFBTUMsR0FBRyxJQUFJO01BQ1gsTUFBTUMsTUFBTSxHQUFHLE1BQU0sSUFBSUMsb0JBQVcsQ0FBQ0YsR0FBRyxDQUFDRyxNQUFNLENBQUNDLFFBQVEsQ0FBQyxDQUFDQyxHQUFHLENBQUMsQ0FBQztNQUMvRCxPQUFPO1FBQ0xDLE1BQU0sRUFBRSxHQUFHO1FBQ1hDLFFBQVEsRUFBRU47TUFDWixDQUFDO0lBQ0gsQ0FDRixDQUFDO0VBQ0g7RUFFQSxNQUFNRiw0QkFBNEJBLENBQUNDLEdBQUcsRUFBRTtJQUN0QyxNQUFNRyxNQUFNLEdBQUdILEdBQUcsQ0FBQ0csTUFBTTtJQUN6QixJQUFJLENBQUNBLE1BQU0sQ0FBQ0MsUUFBUSxJQUFJLENBQUNELE1BQU0sQ0FBQ0MsUUFBUSxDQUFDSSxXQUFXLEVBQUU7TUFDcEQsTUFBTUMsS0FBSyxHQUFHLElBQUlDLEtBQUssQ0FBQyxDQUFDO01BQ3pCRCxLQUFLLENBQUNILE1BQU0sR0FBRyxHQUFHO01BQ2xCRyxLQUFLLENBQUNFLE9BQU8sR0FBRywwRUFBMEU7TUFDMUYsTUFBTUYsS0FBSztJQUNiO0VBQ0Y7QUFDRjtBQUFDRyxPQUFBLENBQUFsQixjQUFBLEdBQUFBLGNBQUE7QUFBQSxJQUFBbUIsUUFBQSxHQUFBRCxPQUFBLENBQUEzQixPQUFBLEdBRWNTLGNBQWMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.SessionsRouter = void 0;
|
|
7
|
+
var _ClassesRouter = _interopRequireDefault(require("./ClassesRouter"));
|
|
8
|
+
var _node = _interopRequireDefault(require("parse/node"));
|
|
9
|
+
var _rest = _interopRequireDefault(require("../rest"));
|
|
10
|
+
var _Auth = _interopRequireDefault(require("../Auth"));
|
|
11
|
+
var _RestWrite = _interopRequireDefault(require("../RestWrite"));
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
class SessionsRouter extends _ClassesRouter.default {
|
|
14
|
+
className() {
|
|
15
|
+
return '_Session';
|
|
16
|
+
}
|
|
17
|
+
async handleMe(req) {
|
|
18
|
+
if (!req.info || !req.info.sessionToken) {
|
|
19
|
+
throw new _node.default.Error(_node.default.Error.INVALID_SESSION_TOKEN, 'Session token required.');
|
|
20
|
+
}
|
|
21
|
+
const sessionToken = req.info.sessionToken;
|
|
22
|
+
// Query with master key to validate the session token and get the session objectId
|
|
23
|
+
const sessionResponse = await _rest.default.find(req.config, _Auth.default.master(req.config), '_Session', {
|
|
24
|
+
sessionToken
|
|
25
|
+
}, {}, req.info.clientSDK, req.info.context);
|
|
26
|
+
if (!sessionResponse.results || sessionResponse.results.length == 0 || !sessionResponse.results[0].user) {
|
|
27
|
+
throw new _node.default.Error(_node.default.Error.INVALID_SESSION_TOKEN, 'Session token not found.');
|
|
28
|
+
}
|
|
29
|
+
const sessionObjectId = sessionResponse.results[0].objectId;
|
|
30
|
+
const userId = sessionResponse.results[0].user.objectId;
|
|
31
|
+
// Re-fetch the session with the caller's auth context so that
|
|
32
|
+
// protectedFields and CLP apply correctly; if the caller used master key,
|
|
33
|
+
// protectedFields are bypassed, matching the behavior of GET /sessions/:id
|
|
34
|
+
const refetchAuth = req.auth?.isMaster || req.auth?.isMaintenance ? req.auth : new _Auth.default.Auth({
|
|
35
|
+
config: req.config,
|
|
36
|
+
isMaster: false,
|
|
37
|
+
user: _node.default.Object.fromJSON({
|
|
38
|
+
className: '_User',
|
|
39
|
+
objectId: userId
|
|
40
|
+
}),
|
|
41
|
+
installationId: req.info.installationId
|
|
42
|
+
});
|
|
43
|
+
const response = await _rest.default.get(req.config, refetchAuth, '_Session', sessionObjectId, {}, req.info.clientSDK, req.info.context);
|
|
44
|
+
if (!response.results || response.results.length == 0) {
|
|
45
|
+
throw new _node.default.Error(_node.default.Error.INVALID_SESSION_TOKEN, 'Session token not found.');
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
response: response.results[0]
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
async handleUpdateToRevocableSession(req) {
|
|
52
|
+
const config = req.config;
|
|
53
|
+
const user = req.auth.user;
|
|
54
|
+
// Issue #2720
|
|
55
|
+
// Calling without a session token would result in a not found user
|
|
56
|
+
if (!user) {
|
|
57
|
+
throw new _node.default.Error(_node.default.Error.OBJECT_NOT_FOUND, 'invalid session');
|
|
58
|
+
}
|
|
59
|
+
const {
|
|
60
|
+
sessionData,
|
|
61
|
+
createSession
|
|
62
|
+
} = _RestWrite.default.createSession(config, {
|
|
63
|
+
userId: user.id,
|
|
64
|
+
createdWith: {
|
|
65
|
+
action: 'upgrade'
|
|
66
|
+
},
|
|
67
|
+
installationId: req.auth.installationId
|
|
68
|
+
});
|
|
69
|
+
await createSession();
|
|
70
|
+
// delete the session token, use the db to skip beforeSave
|
|
71
|
+
await config.database.update('_User', {
|
|
72
|
+
objectId: user.id
|
|
73
|
+
}, {
|
|
74
|
+
sessionToken: {
|
|
75
|
+
__op: 'Delete'
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
// Re-fetch the session with the caller's auth context so that
|
|
79
|
+
// protectedFields filtering applies correctly; if the caller used master key,
|
|
80
|
+
// protectedFields are bypassed, matching the behavior of GET /sessions/:id
|
|
81
|
+
const refetchAuth = req.auth.isMaster || req.auth.isMaintenance ? req.auth : new _Auth.default.Auth({
|
|
82
|
+
config,
|
|
83
|
+
isMaster: false,
|
|
84
|
+
user: _node.default.Object.fromJSON({
|
|
85
|
+
className: '_User',
|
|
86
|
+
objectId: user.id
|
|
87
|
+
}),
|
|
88
|
+
installationId: req.auth.installationId
|
|
89
|
+
});
|
|
90
|
+
const response = await _rest.default.find(config, refetchAuth, '_Session', {
|
|
91
|
+
sessionToken: sessionData.sessionToken
|
|
92
|
+
}, {}, req.info.clientSDK, req.info.context);
|
|
93
|
+
if (!response.results || response.results.length === 0) {
|
|
94
|
+
throw new _node.default.Error(_node.default.Error.INTERNAL_SERVER_ERROR, 'Failed to load upgraded session.');
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
response: response.results[0]
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
mountRoutes() {
|
|
101
|
+
this.route('GET', '/sessions/me', req => {
|
|
102
|
+
return this.handleMe(req);
|
|
103
|
+
});
|
|
104
|
+
this.route('GET', '/sessions', req => {
|
|
105
|
+
return this.handleFind(req);
|
|
106
|
+
});
|
|
107
|
+
this.route('GET', '/sessions/:objectId', req => {
|
|
108
|
+
return this.handleGet(req);
|
|
109
|
+
});
|
|
110
|
+
this.route('POST', '/sessions', req => {
|
|
111
|
+
return this.handleCreate(req);
|
|
112
|
+
});
|
|
113
|
+
this.route('PUT', '/sessions/:objectId', req => {
|
|
114
|
+
return this.handleUpdate(req);
|
|
115
|
+
});
|
|
116
|
+
this.route('DELETE', '/sessions/:objectId', req => {
|
|
117
|
+
return this.handleDelete(req);
|
|
118
|
+
});
|
|
119
|
+
this.route('POST', '/upgradeToRevocableSession', req => {
|
|
120
|
+
return this.handleUpdateToRevocableSession(req);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
exports.SessionsRouter = SessionsRouter;
|
|
125
|
+
var _default = exports.default = SessionsRouter;
|
|
126
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQ2xhc3Nlc1JvdXRlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX25vZGUiLCJfcmVzdCIsIl9BdXRoIiwiX1Jlc3RXcml0ZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlNlc3Npb25zUm91dGVyIiwiQ2xhc3Nlc1JvdXRlciIsImNsYXNzTmFtZSIsImhhbmRsZU1lIiwicmVxIiwiaW5mbyIsInNlc3Npb25Ub2tlbiIsIlBhcnNlIiwiRXJyb3IiLCJJTlZBTElEX1NFU1NJT05fVE9LRU4iLCJzZXNzaW9uUmVzcG9uc2UiLCJyZXN0IiwiZmluZCIsImNvbmZpZyIsIkF1dGgiLCJtYXN0ZXIiLCJjbGllbnRTREsiLCJjb250ZXh0IiwicmVzdWx0cyIsImxlbmd0aCIsInVzZXIiLCJzZXNzaW9uT2JqZWN0SWQiLCJvYmplY3RJZCIsInVzZXJJZCIsInJlZmV0Y2hBdXRoIiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsIk9iamVjdCIsImZyb21KU09OIiwiaW5zdGFsbGF0aW9uSWQiLCJyZXNwb25zZSIsImdldCIsImhhbmRsZVVwZGF0ZVRvUmV2b2NhYmxlU2Vzc2lvbiIsIk9CSkVDVF9OT1RfRk9VTkQiLCJzZXNzaW9uRGF0YSIsImNyZWF0ZVNlc3Npb24iLCJSZXN0V3JpdGUiLCJpZCIsImNyZWF0ZWRXaXRoIiwiYWN0aW9uIiwiZGF0YWJhc2UiLCJ1cGRhdGUiLCJfX29wIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwibW91bnRSb3V0ZXMiLCJyb3V0ZSIsImhhbmRsZUZpbmQiLCJoYW5kbGVHZXQiLCJoYW5kbGVDcmVhdGUiLCJoYW5kbGVVcGRhdGUiLCJoYW5kbGVEZWxldGUiLCJleHBvcnRzIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9TZXNzaW9uc1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ2xhc3Nlc1JvdXRlciBmcm9tICcuL0NsYXNzZXNSb3V0ZXInO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IHJlc3QgZnJvbSAnLi4vcmVzdCc7XG5pbXBvcnQgQXV0aCBmcm9tICcuLi9BdXRoJztcbmltcG9ydCBSZXN0V3JpdGUgZnJvbSAnLi4vUmVzdFdyaXRlJztcblxuZXhwb3J0IGNsYXNzIFNlc3Npb25zUm91dGVyIGV4dGVuZHMgQ2xhc3Nlc1JvdXRlciB7XG4gIGNsYXNzTmFtZSgpIHtcbiAgICByZXR1cm4gJ19TZXNzaW9uJztcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZU1lKHJlcSkge1xuICAgIGlmICghcmVxLmluZm8gfHwgIXJlcS5pbmZvLnNlc3Npb25Ub2tlbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTiwgJ1Nlc3Npb24gdG9rZW4gcmVxdWlyZWQuJyk7XG4gICAgfVxuICAgIGNvbnN0IHNlc3Npb25Ub2tlbiA9IHJlcS5pbmZvLnNlc3Npb25Ub2tlbjtcbiAgICAvLyBRdWVyeSB3aXRoIG1hc3RlciBrZXkgdG8gdmFsaWRhdGUgdGhlIHNlc3Npb24gdG9rZW4gYW5kIGdldCB0aGUgc2Vzc2lvbiBvYmplY3RJZFxuICAgIGNvbnN0IHNlc3Npb25SZXNwb25zZSA9IGF3YWl0IHJlc3QuZmluZChcbiAgICAgIHJlcS5jb25maWcsXG4gICAgICBBdXRoLm1hc3RlcihyZXEuY29uZmlnKSxcbiAgICAgICdfU2Vzc2lvbicsXG4gICAgICB7IHNlc3Npb25Ub2tlbiB9LFxuICAgICAge30sXG4gICAgICByZXEuaW5mby5jbGllbnRTREssXG4gICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgKTtcbiAgICBpZiAoXG4gICAgICAhc2Vzc2lvblJlc3BvbnNlLnJlc3VsdHMgfHxcbiAgICAgIHNlc3Npb25SZXNwb25zZS5yZXN1bHRzLmxlbmd0aCA9PSAwIHx8XG4gICAgICAhc2Vzc2lvblJlc3BvbnNlLnJlc3VsdHNbMF0udXNlclxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTiwgJ1Nlc3Npb24gdG9rZW4gbm90IGZvdW5kLicpO1xuICAgIH1cbiAgICBjb25zdCBzZXNzaW9uT2JqZWN0SWQgPSBzZXNzaW9uUmVzcG9uc2UucmVzdWx0c1swXS5vYmplY3RJZDtcbiAgICBjb25zdCB1c2VySWQgPSBzZXNzaW9uUmVzcG9uc2UucmVzdWx0c1swXS51c2VyLm9iamVjdElkO1xuICAgIC8vIFJlLWZldGNoIHRoZSBzZXNzaW9uIHdpdGggdGhlIGNhbGxlcidzIGF1dGggY29udGV4dCBzbyB0aGF0XG4gICAgLy8gcHJvdGVjdGVkRmllbGRzIGFuZCBDTFAgYXBwbHkgY29ycmVjdGx5OyBpZiB0aGUgY2FsbGVyIHVzZWQgbWFzdGVyIGtleSxcbiAgICAvLyBwcm90ZWN0ZWRGaWVsZHMgYXJlIGJ5cGFzc2VkLCBtYXRjaGluZyB0aGUgYmVoYXZpb3Igb2YgR0VUIC9zZXNzaW9ucy86aWRcbiAgICBjb25zdCByZWZldGNoQXV0aCA9XG4gICAgICByZXEuYXV0aD8uaXNNYXN0ZXIgfHwgcmVxLmF1dGg/LmlzTWFpbnRlbmFuY2VcbiAgICAgICAgPyByZXEuYXV0aFxuICAgICAgICA6IG5ldyBBdXRoLkF1dGgoe1xuICAgICAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgICAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgICAgICAgdXNlcjogUGFyc2UuT2JqZWN0LmZyb21KU09OKHsgY2xhc3NOYW1lOiAnX1VzZXInLCBvYmplY3RJZDogdXNlcklkIH0pLFxuICAgICAgICAgIGluc3RhbGxhdGlvbklkOiByZXEuaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgfSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXN0LmdldChcbiAgICAgIHJlcS5jb25maWcsXG4gICAgICByZWZldGNoQXV0aCxcbiAgICAgICdfU2Vzc2lvbicsXG4gICAgICBzZXNzaW9uT2JqZWN0SWQsXG4gICAgICB7fSxcbiAgICAgIHJlcS5pbmZvLmNsaWVudFNESyxcbiAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICApO1xuICAgIGlmICghcmVzcG9uc2UucmVzdWx0cyB8fCByZXNwb25zZS5yZXN1bHRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9TRVNTSU9OX1RPS0VOLCAnU2Vzc2lvbiB0b2tlbiBub3QgZm91bmQuJyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByZXNwb25zZTogcmVzcG9uc2UucmVzdWx0c1swXSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlVXBkYXRlVG9SZXZvY2FibGVTZXNzaW9uKHJlcSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgdXNlciA9IHJlcS5hdXRoLnVzZXI7XG4gICAgLy8gSXNzdWUgIzI3MjBcbiAgICAvLyBDYWxsaW5nIHdpdGhvdXQgYSBzZXNzaW9uIHRva2VuIHdvdWxkIHJlc3VsdCBpbiBhIG5vdCBmb3VuZCB1c2VyXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ2ludmFsaWQgc2Vzc2lvbicpO1xuICAgIH1cbiAgICBjb25zdCB7IHNlc3Npb25EYXRhLCBjcmVhdGVTZXNzaW9uIH0gPSBSZXN0V3JpdGUuY3JlYXRlU2Vzc2lvbihjb25maWcsIHtcbiAgICAgIHVzZXJJZDogdXNlci5pZCxcbiAgICAgIGNyZWF0ZWRXaXRoOiB7XG4gICAgICAgIGFjdGlvbjogJ3VwZ3JhZGUnLFxuICAgICAgfSxcbiAgICAgIGluc3RhbGxhdGlvbklkOiByZXEuYXV0aC5pbnN0YWxsYXRpb25JZCxcbiAgICB9KTtcblxuICAgIGF3YWl0IGNyZWF0ZVNlc3Npb24oKTtcbiAgICAvLyBkZWxldGUgdGhlIHNlc3Npb24gdG9rZW4sIHVzZSB0aGUgZGIgdG8gc2tpcCBiZWZvcmVTYXZlXG4gICAgYXdhaXQgY29uZmlnLmRhdGFiYXNlLnVwZGF0ZShcbiAgICAgICdfVXNlcicsXG4gICAgICB7IG9iamVjdElkOiB1c2VyLmlkIH0sXG4gICAgICB7IHNlc3Npb25Ub2tlbjogeyBfX29wOiAnRGVsZXRlJyB9IH1cbiAgICApO1xuICAgIC8vIFJlLWZldGNoIHRoZSBzZXNzaW9uIHdpdGggdGhlIGNhbGxlcidzIGF1dGggY29udGV4dCBzbyB0aGF0XG4gICAgLy8gcHJvdGVjdGVkRmllbGRzIGZpbHRlcmluZyBhcHBsaWVzIGNvcnJlY3RseTsgaWYgdGhlIGNhbGxlciB1c2VkIG1hc3RlciBrZXksXG4gICAgLy8gcHJvdGVjdGVkRmllbGRzIGFyZSBieXBhc3NlZCwgbWF0Y2hpbmcgdGhlIGJlaGF2aW9yIG9mIEdFVCAvc2Vzc2lvbnMvOmlkXG4gICAgY29uc3QgcmVmZXRjaEF1dGggPVxuICAgICAgcmVxLmF1dGguaXNNYXN0ZXIgfHwgcmVxLmF1dGguaXNNYWludGVuYW5jZVxuICAgICAgICA/IHJlcS5hdXRoXG4gICAgICAgIDogbmV3IEF1dGguQXV0aCh7XG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICAgICAgICB1c2VyOiBQYXJzZS5PYmplY3QuZnJvbUpTT04oeyBjbGFzc05hbWU6ICdfVXNlcicsIG9iamVjdElkOiB1c2VyLmlkIH0pLFxuICAgICAgICAgIGluc3RhbGxhdGlvbklkOiByZXEuYXV0aC5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgfSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXN0LmZpbmQoXG4gICAgICBjb25maWcsXG4gICAgICByZWZldGNoQXV0aCxcbiAgICAgICdfU2Vzc2lvbicsXG4gICAgICB7IHNlc3Npb25Ub2tlbjogc2Vzc2lvbkRhdGEuc2Vzc2lvblRva2VuIH0sXG4gICAgICB7fSxcbiAgICAgIHJlcS5pbmZvLmNsaWVudFNESyxcbiAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICApO1xuICAgIGlmICghcmVzcG9uc2UucmVzdWx0cyB8fCByZXNwb25zZS5yZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgJ0ZhaWxlZCB0byBsb2FkIHVwZ3JhZGVkIHNlc3Npb24uJyk7XG4gICAgfVxuICAgIHJldHVybiB7IHJlc3BvbnNlOiByZXNwb25zZS5yZXN1bHRzWzBdIH07XG4gIH1cblxuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCAnL3Nlc3Npb25zL21lJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZU1lKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy9zZXNzaW9ucycsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVGaW5kKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy9zZXNzaW9ucy86b2JqZWN0SWQnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlR2V0KHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvc2Vzc2lvbnMnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlQ3JlYXRlKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUFVUJywgJy9zZXNzaW9ucy86b2JqZWN0SWQnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVXBkYXRlKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnREVMRVRFJywgJy9zZXNzaW9ucy86b2JqZWN0SWQnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRGVsZXRlKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvdXBncmFkZVRvUmV2b2NhYmxlU2Vzc2lvbicsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVVcGRhdGVUb1Jldm9jYWJsZVNlc3Npb24ocmVxKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTZXNzaW9uc1JvdXRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsY0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsS0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQXFDLFNBQUFELHVCQUFBTSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRTlCLE1BQU1HLGNBQWMsU0FBU0Msc0JBQWEsQ0FBQztFQUNoREMsU0FBU0EsQ0FBQSxFQUFHO0lBQ1YsT0FBTyxVQUFVO0VBQ25CO0VBRUEsTUFBTUMsUUFBUUEsQ0FBQ0MsR0FBRyxFQUFFO0lBQ2xCLElBQUksQ0FBQ0EsR0FBRyxDQUFDQyxJQUFJLElBQUksQ0FBQ0QsR0FBRyxDQUFDQyxJQUFJLENBQUNDLFlBQVksRUFBRTtNQUN2QyxNQUFNLElBQUlDLGFBQUssQ0FBQ0MsS0FBSyxDQUFDRCxhQUFLLENBQUNDLEtBQUssQ0FBQ0MscUJBQXFCLEVBQUUseUJBQXlCLENBQUM7SUFDckY7SUFDQSxNQUFNSCxZQUFZLEdBQUdGLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDQyxZQUFZO0lBQzFDO0lBQ0EsTUFBTUksZUFBZSxHQUFHLE1BQU1DLGFBQUksQ0FBQ0MsSUFBSSxDQUNyQ1IsR0FBRyxDQUFDUyxNQUFNLEVBQ1ZDLGFBQUksQ0FBQ0MsTUFBTSxDQUFDWCxHQUFHLENBQUNTLE1BQU0sQ0FBQyxFQUN2QixVQUFVLEVBQ1Y7TUFBRVA7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
|