@rsksmart/express-did-auth
Version:
Authentication with Verifiable Credentials for Express.js
54 lines • 2.71 kB
JavaScript
;
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