github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/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 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 GetSystemEmojiId(emojiName string) (string, bool) { 35 id, found := SystemEmojis[emojiName] 36 return id, found 37 } 38 39 func (emoji *Emoji) IsValid() *AppError { 40 if !IsValidId(emoji.Id) { 41 return NewAppError("Emoji.IsValid", "model.emoji.id.app_error", nil, "", http.StatusBadRequest) 42 } 43 44 if emoji.CreateAt == 0 { 45 return NewAppError("Emoji.IsValid", "model.emoji.create_at.app_error", nil, "id="+emoji.Id, http.StatusBadRequest) 46 } 47 48 if emoji.UpdateAt == 0 { 49 return NewAppError("Emoji.IsValid", "model.emoji.update_at.app_error", nil, "id="+emoji.Id, http.StatusBadRequest) 50 } 51 52 if len(emoji.CreatorId) > 26 { 53 return NewAppError("Emoji.IsValid", "model.emoji.user_id.app_error", nil, "", http.StatusBadRequest) 54 } 55 56 return IsValidEmojiName(emoji.Name) 57 } 58 59 func IsValidEmojiName(name string) *AppError { 60 if len(name) == 0 || len(name) > EMOJI_NAME_MAX_LENGTH || !IsValidAlphaNumHyphenUnderscore(name, false) || inSystemEmoji(name) { 61 return NewAppError("Emoji.IsValid", "model.emoji.name.app_error", nil, "", http.StatusBadRequest) 62 } 63 64 return nil 65 } 66 67 func (emoji *Emoji) PreSave() { 68 if emoji.Id == "" { 69 emoji.Id = NewId() 70 } 71 72 emoji.CreateAt = GetMillis() 73 emoji.UpdateAt = emoji.CreateAt 74 } 75 76 func (emoji *Emoji) ToJson() string { 77 b, _ := json.Marshal(emoji) 78 return string(b) 79 } 80 81 func EmojiFromJson(data io.Reader) *Emoji { 82 var emoji *Emoji 83 json.NewDecoder(data).Decode(&emoji) 84 return emoji 85 } 86 87 func EmojiListToJson(emojiList []*Emoji) string { 88 b, _ := json.Marshal(emojiList) 89 return string(b) 90 } 91 92 func EmojiListFromJson(data io.Reader) []*Emoji { 93 var emojiList []*Emoji 94 json.NewDecoder(data).Decode(&emojiList) 95 return emojiList 96 }