UNPKG

backendless-console-sdk

Version:

Backendless Console SDK for Node.js and browser

147 lines (142 loc) 8.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.buildPutUrl = exports.buildGetUrl = exports.buildDeleteUrl = void 0; var _urls = _interopRequireDefault(require("./urls")); var qs = _interopRequireWildcard(require("backendless-request/lib/qs")); var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty")); var _security = require("./constants/security"); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(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 (var _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); } /** * This class is created to resolve a huge amount of inconsistency between various security REST endpoints * Someday, all these inconsistency, hopefully will be resolved on server and we will be able to delete * this class or some part of it */ var baseUrl = function baseUrl(appId) { return _urls["default"].security(appId); }; /** * Returns calculated GET url in form of 'security/:stickingPoint?:queryParams' * * The stickingPoint value is calculated by the folliwing rules * * default => :service/:serviceItemId/:policy * service=files, policy=users => :service/:policy/:serviceItemId (BKNDLSS-13008) * service=files, policy=roles => :policy/:service/:serviceItemId (BKNDLSS-13008) * policy=owner => :service/ownerpolicy/:serviceItemId * policy=columns => :service/:serviceItemId/:policy/permissions * objectId != ALL_OBJECTS => :service/:serviceItemName/objectAcl/:objectId/:policy * * @returns {string} */ var buildGetUrl = exports.buildGetUrl = function buildGetUrl(appId, policy, service, serviceItemId, serviceItemName, objectId, filterParams) { var isFilesService = service === _security.PermissionServices.FILES; var isRolesPolicy = policy === _security.PermissionPolicies.ROLES; var isOwnerPolicy = policy === _security.PermissionPolicies.OWNER; var isColumnsPolicy = policy === _security.PermissionPolicies.COLUMNS; var isObjectACL = objectId !== _security.ALL_OBJECTS; var stickingPoint = "".concat(service, "/").concat(serviceItemId, "/").concat(policy); if (filterParams.identity != null) { filterParams.name = filterParams.identity; } if (isOwnerPolicy) { stickingPoint = "".concat(service, "/ownerpolicy/").concat(serviceItemId); } else if (isFilesService && isRolesPolicy) { stickingPoint = "roles/".concat(service, "/").concat(encodeURIComponent(serviceItemId)); } else if (isFilesService) { if (filterParams.name) { stickingPoint = "users/search/".concat(encodeURI(filterParams.name), "/").concat(service, "/").concat(encodeURIComponent(serviceItemId)); } else { stickingPoint = "".concat(service, "/users/").concat(encodeURIComponent(serviceItemId)); } } else if (isColumnsPolicy) { stickingPoint = "".concat(service, "/").concat(serviceItemId, "/").concat(policy, "/permissions"); } else if (isObjectACL) { stickingPoint = "".concat(service, "/").concat(serviceItemName, "/objectAcl/").concat(objectId, "/").concat(policy); } return "".concat(baseUrl(appId), "/").concat(stickingPoint).concat((0, _isEmpty2["default"])(filterParams) ? '' : "?".concat(qs.stringify(filterParams))); }; /** * Returns calculated PUT url according to rules : * * default : 'security/:service/:serviceItemId/:policy/:policyItemId' * policy=owner : 'security/:service/ownerpolicy/{serviceItemId} * service=file & policy=users : 'security/:policy/:policyItemId/file/:serviceItemId' * service=file & policy=roles : 'security/:policy/:policyItemId/files/:serviceItemId' * objectId!=all : 'security/:service/:serviceItemName/objectAcl/:objectID/users/:policyItemId' * service=api & operation=all : 'security/:service/:serviceItemId/:policy/:policyItemId/:access' * * @returns {string} */ var buildPutUrl = exports.buildPutUrl = function buildPutUrl(appId, policy, service, serviceItemId, serviceItemName, objectId, policyItemId, permission) { var OWNER = _security.PermissionPolicies.OWNER, USERS = _security.PermissionPolicies.USERS, ROLES = _security.PermissionPolicies.ROLES, COLUMNS = _security.PermissionPolicies.COLUMNS; var isOwnerPolicy = policy === OWNER; var isUserPolicy = policy === USERS; var isRolesPolicy = policy === ROLES; var isColumnsPolicy = policy === COLUMNS; var isFilesService = service === _security.PermissionServices.FILES; var isApiService = service === _security.PermissionServices.API_SERVICES; var isObjectACL = objectId !== _security.ALL_OBJECTS; var stickingPoint = "".concat(service, "/").concat(serviceItemId, "/").concat(policy, "/").concat(policyItemId); if (isOwnerPolicy) { stickingPoint = "".concat(service, "/ownerpolicy/").concat(serviceItemId); } else if (isObjectACL) { stickingPoint = "".concat(service, "/").concat(serviceItemName, "/objectAcl/").concat(objectId, "/").concat(policy, "/").concat(policyItemId); } else if (isFilesService) { if (isUserPolicy) { stickingPoint = "".concat(policy, "/").concat(policyItemId, "/file/").concat(serviceItemId); } else if (isRolesPolicy) { stickingPoint = "".concat(policy, "/").concat(policyItemId, "/files/").concat(serviceItemId); } } else if (isApiService && permission.operation === 'all') { stickingPoint += '/access/' + permission.access; } else if (isColumnsPolicy) { stickingPoint = "".concat(service, "/").concat(serviceItemId, "/").concat(policy, "/permissions/").concat(permission.operation, "/").concat(policyItemId); } return "".concat(baseUrl(appId), "/").concat(stickingPoint); }; /** * Returns calculated DELETE url according to rules : * * default : security/:service/:serviceItemId/:policy/:policyItemId:(/:operation) * policy=owner : security/:service/ownerpolicy/:serviceItemId/:operation * objectId!=all & policy=roles : security/:service/:serviceItemName/objectAcl/:objectId/:policy/:operation * objectId!=all & policy=users : security/:service/:serviceItemName/objectAcl/:objectId/:policy/:policyItemId * service=files : security/:policy/:policyItemId/:service/:serviceItemId * * @returns {string} */ var buildDeleteUrl = exports.buildDeleteUrl = function buildDeleteUrl(appId, policy, policyItemId, service, serviceItemId, serviceItemName, objectId, operation) { var isFilesService = service === _security.PermissionServices.FILES; var isOwnerPolicy = policy === _security.PermissionPolicies.OWNER; var isRolesPolicy = policy === _security.PermissionPolicies.ROLES; var isObjectACL = objectId !== _security.ALL_OBJECTS; var operationEscaped = operation && encodeURIComponent(operation); if (isOwnerPolicy) { return "".concat(baseUrl(appId), "/").concat(service, "/ownerpolicy/").concat(serviceItemId, "/").concat(operationEscaped); } if (isObjectACL) { var stickingPoint = isRolesPolicy ? operationEscaped : encodeURIComponent(policyItemId); return "".concat(baseUrl(appId), "/").concat(service, "/").concat(serviceItemName, "/objectAcl/").concat(objectId, "/").concat(policy, "/").concat(stickingPoint); } if (isObjectACL && isRolesPolicy) { return "".concat(baseUrl(appId), "/").concat(service, "/").concat(serviceItemName, "/ownerpolicy/").concat(policyItemId, "/").concat(operationEscaped); } if (isFilesService) { if (isRolesPolicy) { return "".concat(baseUrl(appId), "/").concat(policy, "/").concat(policyItemId, "/").concat(service, "/").concat(serviceItemId); } return "".concat(baseUrl(appId), "/").concat(service, "/").concat(policy, "/").concat(policyItemId, "/").concat(serviceItemId); } var result = "".concat(baseUrl(appId), "/").concat(service, "/").concat(serviceItemId, "/").concat(policy, "/").concat(policyItemId); if (operationEscaped && operationEscaped !== 'all') { result += '/' + operationEscaped; } return result; };