123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = exports.ClassesRouter = void 0;
- var _PromiseRouter = _interopRequireDefault(require("../PromiseRouter"));
- var _rest = _interopRequireDefault(require("../rest"));
- var _lodash = _interopRequireDefault(require("lodash"));
- var _node = _interopRequireDefault(require("parse/node"));
- var _middlewares = require("../middlewares");
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
- const ALLOWED_GET_QUERY_KEYS = ['keys', 'include', 'excludeKeys', 'readPreference', 'includeReadPreference', 'subqueryReadPreference'];
- class ClassesRouter extends _PromiseRouter.default {
- className(req) {
- return req.params.className;
- }
- handleFind(req) {
- const body = Object.assign(req.body, ClassesRouter.JSONFromQuery(req.query));
- const options = ClassesRouter.optionsFromBody(body, req.config.defaultLimit);
- if (req.config.maxLimit && body.limit > req.config.maxLimit) {
-
- options.limit = Number(req.config.maxLimit);
- }
- if (body.redirectClassNameForKey) {
- options.redirectClassNameForKey = String(body.redirectClassNameForKey);
- }
- if (typeof body.where === 'string') {
- body.where = JSON.parse(body.where);
- }
- return _rest.default.find(req.config, req.auth, this.className(req), body.where, options, req.info.clientSDK, req.info.context).then(response => {
- return {
- response: response
- };
- });
- }
-
- handleGet(req) {
- const body = Object.assign(req.body, ClassesRouter.JSONFromQuery(req.query));
- const options = {};
- for (const key of Object.keys(body)) {
- if (ALLOWED_GET_QUERY_KEYS.indexOf(key) === -1) {
- throw new _node.default.Error(_node.default.Error.INVALID_QUERY, 'Improper encode of parameter');
- }
- }
- if (body.keys != null) {
- options.keys = String(body.keys);
- }
- if (body.include != null) {
- options.include = String(body.include);
- }
- if (body.excludeKeys != null) {
- options.excludeKeys = String(body.excludeKeys);
- }
- if (typeof body.readPreference === 'string') {
- options.readPreference = body.readPreference;
- }
- if (typeof body.includeReadPreference === 'string') {
- options.includeReadPreference = body.includeReadPreference;
- }
- if (typeof body.subqueryReadPreference === 'string') {
- options.subqueryReadPreference = body.subqueryReadPreference;
- }
- return _rest.default.get(req.config, req.auth, this.className(req), req.params.objectId, options, req.info.clientSDK, req.info.context).then(response => {
- if (!response.results || response.results.length == 0) {
- throw new _node.default.Error(_node.default.Error.OBJECT_NOT_FOUND, 'Object not found.');
- }
- if (this.className(req) === '_User') {
- delete response.results[0].sessionToken;
- const user = response.results[0];
- if (req.auth.user && user.objectId == req.auth.user.id) {
-
- response.results[0].sessionToken = req.info.sessionToken;
- }
- }
- return {
- response: response.results[0]
- };
- });
- }
- handleCreate(req) {
- var _req$body;
- if (this.className(req) === '_User' && typeof ((_req$body = req.body) === null || _req$body === void 0 ? void 0 : _req$body.objectId) === 'string' && req.body.objectId.startsWith('role:')) {
- throw new _node.default.Error(_node.default.Error.OPERATION_FORBIDDEN, 'Invalid object ID.');
- }
- return _rest.default.create(req.config, req.auth, this.className(req), req.body, req.info.clientSDK, req.info.context);
- }
- handleUpdate(req) {
- const where = {
- objectId: req.params.objectId
- };
- return _rest.default.update(req.config, req.auth, this.className(req), where, req.body, req.info.clientSDK, req.info.context);
- }
- handleDelete(req) {
- return _rest.default.del(req.config, req.auth, this.className(req), req.params.objectId, req.info.context).then(() => {
- return {
- response: {}
- };
- });
- }
- static JSONFromQuery(query) {
- const json = {};
- for (const [key, value] of _lodash.default.entries(query)) {
- try {
- json[key] = JSON.parse(value);
- } catch (e) {
- json[key] = value;
- }
- }
- return json;
- }
- static optionsFromBody(body, defaultLimit) {
- const allowConstraints = ['skip', 'limit', 'order', 'count', 'keys', 'excludeKeys', 'include', 'includeAll', 'redirectClassNameForKey', 'where', 'readPreference', 'includeReadPreference', 'subqueryReadPreference', 'hint', 'explain', 'comment'];
- for (const key of Object.keys(body)) {
- if (allowConstraints.indexOf(key) === -1) {
- throw new _node.default.Error(_node.default.Error.INVALID_QUERY, `Invalid parameter for query: ${key}`);
- }
- }
- const options = {};
- if (body.skip) {
- options.skip = Number(body.skip);
- }
- if (body.limit || body.limit === 0) {
- options.limit = Number(body.limit);
- } else {
- options.limit = Number(defaultLimit);
- }
- if (body.order) {
- options.order = String(body.order);
- }
- if (body.count) {
- options.count = true;
- }
- if (body.keys != null) {
- options.keys = String(body.keys);
- }
- if (body.excludeKeys != null) {
- options.excludeKeys = String(body.excludeKeys);
- }
- if (body.include != null) {
- options.include = String(body.include);
- }
- if (body.includeAll) {
- options.includeAll = true;
- }
- if (typeof body.readPreference === 'string') {
- options.readPreference = body.readPreference;
- }
- if (typeof body.includeReadPreference === 'string') {
- options.includeReadPreference = body.includeReadPreference;
- }
- if (typeof body.subqueryReadPreference === 'string') {
- options.subqueryReadPreference = body.subqueryReadPreference;
- }
- if (body.hint && (typeof body.hint === 'string' || typeof body.hint === 'object')) {
- options.hint = body.hint;
- }
- if (body.explain) {
- options.explain = body.explain;
- }
- if (body.comment && typeof body.comment === 'string') {
- options.comment = body.comment;
- }
- return options;
- }
- mountRoutes() {
- this.route('GET', '/classes/:className', req => {
- return this.handleFind(req);
- });
- this.route('GET', '/classes/:className/:objectId', req => {
- return this.handleGet(req);
- });
- this.route('POST', '/classes/:className', _middlewares.promiseEnsureIdempotency, req => {
- return this.handleCreate(req);
- });
- this.route('PUT', '/classes/:className/:objectId', _middlewares.promiseEnsureIdempotency, req => {
- return this.handleUpdate(req);
- });
- this.route('DELETE', '/classes/:className/:objectId', req => {
- return this.handleDelete(req);
- });
- }
- }
- exports.ClassesRouter = ClassesRouter;
- var _default = exports.default = ClassesRouter;
|