summaryrefslogtreecommitdiffstats
path: root/server/user.go
diff options
context:
space:
mode:
Diffstat (limited to 'server/user.go')
-rw-r--r--server/user.go83
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})