views.py: Create validator for remote server.

This commit is contained in:
Umair Khan 2017-05-08 17:25:40 +05:00 committed by Tim Abbott
parent 329b377e6a
commit e649c05aed
1 changed files with 14 additions and 10 deletions

View File

@ -10,12 +10,24 @@ from zerver.decorator import has_request_variables, REQ
from zerver.lib.error_notify import do_report_error from zerver.lib.error_notify import do_report_error
from zerver.lib.push_notifications import send_android_push_notification, \ from zerver.lib.push_notifications import send_android_push_notification, \
send_apple_push_notification send_apple_push_notification
from zerver.lib.request import JsonableError
from zerver.lib.response import json_error, json_success from zerver.lib.response import json_error, json_success
from zerver.lib.validator import check_dict from zerver.lib.validator import check_dict
from zerver.models import UserProfile, PushDeviceToken, Realm from zerver.models import UserProfile, PushDeviceToken, Realm
from typing import Any, Dict, Optional, Union, Text, cast from typing import Any, Dict, Optional, Union, Text, cast
def validate_entity(entity):
# type: (Union[UserProfile, RemoteZulipServer]) -> None
if not isinstance(entity, RemoteZulipServer):
raise JsonableError(_("Must validate with valid Zulip server API key"))
def validate_bouncer_token_request(entity, token):
# type: (Union[UserProfile, RemoteZulipServer], Text) -> None
validate_entity(entity)
if token == '' or len(token) > 4096:
raise JsonableError(_("Empty or invalid length token"))
@has_request_variables @has_request_variables
def report_error(request, deployment, type=REQ(), report=REQ(validator=check_dict([]))): def report_error(request, deployment, type=REQ(), report=REQ(validator=check_dict([]))):
# type: (HttpRequest, Deployment, Text, Dict[str, Any]) -> HttpResponse # type: (HttpRequest, Deployment, Text, Dict[str, Any]) -> HttpResponse
@ -25,11 +37,7 @@ def report_error(request, deployment, type=REQ(), report=REQ(validator=check_dic
def remote_server_register_push(request, entity, user_id=REQ(), def remote_server_register_push(request, entity, user_id=REQ(),
token=REQ(), token_kind=REQ(), ios_app_id=None): token=REQ(), token_kind=REQ(), ios_app_id=None):
# type: (HttpRequest, Union[UserProfile, RemoteZulipServer], int, Text, int, Optional[Text]) -> HttpResponse # type: (HttpRequest, Union[UserProfile, RemoteZulipServer], int, Text, int, Optional[Text]) -> HttpResponse
if not isinstance(entity, RemoteZulipServer): validate_bouncer_token_request(entity, token)
return json_error(_("Must validate with valid Zulip server API key"))
if token == '' or len(token) > 4096:
return json_error(_("Empty or invalid length token"))
server = cast(RemoteZulipServer, entity) server = cast(RemoteZulipServer, entity)
# If a user logged out on a device and failed to unregister, # If a user logged out on a device and failed to unregister,
@ -54,11 +62,7 @@ def remote_server_register_push(request, entity, user_id=REQ(),
def remote_server_unregister_push(request, entity, token=REQ(), def remote_server_unregister_push(request, entity, token=REQ(),
token_kind=REQ(), ios_app_id=None): token_kind=REQ(), ios_app_id=None):
# type: (HttpRequest, Union[UserProfile, RemoteZulipServer], Text, int, Optional[Text]) -> HttpResponse # type: (HttpRequest, Union[UserProfile, RemoteZulipServer], Text, int, Optional[Text]) -> HttpResponse
if not isinstance(entity, RemoteZulipServer): validate_bouncer_token_request(entity, token)
return json_error(_("Must validate with valid Zulip server API key"))
if token == '' or len(token) > 4096:
return json_error(_("Empty or invalid length token"))
server = cast(RemoteZulipServer, entity) server = cast(RemoteZulipServer, entity)
deleted = RemotePushDeviceToken.objects.filter(token=token, deleted = RemotePushDeviceToken.objects.filter(token=token,
kind=token_kind, kind=token_kind,