@5minds/processcube_engine
Version:
The ProcessCube Engine. Stores and executes BPMNs.
45 lines • 2.2 kB
JavaScript
;
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