diff --git a/zerver/decorator.py b/zerver/decorator.py index 31f0421526..0d7b5f9433 100644 --- a/zerver/decorator.py +++ b/zerver/decorator.py @@ -299,6 +299,16 @@ def logged_in_and_active(request): return False return check_subdomain(get_subdomain(request), request.user.realm.subdomain) +def add_logging_data(view_func): + # type: (ViewFuncT) -> ViewFuncT + @wraps(view_func) + def _wrapped_view_func(request, *args, **kwargs): + # type: (HttpRequest, *Any, **Any) -> HttpResponse + request._email = request.user.email + process_client(request, request.user, is_json_view=True) + return view_func(request, *args, **kwargs) + return _wrapped_view_func # type: ignore # https://github.com/python/mypy/issues/1927 + # Based on Django 1.8's @login_required def zulip_login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, @@ -310,7 +320,8 @@ def zulip_login_required(function=None, redirect_field_name=redirect_field_name ) if function: - return actual_decorator(function) + # Add necessary logging data via add_logging_data + return actual_decorator(add_logging_data(function)) return actual_decorator def zulip_internal(view_func): @@ -323,9 +334,7 @@ def zulip_internal(view_func): if not request.user.is_staff: return HttpResponseRedirect(settings.HOME_NOT_LOGGED_IN) - request._email = request.user.email - process_client(request, request.user) - return view_func(request, *args, **kwargs) + return add_logging_data(view_func)(request, *args, **kwargs) return _wrapped_view_func # type: ignore # https://github.com/python/mypy/issues/1927 # authenticated_api_view will add the authenticated user's diff --git a/zerver/views/home.py b/zerver/views/home.py index 51c0eee3ce..cfb57d2f36 100644 --- a/zerver/views/home.py +++ b/zerver/views/home.py @@ -107,9 +107,6 @@ def home_real(request): request.session.modified = True user_profile = request.user - request._email = request.user.email - # Process the client as an auth decorator would - process_client(request, user_profile, is_json_view=True) # If a user hasn't signed the current Terms of Service, send them there if settings.TERMS_OF_SERVICE is not None and settings.TOS_VERSION is not None and \ diff --git a/zerver/views/registration.py b/zerver/views/registration.py index 67d214fc3a..ec0fb04135 100644 --- a/zerver/views/registration.py +++ b/zerver/views/registration.py @@ -27,8 +27,7 @@ from zerver.forms import RegistrationForm, HomepageForm, RealmCreationForm, \ from zerver.lib.actions import is_inactive from django_auth_ldap.backend import LDAPBackend, _LDAPUser from zerver.decorator import require_post, has_request_variables, \ - JsonableError, get_user_profile_by_email, REQ, \ - zulip_login_required + JsonableError, get_user_profile_by_email, REQ from zerver.lib.response import json_success from zerver.lib.utils import get_subdomain from zproject.backends import password_auth_enabled diff --git a/zerver/views/upload.py b/zerver/views/upload.py index 9075867916..5a732bb65e 100644 --- a/zerver/views/upload.py +++ b/zerver/views/upload.py @@ -6,7 +6,7 @@ from django.http import HttpRequest, HttpResponse, HttpResponseForbidden, FileRe from django.shortcuts import redirect from django.utils.translation import ugettext as _ -from zerver.decorator import authenticated_json_post_view, zulip_login_required +from zerver.decorator import authenticated_json_post_view from zerver.lib.request import has_request_variables, REQ from zerver.lib.response import json_success, json_error from zerver.lib.upload import upload_message_image_from_request, get_local_file_path, \