diff options
| author | Jeff Halter <868228+jhalter@users.noreply.github.com> | 2023-03-18 13:47:02 -0700 |
|---|---|---|
| committer | Jeff Halter <868228+jhalter@users.noreply.github.com> | 2023-03-18 13:47:02 -0700 |
| commit | e9c043c0361e0e56e9b9adfea894c7834a99bade (patch) | |
| tree | 5bd4354c3379d4da0a269857eb187911e7b09189 /hotline | |
| parent | 303da312b86940264412be37622d56846cd07792 (diff) | |
Disconnect banned users earlier in the login flow
Diffstat (limited to 'hotline')
| -rw-r--r-- | hotline/server.go | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/hotline/server.go b/hotline/server.go index 3e4ba2f..9e5f498 100644 --- a/hotline/server.go +++ b/hotline/server.go @@ -567,32 +567,55 @@ func (s *Server) handleNewConnection(ctx context.Context, rwc io.ReadWriteCloser return err } - c := s.NewClientConn(rwc, remoteAddr) - // check if remoteAddr is present in the ban list if banUntil, ok := s.banList[strings.Split(remoteAddr, ":")[0]]; ok { // permaban if banUntil == nil { - s.outbox <- *NewTransaction( + t := NewTransaction( tranServerMsg, - c.ID, + &[]byte{0, 0}, NewField(fieldData, []byte("You are permanently banned on this server")), NewField(fieldChatOptions, []byte{0, 0}), ) + + b, err := t.MarshalBinary() + if err != nil { + return err + } + + _, err = rwc.Write(b) + if err != nil { + return err + } + time.Sleep(1 * time.Second) return nil - } else if time.Now().Before(*banUntil) { - s.outbox <- *NewTransaction( + } + + // temporary ban + if time.Now().Before(*banUntil) { + t := NewTransaction( tranServerMsg, - c.ID, + &[]byte{0, 0}, NewField(fieldData, []byte("You are temporarily banned on this server")), NewField(fieldChatOptions, []byte{0, 0}), ) + b, err := t.MarshalBinary() + if err != nil { + return err + } + + _, err = rwc.Write(b) + if err != nil { + return err + } + time.Sleep(1 * time.Second) return nil } - } + + c := s.NewClientConn(rwc, remoteAddr) defer c.Disconnect() encodedLogin := clientLogin.GetField(fieldUserLogin).Data |