mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	decorator: Refactor @require_non_guest_human_user decorator.
Rename @require_non_guest_human_user to @require_member_or_admin. This is a refactor commit prior to introduction of Administrator Bots.
This commit is contained in:
		@@ -75,7 +75,7 @@ def stats(request: HttpRequest) -> HttpResponse:
 | 
				
			|||||||
    realm = request.user.realm
 | 
					    realm = request.user.realm
 | 
				
			||||||
    if request.user.is_guest:
 | 
					    if request.user.is_guest:
 | 
				
			||||||
        # TODO: Make @zulip_login_required pass the UserProfile so we
 | 
					        # TODO: Make @zulip_login_required pass the UserProfile so we
 | 
				
			||||||
        # can use @require_non_guest_human_user
 | 
					        # can use @require_member_or_admin
 | 
				
			||||||
        raise JsonableError(_("Not allowed for guest users"))
 | 
					        raise JsonableError(_("Not allowed for guest users"))
 | 
				
			||||||
    return render_stats(request, '', realm.name or realm.string_id)
 | 
					    return render_stats(request, '', realm.name or realm.string_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -507,7 +507,7 @@ def require_non_guest_user(view_func: ViewFuncT) -> ViewFuncT:
 | 
				
			|||||||
        return view_func(request, user_profile, *args, **kwargs)
 | 
					        return view_func(request, user_profile, *args, **kwargs)
 | 
				
			||||||
    return _wrapped_view_func  # type: ignore # https://github.com/python/mypy/issues/1927
 | 
					    return _wrapped_view_func  # type: ignore # https://github.com/python/mypy/issues/1927
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def require_non_guest_human_user(view_func: ViewFuncT) -> ViewFuncT:
 | 
					def require_member_or_admin(view_func: ViewFuncT) -> ViewFuncT:
 | 
				
			||||||
    @wraps(view_func)
 | 
					    @wraps(view_func)
 | 
				
			||||||
    def _wrapped_view_func(request: HttpRequest, user_profile: UserProfile, *args: Any,
 | 
					    def _wrapped_view_func(request: HttpRequest, user_profile: UserProfile, *args: Any,
 | 
				
			||||||
                           **kwargs: Any) -> HttpResponse:
 | 
					                           **kwargs: Any) -> HttpResponse:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1569,7 +1569,7 @@ class TestRequireDecorators(ZulipTestCase):
 | 
				
			|||||||
        result = self.common_subscribe_to_streams(guest_user.email, ["Denmark"])
 | 
					        result = self.common_subscribe_to_streams(guest_user.email, ["Denmark"])
 | 
				
			||||||
        self.assert_json_error(result, "Not allowed for guest users")
 | 
					        self.assert_json_error(result, "Not allowed for guest users")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_require_non_guest_human_user_decorator(self) -> None:
 | 
					    def test_require_member_or_admin_decorator(self) -> None:
 | 
				
			||||||
        result = self.api_get("outgoing-webhook@zulip.com", '/api/v1/bots')
 | 
					        result = self.api_get("outgoing-webhook@zulip.com", '/api/v1/bots')
 | 
				
			||||||
        self.assert_json_error(result, "This endpoint does not accept bot requests.")
 | 
					        self.assert_json_error(result, "This endpoint does not accept bot requests.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@ from django.http import HttpRequest, HttpResponse
 | 
				
			|||||||
from django.utils.translation import ugettext as _
 | 
					from django.utils.translation import ugettext as _
 | 
				
			||||||
from typing import List, Optional, Set
 | 
					from typing import List, Optional, Set
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from zerver.decorator import require_realm_admin, require_non_guest_human_user
 | 
					from zerver.decorator import require_realm_admin, require_member_or_admin
 | 
				
			||||||
from zerver.lib.actions import do_invite_users, do_revoke_user_invite, \
 | 
					from zerver.lib.actions import do_invite_users, do_revoke_user_invite, \
 | 
				
			||||||
    do_revoke_multi_use_invite, do_resend_user_invite_email, \
 | 
					    do_revoke_multi_use_invite, do_resend_user_invite_email, \
 | 
				
			||||||
    do_get_user_invites, do_create_multiuse_invite_link
 | 
					    do_get_user_invites, do_create_multiuse_invite_link
 | 
				
			||||||
@@ -14,7 +14,7 @@ from zerver.models import PreregistrationUser, Stream, UserProfile, MultiuseInvi
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import re
 | 
					import re
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@require_non_guest_human_user
 | 
					@require_member_or_admin
 | 
				
			||||||
@has_request_variables
 | 
					@has_request_variables
 | 
				
			||||||
def invite_users_backend(request: HttpRequest, user_profile: UserProfile,
 | 
					def invite_users_backend(request: HttpRequest, user_profile: UserProfile,
 | 
				
			||||||
                         invitee_emails_raw: str=REQ("invitee_emails"),
 | 
					                         invitee_emails_raw: str=REQ("invitee_emails"),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ from zerver.lib.emoji import check_emoji_admin, check_valid_emoji_name
 | 
				
			|||||||
from zerver.lib.request import JsonableError, REQ, has_request_variables
 | 
					from zerver.lib.request import JsonableError, REQ, has_request_variables
 | 
				
			||||||
from zerver.lib.response import json_success, json_error
 | 
					from zerver.lib.response import json_success, json_error
 | 
				
			||||||
from zerver.lib.actions import check_add_realm_emoji, do_remove_realm_emoji
 | 
					from zerver.lib.actions import check_add_realm_emoji, do_remove_realm_emoji
 | 
				
			||||||
from zerver.decorator import require_non_guest_human_user
 | 
					from zerver.decorator import require_member_or_admin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def list_emoji(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
 | 
					def list_emoji(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
 | 
				
			||||||
@@ -17,7 +17,7 @@ def list_emoji(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
 | 
				
			|||||||
    return json_success({'emoji': user_profile.realm.get_emoji()})
 | 
					    return json_success({'emoji': user_profile.realm.get_emoji()})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@require_non_guest_human_user
 | 
					@require_member_or_admin
 | 
				
			||||||
@has_request_variables
 | 
					@has_request_variables
 | 
				
			||||||
def upload_emoji(request: HttpRequest, user_profile: UserProfile,
 | 
					def upload_emoji(request: HttpRequest, user_profile: UserProfile,
 | 
				
			||||||
                 emoji_name: str=REQ()) -> HttpResponse:
 | 
					                 emoji_name: str=REQ()) -> HttpResponse:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@ from django.utils.translation import ugettext as _
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
from typing import List
 | 
					from typing import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from zerver.decorator import require_non_guest_human_user
 | 
					from zerver.decorator import require_member_or_admin
 | 
				
			||||||
from zerver.lib.actions import check_add_user_group, do_update_user_group_name, \
 | 
					from zerver.lib.actions import check_add_user_group, do_update_user_group_name, \
 | 
				
			||||||
    do_update_user_group_description, bulk_add_members_to_user_group, \
 | 
					    do_update_user_group_description, bulk_add_members_to_user_group, \
 | 
				
			||||||
    remove_members_from_user_group, check_delete_user_group
 | 
					    remove_members_from_user_group, check_delete_user_group
 | 
				
			||||||
@@ -17,7 +17,7 @@ from zerver.lib.user_groups import access_user_group_by_id, get_memberships_of_u
 | 
				
			|||||||
from zerver.models import UserProfile
 | 
					from zerver.models import UserProfile
 | 
				
			||||||
from zerver.views.streams import compose_views, FuncKwargPair
 | 
					from zerver.views.streams import compose_views, FuncKwargPair
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@require_non_guest_human_user
 | 
					@require_member_or_admin
 | 
				
			||||||
@has_request_variables
 | 
					@has_request_variables
 | 
				
			||||||
def add_user_group(request: HttpRequest, user_profile: UserProfile,
 | 
					def add_user_group(request: HttpRequest, user_profile: UserProfile,
 | 
				
			||||||
                   name: str=REQ(),
 | 
					                   name: str=REQ(),
 | 
				
			||||||
@@ -27,13 +27,13 @@ def add_user_group(request: HttpRequest, user_profile: UserProfile,
 | 
				
			|||||||
    check_add_user_group(user_profile.realm, name, user_profiles, description)
 | 
					    check_add_user_group(user_profile.realm, name, user_profiles, description)
 | 
				
			||||||
    return json_success()
 | 
					    return json_success()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@require_non_guest_human_user
 | 
					@require_member_or_admin
 | 
				
			||||||
@has_request_variables
 | 
					@has_request_variables
 | 
				
			||||||
def get_user_group(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
 | 
					def get_user_group(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
 | 
				
			||||||
    user_groups = user_groups_in_realm_serialized(user_profile.realm)
 | 
					    user_groups = user_groups_in_realm_serialized(user_profile.realm)
 | 
				
			||||||
    return json_success({"user_groups": user_groups})
 | 
					    return json_success({"user_groups": user_groups})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@require_non_guest_human_user
 | 
					@require_member_or_admin
 | 
				
			||||||
@has_request_variables
 | 
					@has_request_variables
 | 
				
			||||||
def edit_user_group(request: HttpRequest, user_profile: UserProfile,
 | 
					def edit_user_group(request: HttpRequest, user_profile: UserProfile,
 | 
				
			||||||
                    user_group_id: int=REQ(validator=check_int),
 | 
					                    user_group_id: int=REQ(validator=check_int),
 | 
				
			||||||
@@ -55,7 +55,7 @@ def edit_user_group(request: HttpRequest, user_profile: UserProfile,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return json_success(result)
 | 
					    return json_success(result)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@require_non_guest_human_user
 | 
					@require_member_or_admin
 | 
				
			||||||
@has_request_variables
 | 
					@has_request_variables
 | 
				
			||||||
def delete_user_group(request: HttpRequest, user_profile: UserProfile,
 | 
					def delete_user_group(request: HttpRequest, user_profile: UserProfile,
 | 
				
			||||||
                      user_group_id: int=REQ(validator=check_int)) -> HttpResponse:
 | 
					                      user_group_id: int=REQ(validator=check_int)) -> HttpResponse:
 | 
				
			||||||
@@ -63,7 +63,7 @@ def delete_user_group(request: HttpRequest, user_profile: UserProfile,
 | 
				
			|||||||
    check_delete_user_group(user_group_id, user_profile)
 | 
					    check_delete_user_group(user_group_id, user_profile)
 | 
				
			||||||
    return json_success()
 | 
					    return json_success()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@require_non_guest_human_user
 | 
					@require_member_or_admin
 | 
				
			||||||
@has_request_variables
 | 
					@has_request_variables
 | 
				
			||||||
def update_user_group_backend(request: HttpRequest, user_profile: UserProfile,
 | 
					def update_user_group_backend(request: HttpRequest, user_profile: UserProfile,
 | 
				
			||||||
                              user_group_id: int=REQ(validator=check_int),
 | 
					                              user_group_id: int=REQ(validator=check_int),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,8 +8,7 @@ from django.utils.translation import ugettext as _
 | 
				
			|||||||
from django.shortcuts import redirect, render
 | 
					from django.shortcuts import redirect, render
 | 
				
			||||||
from django.conf import settings
 | 
					from django.conf import settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from zerver.decorator import require_realm_admin, \
 | 
					from zerver.decorator import require_realm_admin, require_member_or_admin
 | 
				
			||||||
    require_non_guest_human_user
 | 
					 | 
				
			||||||
from zerver.forms import CreateUserForm
 | 
					from zerver.forms import CreateUserForm
 | 
				
			||||||
from zerver.lib.actions import do_change_avatar_fields, do_change_bot_owner, \
 | 
					from zerver.lib.actions import do_change_avatar_fields, do_change_bot_owner, \
 | 
				
			||||||
    do_change_is_admin, do_change_default_all_public_streams, \
 | 
					    do_change_is_admin, do_change_default_all_public_streams, \
 | 
				
			||||||
@@ -160,7 +159,7 @@ def get_stream_name(stream: Optional[Stream]) -> Optional[str]:
 | 
				
			|||||||
        return stream.name
 | 
					        return stream.name
 | 
				
			||||||
    return None
 | 
					    return None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@require_non_guest_human_user
 | 
					@require_member_or_admin
 | 
				
			||||||
@has_request_variables
 | 
					@has_request_variables
 | 
				
			||||||
def patch_bot_backend(
 | 
					def patch_bot_backend(
 | 
				
			||||||
        request: HttpRequest, user_profile: UserProfile, bot_id: int,
 | 
					        request: HttpRequest, user_profile: UserProfile, bot_id: int,
 | 
				
			||||||
@@ -245,7 +244,7 @@ def patch_bot_backend(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return json_success(json_result)
 | 
					    return json_success(json_result)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@require_non_guest_human_user
 | 
					@require_member_or_admin
 | 
				
			||||||
@has_request_variables
 | 
					@has_request_variables
 | 
				
			||||||
def regenerate_bot_api_key(request: HttpRequest, user_profile: UserProfile, bot_id: int) -> HttpResponse:
 | 
					def regenerate_bot_api_key(request: HttpRequest, user_profile: UserProfile, bot_id: int) -> HttpResponse:
 | 
				
			||||||
    bot = access_bot_by_id(user_profile, bot_id)
 | 
					    bot = access_bot_by_id(user_profile, bot_id)
 | 
				
			||||||
@@ -256,7 +255,7 @@ def regenerate_bot_api_key(request: HttpRequest, user_profile: UserProfile, bot_
 | 
				
			|||||||
    )
 | 
					    )
 | 
				
			||||||
    return json_success(json_result)
 | 
					    return json_success(json_result)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@require_non_guest_human_user
 | 
					@require_member_or_admin
 | 
				
			||||||
@has_request_variables
 | 
					@has_request_variables
 | 
				
			||||||
def add_bot_backend(
 | 
					def add_bot_backend(
 | 
				
			||||||
        request: HttpRequest, user_profile: UserProfile,
 | 
					        request: HttpRequest, user_profile: UserProfile,
 | 
				
			||||||
@@ -360,7 +359,7 @@ def add_bot_backend(
 | 
				
			|||||||
    )
 | 
					    )
 | 
				
			||||||
    return json_success(json_result)
 | 
					    return json_success(json_result)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@require_non_guest_human_user
 | 
					@require_member_or_admin
 | 
				
			||||||
def get_bots_backend(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
 | 
					def get_bots_backend(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
 | 
				
			||||||
    bot_profiles = UserProfile.objects.filter(is_bot=True, is_active=True,
 | 
					    bot_profiles = UserProfile.objects.filter(is_bot=True, is_active=True,
 | 
				
			||||||
                                              bot_owner=user_profile)
 | 
					                                              bot_owner=user_profile)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user