(provider, authOptions)
| 143 | } |
| 144 | |
| 145 | function loadAuthAdapter(provider, authOptions) { |
| 146 | // providers are auth providers implemented by default |
| 147 | let defaultAdapter = providers[provider]; |
| 148 | // authOptions can contain complete custom auth adapters or |
| 149 | // a default auth adapter like Facebook |
| 150 | const providerOptions = authOptions[provider]; |
| 151 | if ( |
| 152 | providerOptions && |
| 153 | Object.prototype.hasOwnProperty.call(providerOptions, 'oauth2') && |
| 154 | providerOptions['oauth2'] === true |
| 155 | ) { |
| 156 | defaultAdapter = oauth2; |
| 157 | } |
| 158 | |
| 159 | // Default provider not found and a custom auth provider was not provided |
| 160 | if (!defaultAdapter && !providerOptions) { |
| 161 | return; |
| 162 | } |
| 163 | |
| 164 | const adapter = |
| 165 | defaultAdapter instanceof AuthAdapter ? new defaultAdapter.constructor() : Object.assign({}, defaultAdapter); |
| 166 | const keys = [ |
| 167 | 'validateAuthData', |
| 168 | 'validateAppId', |
| 169 | 'validateSetUp', |
| 170 | 'validateLogin', |
| 171 | 'validateUpdate', |
| 172 | 'challenge', |
| 173 | 'validateOptions', |
| 174 | 'policy', |
| 175 | 'afterFind', |
| 176 | ]; |
| 177 | const defaultAuthAdapter = new AuthAdapter(); |
| 178 | keys.forEach(key => { |
| 179 | const existing = adapter?.[key]; |
| 180 | if ( |
| 181 | existing && |
| 182 | typeof existing === 'function' && |
| 183 | existing.toString() === defaultAuthAdapter[key].toString() |
| 184 | ) { |
| 185 | adapter[key] = null; |
| 186 | } |
| 187 | }); |
| 188 | const appIds = providerOptions ? providerOptions.appIds : undefined; |
| 189 | |
| 190 | // Try the configuration methods |
| 191 | if (providerOptions) { |
| 192 | const optionalAdapter = loadAdapter(providerOptions, undefined, providerOptions); |
| 193 | if (optionalAdapter) { |
| 194 | keys.forEach(key => { |
| 195 | if (optionalAdapter[key]) { |
| 196 | adapter[key] = optionalAdapter[key]; |
| 197 | } |
| 198 | }); |
| 199 | } |
| 200 | } |
| 201 | if (adapter.validateOptions) { |
| 202 | adapter.validateOptions(providerOptions); |
no test coverage detected