summaryrefslogtreecommitdiffstats
path: root/api4/channel.go
diff options
context:
space:
mode:
authorSaturnino Abril <saturnino.abril@gmail.com>2017-03-20 21:44:08 +0900
committerGeorge Goldberg <george@gberg.me>2017-03-20 12:44:08 +0000
commit7e89077a93fd187284e426db503a4ab5cbcdf248 (patch)
tree9f2790d73c238b7d57eff7f6317c30e594bfa141 /api4/channel.go
parentac8282cda1455802f52ebe6687eeeef6c950bf49 (diff)
downloadchat-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.go46
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 {