func (s *session) handleSendCommand(cmd *proto.SendCommand) *response { if s.Identity().Name() == "" { return &response{err: fmt.Errorf("you must choose a name before you may begin chatting")} } if len(cmd.Content) > proto.MaxMessageLength { return &response{err: proto.ErrMessageTooLong} } msgID, err := snowflake.New() if err != nil { return &response{err: err} } var isValidParent bool if s.managedRoom != nil { isValidParent, err = s.managedRoom.IsValidParent(cmd.Parent) } else { isValidParent, err = s.room.IsValidParent(cmd.Parent) } if err != nil { return &response{err: err} } if !isValidParent { return &response{err: proto.ErrInvalidParent} } msg := proto.Message{ ID: msgID, Content: cmd.Content, Parent: cmd.Parent, Sender: s.View(proto.Host), } if s.keyID != "" { key := s.client.Authorization.MessageKeys[s.keyID] if err := proto.EncryptMessage(&msg, s.keyID, key); err != nil { return &response{err: err} } } sent, err := s.room.Send(s.ctx, s, msg) if err != nil { return &response{err: err} } if s.privilegeLevel() == proto.General { sent.Sender.ClientAddress = "" } packet, err := proto.DecryptPayload(proto.SendReply(sent), &s.client.Authorization, s.privilegeLevel()) return &response{ packet: packet, err: err, cost: 10, } }
func (s *session) handleSendCommand(cmd *proto.SendCommand) *response { if s.Identity().Name() == "" { return &response{err: fmt.Errorf("you must choose a name before you may begin chatting")} } msgID, err := snowflake.New() if err != nil { return &response{err: err} } isValidParent, err := s.room.IsValidParent(cmd.Parent) if err != nil { return &response{err: err} } if !isValidParent { return &response{err: proto.ErrInvalidParent} } msg := proto.Message{ ID: msgID, Content: cmd.Content, Parent: cmd.Parent, Sender: s.View(), } if s.keyID != "" { key := s.client.Authorization.MessageKeys[s.keyID] if err := proto.EncryptMessage(&msg, s.keyID, key); err != nil { return &response{err: err} } } sent, err := s.room.Send(s.ctx, s, msg) if err != nil { return &response{err: err} } packet, err := proto.DecryptPayload(proto.SendReply(sent), &s.client.Authorization) return &response{ packet: packet, err: err, cost: 10, } }