@speckle/shared
Version:
Shared code between various Speckle JS packages
52 lines • 2.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.checkIfAdminOverrideEnabledFragment = exports.ensureMinimumServerRoleFragment = void 0;
const authErrors_js_1 = require("../domain/authErrors.js");
const constants_js_1 = require("../../core/constants.js");
const result_1 = require("true-myth/result");
const index_js_1 = require("../../core/index.js");
const roles_js_1 = require("../domain/logic/roles.js");
/**
* Ensure user has a minimum server role
*/
const ensureMinimumServerRoleFragment = (loaders) => async ({ userId, role }) => {
if (!userId?.length)
return (0, result_1.err)(new authErrors_js_1.ServerNoSessionError());
const requiredServerRole = role || constants_js_1.Roles.Server.Guest;
const isLowestRequestedRole = [constants_js_1.Roles.Server.Guest, constants_js_1.Roles.Server.ArchivedUser].includes(requiredServerRole);
const userServerRole = await loaders.getServerRole({ userId });
if (!userServerRole)
return (0, result_1.err)(new authErrors_js_1.ServerNoAccessError());
const hasRequiredRole = (0, roles_js_1.isMinimumServerRole)(userServerRole, requiredServerRole);
return hasRequiredRole
? (0, result_1.ok)()
: (0, result_1.err)(isLowestRequestedRole
? new authErrors_js_1.ServerNoAccessError()
: new authErrors_js_1.ServerNotEnoughPermissionsError());
};
exports.ensureMinimumServerRoleFragment = ensureMinimumServerRoleFragment;
/**
* Check if user has admin override enabled
*/
const checkIfAdminOverrideEnabledFragment = (loaders) => async ({ userId }) => {
const adminOverrideAvailable = await loaders.getAdminOverrideEnabled();
if (!adminOverrideAvailable)
return (0, result_1.ok)(false);
const hasAdminRole = await (0, exports.ensureMinimumServerRoleFragment)(loaders)({
userId,
role: constants_js_1.Roles.Server.Admin
});
if (hasAdminRole.isErr) {
switch (hasAdminRole.error.code) {
case authErrors_js_1.ServerNoAccessError.code:
case authErrors_js_1.ServerNoSessionError.code:
case authErrors_js_1.ServerNotEnoughPermissionsError.code:
return (0, result_1.ok)(false);
default:
(0, index_js_1.throwUncoveredError)(hasAdminRole.error);
}
}
return (0, result_1.ok)(true);
};
exports.checkIfAdminOverrideEnabledFragment = checkIfAdminOverrideEnabledFragment;
//# sourceMappingURL=server.js.map