backendless-console-sdk
Version:
Backendless Console SDK for Node.js and browser
147 lines (142 loc) • 8.6 kB
JavaScript
;
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;
};