bde148f286
* 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
84 lines
2.5 KiB
TypeScript
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
|