github.com/cryptomisa/mattermost-server@v5.11.1+incompatible/model/emoji.go (about) 1 // Copyright (c) 2016-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 type Emoji struct { 21 Id string `json:"id"` 22 CreateAt int64 `json:"create_at"` 23 UpdateAt int64 `json:"update_at"` 24 DeleteAt int64 `json:"delete_at"` 25 CreatorId string `json:"creator_id"` 26 Name string `json:"name"` 27 } 28 29 func inSystemEmoji(emojiName string) bool { 30 _, ok := SystemEmojis[emojiName] 31 return ok 32 } 33 34 func (emoji *Emoji) IsValid() *AppError { 35 if len(emoji.Id) != 26 { 36 return NewAppError("Emoji.IsValid", "model.emoji.id.app_error", nil, "", http.StatusBadRequest) 37 } 38 39 if emoji.CreateAt == 0 { 40 return NewAppError("Emoji.IsValid", "model.emoji.create_at.app_error", nil, "id="+emoji.Id, http.StatusBadRequest) 41 } 42 43 if emoji.UpdateAt == 0 { 44 return NewAppError("Emoji.IsValid", "model.emoji.update_at.app_error", nil, "id="+emoji.Id, http.StatusBadRequest) 45 } 46 47 if len(emoji.CreatorId) > 26 { 48 return NewAppError("Emoji.IsValid", "model.emoji.user_id.app_error", nil, "", http.StatusBadRequest) 49 } 50 51 return IsValidEmojiName(emoji.Name) 52 } 53 54 func IsValidEmojiName(name string) *AppError { 55 if len(name) == 0 || len(name) > EMOJI_NAME_MAX_LENGTH || !IsValidAlphaNumHyphenUnderscore(name, false) || inSystemEmoji(name) { 56 return NewAppError("Emoji.IsValid", "model.emoji.name.app_error", nil, "", http.StatusBadRequest) 57 } 58 59 return nil 60 } 61 62 func (emoji *Emoji) PreSave() { 63 if emoji.Id == "" { 64 emoji.Id = NewId() 65 } 66 67 emoji.CreateAt = GetMillis() 68 emoji.UpdateAt = emoji.CreateAt 69 } 70 71 func (emoji *Emoji) ToJson() string { 72 b, _ := json.Marshal(emoji) 73 return string(b) 74 } 75 76 func EmojiFromJson(data io.Reader) *Emoji { 77 var emoji *Emoji 78 json.NewDecoder(data).Decode(&emoji) 79 return emoji 80 } 81 82 func EmojiListToJson(emojiList []*Emoji) string { 83 b, _ := json.Marshal(emojiList) 84 return string(b) 85 } 86 87 func EmojiListFromJson(data io.Reader) []*Emoji { 88 var emojiList []*Emoji 89 json.NewDecoder(data).Decode(&emojiList) 90 return emojiList 91 }