From 2772d82d2eb1f6baf5f5655e47e01c2a52d39f56 Mon Sep 17 00:00:00 2001 From: Terncode Date: Sat, 21 Mar 2026 21:54:51 +0100 Subject: [PATCH] Make passport as instance --- src/ts/server/routes/auth.ts | 24 ++++++++++++++---------- src/ts/server/server.ts | 5 +++-- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/ts/server/routes/auth.ts b/src/ts/server/routes/auth.ts index 0b48ee2..adc9f56 100644 --- a/src/ts/server/routes/auth.ts +++ b/src/ts/server/routes/auth.ts @@ -1,5 +1,5 @@ import { Router, Request, Response, RequestHandler } from 'express'; -import { use, authenticate, AuthenticateOptions } from 'passport'; +import * as passport from 'passport'; import { Strategy as LocalStrategy } from 'passport-local'; import { remove } from 'lodash'; import { MINUTE } from '../../common/constants'; @@ -20,12 +20,16 @@ import { mergeAccounts } from '../api/merge'; import { findOrCreateAuth } from '../authUtils'; import { getOriginFromHTTP, getOrigin, addOrigin } from '../originUtils'; import { Profile } from '../../common/interfaces'; +import { Handler } from 'express'; + interface MergeRequest { accountId: string; time: number; } +type PassportAuth = passport.Authenticator + const FRESH_ACCOUNT_TIME = 1 * MINUTE; const mergeRequests: MergeRequest[] = []; @@ -215,11 +219,11 @@ async function handleAuth( } function createHandler( - server: ServerConfig, live: ServerLiveSettings, id: string, options: AuthenticateOptions, - removedDocument: RemovedDocument + server: ServerConfig, live: ServerLiveSettings, id: string, options: passport.AuthenticateOptions, + removedDocument: RemovedDocument, passport: PassportAuth ): RequestHandler { return (req, res, next) => { - const handler = authenticate(id, options, (error: Error | null, account: IAccount | null) => + const handler = passport.authenticate(id, options, (error: Error | null, account: IAccount | null) => handleAuth(server, live, removedDocument, req, res, error, account)); return handler(req, res, next); @@ -228,7 +232,7 @@ function createHandler( export function authRoutes( host: string, server: ServerConfig, settings: Settings, live: ServerLiveSettings, mockLogin: boolean, - removedDocument: RemovedDocument + removedDocument: RemovedDocument, passport: PassportAuth ) { const failureRedirect = `/?error=${encodeURIComponent('Authentication failed')}`; const app = Router(); @@ -261,7 +265,7 @@ export function authRoutes( return account; } - use(id, new strategy(options, (req, _accessToken, _refreshToken, oauthProfile, callback) => { + passport.use(id, new strategy(options, (req, _accessToken, _refreshToken, oauthProfile, callback) => { const profile = getProfile(id, oauthProfile); signInOrSignUp(req, profile) @@ -274,8 +278,8 @@ export function authRoutes( }); })); - app.get(`/${id}`, limit(120, 3600), createHandler(server, live, id, { scope, failureRedirect }, removedDocument)); - app.get(`/${id}/callback`, limit(120, 3600), createHandler(server, live, id, { failureRedirect }, removedDocument)); + app.get(`/${id}`, limit(120, 3600), createHandler(server, live, id, { scope, failureRedirect }, removedDocument, passport)); + app.get(`/${id}/callback`, limit(120, 3600), createHandler(server, live, id, { failureRedirect }, removedDocument, passport)); app.get(`/${id}/merge`, limit(120, 3600), authRequest, (req, res) => { const accountId = (req.user as IAccount)._id.toString(); mergeRequests.push({ accountId, time: Date.now() }); @@ -349,8 +353,8 @@ export function authRoutes( return [account._id.toString(), account.name]; })); - use(new LocalStrategy((login, _pass, done) => Account.findById(login, done))); - app.get('/local', authenticate('local', { successRedirect: '/', failureRedirect: '/failed-login' })); + passport.use(new LocalStrategy((login, _pass, done) => Account.findById(login, done))); + app.get('/local', passport.authenticate('local', { successRedirect: '/', failureRedirect: '/failed-login' })); } return app; diff --git a/src/ts/server/server.ts b/src/ts/server/server.ts index 3719d44..9d47eba 100644 --- a/src/ts/server/server.ts +++ b/src/ts/server/server.ts @@ -8,7 +8,7 @@ import * as bodyParser from 'body-parser'; import * as expressSession from 'express-session'; import * as serveFavicon from 'serve-favicon'; import * as Rollbar from 'rollbar'; -import * as passport from 'passport'; +import { Passport } from 'passport'; import * as connectMongo from 'connect-mongo'; import * as express from 'express'; import { WebSocketServer } from '@encharm/cws'; @@ -83,6 +83,7 @@ const limit = !production || args.tools ? '100mb' : '100kb'; Bluebird.config({ warnings: false, longStackTraces: !production }); +const passport = new Passport(); const rollbar = config.rollbar && Rollbar.init({ accessToken: config.rollbar.serverToken, environment: config.rollbar.environment, @@ -330,7 +331,7 @@ if (args.login) { app.use('/assets-admin', ...adminMiddlewares(), express.static(adminAssetsPath, { maxAge, etag })); app.use('/auth', ...sessionMiddlewares(), authRoutes( - config.host, server, settings, liveSettings, args.local || DEVELOPMENT, removedDocument)); + config.host, server, settings, liveSettings, args.local || DEVELOPMENT, removedDocument, passport)); app.use('/api', ...sessionMiddlewares(), api( server, settings, { version, host: config.host, debug: DEVELOPMENT, local: !!args.local }, removedDocument)); app.use('/api1', ...sessionMiddlewares(), api1(server, settings));