github.com/haalcala/mattermost-server-change-repo/v5@v5.33.2/model/emoji.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package model 5 6 import ( 7 "encoding/json" 8 "io" 9 "net/http" 10 "regexp" 11 ) 12 13 const ( 14 EMOJI_NAME_MAX_LENGTH = 64 15 EMOJI_SORT_BY_NAME = "name" 16 ) 17 18 var EMOJI_PATTERN = regexp.MustCompile(`:[a-zA-Z0-9_-]+:`) 19 20 // ALL_EMOJI_PATTERN is same as the EMOJI_PATTERN except for allowing a '+' character. 21 // This is to allow the system emoji :+1: to be matched. 22 // We kept a separate variable to avoid renaming help texts for custom emoji's. 23 // TODO: Merge ALL_EMOJI_PATTERN with EMOJI_PATTERN after updating custom emoji help texts 24 var ALL_EMOJI_PATTERN = regexp.MustCompile(`:[a-zA-Z0-9_+-]+:`) 25 26 type Emoji struct { 27 Id string `json:"id"` 28 CreateAt int64 `json:"create_at"` 29 UpdateAt int64 `json:"update_at"` 30 DeleteAt int64 `json:"delete_at"` 31 CreatorId string `json:"creator_id"` 32 Name string `json:"name"` 33 } 34 35 func inSystemEmoji(emojiName string) bool { 36 _, ok := SystemEmojis[emojiName] 37 return ok 38 } 39 40 func GetSystemEmojiId(emojiName string) (string, bool) { 41 id, found := SystemEmojis[emojiName] 42 return id, found 43 } 44 45 func (emoji *Emoji) IsValid() *AppError { 46 if !IsValidId(emoji.Id) { 47 return NewAppError("Emoji.IsValid", "model.emoji.id.app_error", nil, "", http.StatusBadRequest) 48 } 49 50 if emoji.CreateAt == 0 { 51 return NewAppError("Emoji.IsValid", "model.emoji.create_at.app_error", nil, "id="+emoji.Id, http.StatusBadRequest) 52 } 53 54 if emoji.UpdateAt == 0 { 55 return NewAppError("Emoji.IsValid", "model.emoji.update_at.app_error", nil, "id="+emoji.Id, http.StatusBadRequest) 56 } 57 58 if len(emoji.CreatorId) > 26 { 59 return NewAppError("Emoji.IsValid", "model.emoji.user_id.app_error", nil, "", http.StatusBadRequest) 60 } 61 62 return IsValidEmojiName(emoji.Name) 63 } 64 65 func IsValidEmojiName(name string) *AppError { 66 if name == "" || len(name) > EMOJI_NAME_MAX_LENGTH || !IsValidAlphaNumHyphenUnderscore(name, false) || inSystemEmoji(name) { 67 return NewAppError("Emoji.IsValid", "model.emoji.name.app_error", nil, "", http.StatusBadRequest) 68 } 69 70 return nil 71 } 72 73 func (emoji *Emoji) PreSave() { 74 if emoji.Id == "" { 75 emoji.Id = NewId() 76 } 77 78 emoji.CreateAt = GetMillis() 79 emoji.UpdateAt = emoji.CreateAt 80 } 81 82 func (emoji *Emoji) ToJson() string { 83 b, _ := json.Marshal(emoji) 84 return string(b) 85 } 86 87 func EmojiFromJson(data io.Reader) *Emoji { 88 var emoji *Emoji 89 json.NewDecoder(data).Decode(&emoji) 90 return emoji 91 } 92 93 func EmojiListToJson(emojiList []*Emoji) string { 94 b, _ := json.Marshal(emojiList) 95 return string(b) 96 } 97 98 func EmojiListFromJson(data io.Reader) []*Emoji { 99 var emojiList []*Emoji 100 json.NewDecoder(data).Decode(&emojiList) 101 return emojiList 102 }