UNPKG

@5minds/processcube_engine

Version:

The ProcessCube Engine. Stores and executes BPMNs.

45 lines 2.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createResolveIdentityMiddleware = createResolveIdentityMiddleware; const processcube_engine_sdk_1 = require("@5minds/processcube_engine_sdk"); function createResolveIdentityMiddleware(identityService) { const logger = new processcube_engine_sdk_1.Logger('http:identity_resolver'); return async (request, response, next) => { const isPublicRoute = response.locals.isPublicRoute; const bearerToken = request.get('authorization'); const userId = request.get('user-id'); if (!bearerToken) { if (isPublicRoute) { next(); return; } throw new processcube_engine_sdk_1.UnauthorizedError('No auth token provided!'); } const splitHeaderValues = bearerToken.split(','); const multipleAuthorizationHeaders = splitHeaderValues.length > 1; if (multipleAuthorizationHeaders) { if (isPublicRoute) { next(); return; } const errorMessage = 'Detected multiple values for the authorization header! Multiple authorization header values are not supported.'; logger.error(errorMessage, { additionalInformation: splitHeaderValues }); throw new processcube_engine_sdk_1.BadRequestError(errorMessage); } const authToken = bearerToken.substr('Bearer '.length); const isInternalToken = identityService.isInternalToken(authToken); const isRootAccessToken = identityService.isRootAccessToken(authToken); const isRootAccessTokenAllowed = identityService.getRootAccessTokenAllowed(); if (isInternalToken || (isRootAccessToken && !isRootAccessTokenAllowed)) { if (isPublicRoute) { next(); return; } throw new processcube_engine_sdk_1.UnauthorizedError('Invalid auth token provided'); } const identity = await identityService.getIdentity({ token: authToken, userId }); request.identity = identity; next(); }; } //# sourceMappingURL=ResolveIdentityMiddleware.js.map