UNPKG

@fdm-monster/server

Version:

FDM Monster is a bulk OctoPrint, Klipper, PrusaLink and BambuLab manager to set up, configure and monitor 3D printers. Our aim is to provide neat overview over your farm.

48 lines (47 loc) 2.39 kB
import { DITokens } from "../container.tokens.js"; import { AuthenticationError } from "../exceptions/runtime.exceptions.js"; import { AppConstants } from "../server.constants.js"; import { AUTH_ERROR_REASON } from "../constants/authorization.constants.js"; import { ApiKeyStrategy } from "./api-key.strategy.js"; import { ExtractJwt, Strategy } from "passport-jwt"; import { Strategy as Strategy$1 } from "passport-anonymous"; //#region src/middleware/passport.ts function getPassportJwtOptions(settingsStore, configService, jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken()) { return { jwtFromRequest, secretOrKeyProvider: async (_req, _token, done) => { const { jwtSecret } = await settingsStore.getCredentialSettings(); return done(null, jwtSecret); }, audience: configService.get(AppConstants.OVERRIDE_JWT_AUDIENCE, AppConstants.DEFAULT_JWT_AUDIENCE), issuer: configService.get(AppConstants.OVERRIDE_JWT_ISSUER, AppConstants.DEFAULT_JWT_ISSUER) }; } function verifyUserCallback(userService) { return function(jwt_payload, done) { userService.getUser(jwt_payload.userId).then((user) => { if (user?.isVerified && !user.needsPasswordChange) return done(null, userService.toDto(user)); if (user?.needsPasswordChange) return done(new AuthenticationError("Password change required", AUTH_ERROR_REASON.PasswordChangeRequired), false); if (!user?.isVerified) return done(new AuthenticationError("User not verified", AUTH_ERROR_REASON.AccountNotVerified), false); return done(null, false); }).catch((err) => { if (err) return done(err, false); }); }; } function initializePassportStrategies(passport, container) { const settingsStore = container.resolve(DITokens.settingsStore); const configService = container.resolve(DITokens.configService); const userService = container.resolve(DITokens.userService); const apiKeyService = container.resolve(DITokens.apiKeyService); const opts = getPassportJwtOptions(settingsStore, configService, ExtractJwt.fromAuthHeaderAsBearerToken()); passport.use(new Strategy(opts, function(jwt_payload, done) { verifyUserCallback(userService)(jwt_payload, done); })); passport.use(new ApiKeyStrategy(apiKeyService)); passport.use(new Strategy$1()); return passport; } //#endregion export { getPassportJwtOptions, initializePassportStrategies, verifyUserCallback }; //# sourceMappingURL=passport.js.map