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