diff options
| author | bt <bt@rctt.net> | 2026-05-24 21:24:06 +0200 |
|---|---|---|
| committer | bt <bt@rctt.net> | 2026-05-24 21:49:48 +0200 |
| commit | 60c6f3dd306c50bb2330eb09372bd032eaf996eb (patch) | |
| tree | 12918ca48004b3a83dda98c89fdb898870d324c8 /server/user.go | |
| parent | 509bfdbcfc483240f31f9ecd0b4f97dbba96f6f7 (diff) | |
| download | solec-60c6f3dd306c50bb2330eb09372bd032eaf996eb.tar.gz solec-60c6f3dd306c50bb2330eb09372bd032eaf996eb.zip | |
[common] Handle channels using database
Diffstat (limited to 'server/user.go')
| -rw-r--r-- | server/user.go | 83 |
1 files changed, 35 insertions, 48 deletions
diff --git a/server/user.go b/server/user.go index 6ca857a..c615c40 100644 --- a/server/user.go +++ b/server/user.go @@ -9,16 +9,14 @@ import ( ) type User struct { - Name string - Conns map[net.Conn]struct{} - Channels map[string]*Channel + Addr string + Conns map[net.Conn]struct{} } -func NewUser(conn net.Conn, name string) User { +func NewUser(conn net.Conn, addr string) User { u := User{ - Name: name, - Conns: make(map[net.Conn]struct{}), - Channels: make(map[string]*Channel), + Addr: addr, + Conns: make(map[net.Conn]struct{}), } u.Conns[conn] = struct{}{} @@ -39,31 +37,31 @@ func (u *User) Send(senderConn net.Conn, payload core.Wrapper) error { } func (s *Server) handleUserConn(conn net.Conn) { - name, err := s.performUserAuth(conn) + addr, err := s.performUserAuth(conn) if err != nil { log.Println("user auth error:", err) return } s.usersMu.Lock() - user, ok := s.users[name] + user, ok := s.users[addr] if ok { - log.Println("next connection from user:", user.Name) + log.Println("next connection from user:", user.Addr) user.Conns[conn] = struct{}{} } else { - log.Println("initial connection from user:", name) - user = NewUser(conn, name) - s.users[name] = user + log.Println("initial connection from user:", addr) + user = NewUser(conn, addr) + s.users[addr] = user } s.usersMu.Unlock() defer func() { s.usersMu.Lock() - log.Println("client disconnected: ", user.Name) - delete(s.users[user.Name].Conns, conn) - if len(s.users[user.Name].Conns) == 0 { - log.Println("all connections closed for user:", user.Name) - delete(s.users, user.Name) + log.Println("client disconnected: ", user.Addr) + delete(s.users[user.Addr].Conns, conn) + if len(s.users[user.Addr].Conns) == 0 { + log.Println("all connections closed for user:", user.Addr) + delete(s.users, user.Addr) } s.usersMu.Unlock() }() @@ -84,7 +82,7 @@ func (s *Server) performUserAuth(conn net.Conn) (string, error) { return "", core.ErrUnexpectedPayloadType } - hash, err := s.Storage.GetUserPass(clientAuth.Name) + hash, err := s.Storage.GetUserPass(clientAuth.Addr) if err != nil { s.authFail(conn) return "", core.ErrAuthInvalidUser @@ -99,7 +97,7 @@ func (s *Server) performUserAuth(conn net.Conn) (string, error) { return "", err } - return clientAuth.Name, nil + return clientAuth.Addr, nil } func (s *Server) authFail(conn net.Conn) { @@ -123,7 +121,7 @@ func (s *Server) readUserInput(user *User, conn net.Conn) error { func (s *Server) handleUserPayload(user *User, sender net.Conn, payload any) error { switch v := payload.(type) { case core.Message: - return s.handleMessage(sender, core.ConnTypeUser, v) + return s.handleMessage(sender, core.ConnTypeUser, user, v) case core.Usermode: return s.handleUsermode(user, sender, v) case core.History: @@ -134,36 +132,25 @@ func (s *Server) handleUserPayload(user *User, sender net.Conn, payload any) err } func (s *Server) handleUsermode(user *User, conn net.Conn, mode core.Usermode) error { - userAddr, err := core.ReadAddr(mode.UserAddr) - if err != nil { - return err - } - - chanAddr, err := core.ReadAddr(mode.ChannelName) - if err != nil { - return err - } - if user.Name != userAddr.Channel { - log.Println("unauthorized") - return user.Send(conn, core.Error{core.ErrorUnauthorized}) - } + /* + userAddr, err := core.ReadAddr(mode.UserAddr) + if err != nil { + return err + } - s.channelsMu.RLock() - channel, ok := s.channels[chanAddr.Channel] - if !ok { - log.Println("not found", userAddr.Channel) - return user.Send(conn, core.Error{core.ErrorNotFound}) - } - s.channelsMu.RUnlock() + chanAddr, err := core.ReadAddr(mode.ChannelAddr) + if err != nil { + return err + } - switch mode.Mode { - case core.UsermodeNone: - channel.Remove(user) - case core.UsermodeInChannel: - channel.Add(user) - } + if user.Addr != userAddr.Channel { + log.Println("unauthorized") + return user.Send(conn, core.Error{core.ErrorUnauthorized}) + } + // TODO: change user permissions here + */ return nil } @@ -177,7 +164,7 @@ func (s *Server) handleHistory(user *User, conn net.Conn, hist core.History) err return user.Send(conn, core.Error{core.ErrorNotFound}) } - perm, err := s.Storage.GetPermission(user.Name+"@"+s.cfg.Name, hist.Channel) + perm, err := s.Storage.GetPermission(user.Addr, hist.Channel) if err != nil { fmt.Println("cannot get message history:", err) return user.Send(conn, core.Error{core.ErrorNotFound}) |
