diff options
author | Saturnino Abril <saturnino.abril@gmail.com> | 2017-03-20 21:44:08 +0900 |
---|---|---|
committer | George Goldberg <george@gberg.me> | 2017-03-20 12:44:08 +0000 |
commit | 7e89077a93fd187284e426db503a4ab5cbcdf248 (patch) | |
tree | 9f2790d73c238b7d57eff7f6317c30e594bfa141 /api4/channel.go | |
parent | ac8282cda1455802f52ebe6687eeeef6c950bf49 (diff) | |
download | chat-7e89077a93fd187284e426db503a4ab5cbcdf248.tar.gz chat-7e89077a93fd187284e426db503a4ab5cbcdf248.tar.bz2 chat-7e89077a93fd187284e426db503a4ab5cbcdf248.zip |
Endpoint for APIv4 POST /channels/{channel_id}/members (#5775)
Diffstat (limited to 'api4/channel.go')
-rw-r--r-- | api4/channel.go | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/api4/channel.go b/api4/channel.go index bd1710975..61d9e6f53 100644 --- a/api4/channel.go +++ b/api4/channel.go @@ -33,6 +33,7 @@ func InitChannel() { BaseRoutes.ChannelMembers.Handle("", ApiSessionRequired(getChannelMembers)).Methods("GET") BaseRoutes.ChannelMembers.Handle("/ids", ApiSessionRequired(getChannelMembersByIds)).Methods("POST") + BaseRoutes.ChannelMembers.Handle("", ApiSessionRequired(addChannelMember)).Methods("POST") BaseRoutes.ChannelMembersForUser.Handle("", ApiSessionRequired(getChannelMembersForUser)).Methods("GET") BaseRoutes.ChannelMember.Handle("", ApiSessionRequired(getChannelMember)).Methods("GET") BaseRoutes.ChannelMember.Handle("", ApiSessionRequired(removeChannelMember)).Methods("DELETE") @@ -498,6 +499,51 @@ func updateChannelMemberRoles(c *Context, w http.ResponseWriter, r *http.Request ReturnStatusOK(w) } +func addChannelMember(c *Context, w http.ResponseWriter, r *http.Request) { + c.RequireChannelId() + if c.Err != nil { + return + } + + member := model.ChannelMemberFromJson(r.Body) + if member == nil { + c.SetInvalidParam("channel_member") + return + } + + if len(member.UserId) != 26 { + c.SetInvalidParam("user_id") + return + } + + member.ChannelId = c.Params.ChannelId + + var channel *model.Channel + var err *model.AppError + if channel, err = app.GetChannel(member.ChannelId); err != nil { + c.Err = err + return + } + + if channel.Type == model.CHANNEL_OPEN && !app.SessionHasPermissionToChannel(c.Session, channel.Id, model.PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS) { + c.SetPermissionError(model.PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS) + return + } + + if channel.Type == model.CHANNEL_PRIVATE && !app.SessionHasPermissionToChannel(c.Session, channel.Id, model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS) { + c.SetPermissionError(model.PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS) + return + } + + if cm, err := app.AddChannelMember(member.UserId, channel, c.Session.UserId); err != nil { + c.Err = err + return + } else { + c.LogAudit("name=" + channel.Name + " user_id=" + cm.UserId) + w.Write([]byte(cm.ToJson())) + } +} + func removeChannelMember(c *Context, w http.ResponseWriter, r *http.Request) { c.RequireChannelId().RequireUserId() if c.Err != nil { |