Merge remote-tracking branch 'origin/master' into advanced-permissions-phase-1
Этот коммит содержится в:
@@ -1748,6 +1748,17 @@ func (c *Client4) RemoveUserFromChannel(channelId, userId string) (bool, *Respon
|
||||
}
|
||||
}
|
||||
|
||||
// AutocompleteChannelsForTeam will return an ordered list of channels autocomplete suggestions
|
||||
func (c *Client4) AutocompleteChannelsForTeam(teamId, name string) (*ChannelList, *Response) {
|
||||
query := fmt.Sprintf("?name=%v", name)
|
||||
if r, err := c.DoApiGet(c.GetChannelsForTeamRoute(teamId)+"/autocomplete"+query, ""); err != nil {
|
||||
return nil, BuildErrorResponse(r, err)
|
||||
} else {
|
||||
defer closeBody(r)
|
||||
return ChannelListFromJson(r.Body), BuildResponse(r)
|
||||
}
|
||||
}
|
||||
|
||||
// Post Section
|
||||
|
||||
// CreatePost creates a post based on the provided post struct.
|
||||
|
||||
@@ -23,6 +23,11 @@ type Emoji struct {
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
func inSystemEmoji(emojiName string) bool {
|
||||
_, ok := SystemEmojis[emojiName]
|
||||
return ok
|
||||
}
|
||||
|
||||
func (emoji *Emoji) IsValid() *AppError {
|
||||
if len(emoji.Id) != 26 {
|
||||
return NewAppError("Emoji.IsValid", "model.emoji.id.app_error", nil, "", http.StatusBadRequest)
|
||||
@@ -40,7 +45,7 @@ func (emoji *Emoji) IsValid() *AppError {
|
||||
return NewAppError("Emoji.IsValid", "model.emoji.user_id.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
if len(emoji.Name) == 0 || len(emoji.Name) > EMOJI_NAME_MAX_LENGTH || !IsValidAlphaNumHyphenUnderscore(emoji.Name, false) {
|
||||
if len(emoji.Name) == 0 || len(emoji.Name) > EMOJI_NAME_MAX_LENGTH || !IsValidAlphaNumHyphenUnderscore(emoji.Name, false) || inSystemEmoji(emoji.Name) {
|
||||
return NewAppError("Emoji.IsValid", "model.emoji.name.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
|
||||
6
model/emoji_data.go
Обычный файл
6
model/emoji_data.go
Обычный файл
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
@@ -80,4 +80,9 @@ func TestEmojiIsValid(t *testing.T) {
|
||||
if err := emoji.IsValid(); err == nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
emoji.Name = "croissant"
|
||||
if err := emoji.IsValid(); err == nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,9 @@ const (
|
||||
POST_FILEIDS_MAX_RUNES = 150
|
||||
POST_FILENAMES_MAX_RUNES = 4000
|
||||
POST_HASHTAGS_MAX_RUNES = 1000
|
||||
POST_MESSAGE_MAX_RUNES = 4000
|
||||
POST_MESSAGE_MAX_RUNES_V1 = 4000
|
||||
POST_MESSAGE_MAX_BYTES_V2 = 65535 // Maximum size of a TEXT column in MySQL
|
||||
POST_MESSAGE_MAX_RUNES_V2 = POST_MESSAGE_MAX_BYTES_V2 / 4 // Assume a worst-case representation
|
||||
POST_PROPS_MAX_RUNES = 8000
|
||||
POST_PROPS_MAX_USER_RUNES = POST_PROPS_MAX_RUNES - 400 // Leave some room for system / pre-save modifications
|
||||
POST_CUSTOM_TYPE_PREFIX = "custom_"
|
||||
@@ -141,7 +143,7 @@ func (o *Post) Etag() string {
|
||||
return Etag(o.Id, o.UpdateAt)
|
||||
}
|
||||
|
||||
func (o *Post) IsValid() *AppError {
|
||||
func (o *Post) IsValid(maxPostSize int) *AppError {
|
||||
|
||||
if len(o.Id) != 26 {
|
||||
return NewAppError("Post.IsValid", "model.post.is_valid.id.app_error", nil, "", http.StatusBadRequest)
|
||||
@@ -179,7 +181,7 @@ func (o *Post) IsValid() *AppError {
|
||||
return NewAppError("Post.IsValid", "model.post.is_valid.original_id.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
if utf8.RuneCountInString(o.Message) > POST_MESSAGE_MAX_RUNES {
|
||||
if utf8.RuneCountInString(o.Message) > maxPostSize {
|
||||
return NewAppError("Post.IsValid", "model.post.is_valid.msg.app_error", nil, "id="+o.Id, http.StatusBadRequest)
|
||||
}
|
||||
|
||||
|
||||
@@ -23,72 +23,73 @@ func TestPostJson(t *testing.T) {
|
||||
|
||||
func TestPostIsValid(t *testing.T) {
|
||||
o := Post{}
|
||||
maxPostSize := 10000
|
||||
|
||||
if err := o.IsValid(); err == nil {
|
||||
if err := o.IsValid(maxPostSize); err == nil {
|
||||
t.Fatal("should be invalid")
|
||||
}
|
||||
|
||||
o.Id = NewId()
|
||||
if err := o.IsValid(); err == nil {
|
||||
if err := o.IsValid(maxPostSize); err == nil {
|
||||
t.Fatal("should be invalid")
|
||||
}
|
||||
|
||||
o.CreateAt = GetMillis()
|
||||
if err := o.IsValid(); err == nil {
|
||||
if err := o.IsValid(maxPostSize); err == nil {
|
||||
t.Fatal("should be invalid")
|
||||
}
|
||||
|
||||
o.UpdateAt = GetMillis()
|
||||
if err := o.IsValid(); err == nil {
|
||||
if err := o.IsValid(maxPostSize); err == nil {
|
||||
t.Fatal("should be invalid")
|
||||
}
|
||||
|
||||
o.UserId = NewId()
|
||||
if err := o.IsValid(); err == nil {
|
||||
if err := o.IsValid(maxPostSize); err == nil {
|
||||
t.Fatal("should be invalid")
|
||||
}
|
||||
|
||||
o.ChannelId = NewId()
|
||||
o.RootId = "123"
|
||||
if err := o.IsValid(); err == nil {
|
||||
if err := o.IsValid(maxPostSize); err == nil {
|
||||
t.Fatal("should be invalid")
|
||||
}
|
||||
|
||||
o.RootId = ""
|
||||
o.ParentId = "123"
|
||||
if err := o.IsValid(); err == nil {
|
||||
if err := o.IsValid(maxPostSize); err == nil {
|
||||
t.Fatal("should be invalid")
|
||||
}
|
||||
|
||||
o.ParentId = NewId()
|
||||
o.RootId = ""
|
||||
if err := o.IsValid(); err == nil {
|
||||
if err := o.IsValid(maxPostSize); err == nil {
|
||||
t.Fatal("should be invalid")
|
||||
}
|
||||
|
||||
o.ParentId = ""
|
||||
o.Message = strings.Repeat("0", 4001)
|
||||
if err := o.IsValid(); err == nil {
|
||||
o.Message = strings.Repeat("0", maxPostSize+1)
|
||||
if err := o.IsValid(maxPostSize); err == nil {
|
||||
t.Fatal("should be invalid")
|
||||
}
|
||||
|
||||
o.Message = strings.Repeat("0", 4000)
|
||||
if err := o.IsValid(); err != nil {
|
||||
o.Message = strings.Repeat("0", maxPostSize)
|
||||
if err := o.IsValid(maxPostSize); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
o.Message = "test"
|
||||
if err := o.IsValid(); err != nil {
|
||||
if err := o.IsValid(maxPostSize); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
o.Type = "junk"
|
||||
if err := o.IsValid(); err == nil {
|
||||
if err := o.IsValid(maxPostSize); err == nil {
|
||||
t.Fatal("should be invalid")
|
||||
}
|
||||
|
||||
o.Type = POST_CUSTOM_TYPE_PREFIX + "type"
|
||||
if err := o.IsValid(); err != nil {
|
||||
if err := o.IsValid(maxPostSize); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user