|
16 | 16 | from django.db import transaction
|
17 | 17 | from django.http import HttpResponse, JsonResponse
|
18 | 18 | from django.shortcuts import redirect, render
|
| 19 | +from django.urls import reverse |
19 | 20 | from google.auth.transport import requests as grequests
|
20 | 21 | from google.oauth2 import id_token
|
21 | 22 | from rest_framework import permissions, status
|
|
29 | 30 | from .forms import (DeviceForm, SceneForm, SocialSignupForm, UpdateDeviceForm,
|
30 | 31 | UpdateSceneForm, UpdateStaffForm)
|
31 | 32 | 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) |
34 | 35 | from .persistence import (delete_scene_objects, get_persist_scenes_all,
|
35 | 36 | get_persist_scenes_ns)
|
36 | 37 | from .serializers import SceneNameSerializer, SceneSerializer
|
@@ -168,7 +169,7 @@ def scene_perm_detail(request, pk):
|
168 | 169 | form.save()
|
169 | 170 | return redirect("users:user_profile")
|
170 | 171 | elif "delete" in request.POST:
|
171 |
| - token = generate_arena_token_v1( |
| 172 | + token = generate_arena_token( |
172 | 173 | user=request.user, username=request.user.username)
|
173 | 174 | # delete account scene data
|
174 | 175 | scene.delete()
|
@@ -211,7 +212,7 @@ def device_perm_detail(request, pk):
|
211 | 212 | device.delete()
|
212 | 213 | return redirect("users:user_profile")
|
213 | 214 | elif "token" in request.POST:
|
214 |
| - token = generate_arena_token_v1( |
| 215 | + token = generate_arena_token( |
215 | 216 | user=request.user,
|
216 | 217 | username=request.user.username,
|
217 | 218 | device=device.name,
|
@@ -362,6 +363,9 @@ def my_scenes(request):
|
362 | 363 | Editable scenes headless endpoint for requesting a list of scenes this user can write to: GET/POST.
|
363 | 364 | - POST requires id_token for headless clients like Python apps.
|
364 | 365 | """
|
| 366 | + if request.version not in TOPIC_SUPPORTED_API_VERSIONS: |
| 367 | + return deprecated_token(request) |
| 368 | + |
365 | 369 | user = request.user
|
366 | 370 | if request.method == "POST":
|
367 | 371 | gid_token = request.POST.get("id_token", None)
|
@@ -470,12 +474,15 @@ def user_profile(request):
|
470 | 474 | - Shows scenes that the user has permissions to edit and a button to edit them.
|
471 | 475 | - Handles account deletes.
|
472 | 476 | """
|
| 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") |
473 | 480 |
|
474 | 481 | if request.method == 'POST':
|
475 | 482 | # account delete request
|
476 | 483 | confirm_text = f'delete {request.user.username} account and scenes'
|
477 | 484 | if confirm_text in request.POST:
|
478 |
| - token = generate_arena_token_v1( |
| 485 | + token = generate_arena_token( |
479 | 486 | user=request.user, username=request.user.username)
|
480 | 487 | u_scenes = Scene.objects.filter(
|
481 | 488 | name__startswith=f'{request.user.username}/')
|
@@ -655,18 +662,21 @@ def _field_requested(request, field):
|
655 | 662 | @ api_view(["POST"])
|
656 | 663 | def deprecated_token(request):
|
657 | 664 | 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."}, |
659 | 666 | status=status.HTTP_426_UPGRADE_REQUIRED
|
660 | 667 | )
|
661 | 668 |
|
662 | 669 |
|
663 | 670 | @ api_view(["POST"])
|
664 |
| -def arena_token_v1(request): |
| 671 | +def arena_token(request): |
665 | 672 | """
|
666 | 673 | Endpoint to request an ARENA token with permissions for an anonymous or authenticated user for
|
667 | 674 | MQTT and Jitsi resources given incoming parameters.
|
668 | 675 | - POST requires id_token for headless clients like Python apps.
|
669 | 676 | """
|
| 677 | + if request.version not in TOPIC_SUPPORTED_API_VERSIONS: |
| 678 | + return deprecated_token(request) |
| 679 | + |
670 | 680 | user = request.user
|
671 | 681 | gid_token = request.POST.get("id_token", None)
|
672 | 682 | if gid_token:
|
@@ -704,7 +714,7 @@ def arena_token_v1(request):
|
704 | 714 | duration = datetime.timedelta(days=1)
|
705 | 715 | else:
|
706 | 716 | duration = datetime.timedelta(hours=6)
|
707 |
| - token = generate_arena_token_v1( |
| 717 | + token = generate_arena_token( |
708 | 718 | user=user,
|
709 | 719 | username=username,
|
710 | 720 | realm=request.POST.get("realm", "realm"),
|
|
0 commit comments