@@ -52,14 +52,11 @@ async function startServer(config) {
5252 requireAuthForSearch : config . requireAuthForSearch
5353 } ;
5454
55- // Build global auth provider registry for per-user auth override (Phase 3)
56- // Maps "realm:type" → AuthProvider instance (realm-scoped) and
57- // "type" → AuthProvider instance (first-registered fallback)
58- const authProviderRegistry = new Map ( ) ;
59-
6055 if ( config . realms ) {
6156 // Multi-realm mode: build realm objects from config
6257 logger . info ( `Initializing multi-realm mode with ${ config . realms . length } realm(s)` ) ;
58+ let defaultRealmObj = null ;
59+
6360 engineOptions . realms = config . realms . map ( realmCfg => {
6461 // Ensure directory providers receive realm-scoped LDAP base DN so that
6562 // any provider-side DN construction stays consistent with realmCfg.baseDn.
@@ -72,30 +69,40 @@ async function startServer(config) {
7269 directoryOptions
7370 ) ;
7471
72+ // Build per-realm auth backend type map using explicit type names from config
73+ const authBackendTypes = new Map ( ) ;
7574 const authProviders = realmCfg . auth . backends . map ( backendCfg => {
7675 const provider = providerFactory . createAuthProvider ( backendCfg . type , backendCfg . options || { } ) ;
77- // Register with realm-scoped key for accurate per-user auth override
78- const registryKey = `${ realmCfg . name } :${ backendCfg . type } ` ;
79- authProviderRegistry . set ( registryKey , provider ) ;
80- logger . debug ( `Registered auth backend '${ registryKey } ' in provider registry` ) ;
81- // Also register type-only key as fallback (first realm wins per type)
82- if ( ! authProviderRegistry . has ( backendCfg . type ) ) {
83- authProviderRegistry . set ( backendCfg . type , provider ) ;
84- logger . debug ( `Registered fallback auth backend '${ backendCfg . type } ' (first realm wins)` ) ;
76+ const typeKey = backendCfg . type . toLowerCase ( ) ;
77+ if ( ! authBackendTypes . has ( typeKey ) ) {
78+ authBackendTypes . set ( typeKey , provider ) ;
8579 }
80+ logger . debug ( `Realm '${ realmCfg . name } ': registered auth backend '${ typeKey } '` ) ;
8681 return provider ;
8782 } ) ;
8883
8984 logger . info ( `Realm '${ realmCfg . name } ': baseDN=${ realmCfg . baseDn } , ` +
90- `directory=${ realmCfg . directory . backend } , auth=[${ realmCfg . auth . backends . map ( b => b . type ) . join ( ', ' ) } ]` ) ;
85+ `directory=${ realmCfg . directory . backend } , auth=[${ realmCfg . auth . backends . map ( b => b . type ) . join ( ', ' ) } ]` +
86+ ( realmCfg . default ? ' (default)' : '' ) ) ;
9187
92- return {
88+ const realmObj = {
9389 name : realmCfg . name ,
9490 baseDn : realmCfg . baseDn ,
9591 directoryProvider,
96- authProviders
92+ authProviders,
93+ authBackendTypes
9794 } ;
95+
96+ if ( realmCfg . default ) {
97+ defaultRealmObj = realmObj ;
98+ }
99+
100+ return realmObj ;
98101 } ) ;
102+
103+ if ( defaultRealmObj ) {
104+ engineOptions . defaultRealm = defaultRealmObj ;
105+ }
99106 } else {
100107 // Legacy single-realm mode
101108 const selectedDirectory = providerFactory . createDirectoryProvider ( config . directoryBackend ) ;
@@ -106,18 +113,18 @@ async function startServer(config) {
106113 engineOptions . authProviders = selectedBackends ;
107114 engineOptions . directoryProvider = selectedDirectory ;
108115
109- // Register legacy auth providers in the registry
116+ // Build auth backend types map for legacy mode
117+ const authBackendTypes = new Map ( ) ;
110118 for ( let idx = 0 ; idx < config . authBackends . length ; idx ++ ) {
111- const backendType = config . authBackends [ idx ] ;
112- if ( ! authProviderRegistry . has ( backendType ) ) {
113- authProviderRegistry . set ( backendType , selectedBackends [ idx ] ) ;
114- logger . debug ( `Registered auth backend '${ backendType } ' in provider registry ` ) ;
119+ const typeKey = config . authBackends [ idx ] . toLowerCase ( ) ;
120+ if ( ! authBackendTypes . has ( typeKey ) ) {
121+ authBackendTypes . set ( typeKey , selectedBackends [ idx ] ) ;
122+ logger . debug ( `Registered auth backend '${ typeKey } ' in provider type map ` ) ;
115123 }
116124 }
125+ engineOptions . authBackendTypes = authBackendTypes ;
117126 }
118127
119- engineOptions . authProviderRegistry = authProviderRegistry ;
120-
121128 // Create and configure LDAP engine
122129 const ldapEngine = new LdapEngine ( engineOptions ) ;
123130
0 commit comments