UNPKG

@rsksmart/express-did-auth

Version:

Authentication with Verifiable Credentials for Express.js

54 lines 2.71 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.expressMiddlewareFactory = void 0; const constants_1 = require("../constants"); const errors_1 = require("../errors"); const jwt_utils_1 = require("../jwt-utils"); function extractAccessToken(req, useCookies) { if (useCookies) { const did = req.headers[constants_1.LOGGED_DID_COOKIE_NAME]; return req.cookies[`${constants_1.ACCESS_TOKEN_COOKIE_NAME}-${did}`]; } const header = req.headers[constants_1.ACCESS_TOKEN_HEADER_NAME] || req.headers[constants_1.ACCESS_TOKEN_HEADER_NAME.toLowerCase()]; if (!header) throw new Error(errors_1.NO_ACCESS_TOKEN); const [scheme, token] = header.split(' '); if (scheme !== constants_1.DID_AUTH_SCHEME) throw new Error(errors_1.INVALID_HEADER); return token; } function expressMiddlewareFactory(state, config) { return function (req, res, next) { return __awaiter(this, void 0, void 0, function* () { try { const jwt = extractAccessToken(req, config.useCookies); if (!jwt) return res.status(401).send(errors_1.NO_ACCESS_TOKEN); const verified = yield jwt_utils_1.verifyReceivedJwt(jwt, config); if (verified.issuer !== config.serviceDid) return res.status(401).send(errors_1.CORRUPTED_ACCESS_TOKEN); const payload = verified.payload; const did = payload.sub; state.sessions[did].requestCounter.count(); req.user = { did }; next(); } catch (err) { if (err === null || err === void 0 ? void 0 : err.message) return res.status(401).send(escape(err.message)); return res.status(500).send(errors_1.UNHANDLED_ERROR); } }); }; } exports.expressMiddlewareFactory = expressMiddlewareFactory; //# sourceMappingURL=express-middleware-factory.js.map