diff options
| -rw-r--r-- | client/client.go | 8 | ||||
| -rw-r--r-- | core/payload.go | 6 | ||||
| -rw-r--r-- | server/user.go | 35 |
3 files changed, 26 insertions, 23 deletions
diff --git a/client/client.go b/client/client.go index 8abbde2..ba53ec9 100644 --- a/client/client.go +++ b/client/client.go @@ -81,8 +81,8 @@ func (c *Client) SendMessage(target, content string) error { func (c *Client) Join(channel string) error { umod := core.Usermode{ - UserAddr: c.cfg.User + "@" + c.cfg.Addr, - ChannelName: channel, + UserAddr: c.cfg.User, + ChannelAddr: channel, Mode: core.UsermodeInChannel, } @@ -91,8 +91,8 @@ func (c *Client) Join(channel string) error { func (c *Client) Leave(channel string) error { umod := core.Usermode{ - UserAddr: c.cfg.User + "@" + c.cfg.Addr, - ChannelName: channel, + UserAddr: c.cfg.User, + ChannelAddr: channel, Mode: core.UsermodeNone, } diff --git a/core/payload.go b/core/payload.go index 3bc6038..be9d844 100644 --- a/core/payload.go +++ b/core/payload.go @@ -152,14 +152,14 @@ func DecodeMessage(buf io.Reader) (Message, error) { type Usermode struct { UserAddr string - ChannelName string + ChannelAddr string Mode UsermodeType } func (u Usermode) Wrap() (PayloadType, []any) { return PayloadUsermode, []any{ u.UserAddr, - u.ChannelName, + u.ChannelAddr, uint8(u.Mode), } } @@ -172,7 +172,7 @@ func DecodeUsermode(buf io.Reader) (Usermode, error) { return u, err } - err = decodeString(buf, &u.ChannelName) + err = decodeString(buf, &u.ChannelAddr) if err != nil { return u, err } diff --git a/server/user.go b/server/user.go index c615c40..9a0a71b 100644 --- a/server/user.go +++ b/server/user.go @@ -132,26 +132,29 @@ 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 { + _, err := core.ReadAddr(mode.UserAddr) + if err != nil { + log.Println("invalid user address") + return err + } - /* - userAddr, err := core.ReadAddr(mode.UserAddr) - if err != nil { - return err - } + _, err = core.ReadAddr(mode.ChannelAddr) + if err != nil { + log.Println("invalid channel address") + return err + } - chanAddr, err := core.ReadAddr(mode.ChannelAddr) - if err != nil { - return err - } + perm := core.PermissionData{ + User: mode.UserAddr, + Channel: mode.ChannelAddr, + } - if user.Addr != userAddr.Channel { - log.Println("unauthorized") - return user.Send(conn, core.Error{core.ErrorUnauthorized}) - } + if mode.Mode == core.UsermodeInChannel { + perm.Read = true + perm.Write = true + } - // TODO: change user permissions here - */ - return nil + return s.Storage.SetPermission(perm) } // TODO: Replace user.Send(error) with conn.Send() |
