aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Halter <868228+jhalter@users.noreply.github.com>2022-06-26 08:58:19 -0700
committerGitHub <noreply@github.com>2022-06-26 08:58:19 -0700
commitf168da153f3984af6d532b979219310242f0b8d1 (patch)
tree285083fd2de0d8572826ef034ca8e2392d03ec5a
parent74b63fe934aadc5577c8232bf8aaee5a0503f5b7 (diff)
parenta322be023434b4fbdfdc607b73212089ce7d077c (diff)
Merge pull request #49 from jhalter/fix_1.2.3_client_no_agreement_behavior
Fix "No Agreement" behavior for 1.2.3 clients
-rw-r--r--hotline/server.go9
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))
}