backendless-console-sdk
Version:
Backendless Console SDK for Node.js and browser
151 lines (146 loc) • 9.15 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 _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
/**
* 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 = 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}
*/
exports.buildGetUrl = buildGetUrl;
var 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}
*/
exports.buildPutUrl = buildPutUrl;
var 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;
};
exports.buildDeleteUrl = buildDeleteUrl;