45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import session from 'express-session'
|
|
import Keycloak from 'keycloak-connect'
|
|
import { assertKeycloakConfiguration } from './authMode'
|
|
|
|
type KeycloakEnvConfig = {
|
|
serverUrl: string
|
|
realm: string
|
|
clientId: string
|
|
clientSecret?: string
|
|
}
|
|
|
|
const validatedKeycloakConfig = assertKeycloakConfiguration()
|
|
|
|
const keycloakConfig: KeycloakEnvConfig = {
|
|
serverUrl: validatedKeycloakConfig?.serverUrl || 'http://localhost:8080',
|
|
realm: validatedKeycloakConfig?.realm || 'equipment-management',
|
|
clientId: validatedKeycloakConfig?.clientId || 'equipment-client',
|
|
clientSecret: validatedKeycloakConfig?.clientSecret
|
|
}
|
|
|
|
const memoryStore = new session.MemoryStore()
|
|
|
|
const keycloak = new Keycloak(
|
|
{
|
|
store: memoryStore,
|
|
scope: 'openid profile email'
|
|
},
|
|
{
|
|
realm: keycloakConfig.realm,
|
|
'auth-server-url': keycloakConfig.serverUrl,
|
|
'ssl-required': 'external',
|
|
resource: keycloakConfig.clientId,
|
|
'public-client': !keycloakConfig.clientSecret,
|
|
credentials: keycloakConfig.clientSecret
|
|
? { secret: keycloakConfig.clientSecret }
|
|
: undefined,
|
|
'confidential-port': 0,
|
|
'bearer-only': false,
|
|
'verify-token-audience': true,
|
|
'use-resource-role-mappings': true
|
|
} as any
|
|
)
|
|
|
|
export { keycloak, memoryStore }
|