directus
1import { useEnv } from '@directus/env';
2import { toArray } from '@directus/utils';
3
4interface AuthProvider {
5name: string;
6driver: string;
7icon?: string;
8label?: string;
9}
10
11export function getAuthProviders({ sessionOnly } = { sessionOnly: false }): AuthProvider[] {
12const env = useEnv();
13
14let providers = toArray(env['AUTH_PROVIDERS'] as string).filter(
15(provider) => provider && env[`AUTH_${provider.toUpperCase()}_DRIVER`],
16);
17
18if (sessionOnly) {
19providers = providers.filter((provider) => {
20const driver = env[`AUTH_${provider.toUpperCase()}_DRIVER`] as string;
21
22// only the following 3 drivers require a mode selection
23if (['oauth2', 'openid', 'saml'].includes(driver)) {
24const mode = env[`AUTH_${provider.toUpperCase()}_MODE`] as string | undefined;
25// if mode is not defined it defaults to session
26return !mode || mode === 'session';
27}
28
29return true;
30});
31}
32
33return providers.map((provider) => ({
34name: provider,
35label: env[`AUTH_${provider.toUpperCase()}_LABEL`] as string,
36driver: env[`AUTH_${provider.toUpperCase()}_DRIVER`] as string,
37icon: env[`AUTH_${provider.toUpperCase()}_ICON`] as string,
38}));
39}
40