Skip to content

Commit a2da082

Browse files
committed
draft: refactor naming and chat
1 parent 4fb94af commit a2da082

File tree

2 files changed

+34
-26
lines changed

2 files changed

+34
-26
lines changed

users/mqtt.py

+33-25
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def generate_arena_token(
3737
user,
3838
username,
3939
realm="realm",
40-
scene=None,
40+
namespaced_scene=None,
4141
device=None,
4242
camid=None,
4343
userid=None,
@@ -83,29 +83,32 @@ def generate_arena_token(
8383
p_anonymous_users = SCENE_ANON_USERS_DEF
8484
p_video = SCENE_VIDEO_CONF_DEF
8585
p_users = SCENE_USERS_DEF
86-
if scene and Scene.objects.filter(name=scene).exists():
87-
scene_perm = Scene.objects.get(name=scene)
86+
87+
# create permissions shorthand
88+
if namespaced_scene and Scene.objects.filter(name=namespaced_scene).exists():
89+
scene_perm = Scene.objects.get(name=namespaced_scene)
8890
p_public_read = scene_perm.public_read
8991
p_public_write = scene_perm.public_write
9092
p_anonymous_users = scene_perm.anonymous_users
9193
p_video = scene_perm.video_conference
9294
p_users = scene_perm.users
9395

9496
# add jitsi server params if a/v scene
95-
if scene and camid and p_users and p_video:
97+
if namespaced_scene and camid and p_users and p_video:
9698
host = os.getenv("HOSTNAME")
9799
headers = {"kid": host}
98100
payload["aud"] = "arena"
99101
payload["iss"] = "arena-account"
100-
# we use the scene name as the jitsi room name, handle RFC 3986 reserved chars as = '_'
101-
roomname = re.sub(r"[!#$&'()*+,\/:;=?@[\]]", '_', scene.lower())
102+
# we use the namespace + scene name as the jitsi room name, handle RFC 3986 reserved chars as = '_'
103+
roomname = re.sub(r"[!#$&'()*+,\/:;=?@[\]]", '_', namespaced_scene.lower())
102104
payload["room"] = roomname
103105

104106
# everyone should be able to read all public scenes
105107
if not device: # scene token scenario
106108
subs.append(f"{realm}/s/{PUBLIC_NAMESPACE}/#")
107109
# And transmit env data
108110
pubs.append(f"{realm}/env/{PUBLIC_NAMESPACE}/#")
111+
109112
# user presence objects
110113
if user.is_authenticated:
111114
if device: # device token scenario
@@ -122,8 +125,8 @@ def generate_arena_token(
122125
subs.append(f"{realm}/env/#")
123126
pubs.append(f"{realm}/env/#")
124127
# vio experiments, staff only
125-
if scene:
126-
pubs.append(f"{realm}/vio/{scene}/#")
128+
if namespaced_scene:
129+
pubs.append(f"{realm}/vio/{namespaced_scene}/#")
127130
else:
128131
# scene owners have rights to their scene objects only
129132
subs.append(f"{realm}/s/{username}/#")
@@ -134,7 +137,7 @@ def generate_arena_token(
134137
# add scenes that have been granted by other owners
135138
u_scenes = Scene.objects.filter(editors=user)
136139
for u_scene in u_scenes:
137-
if not scene or (scene and u_scene.name == scene):
140+
if not namespaced_scene or (namespaced_scene and u_scene.name == namespaced_scene):
138141
subs.append(f"{realm}/s/{u_scene.name}/#")
139142
pubs.append(f"{realm}/s/{u_scene.name}/#")
140143
subs.append(f"{realm}/env/{u_scene.name}/#")
@@ -148,47 +151,52 @@ def generate_arena_token(
148151
# device owners have rights to their device objects only
149152
subs.append(f"{realm}/d/{username}/#")
150153
pubs.append(f"{realm}/d/{username}/#")
154+
151155
# anon/non-owners have rights to view scene objects only
152-
if scene and not user.is_staff:
156+
if namespaced_scene and not user.is_staff:
153157
# did the user set specific public read or public write?
154158
if not user.is_authenticated and not p_anonymous_users:
155159
return None # anonymous not permitted
156160
if p_public_read:
157-
subs.append(f"{realm}/s/{scene}/#")
161+
subs.append(f"{realm}/s/{namespaced_scene}/#")
158162
# Interactivity to extent of viewing objects is similar to publishing env
159-
pubs.append(f"{realm}/env/{scene}/#")
163+
pubs.append(f"{realm}/env/{namespaced_scene}/#")
160164
if p_public_write:
161-
pubs.append(f"{realm}/s/{scene}/#")
165+
pubs.append(f"{realm}/s/{namespaced_scene}/#")
162166
# user presence objects
163167
if camid and p_users: # probable web browser write
164-
pubs.append(f"{realm}/s/{scene}/{camid}")
165-
pubs.append(f"{realm}/s/{scene}/{camid}/#")
168+
pubs.append(f"{realm}/s/{namespaced_scene}/{camid}")
169+
pubs.append(f"{realm}/s/{namespaced_scene}/{camid}/#")
166170
if handleftid and p_users:
167-
pubs.append(f"{realm}/s/{scene}/{handleftid}")
171+
pubs.append(f"{realm}/s/{namespaced_scene}/{handleftid}")
168172
if handrightid and p_users:
169-
pubs.append(f"{realm}/s/{scene}/{handrightid}")
173+
pubs.append(f"{realm}/s/{namespaced_scene}/{handrightid}")
174+
170175
# chat messages
171-
if scene and userid and p_users:
172-
namespace = scene.split("/")[0]
173-
userhandle = userid + base64.b64encode(userid.encode()).decode()
176+
if namespaced_scene and userid and p_users:
177+
namespace = namespaced_scene.split("/")[0]
174178
# receive private messages: Read
175179
subs.append(f"{realm}/c/{namespace}/p/{userid}/#")
176180
# receive open messages to everyone and/or scene: Read
177181
subs.append(f"{realm}/c/{namespace}/o/#")
178182
# send open messages (chat keepalive, messages to all/scene): Write
179-
pubs.append(f"{realm}/c/{namespace}/o/{userhandle}")
183+
pubs.append(f"{realm}/c/{namespace}/o/{userid}")
180184
# private messages to user: Write
181-
pubs.append(f"{realm}/c/{namespace}/p/+/{userhandle}")
185+
pubs.append(f"{realm}/c/{namespace}/p/+/{userid}")
186+
182187
# apriltags
183-
if scene:
188+
if namespaced_scene:
184189
subs.append(f"{realm}/g/a/#")
185190
pubs.append(f"{realm}/g/a/#")
186-
# arts runtime-mngr
191+
192+
# runtime manager
187193
subs.append(f"{realm}/proc/#")
188194
pubs.append(f"{realm}/proc/#")
189-
# network graph
195+
196+
# network metrics
190197
subs.append("$NETWORK")
191198
pubs.append("$NETWORK/latency")
199+
192200
if len(subs) > 0:
193201
payload["subs"] = clean_topics(subs)
194202
if len(pubs) > 0:

users/views.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -769,7 +769,7 @@ def arena_token(request):
769769
user=user,
770770
username=username,
771771
realm=request.POST.get("realm", "realm"),
772-
scene=request.POST.get("scene", None),
772+
namespaced_scene=request.POST.get("scene", None),
773773
camid=camid,
774774
userid=userid,
775775
handleftid=handleftid,

0 commit comments

Comments
 (0)