diff options
| author | Jeff Halter <868228+jhalter@users.noreply.github.com> | 2022-06-26 08:57:26 -0700 |
|---|---|---|
| committer | Jeff Halter <868228+jhalter@users.noreply.github.com> | 2022-06-26 08:57:26 -0700 |
| commit | a322be023434b4fbdfdc607b73212089ce7d077c (patch) | |
| tree | 38281b2ffa4d3b8f432bd34510b32b8955299d61 /hotline | |
| parent | 52f2aea827bed9c6d26a72072b16857bdc6f7743 (diff) | |
Fix "No Agreement" behavior for 1.2.3 clients
Diffstat (limited to 'hotline')
| -rw-r--r-- | hotline/server.go | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/hotline/server.go b/hotline/server.go index f3574de..0d66e08 100644 --- a/hotline/server.go +++ b/hotline/server.go @@ -653,9 +653,14 @@ func (s *Server) handleNewConnection(ctx context.Context, rwc io.ReadWriteCloser // Send user access privs so client UI knows how to behave c.Server.outbox <- *NewTransaction(tranUserAccess, c.ID, NewField(fieldUserAccess, *c.Account.Access)) - // Users with accessNoAgreement do not receive the server agreement on login + // Accounts with accessNoAgreement do not receive the server agreement on login. The behavior is different between + // client versions. For 1.2.3 client, we do not send tranShowAgreement. For other client versions, we send + // tranShowAgreement but with the NoServerAgreement field set to 1. if c.Authorize(accessNoAgreement) { - c.Server.outbox <- *NewTransaction(tranShowAgreement, c.ID, NewField(fieldNoServerAgreement, []byte{1})) + // If client version is nil, then the client uses the 1.2.3 login behavior + if c.Version != nil { + c.Server.outbox <- *NewTransaction(tranShowAgreement, c.ID, NewField(fieldNoServerAgreement, []byte{1})) + } } else { c.Server.outbox <- *NewTransaction(tranShowAgreement, c.ID, NewField(fieldData, s.Agreement)) } |