mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
decorator: Add decorator to provide remote_server to endpoint.
This commit is contained in:
@@ -6,9 +6,12 @@ from django.http import HttpRequest, HttpResponse
|
||||
from django.shortcuts import render
|
||||
from typing_extensions import Concatenate, ParamSpec
|
||||
|
||||
from corporate.lib.remote_billing_util import get_remote_realm_from_session
|
||||
from corporate.lib.remote_billing_util import (
|
||||
get_remote_realm_from_session,
|
||||
get_remote_server_from_session,
|
||||
)
|
||||
from zerver.lib.subdomains import get_subdomain
|
||||
from zilencer.models import RemoteRealm
|
||||
from zilencer.models import RemoteRealm, RemoteZulipServer
|
||||
|
||||
ParamT = ParamSpec("ParamT")
|
||||
|
||||
@@ -57,3 +60,26 @@ def authenticated_remote_realm_management_endpoint(
|
||||
return view_func(request, remote_realm, *args, **kwargs)
|
||||
|
||||
return _wrapped_view_func
|
||||
|
||||
|
||||
def authenticated_remote_server_management_endpoint(
|
||||
view_func: Callable[Concatenate[HttpRequest, RemoteZulipServer, ParamT], HttpResponse]
|
||||
) -> Callable[Concatenate[HttpRequest, ParamT], HttpResponse]: # nocoverage
|
||||
@wraps(view_func)
|
||||
def _wrapped_view_func(
|
||||
request: HttpRequest,
|
||||
/,
|
||||
*args: ParamT.args,
|
||||
**kwargs: ParamT.kwargs,
|
||||
) -> HttpResponse:
|
||||
if not is_self_hosting_management_subdomain(request):
|
||||
return render(request, "404.html", status=404)
|
||||
|
||||
server_uuid = kwargs.get("server_uuid")
|
||||
if not isinstance(server_uuid, str):
|
||||
raise TypeError("server_uuid must be a string")
|
||||
|
||||
remote_server = get_remote_server_from_session(request, server_uuid=server_uuid)
|
||||
return view_func(request, remote_server, *args, **kwargs)
|
||||
|
||||
return _wrapped_view_func
|
||||
|
@@ -5,7 +5,7 @@ from django.http import HttpRequest
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
from zerver.lib.exceptions import JsonableError
|
||||
from zilencer.models import RemoteRealm
|
||||
from zilencer.models import RemoteRealm, RemoteZulipServer
|
||||
|
||||
billing_logger = logging.getLogger("corporate.stripe")
|
||||
|
||||
@@ -69,3 +69,23 @@ def get_remote_realm_from_session(
|
||||
raise JsonableError(_("Registration is deactivated"))
|
||||
|
||||
return remote_realm
|
||||
|
||||
|
||||
def get_remote_server_from_session(
|
||||
request: HttpRequest,
|
||||
server_uuid: str,
|
||||
) -> RemoteZulipServer:
|
||||
identity_dict = get_identity_dict_from_session(request, None, server_uuid)
|
||||
if identity_dict is None:
|
||||
raise JsonableError(_("User not authenticated"))
|
||||
|
||||
remote_server_uuid = identity_dict["remote_server_uuid"]
|
||||
try:
|
||||
remote_server = RemoteZulipServer.objects.get(uuid=remote_server_uuid)
|
||||
except RemoteZulipServer.DoesNotExist:
|
||||
raise JsonableError(_("Invalid remote server."))
|
||||
|
||||
if remote_server.deactivated:
|
||||
raise JsonableError(_("Registration is deactivated"))
|
||||
|
||||
return remote_server
|
||||
|
Reference in New Issue
Block a user