package user import ( "citrons.xyz/talk/server/session" "citrons.xyz/talk/proto" ) func (u *User) SendRequest(r session.Request) { switch r.Cmd.Kind { case "update": if r.From.UserId != u.Id() { r.Reply(proto.Fail{"forbidden", "", nil}.Cmd()) return } if len(r.Cmd.Args) != 1 { r.ReplyInvalid() return } upd := r.Cmd.Args[0] if upd.Kind != "u" { r.ReplyInvalid() return } name := u.name for k, v := range upd.Fields { switch k { case "": name = v default: r.ReplyInvalid() return } } if name != u.name { err := u.Rename(name) if err != nil { r.Reply(err.Cmd()) return } } u.Stream.Event(r.Cmd) r.Reply(proto.NewCmd("ok", "")) case "i": r.Reply(proto.NewCmd("i", "", u.GetInfo())) case "s": r.From.Subscribe(&u.Stream) r.Reply(proto.NewCmd("i", "", u.GetInfo())) case "u": r.From.Unsubscribe(&u.Stream) r.Reply(proto.NewCmd("ok", "")) default: r.ReplyInvalid() } } func (t Tombstone) SendRequest(r session.Request) { switch r.Cmd.Kind { case "update": r.Reply(proto.Fail{"bad-target", "", nil}.Cmd()) case "i", "s": r.Reply(proto.NewCmd("i", "", t.GetInfo())) case "u": r.Reply(proto.NewCmd("ok", "")) default: r.ReplyInvalid() } }