Skip to content

The event listener authenticates with the message bus - #2

Merged
inkly merged 6 commits into
mainfrom
feat/bus-auth
Sep 22, 2026
Merged

inkly merged 6 commits into
mainfrom
feat/bus-auth

Conversation

@inkly

@inkly inkly commented Sep 22, 2026

Copy link
Copy Markdown
Collaborator
  • The websocket listener sends the boot's secret in its handshake (to a loopback bus only) and reads it again at each reconnection; it also dials again when the subscription drops.
  • The access log writes the path, not the URI: websocket routes take tokens from the query.
  • CasaOS-Common v0.4.27.

Picks up InternalAuthorization, which the message bus subscription now needs, and the start-script runner that keeps going after a failure. Nothing else in this service uses the changed APIs.
… bus

The message bus now refuses a subscription without the box's internal secret. The websocket handshake is built with websocket.NewConfig and carries Authorization: Internal <secret> when the gateway has written one. The secret is read at each dial, since a restarted gateway rewrites it; with no secret file (an older gateway) the handshake goes without it, as before.
When the bus closed the websocket, the read loop kept going with an empty message and dereferenced a nil event UUID, which took the whole service down; the listener only came back through the process restart. A read error now closes the connection and goes back to the dial loop, which reads the internal secret again, so a gateway restart that rewrote it is picked up. A successful subscription resets the retry budget, as the restart used to. Events are read as whole websocket messages instead of 1024-byte chunks, so a larger event is no longer split into two invalid halves, and an event that does not parse or has no UUID is logged and skipped.
The test's handshake waits for the go-ahead; closing that channel first on the way out lets a failed run shut the server down instead of blocking until the test timeout.
Websocket routes take the user's token from the query string, since a browser
cannot set a header on a websocket, and echo's default access log writes the
request URI, query included: users' tokens went to the journal. The access
log now writes the path, as the message bus does.
The listener sent the boot's secret to whatever host message-bus.url names.
Common's clients only ever send it to loopback addresses; so does this one.
@inkly
inkly merged commit ab56332 into main Sep 22, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant