From 48d9099882db5dc9fd61c4820ba7e2aeb189e4f9 Mon Sep 17 00:00:00 2001 From: Carlos Tadeu Panato Junior Date: Thu, 6 Apr 2017 17:15:57 +0200 Subject: implement POST /emoji for apiV4 (#5868) --- api4/emoji.go | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 api4/emoji.go (limited to 'api4/emoji.go') diff --git a/api4/emoji.go b/api4/emoji.go new file mode 100644 index 000000000..a32436b64 --- /dev/null +++ b/api4/emoji.go @@ -0,0 +1,72 @@ +// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package api4 + +import ( + "net/http" + "strings" + + l4g "github.com/alecthomas/log4go" + + "github.com/mattermost/platform/app" + "github.com/mattermost/platform/einterfaces" + "github.com/mattermost/platform/model" + "github.com/mattermost/platform/utils" +) + +func InitEmoji() { + l4g.Debug(utils.T("api.emoji.init.debug")) + + BaseRoutes.Emojis.Handle("", ApiSessionRequired(createEmoji)).Methods("POST") +} + +func createEmoji(c *Context, w http.ResponseWriter, r *http.Request) { + if !*utils.Cfg.ServiceSettings.EnableCustomEmoji { + c.Err = model.NewLocAppError("createEmoji", "api.emoji.disabled.app_error", nil, "") + c.Err.StatusCode = http.StatusNotImplemented + return + } + + if emojiInterface := einterfaces.GetEmojiInterface(); emojiInterface != nil && + !emojiInterface.CanUserCreateEmoji(c.Session.Roles, c.Session.TeamMembers) { + c.Err = model.NewLocAppError("createEmoji", "api.emoji.create.permissions.app_error", nil, "user_id="+c.Session.UserId) + c.Err.StatusCode = http.StatusUnauthorized + return + } + + if len(utils.Cfg.FileSettings.DriverName) == 0 { + c.Err = model.NewLocAppError("createEmoji", "api.emoji.storage.app_error", nil, "") + c.Err.StatusCode = http.StatusNotImplemented + return + } + + if r.ContentLength > app.MaxEmojiFileSize { + c.Err = model.NewLocAppError("createEmoji", "api.emoji.create.too_large.app_error", nil, "") + c.Err.StatusCode = http.StatusRequestEntityTooLarge + return + } + + if err := r.ParseMultipartForm(app.MaxEmojiFileSize); err != nil { + c.Err = model.NewLocAppError("createEmoji", "api.emoji.create.parse.app_error", nil, err.Error()) + c.Err.StatusCode = http.StatusBadRequest + return + } + + m := r.MultipartForm + props := m.Value + + emoji := model.EmojiFromJson(strings.NewReader(props["emoji"][0])) + if emoji == nil { + c.SetInvalidParam("createEmoji") + return + } + + newEmoji, err := app.CreateEmoji(c.Session.UserId, emoji, m) + if err != nil { + c.Err = err + return + } else { + w.Write([]byte(newEmoji.ToJson())) + } +} -- cgit v1.2.3-1-g7c22