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