Skip to content

Commit 9a0e82d

Browse files
committed
test redirect web vs rest
1 parent 3f9550b commit 9a0e82d

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

users/mqtt.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@
1010
SCENE_PUBLIC_WRITE_DEF, SCENE_USERS_DEF,
1111
SCENE_VIDEO_CONF_DEF, Scene)
1212

13+
# topic constants
1314
PUBLIC_NAMESPACE = "public"
1415
ANON_REGEX = "anonymous-(?=.*?[a-zA-Z].*?[a-zA-Z])"
1516
DEF_JWT_DURATION = datetime.timedelta(minutes=1)
17+
TOPIC_SUPPORTED_API_VERSIONS = ["v1", "v2"] # TODO(mwfarb): remove v1
1618

1719

1820
def all_scenes_read_token():
@@ -32,7 +34,7 @@ def all_scenes_read_token():
3234
return token
3335

3436

35-
def generate_arena_token_v1(
37+
def generate_arena_token(
3638
*,
3739
user,
3840
username,

users/urls.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,7 @@
4343
re_path(
4444
r'^profile/devices/(?P<pk>[^\/]+\/[^\/]+)$', views.device_perm_detail),
4545
# endpoints
46-
path("mqtt_auth", views.arena_token_v1, name="arena_token_v1"),
47-
# path("mqtt_auth", views.deprecated_token, name="deprecated_token"),
48-
# path("arena_token", views.arena_token_v1, name="arena_token_v1"),
46+
path("mqtt_auth", views.arena_token, name="arena_token"),
4947
path("user_state", views.user_state, name="user_state"),
5048
path(
5149
"profile_update_staff", views.profile_update_staff, name="profile_update_staff"

users/views.py

+18-8
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from django.db import transaction
1717
from django.http import HttpResponse, JsonResponse
1818
from django.shortcuts import redirect, render
19+
from django.urls import reverse
1920
from google.auth.transport import requests as grequests
2021
from google.oauth2 import id_token
2122
from rest_framework import permissions, status
@@ -29,8 +30,8 @@
2930
from .forms import (DeviceForm, SceneForm, SocialSignupForm, UpdateDeviceForm,
3031
UpdateSceneForm, UpdateStaffForm)
3132
from .models import Device, Scene
32-
from .mqtt import (ANON_REGEX, PUBLIC_NAMESPACE, all_scenes_read_token,
33-
generate_arena_token_v1)
33+
from .mqtt import (ANON_REGEX, PUBLIC_NAMESPACE, TOPIC_SUPPORTED_API_VERSIONS,
34+
all_scenes_read_token, generate_arena_token)
3435
from .persistence import (delete_scene_objects, get_persist_scenes_all,
3536
get_persist_scenes_ns)
3637
from .serializers import SceneNameSerializer, SceneSerializer
@@ -168,7 +169,7 @@ def scene_perm_detail(request, pk):
168169
form.save()
169170
return redirect("users:user_profile")
170171
elif "delete" in request.POST:
171-
token = generate_arena_token_v1(
172+
token = generate_arena_token(
172173
user=request.user, username=request.user.username)
173174
# delete account scene data
174175
scene.delete()
@@ -211,7 +212,7 @@ def device_perm_detail(request, pk):
211212
device.delete()
212213
return redirect("users:user_profile")
213214
elif "token" in request.POST:
214-
token = generate_arena_token_v1(
215+
token = generate_arena_token(
215216
user=request.user,
216217
username=request.user.username,
217218
device=device.name,
@@ -362,6 +363,9 @@ def my_scenes(request):
362363
Editable scenes headless endpoint for requesting a list of scenes this user can write to: GET/POST.
363364
- POST requires id_token for headless clients like Python apps.
364365
"""
366+
if request.version not in TOPIC_SUPPORTED_API_VERSIONS:
367+
return deprecated_token(request)
368+
365369
user = request.user
366370
if request.method == "POST":
367371
gid_token = request.POST.get("id_token", None)
@@ -470,12 +474,15 @@ def user_profile(request):
470474
- Shows scenes that the user has permissions to edit and a button to edit them.
471475
- Handles account deletes.
472476
"""
477+
# TODO (mwfarb): make remote post status 426, local post redirect to valid
478+
# if request.version not in TOPIC_SUPPORTED_API_VERSIONS:
479+
# return reverse("users:user_profile", current_app="users")
473480

474481
if request.method == 'POST':
475482
# account delete request
476483
confirm_text = f'delete {request.user.username} account and scenes'
477484
if confirm_text in request.POST:
478-
token = generate_arena_token_v1(
485+
token = generate_arena_token(
479486
user=request.user, username=request.user.username)
480487
u_scenes = Scene.objects.filter(
481488
name__startswith=f'{request.user.username}/')
@@ -655,18 +662,21 @@ def _field_requested(request, field):
655662
@ api_view(["POST"])
656663
def deprecated_token(request):
657664
return JsonResponse(
658-
{"error": "ARENA v2 token required. You may need to update your client's ARENA library."},
665+
{"error": f"ARENA User API {TOPIC_SUPPORTED_API_VERSIONS[0]} token required. You may need to update your client's ARENA library."},
659666
status=status.HTTP_426_UPGRADE_REQUIRED
660667
)
661668

662669

663670
@ api_view(["POST"])
664-
def arena_token_v1(request):
671+
def arena_token(request):
665672
"""
666673
Endpoint to request an ARENA token with permissions for an anonymous or authenticated user for
667674
MQTT and Jitsi resources given incoming parameters.
668675
- POST requires id_token for headless clients like Python apps.
669676
"""
677+
if request.version not in TOPIC_SUPPORTED_API_VERSIONS:
678+
return deprecated_token(request)
679+
670680
user = request.user
671681
gid_token = request.POST.get("id_token", None)
672682
if gid_token:
@@ -704,7 +714,7 @@ def arena_token_v1(request):
704714
duration = datetime.timedelta(days=1)
705715
else:
706716
duration = datetime.timedelta(hours=6)
707-
token = generate_arena_token_v1(
717+
token = generate_arena_token(
708718
user=user,
709719
username=username,
710720
realm=request.POST.get("realm", "realm"),

0 commit comments

Comments
 (0)