UNPKG

@rsksmart/express-did-auth

Version:

Authentication with Verifiable Credentials for Express.js

79 lines 5.34 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.verifyReceivedJwt = exports.generateAccessToken = exports.requestSignupFactory = exports.requestAuthFactory = exports.logoutFactory = exports.refreshTokenFactory = exports.expressMiddlewareFactory = exports.authenticationFactory = void 0; const body_parser_1 = __importDefault(require("body-parser")); const cookie_parser_1 = __importDefault(require("cookie-parser")); const csurf_1 = __importDefault(require("csurf")); const challenge_verifier_1 = require("./classes/challenge-verifier"); const request_counter_1 = require("./classes/request-counter"); const session_manager_1 = require("./classes/session-manager"); const jwt_utils_1 = require("./jwt-utils"); Object.defineProperty(exports, "generateAccessToken", { enumerable: true, get: function () { return jwt_utils_1.generateAccessToken; } }); Object.defineProperty(exports, "verifyReceivedJwt", { enumerable: true, get: function () { return jwt_utils_1.verifyReceivedJwt; } }); const defaults_1 = require("./defaults"); const factories_1 = require("./factories"); Object.defineProperty(exports, "requestSignupFactory", { enumerable: true, get: function () { return factories_1.requestSignupFactory; } }); Object.defineProperty(exports, "authenticationFactory", { enumerable: true, get: function () { return factories_1.authenticationFactory; } }); Object.defineProperty(exports, "requestAuthFactory", { enumerable: true, get: function () { return factories_1.requestAuthFactory; } }); Object.defineProperty(exports, "refreshTokenFactory", { enumerable: true, get: function () { return factories_1.refreshTokenFactory; } }); Object.defineProperty(exports, "expressMiddlewareFactory", { enumerable: true, get: function () { return factories_1.expressMiddlewareFactory; } }); Object.defineProperty(exports, "logoutFactory", { enumerable: true, get: function () { return factories_1.logoutFactory; } }); const config_adapters_1 = require("./config-adapters"); const constants_1 = require("./constants"); const errors_1 = require("./errors"); function setupAppFactory(config) { const { requestAuthPath, authPath, requestSignupPath, signupPath, refreshTokenPath, logoutPath, noCsrfSecure } = config; const state = { sessions: {}, refreshTokens: {} }; const challengeVerifier = new challenge_verifier_1.ChallengeVerifier(config_adapters_1.adaptToChallengeConfig(config)); const sessionManagerFactory = (metadata) => new session_manager_1.SessionManager(config_adapters_1.adaptToUserSessionConfig(config), metadata); const requestCounterFactory = () => new request_counter_1.RequestCounter(config_adapters_1.adaptToRequestCounterConfig(config)); const authHandler = (businessLogic) => factories_1.authenticationFactory(challengeVerifier, state, sessionManagerFactory, requestCounterFactory, config_adapters_1.adaptToAuthFactoryConfig(config), businessLogic); return function setupApp(app) { app.use(body_parser_1.default.json()); if (config.useCookies) { app.use(cookie_parser_1.default()); app.use(csurf_1.default({ cookie: { httpOnly: true, secure: !noCsrfSecure, sameSite: 'none' } })); app.use((req, res, next) => { res.header(constants_1.CSRF_TOKEN_HEADER_NAME, req.csrfToken()); next(); }); app.use(function (err, req, res, next) { if (err.code !== 'EBADCSRFTOKEN') return next(err); // handle CSRF token errors here res.status(403); res.send(errors_1.CSRF_ERROR_MESSAGE); }); app.get('/refresh-csrf', (req, res) => { res.status(200).send(req.csrfToken()); }); } const authMiddleware = factories_1.expressMiddlewareFactory(state, config); app.get(requestSignupPath || defaults_1.REQUEST_SIGNUP_PATH, factories_1.requestSignupFactory(challengeVerifier, config)); app.post(signupPath || defaults_1.SIGNUP_PATH, authHandler(config.signupBusinessLogic)); app.get(requestAuthPath || defaults_1.REQUEST_AUTH_PATH, factories_1.requestAuthFactory(challengeVerifier)); app.post(authPath || defaults_1.AUTH_PATH, authHandler(config.authenticationBusinessLogic)); app.post(refreshTokenPath || defaults_1.REFRESH_TOKEN_PATH, factories_1.refreshTokenFactory(state, config)); app.post(logoutPath || defaults_1.LOGOUT_PATH, authMiddleware, factories_1.logoutFactory(state, config)); return authMiddleware; }; } exports.default = setupAppFactory; __exportStar(require("./types"), exports); //# sourceMappingURL=index.js.map