cmd/strelaysrv: Add optional auth token (fixes #3987) (#8561)

* implement authentication via token for relaysrv

Make replaysrv check for a token before allowing clients to
join. The token can be set via the replay-uri.

* fix formatting

* key composite literal

* do not error out if auth material is provided but not needed

* remove unused method receiver

* clean up unused parameter in functions

* cleaner token handling, disable joining the pool if token is set.

* Keep backwards compatibility with older clients.

In prior versions of the protocol JoinRelayRequest did not have a
token field. Trying to unmarshal such a request will result in
an error. Return an empty JoinRelayRequest, that is a request
without token, instead.

Co-authored-by: entity0xfe <entity0xfe@my.domain>
This commit is contained in:
entity0xfe
2022-10-01 20:41:02 +01:00
committed by GitHub
co-authored by entity0xfe
parent 0935886045
commit ad986f372d
6 changed files with 88 additions and 41 deletions
+5 -2
View File
@@ -27,7 +27,8 @@ type staticClient struct {
messageTimeout time.Duration
connectTimeout time.Duration
conn *tls.Conn
conn *tls.Conn
token string
}
func newStaticClient(uri *url.URL, certs []tls.Certificate, invitations chan protocol.SessionInvitation, timeout time.Duration) *staticClient {
@@ -38,6 +39,8 @@ func newStaticClient(uri *url.URL, certs []tls.Certificate, invitations chan pro
messageTimeout: time.Minute * 2,
connectTimeout: timeout,
token: uri.Query().Get("token"),
}
c.commonClient = newCommonClient(invitations, c.serve, c.String())
return c
@@ -173,7 +176,7 @@ func (c *staticClient) disconnect() {
}
func (c *staticClient) join() error {
if err := protocol.WriteMessage(c.conn, protocol.JoinRelayRequest{}); err != nil {
if err := protocol.WriteMessage(c.conn, protocol.JoinRelayRequest{Token: c.token}); err != nil {
return err
}