]> git.r.bdr.sh - rbdr/mobius/commitdiff
Merge pull request #96 from jhalter/disconnect_ban_users_earlier_in_login_flow
authorJeff Halter <redacted>
Sat, 18 Mar 2023 20:48:38 +0000 (13:48 -0700)
committerGitHub <redacted>
Sat, 18 Mar 2023 20:48:38 +0000 (13:48 -0700)
Disconnect banned users earlier in the login flow

hotline/server.go

index 3e4ba2f08f90d1f9db317085c0873f82930292ac..9e5f498332f46151c1ed367bb3311df15a828989 100644 (file)
@@ -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