mirror of
https://github.com/zulip/zulip.git
synced 2025-11-15 11:22:04 +00:00
views: Move some login code from registration to auth.
Most of these have more to do with authentication in general than with registering a new account. `create_preregistration_user` could go either way; we move it to `auth` so we can make the imports go only in one direction.
This commit is contained in:
@@ -16,10 +16,11 @@ from confirmation import settings as confirmation_settings
|
||||
|
||||
from zerver.forms import HomepageForm, WRONG_SUBDOMAIN_ERROR
|
||||
from zerver.lib.actions import do_change_password, gather_subscriptions
|
||||
from zerver.views.auth import login_or_register_remote_user
|
||||
from zerver.views.auth import login_or_register_remote_user, \
|
||||
redirect_and_log_into_subdomain
|
||||
from zerver.views.invite import get_invitee_emails_set
|
||||
from zerver.views.registration import confirmation_key, \
|
||||
redirect_and_log_into_subdomain, send_registration_completion_email
|
||||
send_registration_completion_email
|
||||
|
||||
from zerver.models import (
|
||||
get_realm, get_prereg_user_by_email, get_user, get_recipient,
|
||||
|
||||
@@ -20,7 +20,7 @@ from six.moves import urllib
|
||||
from typing import Any, Dict, List, Optional, Tuple, Text
|
||||
|
||||
from confirmation.models import Confirmation, create_confirmation_link
|
||||
from zerver.context_processors import zulip_default_context
|
||||
from zerver.context_processors import zulip_default_context, get_realm_from_request
|
||||
from zerver.forms import HomepageForm, OurAuthenticationForm, \
|
||||
WRONG_SUBDOMAIN_ERROR
|
||||
from zerver.lib.mobile_auth_otp import is_valid_otp, otp_encrypt_api_key
|
||||
@@ -30,8 +30,6 @@ from zerver.lib.subdomains import get_subdomain, is_subdomain_root_or_alias
|
||||
from zerver.lib.validator import validate_login_email
|
||||
from zerver.models import PreregistrationUser, UserProfile, remote_user_to_email, Realm, \
|
||||
get_realm
|
||||
from zerver.views.registration import create_preregistration_user, get_realm_from_request, \
|
||||
redirect_and_log_into_subdomain, redirect_to_deactivation_notice
|
||||
from zerver.signals import email_on_new_login
|
||||
from zproject.backends import password_auth_enabled, dev_auth_enabled, \
|
||||
github_auth_enabled, google_auth_enabled, ldap_auth_enabled, \
|
||||
@@ -46,6 +44,13 @@ import requests
|
||||
import time
|
||||
import ujson
|
||||
|
||||
def create_preregistration_user(email, request, realm_creation=False,
|
||||
password_required=True):
|
||||
# type: (Text, HttpRequest, bool, bool) -> HttpResponse
|
||||
return PreregistrationUser.objects.create(email=email,
|
||||
realm_creation=realm_creation,
|
||||
password_required=password_required)
|
||||
|
||||
def maybe_send_to_registration(request, email, full_name='', password_required=True):
|
||||
# type: (HttpRequest, Text, Text, bool) -> HttpResponse
|
||||
|
||||
@@ -460,6 +465,28 @@ def log_into_subdomain(request):
|
||||
full_name, invalid_subdomain=invalid_subdomain,
|
||||
is_signup=is_signup)
|
||||
|
||||
def redirect_and_log_into_subdomain(realm, full_name, email_address,
|
||||
is_signup=False):
|
||||
# type: (Realm, Text, Text, bool) -> HttpResponse
|
||||
subdomain_login_uri = ''.join([
|
||||
realm.uri,
|
||||
reverse('zerver.views.auth.log_into_subdomain')
|
||||
])
|
||||
|
||||
domain = settings.EXTERNAL_HOST.split(':')[0]
|
||||
response = redirect(subdomain_login_uri)
|
||||
|
||||
data = {'name': full_name, 'email': email_address, 'subdomain': realm.subdomain,
|
||||
'is_signup': is_signup}
|
||||
# Creating a singed cookie so that it cannot be tampered with.
|
||||
# Cookie and the signature expire in 15 seconds.
|
||||
response.set_signed_cookie('subdomain.signature',
|
||||
ujson.dumps(data),
|
||||
expires=15,
|
||||
domain=domain,
|
||||
salt='zerver.views.auth')
|
||||
return response
|
||||
|
||||
def get_dev_users(realm=None, extra_users_count=10):
|
||||
# type: (Optional[Realm], int) -> List[UserProfile]
|
||||
# Development environments usually have only a few users, but
|
||||
@@ -486,6 +513,19 @@ def redirect_to_misconfigured_ldap_notice(error_type):
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
def show_deactivation_notice(request):
|
||||
# type: (HttpRequest) -> HttpResponse
|
||||
realm = get_realm_from_request(request)
|
||||
if realm and realm.deactivated:
|
||||
return render(request, "zerver/deactivated.html",
|
||||
context={"deactivated_domain_name": realm.name})
|
||||
|
||||
return HttpResponseRedirect(reverse('zerver.views.auth.login_page'))
|
||||
|
||||
def redirect_to_deactivation_notice():
|
||||
# type: () -> HttpResponse
|
||||
return HttpResponseRedirect(reverse('zerver.views.auth.show_deactivation_notice'))
|
||||
|
||||
def login_page(request, **kwargs):
|
||||
# type: (HttpRequest, **Any) -> HttpResponse
|
||||
if request.user.is_authenticated:
|
||||
|
||||
@@ -12,7 +12,7 @@ from django.utils.timezone import now
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core import validators
|
||||
from zerver.context_processors import get_realm_from_request
|
||||
from zerver.models import UserProfile, Realm, Stream, PreregistrationUser, MultiuseInvite, \
|
||||
from zerver.models import UserProfile, Realm, Stream, MultiuseInvite, \
|
||||
name_changes_disabled, email_to_username, email_allowed_for_realm, \
|
||||
get_realm, get_user_profile_by_email, get_default_stream_groups
|
||||
from zerver.lib.send_email import send_email, FromAddress
|
||||
@@ -31,6 +31,9 @@ from zerver.lib.onboarding import setup_initial_streams, \
|
||||
from zerver.lib.response import json_success
|
||||
from zerver.lib.subdomains import get_subdomain, is_root_domain_available
|
||||
from zerver.lib.timezone import get_all_timezones
|
||||
from zerver.views.auth import create_preregistration_user, \
|
||||
redirect_and_log_into_subdomain, \
|
||||
redirect_to_deactivation_notice
|
||||
from zproject.backends import ldap_auth_enabled, password_auth_enabled, ZulipLDAPAuthBackend
|
||||
|
||||
from confirmation.models import Confirmation, RealmCreationKey, ConfirmationKeyException, \
|
||||
@@ -44,28 +47,6 @@ import ujson
|
||||
|
||||
from six.moves import urllib
|
||||
|
||||
def redirect_and_log_into_subdomain(realm, full_name, email_address,
|
||||
is_signup=False):
|
||||
# type: (Realm, Text, Text, bool) -> HttpResponse
|
||||
subdomain_login_uri = ''.join([
|
||||
realm.uri,
|
||||
reverse('zerver.views.auth.log_into_subdomain')
|
||||
])
|
||||
|
||||
domain = settings.EXTERNAL_HOST.split(':')[0]
|
||||
response = redirect(subdomain_login_uri)
|
||||
|
||||
data = {'name': full_name, 'email': email_address, 'subdomain': realm.subdomain,
|
||||
'is_signup': is_signup}
|
||||
# Creating a singed cookie so that it cannot be tampered with.
|
||||
# Cookie and the signature expire in 15 seconds.
|
||||
response.set_signed_cookie('subdomain.signature',
|
||||
ujson.dumps(data),
|
||||
expires=15,
|
||||
domain=domain,
|
||||
salt='zerver.views.auth')
|
||||
return response
|
||||
|
||||
@require_post
|
||||
def accounts_register(request):
|
||||
# type: (HttpRequest) -> HttpResponse
|
||||
@@ -293,13 +274,6 @@ def login_and_go_to_home(request, user_profile):
|
||||
do_login(request, user_profile)
|
||||
return HttpResponseRedirect(user_profile.realm.uri + reverse('zerver.views.home.home'))
|
||||
|
||||
def create_preregistration_user(email, request, realm_creation=False,
|
||||
password_required=True):
|
||||
# type: (Text, HttpRequest, bool, bool) -> HttpResponse
|
||||
return PreregistrationUser.objects.create(email=email,
|
||||
realm_creation=realm_creation,
|
||||
password_required=password_required)
|
||||
|
||||
def send_registration_completion_email(email, request, realm_creation=False, streams=None):
|
||||
# type: (str, HttpRequest, bool, Optional[List[Stream]]) -> None
|
||||
"""
|
||||
@@ -368,20 +342,6 @@ def confirmation_key(request):
|
||||
# type: (HttpRequest) -> HttpResponse
|
||||
return json_success(request.session.get('confirmation_key'))
|
||||
|
||||
|
||||
def show_deactivation_notice(request):
|
||||
# type: (HttpRequest) -> HttpResponse
|
||||
realm = get_realm_from_request(request)
|
||||
if realm and realm.deactivated:
|
||||
return render(request, "zerver/deactivated.html",
|
||||
context={"deactivated_domain_name": realm.name})
|
||||
|
||||
return HttpResponseRedirect(reverse('zerver.views.auth.login_page'))
|
||||
|
||||
def redirect_to_deactivation_notice():
|
||||
# type: () -> HttpResponse
|
||||
return HttpResponseRedirect(reverse('zerver.views.registration.show_deactivation_notice'))
|
||||
|
||||
def accounts_home(request, multiuse_object=None):
|
||||
# type: (HttpRequest, Optional[MultiuseInvite]) -> HttpResponse
|
||||
realm = get_realm(get_subdomain(request))
|
||||
|
||||
@@ -193,8 +193,8 @@ class SocialAuthMixin(ZulipAuthMixin):
|
||||
# These functions need to be imported here to avoid cyclic
|
||||
# dependency.
|
||||
from zerver.views.auth import (login_or_register_remote_user,
|
||||
redirect_to_subdomain_login_url)
|
||||
from zerver.views.registration import redirect_and_log_into_subdomain
|
||||
redirect_to_subdomain_login_url,
|
||||
redirect_and_log_into_subdomain)
|
||||
|
||||
return_data = kwargs.get('return_data', {})
|
||||
|
||||
|
||||
@@ -360,8 +360,8 @@ i18n_urls = [
|
||||
url(r'^accounts/password/done/$', password_reset_complete,
|
||||
{'template_name': 'zerver/reset_done.html'}),
|
||||
url(r'^accounts/deactivated/',
|
||||
zerver.views.registration.show_deactivation_notice,
|
||||
name='zerver.views.registration.show_deactivation_notice'),
|
||||
zerver.views.auth.show_deactivation_notice,
|
||||
name='zerver.views.auth.show_deactivation_notice'),
|
||||
|
||||
# Avatar
|
||||
url(r'^avatar/(?P<email_or_id>[\S]+)?/(?P<medium>[\S]+)?', zerver.views.users.avatar,
|
||||
|
||||
Reference in New Issue
Block a user