mirror of
https://github.com/zulip/zulip.git
synced 2025-11-15 19:31:58 +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.forms import HomepageForm, WRONG_SUBDOMAIN_ERROR
|
||||||
from zerver.lib.actions import do_change_password, gather_subscriptions
|
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.invite import get_invitee_emails_set
|
||||||
from zerver.views.registration import confirmation_key, \
|
from zerver.views.registration import confirmation_key, \
|
||||||
redirect_and_log_into_subdomain, send_registration_completion_email
|
send_registration_completion_email
|
||||||
|
|
||||||
from zerver.models import (
|
from zerver.models import (
|
||||||
get_realm, get_prereg_user_by_email, get_user, get_recipient,
|
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 typing import Any, Dict, List, Optional, Tuple, Text
|
||||||
|
|
||||||
from confirmation.models import Confirmation, create_confirmation_link
|
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, \
|
from zerver.forms import HomepageForm, OurAuthenticationForm, \
|
||||||
WRONG_SUBDOMAIN_ERROR
|
WRONG_SUBDOMAIN_ERROR
|
||||||
from zerver.lib.mobile_auth_otp import is_valid_otp, otp_encrypt_api_key
|
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.lib.validator import validate_login_email
|
||||||
from zerver.models import PreregistrationUser, UserProfile, remote_user_to_email, Realm, \
|
from zerver.models import PreregistrationUser, UserProfile, remote_user_to_email, Realm, \
|
||||||
get_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 zerver.signals import email_on_new_login
|
||||||
from zproject.backends import password_auth_enabled, dev_auth_enabled, \
|
from zproject.backends import password_auth_enabled, dev_auth_enabled, \
|
||||||
github_auth_enabled, google_auth_enabled, ldap_auth_enabled, \
|
github_auth_enabled, google_auth_enabled, ldap_auth_enabled, \
|
||||||
@@ -46,6 +44,13 @@ import requests
|
|||||||
import time
|
import time
|
||||||
import ujson
|
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):
|
def maybe_send_to_registration(request, email, full_name='', password_required=True):
|
||||||
# type: (HttpRequest, Text, Text, bool) -> HttpResponse
|
# type: (HttpRequest, Text, Text, bool) -> HttpResponse
|
||||||
|
|
||||||
@@ -460,6 +465,28 @@ def log_into_subdomain(request):
|
|||||||
full_name, invalid_subdomain=invalid_subdomain,
|
full_name, invalid_subdomain=invalid_subdomain,
|
||||||
is_signup=is_signup)
|
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):
|
def get_dev_users(realm=None, extra_users_count=10):
|
||||||
# type: (Optional[Realm], int) -> List[UserProfile]
|
# type: (Optional[Realm], int) -> List[UserProfile]
|
||||||
# Development environments usually have only a few users, but
|
# Development environments usually have only a few users, but
|
||||||
@@ -486,6 +513,19 @@ def redirect_to_misconfigured_ldap_notice(error_type):
|
|||||||
|
|
||||||
return HttpResponseRedirect(url)
|
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):
|
def login_page(request, **kwargs):
|
||||||
# type: (HttpRequest, **Any) -> HttpResponse
|
# type: (HttpRequest, **Any) -> HttpResponse
|
||||||
if request.user.is_authenticated:
|
if request.user.is_authenticated:
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ from django.utils.timezone import now
|
|||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.core import validators
|
from django.core import validators
|
||||||
from zerver.context_processors import get_realm_from_request
|
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, \
|
name_changes_disabled, email_to_username, email_allowed_for_realm, \
|
||||||
get_realm, get_user_profile_by_email, get_default_stream_groups
|
get_realm, get_user_profile_by_email, get_default_stream_groups
|
||||||
from zerver.lib.send_email import send_email, FromAddress
|
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.response import json_success
|
||||||
from zerver.lib.subdomains import get_subdomain, is_root_domain_available
|
from zerver.lib.subdomains import get_subdomain, is_root_domain_available
|
||||||
from zerver.lib.timezone import get_all_timezones
|
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 zproject.backends import ldap_auth_enabled, password_auth_enabled, ZulipLDAPAuthBackend
|
||||||
|
|
||||||
from confirmation.models import Confirmation, RealmCreationKey, ConfirmationKeyException, \
|
from confirmation.models import Confirmation, RealmCreationKey, ConfirmationKeyException, \
|
||||||
@@ -44,28 +47,6 @@ import ujson
|
|||||||
|
|
||||||
from six.moves import urllib
|
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
|
@require_post
|
||||||
def accounts_register(request):
|
def accounts_register(request):
|
||||||
# type: (HttpRequest) -> HttpResponse
|
# type: (HttpRequest) -> HttpResponse
|
||||||
@@ -293,13 +274,6 @@ def login_and_go_to_home(request, user_profile):
|
|||||||
do_login(request, user_profile)
|
do_login(request, user_profile)
|
||||||
return HttpResponseRedirect(user_profile.realm.uri + reverse('zerver.views.home.home'))
|
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):
|
def send_registration_completion_email(email, request, realm_creation=False, streams=None):
|
||||||
# type: (str, HttpRequest, bool, Optional[List[Stream]]) -> None
|
# type: (str, HttpRequest, bool, Optional[List[Stream]]) -> None
|
||||||
"""
|
"""
|
||||||
@@ -368,20 +342,6 @@ def confirmation_key(request):
|
|||||||
# type: (HttpRequest) -> HttpResponse
|
# type: (HttpRequest) -> HttpResponse
|
||||||
return json_success(request.session.get('confirmation_key'))
|
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):
|
def accounts_home(request, multiuse_object=None):
|
||||||
# type: (HttpRequest, Optional[MultiuseInvite]) -> HttpResponse
|
# type: (HttpRequest, Optional[MultiuseInvite]) -> HttpResponse
|
||||||
realm = get_realm(get_subdomain(request))
|
realm = get_realm(get_subdomain(request))
|
||||||
|
|||||||
@@ -193,8 +193,8 @@ class SocialAuthMixin(ZulipAuthMixin):
|
|||||||
# These functions need to be imported here to avoid cyclic
|
# These functions need to be imported here to avoid cyclic
|
||||||
# dependency.
|
# dependency.
|
||||||
from zerver.views.auth import (login_or_register_remote_user,
|
from zerver.views.auth import (login_or_register_remote_user,
|
||||||
redirect_to_subdomain_login_url)
|
redirect_to_subdomain_login_url,
|
||||||
from zerver.views.registration import redirect_and_log_into_subdomain
|
redirect_and_log_into_subdomain)
|
||||||
|
|
||||||
return_data = kwargs.get('return_data', {})
|
return_data = kwargs.get('return_data', {})
|
||||||
|
|
||||||
|
|||||||
@@ -360,8 +360,8 @@ i18n_urls = [
|
|||||||
url(r'^accounts/password/done/$', password_reset_complete,
|
url(r'^accounts/password/done/$', password_reset_complete,
|
||||||
{'template_name': 'zerver/reset_done.html'}),
|
{'template_name': 'zerver/reset_done.html'}),
|
||||||
url(r'^accounts/deactivated/',
|
url(r'^accounts/deactivated/',
|
||||||
zerver.views.registration.show_deactivation_notice,
|
zerver.views.auth.show_deactivation_notice,
|
||||||
name='zerver.views.registration.show_deactivation_notice'),
|
name='zerver.views.auth.show_deactivation_notice'),
|
||||||
|
|
||||||
# Avatar
|
# Avatar
|
||||||
url(r'^avatar/(?P<email_or_id>[\S]+)?/(?P<medium>[\S]+)?', zerver.views.users.avatar,
|
url(r'^avatar/(?P<email_or_id>[\S]+)?/(?P<medium>[\S]+)?', zerver.views.users.avatar,
|
||||||
|
|||||||
Reference in New Issue
Block a user