UNPKG

@getanthill/datastore

Version:

Event-Sourced Datastore

47 lines 1.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTokensByRole = getTokensByRole; exports.getAuthorizationToken = getAuthorizationToken; exports.isAuthorized = isAuthorized; exports.authenticate = authenticate; function getTokensByRole(config, role) { const levels = ['read', 'decrypt', 'write', 'admin']; while (levels.length > 0) { if (role === levels[0]) { return config.filter((access) => levels.includes(access.level)); // .map((access) => access.token); } levels.shift(); } return []; } function getAuthorizationToken(req) { var _a, _b, _c; return ((_c = (_b = (_a = req.cookies) === null || _a === void 0 ? void 0 : _a.token) !== null && _b !== void 0 ? _b : req.header('Authorization')) !== null && _c !== void 0 ? _c : req.query.token); } function isAuthorized(tokens, token) { return tokens.find((t) => t.token === token); } function authenticate(tokens) { return (req, res, next) => { // @ts-ignore if (res.body) { return next(); } const token = getAuthorizationToken(req); if (token === req.query.token) { delete req.query.token; } if (!token) { return next({ status: 401, message: 'Unauthenticated' }); } const access = isAuthorized(tokens, token); if (access) { res.locals.id = access.id; res.locals.level = access.level; return next(); } return next({ status: 403, message: 'Unauthorized' }); }; } //# sourceMappingURL=authenticate.js.map