From: Jeff Halter Date: Sat, 18 Mar 2023 20:48:38 +0000 (-0700) Subject: Merge pull request #96 from jhalter/disconnect_ban_users_earlier_in_login_flow X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/commitdiff_plain/4b89da3b32b44060aa94dafb29c1fe470b14dd8d?hp=303da312b86940264412be37622d56846cd07792 Merge pull request #96 from jhalter/disconnect_ban_users_earlier_in_login_flow Disconnect banned users earlier in the login flow --- 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