Files
speckle-server/packages/server/modules/automate/rest/authGithubApp.ts
T
2024-09-25 15:59:41 +03:00

50 lines
1.7 KiB
TypeScript

import { db } from '@/db/knex'
import { createStoredAuthCodeFactory } from '@/modules/automate/services/authCode'
import {
handleAutomateFunctionCreatorAuthCallbackFactory,
startAutomateFunctionCreatorAuthFactory
} from '@/modules/automate/services/functionManagement'
import { getGenericRedis } from '@/modules/core'
import { corsMiddleware } from '@/modules/core/configs/cors'
import { validateScope, validateServerRoleBuilderFactory } from '@/modules/shared/authz'
import { authMiddlewareCreator } from '@/modules/shared/middleware'
import { getRolesFactory } from '@/modules/shared/repositories/roles'
import { Roles, Scopes } from '@speckle/shared'
import { Application } from 'express'
export default (app: Application) => {
app.get(
'/api/automate/auth/githubapp',
corsMiddleware(),
authMiddlewareCreator([
validateServerRoleBuilderFactory({
getRoles: getRolesFactory({ db })
})({ requiredRole: Roles.Server.Guest }),
validateScope({ requiredScope: Scopes.AutomateFunctions.Write })
]),
async (req, res) => {
const startAuth = startAutomateFunctionCreatorAuthFactory({
createStoredAuthCode: createStoredAuthCodeFactory({
redis: getGenericRedis()
})
})
await startAuth({ req, res })
}
)
app.get(
'/api/automate/ghAuthComplete',
corsMiddleware(),
authMiddlewareCreator([
validateServerRoleBuilderFactory({
getRoles: getRolesFactory({ db })
})({ requiredRole: Roles.Server.Guest }),
validateScope({ requiredScope: Scopes.AutomateFunctions.Write })
]),
async (req, res) => {
const handleCallback = handleAutomateFunctionCreatorAuthCallbackFactory()
await handleCallback({ req, res })
}
)
}