Files
speckle-server/packages/server/modules/auth/strategies.ts
T
Kristaps Fabians Geikins bde148f286 chore(server): migrating fully to ESM (#5042)
* wip

* some extra fixes

* stuff kinda works?

* need to figure out mocks

* need to figure out mocks

* fix db listener

* gqlgen fix

* minor gqlgen watch adjustment

* lint fixes

* delete old codegen file

* converting migrations to ESM

* getModuleDIrectory

* vitest sort of works

* added back ts-vitest

* resolve gql double load

* fixing test timeout configs

* TSC lint fix

* fix automate tests

* moar debugging

* debugging

* more debugging

* codegen update

* server works

* yargs migrated

* chore(server): getting rid of global mocks for Server ESM (#5046)

* got rid of email mock

* got rid of comment mocks

* got rid of multi region mocks

* got rid of stripe mock

* admin override mock updated

* removed final mock

* fixing import.meta.resolve calls

* another import.meta.resolve fix

* added requested test

* nyc ESM fix

* removed unneeded deps + linting

* yarn lock forgot to commit

* tryna fix flakyness

* email capture util fix

* sendEmail fix

* fix TSX check

* sender transporter fix + CR comments

* merge main fix

* test fixx

* circleci fix

* gqlgen bigint fix

* error formatter fix

* more error formatting improvements

* esmloader added to Dockerfile

* more dockerfile fixes

* bg jobs fix
2025-07-14 10:26:19 +03:00

84 lines
2.5 KiB
TypeScript

import passport from 'passport'
import type { Express } from 'express'
import {
AuthStrategyBuilder,
AuthStrategyMetadata,
AuthStrategyPassportUser
} from '@/modules/auth/helpers/types'
import { CreateAuthorizationCode } from '@/modules/auth/domain/operations'
import {
finalizeAuthMiddlewareFactory,
moveAuthParamsToSessionMiddlewareFactory,
sessionMiddlewareFactory
} from '@/modules/auth/middleware'
import { LegacyGetUser } from '@/modules/core/domain/users/operations'
import { EventBusEmit } from '@/modules/shared/services/eventBus'
const setupStrategiesFactory =
(deps: {
githubStrategyBuilder: AuthStrategyBuilder
azureAdStrategyBuilder: AuthStrategyBuilder
googleStrategyBuilder: AuthStrategyBuilder
localStrategyBuilder: AuthStrategyBuilder
oidcStrategyBuilder: AuthStrategyBuilder
createAuthorizationCode: CreateAuthorizationCode
getUser: LegacyGetUser
emitEvent: EventBusEmit
}) =>
async (app: Express) => {
passport.serializeUser((user, done) => done(null, user))
passport.deserializeUser((user, done) =>
done(null, user as AuthStrategyPassportUser)
)
app.use(passport.initialize())
const sessionMiddleware = sessionMiddlewareFactory()
const moveAuthParamsToSessionMiddleware = moveAuthParamsToSessionMiddlewareFactory()
const finalizeAuthMiddleware = finalizeAuthMiddlewareFactory({ ...deps })
/*
* Strategies initialisation & listing
*/
const enabledBuilders: AuthStrategyBuilder[] = []
if (process.env.STRATEGY_GOOGLE === 'true') {
enabledBuilders.push(deps.googleStrategyBuilder)
}
if (process.env.STRATEGY_GITHUB === 'true') {
enabledBuilders.push(deps.githubStrategyBuilder)
}
if (process.env.STRATEGY_AZURE_AD === 'true') {
enabledBuilders.push(deps.azureAdStrategyBuilder)
}
if (process.env.STRATEGY_OIDC === 'true') {
enabledBuilders.push(deps.oidcStrategyBuilder)
}
// Note: always leave the local strategy init for last so as to be able to
// force enable it in case no others are present.
if (process.env.STRATEGY_LOCAL === 'true' || !enabledBuilders.length) {
enabledBuilders.push(deps.localStrategyBuilder)
}
const authStrategies: AuthStrategyMetadata[] = await Promise.all(
enabledBuilders.map(
async (builder) =>
await builder(
app,
sessionMiddleware,
moveAuthParamsToSessionMiddleware,
finalizeAuthMiddleware
)
)
)
return authStrategies
}
export default setupStrategiesFactory