11import loadAdapter from '../AdapterLoader' ;
22import Parse from 'parse/node' ;
33import AuthAdapter from './AuthAdapter' ;
4-
54const apple = require ( './apple' ) ;
65const gcenter = require ( './gcenter' ) ;
76const gpgames = require ( './gpgames' ) ;
@@ -136,7 +135,6 @@ function authDataValidator(provider, adapter, appIds, options) {
136135}
137136
138137function loadAuthAdapter ( provider , authOptions ) {
139- // providers are auth providers implemented by default
140138 let defaultAdapter = providers [ provider ] ;
141139 // authOptions can contain complete custom auth adapters or
142140 // a default auth adapter like Facebook
@@ -154,8 +152,6 @@ function loadAuthAdapter(provider, authOptions) {
154152 return ;
155153 }
156154
157- const adapter =
158- defaultAdapter instanceof AuthAdapter ? defaultAdapter : Object . assign ( { } , defaultAdapter ) ;
159155 const keys = [
160156 'validateAuthData' ,
161157 'validateAppId' ,
@@ -167,20 +163,13 @@ function loadAuthAdapter(provider, authOptions) {
167163 'policy' ,
168164 'afterFind' ,
169165 ] ;
170- const defaultAuthAdapter = new AuthAdapter ( ) ;
171- keys . forEach ( key => {
172- const existing = adapter ?. [ key ] ;
173- if (
174- existing &&
175- typeof existing === 'function' &&
176- existing . toString ( ) === defaultAuthAdapter [ key ] . toString ( )
177- ) {
178- adapter [ key ] = null ;
179- }
180- } ) ;
181- const appIds = providerOptions ? providerOptions . appIds : undefined ;
182166
183- // Try the configuration methods
167+ let adapter = Object . assign ( { } , defaultAdapter ) ;
168+ if ( defaultAdapter instanceof AuthAdapter ) {
169+ adapter = new defaultAdapter . constructor ( ) ;
170+ defaultAdapter . _clearDefaultKeys ( keys ) ;
171+ }
172+
184173 if ( providerOptions ) {
185174 const optionalAdapter = loadAdapter ( providerOptions , undefined , providerOptions ) ;
186175 if ( optionalAdapter ) {
@@ -191,25 +180,44 @@ function loadAuthAdapter(provider, authOptions) {
191180 } ) ;
192181 }
193182 }
194- if ( adapter . validateOptions ) {
195- adapter . validateOptions ( providerOptions ) ;
183+
184+ if ( providerOptions ?. enabled !== false ) {
185+ if ( adapter . validateOptions ) {
186+ adapter . validateOptions ( providerOptions ) ;
187+ }
196188 }
197189
190+ const appIds = providerOptions ? providerOptions . appIds : undefined ;
198191 return { adapter, appIds, providerOptions } ;
199192}
200193
194+ function validateAuthConfig ( auth ) {
195+ const authCache = new Map ( ) ;
196+ if ( ! auth . anonymous ) {
197+ auth . anonymous = { enabled : true } ;
198+ }
199+ Object . keys ( auth ) . forEach ( key => {
200+ const authObject = loadAuthAdapter ( key , auth ) ;
201+ authCache . set ( key , authObject ) ;
202+ } ) ;
203+ return authCache ;
204+ }
205+
201206module . exports = function ( authOptions = { } , enableAnonymousUsers = true ) {
202207 let _enableAnonymousUsers = enableAnonymousUsers ;
203208 const setEnableAnonymousUsers = function ( enable ) {
204209 _enableAnonymousUsers = enable ;
205210 } ;
211+ const authCache = validateAuthConfig ( authOptions ) ;
206212 // To handle the test cases on configuration
207213 const getValidatorForProvider = function ( provider ) {
208214 if ( provider === 'anonymous' && ! _enableAnonymousUsers ) {
209215 return { validator : undefined } ;
210216 }
211- const authAdapter = loadAuthAdapter ( provider , authOptions ) ;
212- if ( ! authAdapter ) return ;
217+ const authAdapter = authCache . get ( provider ) ;
218+ if ( ! authAdapter ) {
219+ return { validator : undefined } ;
220+ }
213221 const { adapter, appIds, providerOptions } = authAdapter ;
214222 return { validator : authDataValidator ( provider , adapter , appIds , providerOptions ) , adapter } ;
215223 } ;
@@ -248,6 +256,7 @@ module.exports = function (authOptions = {}, enableAnonymousUsers = true) {
248256 getValidatorForProvider,
249257 setEnableAnonymousUsers,
250258 runAfterFind,
259+ authCache,
251260 } ) ;
252261} ;
253262
0 commit comments