mirror of
https://github.com/zulip/zulip.git
synced 2025-10-31 20:13:46 +00:00
Fixes #2665. Regenerated by tabbott with `lint --fix` after a rebase and change in parameters. Note from tabbott: In a few cases, this converts technical debt in the form of unsorted imports into different technical debt in the form of our largest files having very long, ugly import sequences at the start. I expect this change will increase pressure for us to split those files, which isn't a bad thing. Signed-off-by: Anders Kaseorg <anders@zulip.com>
59 lines
2.2 KiB
Python
59 lines
2.2 KiB
Python
from django.conf import settings
|
|
from django.http import HttpRequest, HttpResponse
|
|
from django.utils.translation import ugettext as _
|
|
|
|
from zerver.decorator import human_users_only
|
|
from zerver.lib.push_notifications import (
|
|
add_push_device_token,
|
|
b64_to_hex,
|
|
remove_push_device_token,
|
|
)
|
|
from zerver.lib.request import REQ, JsonableError, has_request_variables
|
|
from zerver.lib.response import json_success
|
|
from zerver.models import PushDeviceToken, UserProfile
|
|
|
|
|
|
def validate_token(token_str: str, kind: int) -> None:
|
|
if token_str == '' or len(token_str) > 4096:
|
|
raise JsonableError(_('Empty or invalid length token'))
|
|
if kind == PushDeviceToken.APNS:
|
|
# Validate that we can actually decode the token.
|
|
try:
|
|
b64_to_hex(token_str)
|
|
except Exception:
|
|
raise JsonableError(_('Invalid APNS token'))
|
|
|
|
@human_users_only
|
|
@has_request_variables
|
|
def add_apns_device_token(request: HttpRequest, user_profile: UserProfile,
|
|
token: str=REQ(),
|
|
appid: str=REQ(default=settings.ZULIP_IOS_APP_ID),
|
|
) -> HttpResponse:
|
|
validate_token(token, PushDeviceToken.APNS)
|
|
add_push_device_token(user_profile, token, PushDeviceToken.APNS, ios_app_id=appid)
|
|
return json_success()
|
|
|
|
@human_users_only
|
|
@has_request_variables
|
|
def add_android_reg_id(request: HttpRequest, user_profile: UserProfile,
|
|
token: str=REQ()) -> HttpResponse:
|
|
validate_token(token, PushDeviceToken.GCM)
|
|
add_push_device_token(user_profile, token, PushDeviceToken.GCM)
|
|
return json_success()
|
|
|
|
@human_users_only
|
|
@has_request_variables
|
|
def remove_apns_device_token(request: HttpRequest, user_profile: UserProfile,
|
|
token: str=REQ()) -> HttpResponse:
|
|
validate_token(token, PushDeviceToken.APNS)
|
|
remove_push_device_token(user_profile, token, PushDeviceToken.APNS)
|
|
return json_success()
|
|
|
|
@human_users_only
|
|
@has_request_variables
|
|
def remove_android_reg_id(request: HttpRequest, user_profile: UserProfile,
|
|
token: str=REQ()) -> HttpResponse:
|
|
validate_token(token, PushDeviceToken.GCM)
|
|
remove_push_device_token(user_profile, token, PushDeviceToken.GCM)
|
|
return json_success()
|