mirror of https://github.com/zulip/zulip.git
refactor: De-duplicate login button code in portico templates.
This commit is contained in:
parent
0e401c4f18
commit
3610aaece3
|
@ -635,7 +635,7 @@ button.login-google-button {
|
|||
transform: translateX(15px) translateY(13px);
|
||||
}
|
||||
|
||||
.azure-wrapper::before {
|
||||
.azuread-wrapper::before {
|
||||
content: "\f17a";
|
||||
position: absolute;
|
||||
|
||||
|
|
|
@ -143,27 +143,16 @@
|
|||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if github_auth_enabled %}
|
||||
{% for backend in social_backends %}
|
||||
<div class="login-social">
|
||||
<form id='social_login_form' class="form-inline github-wrapper" action="{{ url('login-social', args=('github',)) }}" method="get">
|
||||
<form id='social_login_form' class="form-inline {{ backend.name }}-wrapper" action="{{ backend.login_url }}" method="get">
|
||||
<input type="hidden" name="next" value="{{ next }}">
|
||||
<button class="login-social-button">
|
||||
{{ _('Log in with %(identity_provider)s', identity_provider="GitHub") }}
|
||||
{{ _('Log in with %(identity_provider)s', identity_provider=backend.display_name) }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if azuread_auth_enabled %}
|
||||
<div class="login-social">
|
||||
<form id='azure_login_form' class="form-inline azure-wrapper" action="{{ url('login-social', args=('azuread-oauth2',)) }}" method="get">
|
||||
<input type="hidden" name="next" value="{{ next }}">
|
||||
<button class="login-social-button">
|
||||
{{ _('Log in with %(identity_provider)s', identity_provider="Azure AD") }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
<div class="actions">
|
||||
{% if email_auth_enabled %}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
from typing import Any, Dict, Optional
|
||||
from django.http import HttpRequest
|
||||
from django.conf import settings
|
||||
from django.urls import reverse
|
||||
|
||||
from zerver.models import UserProfile, get_realm, Realm
|
||||
from zproject.backends import (
|
||||
|
@ -10,6 +11,7 @@ from zproject.backends import (
|
|||
require_email_format_usernames,
|
||||
auth_enabled_helper,
|
||||
AUTH_BACKEND_NAME_MAP,
|
||||
SOCIAL_AUTH_BACKENDS,
|
||||
)
|
||||
from zerver.lib.bugdown import convert as bugdown_convert
|
||||
from zerver.lib.send_email import FromAddress
|
||||
|
@ -147,4 +149,17 @@ def zulip_default_context(request: HttpRequest) -> Dict[str, Any]:
|
|||
name_lower = auth_backend_name.lower()
|
||||
key = "%s_auth_enabled" % (name_lower,)
|
||||
context[key] = auth_enabled_helper([auth_backend_name], realm)
|
||||
|
||||
social_backends = []
|
||||
for backend in SOCIAL_AUTH_BACKENDS:
|
||||
if not auth_enabled_helper([backend.auth_backend_name], realm):
|
||||
continue
|
||||
social_backends.append({
|
||||
'name': backend.name,
|
||||
'display_name': backend.auth_backend_name,
|
||||
'login_url': reverse('login-social', args=(backend.name,)),
|
||||
'sort_order': backend.sort_order,
|
||||
})
|
||||
context['social_backends'] = sorted(social_backends, key=lambda x: x['sort_order'])
|
||||
|
||||
return context
|
||||
|
|
|
@ -650,6 +650,8 @@ def social_auth_finish(backend: Any,
|
|||
|
||||
class SocialAuthMixin(ZulipAuthMixin):
|
||||
auth_backend_name = "undeclared"
|
||||
# Used to determine how to order buttons on login form
|
||||
sort_order = 0
|
||||
|
||||
def auth_complete(self, *args: Any, **kwargs: Any) -> Optional[HttpResponse]:
|
||||
"""This is a small wrapper around the core `auth_complete` method of
|
||||
|
@ -676,6 +678,7 @@ class SocialAuthMixin(ZulipAuthMixin):
|
|||
|
||||
class GitHubAuthBackend(SocialAuthMixin, GithubOAuth2):
|
||||
auth_backend_name = "GitHub"
|
||||
sort_order = 50
|
||||
|
||||
def get_verified_emails(self, *args: Any, **kwargs: Any) -> List[str]:
|
||||
access_token = kwargs["response"]["access_token"]
|
||||
|
@ -727,6 +730,7 @@ class GitHubAuthBackend(SocialAuthMixin, GithubOAuth2):
|
|||
raise AssertionError("Invalid configuration")
|
||||
|
||||
class AzureADAuthBackend(SocialAuthMixin, AzureADOAuth2):
|
||||
sort_order = 100
|
||||
auth_backend_name = "AzureAD"
|
||||
|
||||
AUTH_BACKEND_NAME_MAP = {
|
||||
|
@ -737,9 +741,11 @@ AUTH_BACKEND_NAME_MAP = {
|
|||
'RemoteUser': ZulipRemoteUserBackend,
|
||||
} # type: Dict[str, Any]
|
||||
OAUTH_BACKEND_NAMES = ["Google"] # type: List[str]
|
||||
SOCIAL_AUTH_BACKENDS = [] # type: List[BaseOAuth2]
|
||||
|
||||
# Authomatically add all of our social auth backends to relevant data structures.
|
||||
for social_auth_subclass in SocialAuthMixin.__subclasses__():
|
||||
AUTH_BACKEND_NAME_MAP[social_auth_subclass.auth_backend_name] = social_auth_subclass
|
||||
if issubclass(social_auth_subclass, BaseOAuth2):
|
||||
OAUTH_BACKEND_NAMES.append(social_auth_subclass.auth_backend_name)
|
||||
SOCIAL_AUTH_BACKENDS.append(social_auth_subclass)
|
||||
|
|
Loading…
Reference in New Issue