From 3918ed6c589a19bd385a6e566f07dc14d7484c49 Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Wed, 24 Jan 2018 08:50:11 -0500 Subject: Add GET /emojis/name/{emoji_name} API endpoint (#8142) --- api4/api.go | 6 ++++-- api4/emoji.go | 16 ++++++++++++++++ api4/emoji_test.go | 27 +++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) (limited to 'api4') diff --git a/api4/api.go b/api4/api.go index 90c9d0df7..580bd8c58 100644 --- a/api4/api.go +++ b/api4/api.go @@ -96,8 +96,9 @@ type Routes struct { Reactions *mux.Router // 'api/v4/reactions' - Emojis *mux.Router // 'api/v4/emoji' - Emoji *mux.Router // 'api/v4/emoji/{emoji_id:[A-Za-z0-9]+}' + Emojis *mux.Router // 'api/v4/emoji' + Emoji *mux.Router // 'api/v4/emoji/{emoji_id:[A-Za-z0-9]+}' + EmojiByName *mux.Router // 'api/v4/emoji/name/{emoji_name:[A-Za-z0-9_-\.]+}' ReactionByNameForPostForUser *mux.Router // 'api/v4/users/{user_id:[A-Za-z0-9]+}/posts/{post_id:[A-Za-z0-9]+}/reactions/{emoji_name:[A-Za-z0-9_-+]+}' @@ -185,6 +186,7 @@ func Init(a *app.App, root *mux.Router, full bool) *API { api.BaseRoutes.Emojis = api.BaseRoutes.ApiRoot.PathPrefix("/emoji").Subrouter() api.BaseRoutes.Emoji = api.BaseRoutes.ApiRoot.PathPrefix("/emoji/{emoji_id:[A-Za-z0-9]+}").Subrouter() + api.BaseRoutes.EmojiByName = api.BaseRoutes.Emojis.PathPrefix("/name/{emoji_name:[A-Za-z0-9\\_\\-\\+]+}").Subrouter() api.BaseRoutes.ReactionByNameForPostForUser = api.BaseRoutes.PostForUser.PathPrefix("/reactions/{emoji_name:[A-Za-z0-9\\_\\-\\+]+}").Subrouter() diff --git a/api4/emoji.go b/api4/emoji.go index 30d59125b..ae4a35dd5 100644 --- a/api4/emoji.go +++ b/api4/emoji.go @@ -22,6 +22,7 @@ func (api *API) InitEmoji() { api.BaseRoutes.Emojis.Handle("/autocomplete", api.ApiSessionRequired(autocompleteEmojis)).Methods("GET") api.BaseRoutes.Emoji.Handle("", api.ApiSessionRequired(deleteEmoji)).Methods("DELETE") api.BaseRoutes.Emoji.Handle("", api.ApiSessionRequired(getEmoji)).Methods("GET") + api.BaseRoutes.EmojiByName.Handle("", api.ApiSessionRequired(getEmojiByName)).Methods("GET") api.BaseRoutes.Emoji.Handle("/image", api.ApiSessionRequiredTrustRequester(getEmojiImage)).Methods("GET") } @@ -142,6 +143,21 @@ func getEmoji(c *Context, w http.ResponseWriter, r *http.Request) { } } +func getEmojiByName(c *Context, w http.ResponseWriter, r *http.Request) { + c.RequireEmojiName() + if c.Err != nil { + return + } + + emoji, err := c.App.GetEmojiByName(c.Params.EmojiName) + if err != nil { + c.Err = err + return + } else { + w.Write([]byte(emoji.ToJson())) + } +} + func getEmojiImage(c *Context, w http.ResponseWriter, r *http.Request) { c.RequireEmojiId() if c.Err != nil { diff --git a/api4/emoji_test.go b/api4/emoji_test.go index b8b093656..39da4aaef 100644 --- a/api4/emoji_test.go +++ b/api4/emoji_test.go @@ -316,6 +316,33 @@ func TestGetEmoji(t *testing.T) { CheckNotFoundStatus(t, resp) } +func TestGetEmojiByName(t *testing.T) { + th := Setup().InitBasic() + defer th.TearDown() + Client := th.Client + + th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = true }) + + emoji := &model.Emoji{ + CreatorId: th.BasicUser.Id, + Name: model.NewId(), + } + + newEmoji, resp := Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") + CheckNoError(t, resp) + + emoji, resp = Client.GetEmojiByName(newEmoji.Name) + CheckNoError(t, resp) + assert.Equal(t, newEmoji.Name, emoji.Name) + + _, resp = Client.GetEmojiByName(model.NewId()) + CheckNotFoundStatus(t, resp) + + Client.Logout() + _, resp = Client.GetEmojiByName(newEmoji.Name) + CheckUnauthorizedStatus(t, resp) +} + func TestGetEmojiImage(t *testing.T) { th := Setup().InitBasic() defer th.TearDown() -- cgit v1.2.3-1-g7c22