UNPKG

@senacor/azure-function-middleware

Version:

Middleware for azure functions to handle authentication, authorization, error handling and logging

39 lines (38 loc) 1.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const jwt_decode_1 = require("jwt-decode"); const error_1 = require("../error"); const evaluate = (rule, parameters, jwt) => { const pathParameter = rule.parameterExtractor(parameters); const jwtParameter = rule.jwtExtractor(jwt); return pathParameter === jwtParameter; }; exports.default = (rules, errorResponseBody, opts) => { var _a; const skipIfResultIsFaulty = (_a = opts === null || opts === void 0 ? void 0 : opts.skipIfResultIsFaulty) !== null && _a !== void 0 ? _a : true; return (req, context, result) => { if (skipIfResultIsFaulty && result.$failed) { context.info('Skipping jwt-authorization because the result is faulty.'); return; } const authorizationHeader = req.headers.get('authorization'); const parameters = req.params; if (authorizationHeader) { const token = authorizationHeader.split(' ')[1]; if (token) { const jwt = (0, jwt_decode_1.jwtDecode)(token); const validationResult = rules .map((ruleFunction) => evaluate(ruleFunction, parameters, jwt)) .reduce((previousValue, currentValue) => previousValue && currentValue); if (!validationResult) { throw new error_1.ApplicationError('Authorization error', 401, errorResponseBody !== null && errorResponseBody !== void 0 ? errorResponseBody : 'Unauthorized'); } else { context.extraInputs.set('jwt', jwt); return; } } } throw new error_1.ApplicationError('Authorization error', 401, errorResponseBody !== null && errorResponseBody !== void 0 ? errorResponseBody : 'Unauthorized'); }; };