Skip to content
Snippets Groups Projects
Commit f59dc6c8 authored by Thomas Tracy's avatar Thomas Tracy
Browse files

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.
parent faab3e95
No related branches found
No related tags found
No related merge requests found
......@@ -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,
......
......@@ -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(
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment