Fixes issue affecting the auth providers (#3211)
* Reproduces error for issue 3208 * Make sure we don't override a default adapter with the options when validation function are not provided
This commit is contained in:
committed by
Arthur Cinader
parent
81ebbb8954
commit
4f46eceacf
@@ -203,6 +203,13 @@ describe('AuthenticationProviers', function() {
|
|||||||
expect(typeof authenticatonHandler.getValidatorForProvider).toBe('function');
|
expect(typeof authenticatonHandler.getValidatorForProvider).toBe('function');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function validateAuthenticationAdapter(authAdapter) {
|
||||||
|
expect(authAdapter).not.toBeUndefined();
|
||||||
|
if (!authAdapter) { return; }
|
||||||
|
expect(typeof authAdapter.validateAuthData).toBe('function');
|
||||||
|
expect(typeof authAdapter.validateAppId).toBe('function');
|
||||||
|
}
|
||||||
|
|
||||||
it('properly loads custom adapter', (done) => {
|
it('properly loads custom adapter', (done) => {
|
||||||
var validAuthData = {
|
var validAuthData = {
|
||||||
id: 'hello',
|
id: 'hello',
|
||||||
@@ -279,4 +286,30 @@ describe('AuthenticationProviers', function() {
|
|||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('properly loads a default adapter with options', () => {
|
||||||
|
const options = {
|
||||||
|
facebook: {
|
||||||
|
appIds: ['a', 'b']
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const { adapter, appIds, providerOptions } = authenticationLoader.loadAuthAdapter('facebook', options);
|
||||||
|
validateAuthenticationAdapter(adapter);
|
||||||
|
expect(appIds).toEqual(['a', 'b']);
|
||||||
|
expect(providerOptions).toEqual(options.facebook);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('properly loads a custom adapter with options', () => {
|
||||||
|
const options = {
|
||||||
|
custom: {
|
||||||
|
validateAppId: () => {},
|
||||||
|
validateAuthData: () => {},
|
||||||
|
appIds: ['a', 'b']
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const { adapter, appIds, providerOptions } = authenticationLoader.loadAuthAdapter('custom', options);
|
||||||
|
validateAuthenticationAdapter(adapter);
|
||||||
|
expect(appIds).toEqual(['a', 'b']);
|
||||||
|
expect(providerOptions).toEqual(options.custom);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -55,6 +55,36 @@ function authDataValidator(adapter, appIds, options) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function loadAuthAdapter(provider, authOptions) {
|
||||||
|
const defaultAdapter = providers[provider];
|
||||||
|
const adapter = Object.assign({}, defaultAdapter);
|
||||||
|
const providerOptions = authOptions[provider];
|
||||||
|
|
||||||
|
if (!defaultAdapter && !providerOptions) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const appIds = providerOptions ? providerOptions.appIds : undefined;
|
||||||
|
|
||||||
|
// Try the configuration methods
|
||||||
|
if (providerOptions) {
|
||||||
|
const optionalAdapter = loadAdapter(providerOptions, undefined, providerOptions);
|
||||||
|
if (optionalAdapter) {
|
||||||
|
['validateAuthData', 'validateAppId'].forEach((key) => {
|
||||||
|
if (optionalAdapter[key]) {
|
||||||
|
adapter[key] = optionalAdapter[key];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!adapter.validateAuthData || !adapter.validateAppId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {adapter, appIds, providerOptions};
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = function(authOptions = {}, enableAnonymousUsers = true) {
|
module.exports = function(authOptions = {}, enableAnonymousUsers = true) {
|
||||||
let _enableAnonymousUsers = enableAnonymousUsers;
|
let _enableAnonymousUsers = enableAnonymousUsers;
|
||||||
const setEnableAnonymousUsers = function(enable) {
|
const setEnableAnonymousUsers = function(enable) {
|
||||||
@@ -67,33 +97,19 @@ module.exports = function(authOptions = {}, enableAnonymousUsers = true) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultAdapter = providers[provider];
|
const {
|
||||||
let adapter = defaultAdapter;
|
adapter,
|
||||||
const providerOptions = authOptions[provider];
|
appIds,
|
||||||
|
providerOptions
|
||||||
if (!defaultAdapter && !providerOptions) {
|
} = loadAuthAdapter(provider, authOptions);
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const appIds = providerOptions ? providerOptions.appIds : undefined;
|
|
||||||
|
|
||||||
// Try the configuration methods
|
|
||||||
if (providerOptions) {
|
|
||||||
const optionalAdapter = loadAdapter(providerOptions, undefined, providerOptions);
|
|
||||||
if (optionalAdapter) {
|
|
||||||
adapter = optionalAdapter;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!adapter.validateAuthData || !adapter.validateAppId) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
return authDataValidator(adapter, appIds, providerOptions);
|
return authDataValidator(adapter, appIds, providerOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Object.freeze({
|
return Object.freeze({
|
||||||
getValidatorForProvider,
|
getValidatorForProvider,
|
||||||
setEnableAnonymousUsers,
|
setEnableAnonymousUsers
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module.exports.loadAuthAdapter = loadAuthAdapter;
|
||||||
|
|||||||
Reference in New Issue
Block a user