diff options
| author | Christophe Besson <cbesson@gmail.com> | 2026-08-14 19:25:39 +0200 |
|---|---|---|
| committer | Christophe Besson <cbesson@gmail.com> | 2026-08-14 19:25:39 +0200 |
| commit | d324792d68503109ab99616af6c85ee37045e169 (patch) | |
| tree | dea71c8e115742beaac5952c8c65481bbc130b07 /packages/meshbay-node/src/meshbay_node | |
| parent | cfe49407abb3eb48b996ab6d08d66985f29846f0 (diff) | |
| download | meshbay-d324792d68503109ab99616af6c85ee37045e169.tar.gz | |
fix(node): an operator keeps their role when reconnecting
An operator's roster row is node-wide, so looking it up by the group they happen
to be opening found nothing and the client was told it had no role on a node it
administers. Falls back to the node-wide row.
Surfaced by running the live workflow twice: the first pass pins, the second is
recognised — and only the second exercised this path.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node')
| -rw-r--r-- | packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py b/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py index 5ea6376..fe4e3c2 100644 --- a/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py +++ b/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py @@ -713,7 +713,11 @@ class WebRTCPeerSession: "key_changed", f"pinned={known['pk_ed25519'][:16]} presented={pk_ed_b64[:16]}") return - member = await roster.get_member(group_id, user_id) + # An operator's row is node-wide (empty group), so a lookup for the + # group they happen to be opening finds nothing. Fall back to it, or + # the client is told it has no role on a node it administers. + member = (await roster.get_member(group_id, user_id) + or await roster.get_member("", user_id)) await self._join_ok( user_id, pk_x_raw, session_group, role=member["role"] if member else "", |