Fix's bug that does not allow an Oauth2 provider to have different slug and backend_names

Added comment to explain model change.

Removed accidental whitespace.

Another pip issue.
This commit is contained in:
Thomas Tracy
2019-03-28 14:06:10 -04:00
parent faab3e954a
commit f59dc6c820
3 changed files with 21 additions and 6 deletions

View File

@@ -332,6 +332,13 @@ class OAuth2ProviderConfig(ProviderConfig):
.. no_pii:
"""
# We are keying the provider config by backend_name here as suggested in the python social
# auth documentation. In order to reuse a backend for a second provider, a subclass can be
# created with seperate name.
# example:
# class SecondOpenIDProvider(OpenIDAuth):
# name = "second-openId-provider"
KEY_FIELDS = ('backend_name',)
prefix = 'oa2'
backend_name = models.CharField(
max_length=50, blank=False, db_index=True,

View File

@@ -28,9 +28,9 @@ class Registry(object):
Helper method that returns a generator used to iterate over all providers
of the current site.
"""
oauth2_slugs = OAuth2ProviderConfig.key_values('slug', flat=True)
for oauth2_slug in oauth2_slugs:
provider = OAuth2ProviderConfig.current(oauth2_slug)
oauth2_backend_names = OAuth2ProviderConfig.key_values('backend_name', flat=True)
for oauth2_backend_name in oauth2_backend_names:
provider = OAuth2ProviderConfig.current(oauth2_backend_name)
if provider.enabled_for_current_site and provider.backend_name in _PSA_OAUTH2_BACKENDS:
yield provider
if SAMLConfiguration.is_enabled(Site.objects.get_current(get_current_request()), 'default'):
@@ -112,9 +112,9 @@ class Registry(object):
Instances of ProviderConfig.
"""
if backend_name in _PSA_OAUTH2_BACKENDS:
oauth2_slugs = OAuth2ProviderConfig.key_values('slug', flat=True)
for oauth2_slug in oauth2_slugs:
provider = OAuth2ProviderConfig.current(oauth2_slug)
oauth2_backend_names = OAuth2ProviderConfig.key_values('backend_name', flat=True)
for oauth2_backend_name in oauth2_backend_names:
provider = OAuth2ProviderConfig.current(oauth2_backend_name)
if provider.backend_name == backend_name and provider.enabled_for_current_site:
yield provider
elif backend_name in _PSA_SAML_BACKENDS and SAMLConfiguration.is_enabled(

View File

@@ -159,6 +159,14 @@ class RegistryTest(testutil.TestCase):
self.assertIn(google_provider, provider.Registry._enabled_providers())
self.assertIn(google_provider, provider.Registry.get_enabled_by_backend_name('google-oauth2'))
def test_oath2_different_slug_from_backend_name(self):
"""
Test that an OAuth2 provider can have a slug that differs from the backend name.
"""
dummy_provider = self.configure_oauth_provider(enabled=True, name="dummy", slug="default", backend_name="dummy")
self.assertIn(dummy_provider, provider.Registry._enabled_providers())
self.assertIn(dummy_provider, provider.Registry.get_enabled_by_backend_name('dummy'))
def test_oauth2_enabled_only_for_supplied_backend(self):
"""
Test to ensure that Registry.get_enabled_by_backend_name doesn't return OAuth2 providers with incorrect