diff --git a/zerver/tests/test_auth_backends.py b/zerver/tests/test_auth_backends.py index c7b42fef90..d49fe8183d 100644 --- a/zerver/tests/test_auth_backends.py +++ b/zerver/tests/test_auth_backends.py @@ -39,13 +39,12 @@ from zproject.backends import ZulipDummyBackend, EmailAuthBackend, \ GoogleMobileOauth2Backend, ZulipRemoteUserBackend, ZulipLDAPAuthBackend, \ ZulipLDAPUserPopulator, DevAuthBackend, GitHubAuthBackend, ZulipAuthMixin, \ dev_auth_enabled, password_auth_enabled, github_auth_enabled, \ - SocialAuthMixin, AUTH_BACKEND_NAME_MAP + SocialAuthMixin, AUTH_BACKEND_NAME_MAP, SocialAuthStrategy from zerver.views.auth import maybe_send_to_registration from version import ZULIP_VERSION from social_core.exceptions import AuthFailed, AuthStateForbidden -from social_django.strategy import DjangoStrategy from social_django.storage import BaseDjangoStorage from social_core.backends.github import GithubOrganizationOAuth2, GithubTeamOAuth2, \ GithubOAuth2 @@ -392,7 +391,7 @@ class GitHubAuthBackendTest(ZulipTestCase): self.email = 'hamlet@zulip.com' self.name = 'Hamlet' self.backend = GitHubAuthBackend() - self.backend.strategy = DjangoStrategy(storage=BaseDjangoStorage()) + self.backend.strategy = SocialAuthStrategy(storage=BaseDjangoStorage()) self.user_profile = get_user_profile_by_email(self.email) self.user_profile.backend = self.backend @@ -406,7 +405,7 @@ class GitHubAuthBackendTest(ZulipTestCase): def do_auth(self, *args, **kwargs): # type: (*Any, **Any) -> UserProfile with self.settings(AUTHENTICATION_BACKENDS=('zproject.backends.GitHubAuthBackend',)): - return self.backend.authenticate(**kwargs) + return self.backend.strategy.authenticate(self.backend, **kwargs) def test_github_auth_enabled(self): # type: () -> None diff --git a/zproject/backends.py b/zproject/backends.py index 59576be16f..c442e9e999 100644 --- a/zproject/backends.py +++ b/zproject/backends.py @@ -17,6 +17,7 @@ from zerver.models import UserProfile, Realm, get_user_profile_by_id, \ from apiclient.sample_tools import client as googleapiclient from oauth2client.crypt import AppIdentityError +from social_core.backends.base import BaseAuth from social_core.backends.github import GithubOAuth2, GithubOrganizationOAuth2, \ GithubTeamOAuth2 from social_core.exceptions import AuthFailed, SocialAuthBaseException @@ -102,6 +103,11 @@ class ZulipAuthMixin(object): except UserProfile.DoesNotExist: return None +class SocialAuthStrategy(DjangoStrategy): + def authenticate(self, backend, *args, **kwargs): + # type: (BaseAuth, *Any, **Any) -> None + return backend.authenticate(*args, **kwargs) + class SocialAuthMixin(ZulipAuthMixin): auth_backend_name = None # type: Text @@ -116,7 +122,7 @@ class SocialAuthMixin(ZulipAuthMixin): def authenticate(self, realm_subdomain='', # type: Optional[Text] storage=None, # type: Optional[DjangoStorage] - strategy=None, # type: Optional[DjangoStrategy] + strategy=None, # type: Optional[SocialAuthStrategy] user=None, # type: Optional[Dict[str, Any]] return_data=None, # type: Optional[Dict[str, Any]] response=None, # type: Optional[Dict[str, Any]] diff --git a/zproject/settings.py b/zproject/settings.py index 1969e56410..5f6f1205ed 100644 --- a/zproject/settings.py +++ b/zproject/settings.py @@ -1202,6 +1202,7 @@ SOCIAL_AUTH_GITHUB_ORG_KEY = SOCIAL_AUTH_GITHUB_KEY SOCIAL_AUTH_GITHUB_ORG_SECRET = SOCIAL_AUTH_GITHUB_SECRET SOCIAL_AUTH_GITHUB_TEAM_KEY = SOCIAL_AUTH_GITHUB_KEY SOCIAL_AUTH_GITHUB_TEAM_SECRET = SOCIAL_AUTH_GITHUB_SECRET +SOCIAL_AUTH_STRATEGY = 'zproject.backends.SocialAuthStrategy' ######################################################################## # EMAIL SETTINGS