2023-12-08 22:35:15 +01:00
import { z } from "zod" ;
2025-01-14 19:03:38 +01:00
import { supportedAuthProviders } from "@homarr/definitions" ;
2025-02-18 22:54:15 +01:00
import { createEnv } from "@homarr/env" ;
import { createBooleanSchema , createDurationSchema } from "@homarr/env/schemas" ;
2024-07-20 22:23:58 +02:00
const authProvidersSchema = z
. string ( )
. min ( 1 )
. transform ( ( providers ) = >
providers
. replaceAll ( " " , "" )
. toLowerCase ( )
. split ( "," )
. filter ( ( provider ) = > {
2025-01-14 19:03:38 +01:00
if ( supportedAuthProviders . some ( ( supportedProvider ) = > supportedProvider === provider ) ) return true ;
2024-07-20 22:23:58 +02:00
else if ( ! provider )
console . log ( "One or more of the entries for AUTH_PROVIDER could not be parsed and/or returned null." ) ;
else console . log ( ` The value entered for AUTH_PROVIDER " ${ provider } " is incorrect. ` ) ;
return false ;
} ) ,
)
. default ( "credentials" ) ;
2025-02-18 22:54:15 +01:00
const authProviders = authProvidersSchema . safeParse ( process . env . AUTH_PROVIDERS ) . data ? ? [ ] ;
2024-07-20 22:23:58 +02:00
2023-12-08 22:35:15 +01:00
export const env = createEnv ( {
server : {
2024-08-09 19:24:07 +02:00
AUTH_LOGOUT_REDIRECT_URL : z.string ( ) . url ( ) . optional ( ) ,
2024-08-09 15:59:00 +02:00
AUTH_SESSION_EXPIRY_TIME : createDurationSchema ( "30d" ) ,
2024-07-20 22:23:58 +02:00
AUTH_PROVIDERS : authProvidersSchema ,
. . . ( authProviders . includes ( "oidc" )
? {
AUTH_OIDC_ISSUER : z.string ( ) . url ( ) ,
AUTH_OIDC_CLIENT_ID : z.string ( ) . min ( 1 ) ,
AUTH_OIDC_CLIENT_SECRET : z.string ( ) . min ( 1 ) ,
AUTH_OIDC_CLIENT_NAME : z.string ( ) . min ( 1 ) . default ( "OIDC" ) ,
2025-01-14 19:03:38 +01:00
AUTH_OIDC_AUTO_LOGIN : createBooleanSchema ( false ) ,
2024-07-20 22:23:58 +02:00
AUTH_OIDC_SCOPE_OVERWRITE : z.string ( ) . min ( 1 ) . default ( "openid email profile groups" ) ,
2024-10-07 21:13:15 +02:00
AUTH_OIDC_GROUPS_ATTRIBUTE : z.string ( ) . default ( "groups" ) , // Is used in the signIn event to assign the correct groups, key is from object of decoded id_token
2025-01-04 21:49:33 +01:00
AUTH_OIDC_NAME_ATTRIBUTE_OVERWRITE : z.string ( ) . optional ( ) ,
2025-03-27 22:57:06 +01:00
AUTH_OIDC_FORCE_USERINFO : createBooleanSchema ( false ) ,
2025-05-16 20:57:51 +02:00
AUTH_OIDC_ENABLE_DANGEROUS_ACCOUNT_LINKING : createBooleanSchema ( false ) ,
2024-07-20 22:23:58 +02:00
}
: { } ) ,
. . . ( authProviders . includes ( "ldap" )
? {
AUTH_LDAP_URI : z.string ( ) . url ( ) ,
AUTH_LDAP_BIND_DN : z.string ( ) ,
AUTH_LDAP_BIND_PASSWORD : z.string ( ) ,
AUTH_LDAP_BASE : z.string ( ) ,
AUTH_LDAP_SEARCH_SCOPE : z.enum ( [ "base" , "one" , "sub" ] ) . default ( "base" ) ,
AUTH_LDAP_USERNAME_ATTRIBUTE : z.string ( ) . default ( "uid" ) ,
AUTH_LDAP_USER_MAIL_ATTRIBUTE : z.string ( ) . default ( "mail" ) ,
AUTH_LDAP_USERNAME_FILTER_EXTRA_ARG : z.string ( ) . optional ( ) ,
AUTH_LDAP_GROUP_CLASS : z.string ( ) . default ( "groupOfUniqueNames" ) ,
AUTH_LDAP_GROUP_MEMBER_ATTRIBUTE : z.string ( ) . default ( "member" ) ,
AUTH_LDAP_GROUP_MEMBER_USER_ATTRIBUTE : z.string ( ) . default ( "dn" ) ,
AUTH_LDAP_GROUP_FILTER_EXTRA_ARG : z.string ( ) . optional ( ) ,
}
: { } ) ,
2023-12-08 22:35:15 +01:00
} ,
2025-02-18 22:54:15 +01:00
experimental__runtimeEnv : process.env ,
2023-12-08 22:35:15 +01:00
} ) ;