1
import { useEnv } from '@directus/env';
2
import { InvalidProviderConfigError } from '@directus/errors';
3
import { toArray } from '@directus/utils';
4
import type { AuthDriver } from './auth/auth.js';
11
} from './auth/drivers/index.js';
12
import { DEFAULT_AUTH_PROVIDER } from './constants.js';
13
import getDatabase from './database/index.js';
14
import { useLogger } from './logger.js';
15
import type { AuthDriverOptions } from './types/index.js';
16
import { getConfigFromEnv } from './utils/get-config-from-env.js';
17
import { getSchema } from './utils/get-schema.js';
19
const providers: Map<string, AuthDriver> = new Map();
21
export function getAuthProvider(provider: string): AuthDriver {
22
const logger = useLogger();
24
if (!providers.has(provider)) {
25
logger.error('Auth provider not configured');
26
throw new InvalidProviderConfigError({ provider });
29
return providers.get(provider)!;
32
export async function registerAuthProviders(): Promise<void> {
34
const logger = useLogger();
35
const options = { knex: getDatabase(), schema: await getSchema() };
37
const providerNames = toArray(env['AUTH_PROVIDERS'] as string);
39
// Register default provider if not disabled
40
if (!env['AUTH_DISABLE_DEFAULT']) {
41
const defaultProvider = getProviderInstance('local', options)!;
42
providers.set(DEFAULT_AUTH_PROVIDER, defaultProvider);
45
if (!env['AUTH_PROVIDERS']) {
49
// Register configured providers
50
providerNames.forEach((name: string) => {
53
if (name === DEFAULT_AUTH_PROVIDER) {
54
logger.error(`Cannot override "${DEFAULT_AUTH_PROVIDER}" auth provider.`);
58
const { driver, ...config } = getConfigFromEnv(`AUTH_${name.toUpperCase()}_`);
61
logger.warn(`Missing driver definition for "${name}" auth provider.`);
65
const provider = getProviderInstance(driver, options, { provider: name, ...config });
68
logger.warn(`Invalid "${driver}" auth driver.`);
72
providers.set(name, provider);
76
function getProviderInstance(
78
options: AuthDriverOptions,
79
config: Record<string, any> = {},
80
): AuthDriver | undefined {
83
return new LocalAuthDriver(options, config);
86
return new OAuth2AuthDriver(options, config);
89
return new OpenIDAuthDriver(options, config);
92
return new LDAPAuthDriver(options, config);
95
return new SAMLAuthDriver(options, config);