Этот коммит содержится в:
Ben Schumacher
2021-07-12 20:05:36 +02:00
коммит произвёл Claudio Costa
родитель 953eebdef4
Коммит 97ccf0bdf6
472 изменённых файлов: 9126 добавлений и 9132 удалений

Просмотреть файл

@@ -10,9 +10,9 @@ import (
)
const (
ACCESS_TOKEN_GRANT_TYPE = "authorization_code"
ACCESS_TOKEN_TYPE = "bearer"
REFRESH_TOKEN_GRANT_TYPE = "refresh_token"
AccessTokenGrantType = "authorization_code"
AccessTokenType = "bearer"
RefreshTokenGrantType = "refresh_token"
)
type AccessData struct {

Просмотреть файл

@@ -10,10 +10,10 @@ import (
)
const (
AUTHCODE_EXPIRE_TIME = 60 * 10 // 10 minutes
AUTHCODE_RESPONSE_TYPE = "code"
IMPLICIT_RESPONSE_TYPE = "token"
DEFAULT_SCOPE = "user"
AuthCodeExpireTime = 60 * 10 // 10 minutes
AuthCodeResponseType = "code"
ImplicitResponseType = "token"
DefaultScope = "user"
)
type AuthData struct {
@@ -103,7 +103,7 @@ func (ar *AuthorizeRequest) IsValid() *AppError {
func (ad *AuthData) PreSave() {
if ad.ExpiresIn == 0 {
ad.ExpiresIn = AUTHCODE_EXPIRE_TIME
ad.ExpiresIn = AuthCodeExpireTime
}
if ad.CreateAt == 0 {
@@ -111,7 +111,7 @@ func (ad *AuthData) PreSave() {
}
if ad.Scope == "" {
ad.Scope = DEFAULT_SCOPE
ad.Scope = DefaultScope
}
}

Просмотреть файл

@@ -13,11 +13,11 @@ import (
)
const (
BOT_DISPLAY_NAME_MAX_RUNES = USER_FIRST_NAME_MAX_RUNES
BOT_DESCRIPTION_MAX_RUNES = 1024
BOT_CREATOR_ID_MAX_RUNES = KEY_VALUE_PLUGIN_ID_MAX_RUNES // UserId or PluginId
BOT_WARN_METRIC_BOT_USERNAME = "mattermost-advisor"
BOT_SYSTEM_BOT_USERNAME = "system-bot"
BotDisplayNameMaxRunes = UserFirstNameMaxRunes
BotDescriptionMaxRunes = 1024
BotCreatorIdMaxRunes = KeyValuePluginIdMaxRunes // UserId or PluginId
BotWarnMetricBotUsername = "mattermost-advisor"
BotSystemBotUsername = "system-bot"
)
// Bot is a special type of User meant for programmatic interactions.
@@ -75,15 +75,15 @@ func (b *Bot) IsValid() *AppError {
return NewAppError("Bot.IsValid", "model.bot.is_valid.username.app_error", b.Trace(), "", http.StatusBadRequest)
}
if utf8.RuneCountInString(b.DisplayName) > BOT_DISPLAY_NAME_MAX_RUNES {
if utf8.RuneCountInString(b.DisplayName) > BotDisplayNameMaxRunes {
return NewAppError("Bot.IsValid", "model.bot.is_valid.user_id.app_error", b.Trace(), "", http.StatusBadRequest)
}
if utf8.RuneCountInString(b.Description) > BOT_DESCRIPTION_MAX_RUNES {
if utf8.RuneCountInString(b.Description) > BotDescriptionMaxRunes {
return NewAppError("Bot.IsValid", "model.bot.is_valid.description.app_error", b.Trace(), "", http.StatusBadRequest)
}
if b.OwnerId == "" || utf8.RuneCountInString(b.OwnerId) > BOT_CREATOR_ID_MAX_RUNES {
if b.OwnerId == "" || utf8.RuneCountInString(b.OwnerId) > BotCreatorIdMaxRunes {
return NewAppError("Bot.IsValid", "model.bot.is_valid.creator_id.app_error", b.Trace(), "", http.StatusBadRequest)
}
@@ -191,7 +191,7 @@ func UserFromBot(b *Bot) *User {
Username: b.Username,
Email: NormalizeEmail(fmt.Sprintf("%s@localhost", b.Username)),
FirstName: b.DisplayName,
Roles: SYSTEM_USER_ROLE_ID,
Roles: SystemUserRoleId,
}
}
@@ -201,7 +201,7 @@ func BotFromUser(u *User) *Bot {
OwnerId: u.Id,
UserId: u.Id,
Username: u.Username,
DisplayName: u.GetDisplayName(SHOW_USERNAME),
DisplayName: u.GetDisplayName(ShowUsername),
}
}
@@ -242,7 +242,7 @@ func MakeBotNotFoundError(userId string) *AppError {
}
func IsBotDMChannel(channel *Channel, botUserID string) bool {
if channel.Type != CHANNEL_DIRECT {
if channel.Type != ChannelTypeDirect {
return false
}

Просмотреть файл

@@ -762,14 +762,14 @@ func TestIsBotChannel(t *testing.T) {
}{
{
Name: "not a direct channel",
Channel: &Channel{Type: CHANNEL_OPEN},
Channel: &Channel{Type: ChannelTypeOpen},
Expected: false,
},
{
Name: "a direct channel with another user",
Channel: &Channel{
Name: "user1__user2",
Type: CHANNEL_DIRECT,
Type: ChannelTypeDirect,
},
Expected: false,
},
@@ -777,7 +777,7 @@ func TestIsBotChannel(t *testing.T) {
Name: "a direct channel with the name containing the bot's ID first",
Channel: &Channel{
Name: "botUserID__user2",
Type: CHANNEL_DIRECT,
Type: ChannelTypeDirect,
},
Expected: true,
},
@@ -785,7 +785,7 @@ func TestIsBotChannel(t *testing.T) {
Name: "a direct channel with the name containing the bot's ID second",
Channel: &Channel{
Name: "user1__botUserID",
Type: CHANNEL_DIRECT,
Type: ChannelTypeDirect,
},
Expected: true,
},

Просмотреть файл

@@ -15,22 +15,23 @@ import (
)
const (
CHANNEL_OPEN = "O"
CHANNEL_PRIVATE = "P"
CHANNEL_DIRECT = "D"
CHANNEL_GROUP = "G"
CHANNEL_GROUP_MAX_USERS = 8
CHANNEL_GROUP_MIN_USERS = 3
DEFAULT_CHANNEL = "town-square"
CHANNEL_DISPLAY_NAME_MAX_RUNES = 64
CHANNEL_NAME_MIN_LENGTH = 2
CHANNEL_NAME_MAX_LENGTH = 64
CHANNEL_HEADER_MAX_RUNES = 1024
CHANNEL_PURPOSE_MAX_RUNES = 250
CHANNEL_CACHE_SIZE = 25000
ChannelTypeOpen = "O"
ChannelTypePrivate = "P"
ChannelTypeDirect = "D"
ChannelTypeGroup = "G"
CHANNEL_SORT_BY_USERNAME = "username"
CHANNEL_SORT_BY_STATUS = "status"
ChannelGroupMaxUsers = 8
ChannelGroupMinUsers = 3
DefaultChannelName = "town-square"
ChannelDisplayNameMaxRunes = 64
ChannelNameMinLength = 2
ChannelNameMaxLength = 64
ChannelHeaderMaxRunes = 1024
ChannelPurposeMaxRunes = 250
ChannelCacheSize = 25000
ChannelSortByUsername = "username"
ChannelSortByStatus = "status"
)
type Channel struct {
@@ -230,7 +231,7 @@ func (o *Channel) IsValid() *AppError {
return NewAppError("Channel.IsValid", "model.channel.is_valid.update_at.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
if utf8.RuneCountInString(o.DisplayName) > CHANNEL_DISPLAY_NAME_MAX_RUNES {
if utf8.RuneCountInString(o.DisplayName) > ChannelDisplayNameMaxRunes {
return NewAppError("Channel.IsValid", "model.channel.is_valid.display_name.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
@@ -238,15 +239,15 @@ func (o *Channel) IsValid() *AppError {
return NewAppError("Channel.IsValid", "model.channel.is_valid.2_or_more.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
if !(o.Type == CHANNEL_OPEN || o.Type == CHANNEL_PRIVATE || o.Type == CHANNEL_DIRECT || o.Type == CHANNEL_GROUP) {
if !(o.Type == ChannelTypeOpen || o.Type == ChannelTypePrivate || o.Type == ChannelTypeDirect || o.Type == ChannelTypeGroup) {
return NewAppError("Channel.IsValid", "model.channel.is_valid.type.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
if utf8.RuneCountInString(o.Header) > CHANNEL_HEADER_MAX_RUNES {
if utf8.RuneCountInString(o.Header) > ChannelHeaderMaxRunes {
return NewAppError("Channel.IsValid", "model.channel.is_valid.header.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
if utf8.RuneCountInString(o.Purpose) > CHANNEL_PURPOSE_MAX_RUNES {
if utf8.RuneCountInString(o.Purpose) > ChannelPurposeMaxRunes {
return NewAppError("Channel.IsValid", "model.channel.is_valid.purpose.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
@@ -255,7 +256,7 @@ func (o *Channel) IsValid() *AppError {
}
userIds := strings.Split(o.Name, "__")
if o.Type != CHANNEL_DIRECT && len(userIds) == 2 && IsValidId(userIds[0]) && IsValidId(userIds[1]) {
if o.Type != ChannelTypeDirect && len(userIds) == 2 && IsValidId(userIds[0]) && IsValidId(userIds[1]) {
return NewAppError("Channel.IsValid", "model.channel.is_valid.name.app_error", nil, "", http.StatusBadRequest)
}
@@ -282,11 +283,11 @@ func (o *Channel) PreUpdate() {
}
func (o *Channel) IsGroupOrDirect() bool {
return o.Type == CHANNEL_DIRECT || o.Type == CHANNEL_GROUP
return o.Type == ChannelTypeDirect || o.Type == ChannelTypeGroup
}
func (o *Channel) IsOpen() bool {
return o.Type == CHANNEL_OPEN
return o.Type == ChannelTypeOpen
}
func (o *Channel) Patch(patch *ChannelPatch) {
@@ -332,7 +333,7 @@ func (o *Channel) IsShared() bool {
}
func (o *Channel) GetOtherUserIdForDM(userId string) string {
if o.Type != CHANNEL_DIRECT {
if o.Type != ChannelTypeDirect {
return ""
}
@@ -368,8 +369,8 @@ func GetGroupDisplayNameFromUsers(users []*User, truncate bool) string {
name := strings.Join(usernames, ", ")
if truncate && len(name) > CHANNEL_NAME_MAX_LENGTH {
name = name[:CHANNEL_NAME_MAX_LENGTH]
if truncate && len(name) > ChannelNameMaxLength {
name = name[:ChannelNameMaxLength]
}
return name

Просмотреть файл

@@ -11,16 +11,16 @@ import (
)
const (
CHANNEL_NOTIFY_DEFAULT = "default"
CHANNEL_NOTIFY_ALL = "all"
CHANNEL_NOTIFY_MENTION = "mention"
CHANNEL_NOTIFY_NONE = "none"
CHANNEL_MARK_UNREAD_ALL = "all"
CHANNEL_MARK_UNREAD_MENTION = "mention"
IGNORE_CHANNEL_MENTIONS_DEFAULT = "default"
IGNORE_CHANNEL_MENTIONS_OFF = "off"
IGNORE_CHANNEL_MENTIONS_ON = "on"
IGNORE_CHANNEL_MENTIONS_NOTIFY_PROP = "ignore_channel_mentions"
ChannelNotifyDefault = "default"
ChannelNotifyAll = "all"
ChannelNotifyMention = "mention"
ChannelNotifyNone = "none"
ChannelMarkUnreadAll = "all"
ChannelMarkUnreadMention = "mention"
IgnoreChannelMentionsDefault = "default"
IgnoreChannelMentionsOff = "off"
IgnoreChannelMentionsOn = "on"
IgnoreChannelMentionsNotifyProp = "ignore_channel_mentions"
)
type ChannelUnread struct {
@@ -127,29 +127,29 @@ func (o *ChannelMember) IsValid() *AppError {
return NewAppError("ChannelMember.IsValid", "model.channel_member.is_valid.user_id.app_error", nil, "", http.StatusBadRequest)
}
notifyLevel := o.NotifyProps[DESKTOP_NOTIFY_PROP]
notifyLevel := o.NotifyProps[DesktopNotifyProp]
if len(notifyLevel) > 20 || !IsChannelNotifyLevelValid(notifyLevel) {
return NewAppError("ChannelMember.IsValid", "model.channel_member.is_valid.notify_level.app_error", nil, "notify_level="+notifyLevel, http.StatusBadRequest)
}
markUnreadLevel := o.NotifyProps[MARK_UNREAD_NOTIFY_PROP]
markUnreadLevel := o.NotifyProps[MarkUnreadNotifyProp]
if len(markUnreadLevel) > 20 || !IsChannelMarkUnreadLevelValid(markUnreadLevel) {
return NewAppError("ChannelMember.IsValid", "model.channel_member.is_valid.unread_level.app_error", nil, "mark_unread_level="+markUnreadLevel, http.StatusBadRequest)
}
if pushLevel, ok := o.NotifyProps[PUSH_NOTIFY_PROP]; ok {
if pushLevel, ok := o.NotifyProps[PushNotifyProp]; ok {
if len(pushLevel) > 20 || !IsChannelNotifyLevelValid(pushLevel) {
return NewAppError("ChannelMember.IsValid", "model.channel_member.is_valid.push_level.app_error", nil, "push_notification_level="+pushLevel, http.StatusBadRequest)
}
}
if sendEmail, ok := o.NotifyProps[EMAIL_NOTIFY_PROP]; ok {
if sendEmail, ok := o.NotifyProps[EmailNotifyProp]; ok {
if len(sendEmail) > 20 || !IsSendEmailValid(sendEmail) {
return NewAppError("ChannelMember.IsValid", "model.channel_member.is_valid.email_value.app_error", nil, "push_notification_level="+sendEmail, http.StatusBadRequest)
}
}
if ignoreChannelMentions, ok := o.NotifyProps[IGNORE_CHANNEL_MENTIONS_NOTIFY_PROP]; ok {
if ignoreChannelMentions, ok := o.NotifyProps[IgnoreChannelMentionsNotifyProp]; ok {
if len(ignoreChannelMentions) > 40 || !IsIgnoreChannelMentionsValid(ignoreChannelMentions) {
return NewAppError("ChannelMember.IsValid", "model.channel_member.is_valid.ignore_channel_mentions_value.app_error", nil, "ignore_channel_mentions="+ignoreChannelMentions, http.StatusBadRequest)
}
@@ -172,41 +172,41 @@ func (o *ChannelMember) GetRoles() []string {
func (o *ChannelMember) SetChannelMuted(muted bool) {
if o.IsChannelMuted() {
o.NotifyProps[MARK_UNREAD_NOTIFY_PROP] = CHANNEL_MARK_UNREAD_ALL
o.NotifyProps[MarkUnreadNotifyProp] = ChannelMarkUnreadAll
} else {
o.NotifyProps[MARK_UNREAD_NOTIFY_PROP] = CHANNEL_MARK_UNREAD_MENTION
o.NotifyProps[MarkUnreadNotifyProp] = ChannelMarkUnreadMention
}
}
func (o *ChannelMember) IsChannelMuted() bool {
return o.NotifyProps[MARK_UNREAD_NOTIFY_PROP] == CHANNEL_MARK_UNREAD_MENTION
return o.NotifyProps[MarkUnreadNotifyProp] == ChannelMarkUnreadMention
}
func IsChannelNotifyLevelValid(notifyLevel string) bool {
return notifyLevel == CHANNEL_NOTIFY_DEFAULT ||
notifyLevel == CHANNEL_NOTIFY_ALL ||
notifyLevel == CHANNEL_NOTIFY_MENTION ||
notifyLevel == CHANNEL_NOTIFY_NONE
return notifyLevel == ChannelNotifyDefault ||
notifyLevel == ChannelNotifyAll ||
notifyLevel == ChannelNotifyMention ||
notifyLevel == ChannelNotifyNone
}
func IsChannelMarkUnreadLevelValid(markUnreadLevel string) bool {
return markUnreadLevel == CHANNEL_MARK_UNREAD_ALL || markUnreadLevel == CHANNEL_MARK_UNREAD_MENTION
return markUnreadLevel == ChannelMarkUnreadAll || markUnreadLevel == ChannelMarkUnreadMention
}
func IsSendEmailValid(sendEmail string) bool {
return sendEmail == CHANNEL_NOTIFY_DEFAULT || sendEmail == "true" || sendEmail == "false"
return sendEmail == ChannelNotifyDefault || sendEmail == "true" || sendEmail == "false"
}
func IsIgnoreChannelMentionsValid(ignoreChannelMentions string) bool {
return ignoreChannelMentions == IGNORE_CHANNEL_MENTIONS_ON || ignoreChannelMentions == IGNORE_CHANNEL_MENTIONS_OFF || ignoreChannelMentions == IGNORE_CHANNEL_MENTIONS_DEFAULT
return ignoreChannelMentions == IgnoreChannelMentionsOn || ignoreChannelMentions == IgnoreChannelMentionsOff || ignoreChannelMentions == IgnoreChannelMentionsDefault
}
func GetDefaultChannelNotifyProps() StringMap {
return StringMap{
DESKTOP_NOTIFY_PROP: CHANNEL_NOTIFY_DEFAULT,
MARK_UNREAD_NOTIFY_PROP: CHANNEL_MARK_UNREAD_ALL,
PUSH_NOTIFY_PROP: CHANNEL_NOTIFY_DEFAULT,
EMAIL_NOTIFY_PROP: CHANNEL_NOTIFY_DEFAULT,
IGNORE_CHANNEL_MENTIONS_NOTIFY_PROP: IGNORE_CHANNEL_MENTIONS_DEFAULT,
DesktopNotifyProp: ChannelNotifyDefault,
MarkUnreadNotifyProp: ChannelMarkUnreadAll,
PushNotifyProp: ChannelNotifyDefault,
EmailNotifyProp: ChannelNotifyDefault,
IgnoreChannelMentionsNotifyProp: IgnoreChannelMentionsDefault,
}
}

Просмотреть файл

@@ -35,13 +35,13 @@ func TestChannelMemberIsValid(t *testing.T) {
o.NotifyProps["desktop"] = "123456789012345678901"
require.NotNil(t, o.IsValid(), "should be invalid")
o.NotifyProps["desktop"] = CHANNEL_NOTIFY_ALL
o.NotifyProps["desktop"] = ChannelNotifyAll
require.Nil(t, o.IsValid(), "should be valid")
o.NotifyProps["mark_unread"] = "123456789012345678901"
require.NotNil(t, o.IsValid(), "should be invalid")
o.NotifyProps["mark_unread"] = CHANNEL_MARK_UNREAD_ALL
o.NotifyProps["mark_unread"] = ChannelMarkUnreadAll
require.Nil(t, o.IsValid(), "should be valid")
o.Roles = ""

Просмотреть файл

@@ -8,7 +8,7 @@ import (
"io"
)
const CHANNEL_SEARCH_DEFAULT_LIMIT = 50
const ChannelSearchDefaultLimit = 50
type ChannelSearch struct {
Term string `json:"term"`

Просмотреть файл

@@ -115,11 +115,11 @@ func TestGetGroupDisplayNameFromUsers(t *testing.T) {
users[3] = &User{Username: NewId()}
name := GetGroupDisplayNameFromUsers(users, true)
require.LessOrEqual(t, len(name), CHANNEL_NAME_MAX_LENGTH)
require.LessOrEqual(t, len(name), ChannelNameMaxLength)
}
func TestGetGroupNameFromUserIds(t *testing.T) {
name := GetGroupNameFromUserIds([]string{NewId(), NewId(), NewId(), NewId(), NewId()})
require.LessOrEqual(t, len(name), CHANNEL_NAME_MAX_LENGTH)
require.LessOrEqual(t, len(name), ChannelNameMaxLength)
}

Просмотреть файл

@@ -19,35 +19,35 @@ import (
)
const (
HEADER_REQUEST_ID = "X-Request-ID"
HEADER_VERSION_ID = "X-Version-ID"
HEADER_CLUSTER_ID = "X-Cluster-ID"
HEADER_ETAG_SERVER = "ETag"
HEADER_ETAG_CLIENT = "If-None-Match"
HEADER_FORWARDED = "X-Forwarded-For"
HEADER_REAL_IP = "X-Real-IP"
HEADER_FORWARDED_PROTO = "X-Forwarded-Proto"
HEADER_TOKEN = "token"
HEADER_CSRF_TOKEN = "X-CSRF-Token"
HEADER_BEARER = "BEARER"
HEADER_AUTH = "Authorization"
HEADER_CLOUD_TOKEN = "X-Cloud-Token"
HEADER_REMOTECLUSTER_TOKEN = "X-RemoteCluster-Token"
HEADER_REMOTECLUSTER_ID = "X-RemoteCluster-Id"
HEADER_REQUESTED_WITH = "X-Requested-With"
HEADER_REQUESTED_WITH_XML = "XMLHttpRequest"
HEADER_RANGE = "Range"
STATUS = "status"
STATUS_OK = "OK"
STATUS_FAIL = "FAIL"
STATUS_UNHEALTHY = "UNHEALTHY"
STATUS_REMOVE = "REMOVE"
HeaderRequestId = "X-Request-ID"
HeaderVersionId = "X-Version-ID"
HeaderClusterId = "X-Cluster-ID"
HeaderEtagServer = "ETag"
HeaderEtagClient = "If-None-Match"
HeaderForwarded = "X-Forwarded-For"
HeaderRealIp = "X-Real-IP"
HeaderForwardedProto = "X-Forwarded-Proto"
HeaderToken = "token"
HeaderCsrfToken = "X-CSRF-Token"
HeaderBearer = "BEARER"
HeaderAuth = "Authorization"
HeaderCloudToken = "X-Cloud-Token"
HeaderRemoteclusterToken = "X-RemoteCluster-Token"
HeaderRemoteclusterId = "X-RemoteCluster-Id"
HeaderRequestedWith = "X-Requested-With"
HeaderRequestedWithXml = "XMLHttpRequest"
HeaderRange = "Range"
STATUS = "status"
StatusOk = "OK"
StatusFail = "FAIL"
StatusUnhealthy = "UNHEALTHY"
StatusRemove = "REMOVE"
CLIENT_DIR = "client"
ClientDir = "client"
API_URL_SUFFIX_V1 = "/api/v1"
API_URL_SUFFIX_V4 = "/api/v4"
API_URL_SUFFIX = API_URL_SUFFIX_V4
ApiUrlSuffixV1 = "/api/v1"
ApiUrlSuffixV4 = "/api/v4"
ApiUrlSuffix = ApiUrlSuffixV4
)
type Response struct {
@@ -120,7 +120,7 @@ func (c *Client4) Must(result interface{}, resp *Response) interface{} {
func NewAPIv4Client(url string) *Client4 {
url = strings.TrimRight(url, "/")
return &Client4{url, url + API_URL_SUFFIX, &http.Client{}, "", "", map[string]string{}, "", ""}
return &Client4{url, url + ApiUrlSuffix, &http.Client{}, "", "", map[string]string{}, "", ""}
}
func NewAPIv4SocketClient(socketPath string) *Client4 {
@@ -157,16 +157,16 @@ func BuildErrorResponse(r *http.Response, err *AppError) *Response {
func BuildResponse(r *http.Response) *Response {
return &Response{
StatusCode: r.StatusCode,
RequestId: r.Header.Get(HEADER_REQUEST_ID),
Etag: r.Header.Get(HEADER_ETAG_SERVER),
ServerVersion: r.Header.Get(HEADER_VERSION_ID),
RequestId: r.Header.Get(HeaderRequestId),
Etag: r.Header.Get(HeaderEtagServer),
ServerVersion: r.Header.Get(HeaderVersionId),
Header: r.Header,
}
}
func (c *Client4) SetToken(token string) {
c.AuthToken = token
c.AuthType = HEADER_BEARER
c.AuthType = HeaderBearer
}
// MockSession is deprecated in favour of SetToken
@@ -176,12 +176,12 @@ func (c *Client4) MockSession(token string) {
func (c *Client4) SetOAuthToken(token string) {
c.AuthToken = token
c.AuthType = HEADER_TOKEN
c.AuthType = HeaderToken
}
func (c *Client4) ClearOAuthToken() {
c.AuthToken = ""
c.AuthType = HEADER_BEARER
c.AuthType = HeaderBearer
}
func (c *Client4) GetUsersRoute() string {
@@ -610,7 +610,7 @@ func (c *Client4) DoApiDelete(url string) (*http.Response, *AppError) {
}
func (c *Client4) DoApiRequest(method, url, data, etag string) (*http.Response, *AppError) {
return c.doApiRequestReader(method, url, strings.NewReader(data), map[string]string{HEADER_ETAG_CLIENT: etag})
return c.doApiRequestReader(method, url, strings.NewReader(data), map[string]string{HeaderEtagClient: etag})
}
func (c *Client4) DoApiRequestWithHeaders(method, url, data string, headers map[string]string) (*http.Response, *AppError) {
@@ -618,7 +618,7 @@ func (c *Client4) DoApiRequestWithHeaders(method, url, data string, headers map[
}
func (c *Client4) doApiRequestBytes(method, url string, data []byte, etag string) (*http.Response, *AppError) {
return c.doApiRequestReader(method, url, bytes.NewReader(data), map[string]string{HEADER_ETAG_CLIENT: etag})
return c.doApiRequestReader(method, url, bytes.NewReader(data), map[string]string{HeaderEtagClient: etag})
}
func (c *Client4) doApiRequestReader(method, url string, data io.Reader, headers map[string]string) (*http.Response, *AppError) {
@@ -632,7 +632,7 @@ func (c *Client4) doApiRequestReader(method, url string, data io.Reader, headers
}
if c.AuthToken != "" {
rq.Header.Set(HEADER_AUTH, c.AuthType+" "+c.AuthToken)
rq.Header.Set(HeaderAuth, c.AuthType+" "+c.AuthToken)
}
if c.HttpHeader != nil && len(c.HttpHeader) > 0 {
@@ -673,7 +673,7 @@ func (c *Client4) doUploadFile(url string, body io.Reader, contentType string, c
rq.Header.Set("Content-Type", contentType)
if c.AuthToken != "" {
rq.Header.Set(HEADER_AUTH, c.AuthType+" "+c.AuthToken)
rq.Header.Set(HeaderAuth, c.AuthType+" "+c.AuthToken)
}
rp, err := c.HttpClient.Do(rq)
@@ -697,7 +697,7 @@ func (c *Client4) DoEmojiUploadFile(url string, data []byte, contentType string)
rq.Header.Set("Content-Type", contentType)
if c.AuthToken != "" {
rq.Header.Set(HEADER_AUTH, c.AuthType+" "+c.AuthToken)
rq.Header.Set(HeaderAuth, c.AuthType+" "+c.AuthToken)
}
rp, err := c.HttpClient.Do(rq)
@@ -721,7 +721,7 @@ func (c *Client4) DoUploadImportTeam(url string, data []byte, contentType string
rq.Header.Set("Content-Type", contentType)
if c.AuthToken != "" {
rq.Header.Set(HEADER_AUTH, c.AuthType+" "+c.AuthToken)
rq.Header.Set(HeaderAuth, c.AuthType+" "+c.AuthToken)
}
rp, err := c.HttpClient.Do(rq)
@@ -743,7 +743,7 @@ func CheckStatusOK(r *http.Response) bool {
m := MapFromJson(r.Body)
defer closeBody(r)
if m != nil && m[STATUS] == STATUS_OK {
if m != nil && m[STATUS] == StatusOk {
return true
}
@@ -804,8 +804,8 @@ func (c *Client4) login(m map[string]string) (*User, *Response) {
return nil, BuildErrorResponse(r, err)
}
defer closeBody(r)
c.AuthToken = r.Header.Get(HEADER_TOKEN)
c.AuthType = HEADER_BEARER
c.AuthToken = r.Header.Get(HeaderToken)
c.AuthType = HeaderBearer
return UserFromJson(r.Body), BuildResponse(r)
}
@@ -817,7 +817,7 @@ func (c *Client4) Logout() (bool, *Response) {
}
defer closeBody(r)
c.AuthToken = ""
c.AuthType = HEADER_BEARER
c.AuthType = HeaderBearer
return CheckStatusOK(r), BuildResponse(r)
}
@@ -879,7 +879,7 @@ func (c *Client4) CreateUserWithInviteId(user *User, inviteId string) (*User, *R
// GetMe returns the logged in user.
func (c *Client4) GetMe(etag string) (*User, *Response) {
r, err := c.DoApiGet(c.GetUserRoute(ME), etag)
r, err := c.DoApiGet(c.GetUserRoute(Me), etag)
if err != nil {
return nil, BuildErrorResponse(r, err)
}
@@ -1534,7 +1534,7 @@ func (c *Client4) SetProfileImage(userId string, data []byte) (bool, *Response)
rq.Header.Set("Content-Type", writer.FormDataContentType())
if c.AuthToken != "" {
rq.Header.Set(HEADER_AUTH, c.AuthType+" "+c.AuthToken)
rq.Header.Set(HeaderAuth, c.AuthType+" "+c.AuthToken)
}
rp, err := c.HttpClient.Do(rq)
@@ -1783,7 +1783,7 @@ func (c *Client4) SetBotIconImage(botUserId string, data []byte) (bool, *Respons
rq.Header.Set("Content-Type", writer.FormDataContentType())
if c.AuthToken != "" {
rq.Header.Set(HEADER_AUTH, c.AuthType+" "+c.AuthToken)
rq.Header.Set(HeaderAuth, c.AuthType+" "+c.AuthToken)
}
rp, err := c.HttpClient.Do(rq)
@@ -2031,7 +2031,7 @@ func (c *Client4) PermanentDeleteTeam(teamId string) (bool, *Response) {
return CheckStatusOK(r), BuildResponse(r)
}
// UpdateTeamPrivacy modifies the team type (model.TEAM_OPEN <--> model.TEAM_INVITE) and sets
// UpdateTeamPrivacy modifies the team type (model.TeamOpen <--> model.TeamInvite) and sets
// the corresponding AllowOpenInvite appropriately.
func (c *Client4) UpdateTeamPrivacy(teamId string, privacy string) (*Team, *Response) {
requestBody := map[string]string{"privacy": privacy}
@@ -2056,8 +2056,8 @@ func (c *Client4) GetTeamMembers(teamId string, page int, perPage int, etag stri
// GetTeamMembersWithoutDeletedUsers returns team members based on the provided team id string. Additional parameters of sort and exclude_deleted_users accepted as well
// Could not add it to above function due to it be a breaking change.
func (c *Client4) GetTeamMembersSortAndWithoutDeletedUsers(teamId string, page int, perPage int, sort string, exclude_deleted_users bool, etag string) ([]*TeamMember, *Response) {
query := fmt.Sprintf("?page=%v&per_page=%v&sort=%v&exclude_deleted_users=%v", page, perPage, sort, exclude_deleted_users)
func (c *Client4) GetTeamMembersSortAndWithoutDeletedUsers(teamId string, page int, perPage int, sort string, excludeDeletedUsers bool, etag string) ([]*TeamMember, *Response) {
query := fmt.Sprintf("?page=%v&per_page=%v&sort=%v&exclude_deleted_users=%v", page, perPage, sort, excludeDeletedUsers)
r, err := c.DoApiGet(c.GetTeamMembersRoute(teamId)+query, etag)
if err != nil {
return nil, BuildErrorResponse(r, err)
@@ -2329,7 +2329,7 @@ func (c *Client4) SetTeamIcon(teamId string, data []byte) (bool, *Response) {
rq.Header.Set("Content-Type", writer.FormDataContentType())
if c.AuthToken != "" {
rq.Header.Set(HEADER_AUTH, c.AuthType+" "+c.AuthToken)
rq.Header.Set(HeaderAuth, c.AuthType+" "+c.AuthToken)
}
rp, err := c.HttpClient.Do(rq)
@@ -3376,7 +3376,7 @@ func (c *Client4) GetPing() (string, *Response) {
r, err := c.DoApiGet(c.GetSystemRoute()+"/ping", "")
if r != nil && r.StatusCode == 500 {
defer r.Body.Close()
return STATUS_UNHEALTHY, BuildErrorResponse(r, err)
return StatusUnhealthy, BuildErrorResponse(r, err)
}
if err != nil {
return "", BuildErrorResponse(r, err)
@@ -3391,7 +3391,7 @@ func (c *Client4) GetPingWithServerStatus() (string, *Response) {
r, err := c.DoApiGet(c.GetSystemRoute()+"/ping?get_server_status="+c.boolString(true), "")
if r != nil && r.StatusCode == 500 {
defer r.Body.Close()
return STATUS_UNHEALTHY, BuildErrorResponse(r, err)
return StatusUnhealthy, BuildErrorResponse(r, err)
}
if err != nil {
return "", BuildErrorResponse(r, err)
@@ -3406,7 +3406,7 @@ func (c *Client4) GetPingWithFullServerStatus() (map[string]string, *Response) {
r, err := c.DoApiGet(c.GetSystemRoute()+"/ping?get_server_status="+c.boolString(true), "")
if r != nil && r.StatusCode == 500 {
defer r.Body.Close()
return map[string]string{"status": STATUS_UNHEALTHY}, BuildErrorResponse(r, err)
return map[string]string{"status": StatusUnhealthy}, BuildErrorResponse(r, err)
}
if err != nil {
return nil, BuildErrorResponse(r, err)
@@ -3569,7 +3569,7 @@ func (c *Client4) UploadLicenseFile(data []byte) (bool, *Response) {
rq.Header.Set("Content-Type", writer.FormDataContentType())
if c.AuthToken != "" {
rq.Header.Set(HEADER_AUTH, c.AuthType+" "+c.AuthToken)
rq.Header.Set(HeaderAuth, c.AuthType+" "+c.AuthToken)
}
rp, err := c.HttpClient.Do(rq)
@@ -3998,7 +3998,7 @@ func (c *Client4) DownloadComplianceReport(reportId string) ([]byte, *Response)
}
if c.AuthToken != "" {
rq.Header.Set(HEADER_AUTH, "BEARER "+c.AuthToken)
rq.Header.Set(HeaderAuth, "BEARER "+c.AuthToken)
}
rp, err := c.HttpClient.Do(rq)
@@ -4264,7 +4264,7 @@ func (c *Client4) MigrateAuthToSaml(fromAuthService string, usersMap map[string]
// UploadLdapPublicCertificate will upload a public certificate for LDAP and set the config to use it.
func (c *Client4) UploadLdapPublicCertificate(data []byte) (bool, *Response) {
body, writer, err := fileToMultipart(data, LDAP_PUBLIC_CERTIFICATE_NAME)
body, writer, err := fileToMultipart(data, LdapPublicCertificateName)
if err != nil {
return false, &Response{Error: NewAppError("UploadLdapPublicCertificate", "model.client.upload_ldap_cert.app_error", nil, err.Error(), http.StatusBadRequest)}
}
@@ -4275,7 +4275,7 @@ func (c *Client4) UploadLdapPublicCertificate(data []byte) (bool, *Response) {
// UploadLdapPrivateCertificate will upload a private key for LDAP and set the config to use it.
func (c *Client4) UploadLdapPrivateCertificate(data []byte) (bool, *Response) {
body, writer, err := fileToMultipart(data, LDAP_PRIVATE_KEY_NAME)
body, writer, err := fileToMultipart(data, LdapPrivateKeyName)
if err != nil {
return false, &Response{Error: NewAppError("UploadLdapPrivateCertificate", "model.client.upload_Ldap_cert.app_error", nil, err.Error(), http.StatusBadRequest)}
}
@@ -4373,7 +4373,7 @@ func (c *Client4) UploadBrandImage(data []byte) (bool, *Response) {
rq.Header.Set("Content-Type", writer.FormDataContentType())
if c.AuthToken != "" {
rq.Header.Set(HEADER_AUTH, c.AuthType+" "+c.AuthToken)
rq.Header.Set(HeaderAuth, c.AuthType+" "+c.AuthToken)
}
rp, err := c.HttpClient.Do(rq)
@@ -4528,7 +4528,7 @@ func (c *Client4) GetOAuthAccessToken(data url.Values) (*AccessResponse, *Respon
rq.Header.Set("Content-Type", "application/x-www-form-urlencoded")
if c.AuthToken != "" {
rq.Header.Set(HEADER_AUTH, c.AuthType+" "+c.AuthToken)
rq.Header.Set(HeaderAuth, c.AuthType+" "+c.AuthToken)
}
rp, err := c.HttpClient.Do(rq)
@@ -5389,7 +5389,7 @@ func (c *Client4) uploadPlugin(file io.Reader, force bool) (*Manifest, *Response
rq.Header.Set("Content-Type", writer.FormDataContentType())
if c.AuthToken != "" {
rq.Header.Set(HEADER_AUTH, c.AuthType+" "+c.AuthToken)
rq.Header.Set(HeaderAuth, c.AuthType+" "+c.AuthToken)
}
rp, err := c.HttpClient.Do(rq)
@@ -6165,7 +6165,7 @@ func (c *Client4) DownloadExport(name string, wr io.Writer, offset int64) (int64
var headers map[string]string
if offset > 0 {
headers = map[string]string{
HEADER_RANGE: fmt.Sprintf("bytes=%d-", offset),
HeaderRange: fmt.Sprintf("bytes=%d-", offset),
}
}
r, appErr := c.DoApiRequestWithHeaders(http.MethodGet, c.ApiUrl+c.GetExportRoute(name), "", headers)

Просмотреть файл

@@ -21,7 +21,7 @@ func TestClient4TrimTrailingSlash(t *testing.T) {
testUrl := baseUrl + strings.Repeat("/", s)
client := NewAPIv4Client(testUrl)
assert.Equal(t, baseUrl, client.Url)
assert.Equal(t, baseUrl+API_URL_SUFFIX, client.ApiUrl)
assert.Equal(t, baseUrl+ApiUrlSuffix, client.ApiUrl)
}
}
@@ -75,12 +75,12 @@ func TestClient4SetToken(t *testing.T) {
expected := NewId()
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
authHeader := r.Header.Get(HEADER_AUTH)
authHeader := r.Header.Get(HeaderAuth)
token := strings.Split(authHeader, HEADER_BEARER)
token := strings.Split(authHeader, HeaderBearer)
if len(token) < 2 {
t.Errorf("wrong authorization header format, got %s, expected: %s %s", authHeader, HEADER_BEARER, expected)
t.Errorf("wrong authorization header format, got %s, expected: %s %s", authHeader, HeaderBearer, expected)
}
assert.Equal(t, expected, strings.TrimSpace(token[1]))
@@ -97,12 +97,12 @@ func TestClient4MockSession(t *testing.T) {
expected := NewId()
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
authHeader := r.Header.Get(HEADER_AUTH)
authHeader := r.Header.Get(HeaderAuth)
token := strings.Split(authHeader, HEADER_BEARER)
token := strings.Split(authHeader, HeaderBearer)
if len(token) < 2 {
t.Errorf("wrong authorization header format, got %s, expected: %s %s", authHeader, HEADER_BEARER, expected)
t.Errorf("wrong authorization header format, got %s, expected: %s %s", authHeader, HeaderBearer, expected)
}
assert.Equal(t, expected, strings.TrimSpace(token[1]))

Просмотреть файл

@@ -11,8 +11,8 @@ import (
)
const (
CDS_OFFLINE_AFTER_MILLIS = 1000 * 60 * 30 // 30 minutes
CDS_TYPE_APP = "mattermost_app"
CDSOfflineAfterMillis = 1000 * 60 * 30 // 30 minutes
CDSTypeApp = "mattermost_app"
)
type ClusterDiscovery struct {

Просмотреть файл

@@ -9,54 +9,54 @@ import (
)
const (
CLUSTER_EVENT_PUBLISH = "publish"
CLUSTER_EVENT_UPDATE_STATUS = "update_status"
CLUSTER_EVENT_INVALIDATE_ALL_CACHES = "inv_all_caches"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_REACTIONS = "inv_reactions"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_WEBHOOK = "inv_webhook"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_CHANNEL_POSTS = "inv_channel_posts"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_CHANNEL_MEMBERS_NOTIFY_PROPS = "inv_channel_members_notify_props"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_CHANNEL_MEMBERS = "inv_channel_members"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_CHANNEL_BY_NAME = "inv_channel_name"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_CHANNEL = "inv_channel"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_CHANNEL_GUEST_COUNT = "inv_channel_guest_count"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_USER = "inv_user"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_USER_TEAMS = "inv_user_teams"
CLUSTER_EVENT_CLEAR_SESSION_CACHE_FOR_USER = "clear_session_user"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_ROLES = "inv_roles"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_ROLE_PERMISSIONS = "inv_role_permissions"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_PROFILE_BY_IDS = "inv_profile_ids"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_PROFILE_IN_CHANNEL = "inv_profile_in_channel"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_SCHEMES = "inv_schemes"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_FILE_INFOS = "inv_file_infos"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_WEBHOOKS = "inv_webhooks"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_EMOJIS_BY_ID = "inv_emojis_by_id"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_EMOJIS_ID_BY_NAME = "inv_emojis_id_by_name"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_CHANNEL_PINNEDPOSTS_COUNTS = "inv_channel_pinnedposts_counts"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_CHANNEL_MEMBER_COUNTS = "inv_channel_member_counts"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_LAST_POSTS = "inv_last_posts"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_LAST_POST_TIME = "inv_last_post_time"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_TEAMS = "inv_teams"
CLUSTER_EVENT_CLEAR_SESSION_CACHE_FOR_ALL_USERS = "inv_all_user_sessions"
CLUSTER_EVENT_INSTALL_PLUGIN = "install_plugin"
CLUSTER_EVENT_REMOVE_PLUGIN = "remove_plugin"
CLUSTER_EVENT_PLUGIN_EVENT = "plugin_event"
CLUSTER_EVENT_INVALIDATE_CACHE_FOR_TERMS_OF_SERVICE = "inv_terms_of_service"
CLUSTER_EVENT_BUSY_STATE_CHANGED = "busy_state_change"
ClusterEventPublish = "publish"
ClusterEventUpdateStatus = "update_status"
ClusterEventInvalidateAllCaches = "inv_all_caches"
ClusterEventInvalidateCacheForReactions = "inv_reactions"
ClusterEventInvalidateCacheForWebhook = "inv_webhook"
ClusterEventInvalidateCacheForChannelPosts = "inv_channel_posts"
ClusterEventInvalidateCacheForChannelMembersNotifyProps = "inv_channel_members_notify_props"
ClusterEventInvalidateCacheForChannelMembers = "inv_channel_members"
ClusterEventInvalidateCacheForChannelByName = "inv_channel_name"
ClusterEventInvalidateCacheForChannel = "inv_channel"
ClusterEventInvalidateCacheForChannelGuestCount = "inv_channel_guest_count"
ClusterEventInvalidateCacheForUser = "inv_user"
ClusterEventInvalidateCacheForUserTeams = "inv_user_teams"
ClusterEventClearSessionCacheForUser = "clear_session_user"
ClusterEventInvalidateCacheForRoles = "inv_roles"
ClusterEventInvalidateCacheForRolePermissions = "inv_role_permissions"
ClusterEventInvalidateCacheForProfileByIds = "inv_profile_ids"
ClusterEventInvalidateCacheForProfileInChannel = "inv_profile_in_channel"
ClusterEventInvalidateCacheForSchemes = "inv_schemes"
ClusterEventInvalidateCacheForFileInfos = "inv_file_infos"
ClusterEventInvalidateCacheForWebhooks = "inv_webhooks"
ClusterEventInvalidateCacheForEmojisById = "inv_emojis_by_id"
ClusterEventInvalidateCacheForEmojisIdByName = "inv_emojis_id_by_name"
ClusterEventInvalidateCacheForChannelPinnedpostsCounts = "inv_channel_pinnedposts_counts"
ClusterEventInvalidateCacheForChannelMemberCounts = "inv_channel_member_counts"
ClusterEventInvalidateCacheForLastPosts = "inv_last_posts"
ClusterEventInvalidateCacheForLastPostTime = "inv_last_post_time"
ClusterEventInvalidateCacheForTeams = "inv_teams"
ClusterEventClearSessionCacheForAllUsers = "inv_all_user_sessions"
ClusterEventInstallPlugin = "install_plugin"
ClusterEventRemovePlugin = "remove_plugin"
ClusterEventPluginEvent = "plugin_event"
ClusterEventInvalidateCacheForTermsOfService = "inv_terms_of_service"
ClusterEventBusyStateChanged = "busy_state_change"
// Gossip communication
CLUSTER_GOSSIP_EVENT_REQUEST_GET_LOGS = "gossip_request_get_logs"
CLUSTER_GOSSIP_EVENT_RESPONSE_GET_LOGS = "gossip_response_get_logs"
CLUSTER_GOSSIP_EVENT_REQUEST_GET_CLUSTER_STATS = "gossip_request_cluster_stats"
CLUSTER_GOSSIP_EVENT_RESPONSE_GET_CLUSTER_STATS = "gossip_response_cluster_stats"
CLUSTER_GOSSIP_EVENT_REQUEST_GET_PLUGIN_STATUSES = "gossip_request_plugin_statuses"
CLUSTER_GOSSIP_EVENT_RESPONSE_GET_PLUGIN_STATUSES = "gossip_response_plugin_statuses"
CLUSTER_GOSSIP_EVENT_REQUEST_SAVE_CONFIG = "gossip_request_save_config"
CLUSTER_GOSSIP_EVENT_RESPONSE_SAVE_CONFIG = "gossip_response_save_config"
ClusterGossipEventRequestGetLogs = "gossip_request_get_logs"
ClusterGossipEventResponseGetLogs = "gossip_response_get_logs"
ClusterGossipEventRequestGetClusterStats = "gossip_request_cluster_stats"
ClusterGossipEventResponseGetClusterStats = "gossip_response_cluster_stats"
ClusterGossipEventRequestGetPluginStatuses = "gossip_request_plugin_statuses"
ClusterGossipEventResponseGetPluginStatuses = "gossip_response_plugin_statuses"
ClusterGossipEventRequestSaveConfig = "gossip_request_save_config"
ClusterGossipEventResponseSaveConfig = "gossip_response_save_config"
// SendTypes for ClusterMessage.
CLUSTER_SEND_BEST_EFFORT = "best_effort"
CLUSTER_SEND_RELIABLE = "reliable"
ClusterSendBestEffort = "best_effort"
ClusterSendReliable = "reliable"
)
type ClusterMessage struct {

Просмотреть файл

@@ -12,8 +12,8 @@ import (
func TestClusterMessage(t *testing.T) {
m := ClusterMessage{
Event: CLUSTER_EVENT_PUBLISH,
SendType: CLUSTER_SEND_BEST_EFFORT,
Event: ClusterEventPublish,
SendType: ClusterSendBestEffort,
Data: "hello",
}
json := m.ToJson()

Просмотреть файл

@@ -11,10 +11,10 @@ import (
)
const (
COMMAND_METHOD_POST = "P"
COMMAND_METHOD_GET = "G"
MIN_TRIGGER_LENGTH = 1
MAX_TRIGGER_LENGTH = 128
CommandMethodPost = "P"
CommandMethodGet = "G"
MinTriggerLength = 1
MaxTriggerLength = 128
)
type Command struct {
@@ -101,7 +101,7 @@ func (o *Command) IsValid() *AppError {
return NewAppError("Command.IsValid", "model.command.is_valid.team_id.app_error", nil, "", http.StatusBadRequest)
}
if len(o.Trigger) < MIN_TRIGGER_LENGTH || len(o.Trigger) > MAX_TRIGGER_LENGTH || strings.Index(o.Trigger, "/") == 0 || strings.Contains(o.Trigger, " ") {
if len(o.Trigger) < MinTriggerLength || len(o.Trigger) > MaxTriggerLength || strings.Index(o.Trigger, "/") == 0 || strings.Contains(o.Trigger, " ") {
return NewAppError("Command.IsValid", "model.command.is_valid.trigger.app_error", nil, "", http.StatusBadRequest)
}
@@ -113,7 +113,7 @@ func (o *Command) IsValid() *AppError {
return NewAppError("Command.IsValid", "model.command.is_valid.url_http.app_error", nil, "", http.StatusBadRequest)
}
if !(o.Method == COMMAND_METHOD_GET || o.Method == COMMAND_METHOD_POST) {
if !(o.Method == CommandMethodGet || o.Method == CommandMethodPost) {
return NewAppError("Command.IsValid", "model.command.is_valid.method.app_error", nil, "", http.StatusBadRequest)
}

Просмотреть файл

@@ -109,7 +109,7 @@ func NewAutocompleteData(trigger, hint, helpText string) *AutocompleteData {
Trigger: trigger,
Hint: hint,
HelpText: helpText,
RoleID: SYSTEM_USER_ROLE_ID,
RoleID: SystemUserRoleId,
Arguments: []*AutocompleteArg{},
SubCommands: []*AutocompleteData{},
}
@@ -234,7 +234,7 @@ func (ad *AutocompleteData) IsValid() error {
if strings.ToLower(ad.Trigger) != ad.Trigger {
return errors.New("Command should be lowercase")
}
roles := []string{SYSTEM_ADMIN_ROLE_ID, SYSTEM_USER_ROLE_ID, ""}
roles := []string{SystemAdminRoleId, SystemUserRoleId, ""}
if stringNotInSlice(ad.RoleID, roles) {
return errors.New("Wrong role in the autocomplete data")
}

Просмотреть файл

@@ -15,7 +15,7 @@ func TestAutocompleteData(t *testing.T) {
assert.NoError(t, ad.IsValid())
ad.RoleID = "some_id"
assert.Error(t, ad.IsValid())
ad.RoleID = SYSTEM_ADMIN_ROLE_ID
ad.RoleID = SystemAdminRoleId
assert.NoError(t, ad.IsValid())
ad.AddDynamicListArgument("help", "/some/url", true)
assert.NoError(t, ad.IsValid())
@@ -76,9 +76,9 @@ func TestAutocompleteDataJSON(t *testing.T) {
func getAutocompleteData() *AutocompleteData {
ad := NewAutocompleteData("jira", "", "Available commands:")
ad.RoleID = SYSTEM_USER_ROLE_ID
ad.RoleID = SystemUserRoleId
command := NewAutocompleteData("connect", "", "Connect to mattermost")
command.RoleID = SYSTEM_ADMIN_ROLE_ID
command.RoleID = SystemAdminRoleId
items := []AutocompleteListItem{
{
Hint: "arg1",

Просмотреть файл

@@ -13,8 +13,8 @@ import (
)
const (
COMMAND_RESPONSE_TYPE_IN_CHANNEL = "in_channel"
COMMAND_RESPONSE_TYPE_EPHEMERAL = "ephemeral"
CommandResponseTypeInChannel = "in_channel"
CommandResponseTypeEphemeral = "ephemeral"
)
type CommandResponse struct {

Просмотреть файл

@@ -28,7 +28,7 @@ func TestCommandIsValid(t *testing.T) {
TeamId: NewId(),
Trigger: "trigger",
URL: "http://example.com",
Method: COMMAND_METHOD_GET,
Method: CommandMethodGet,
DisplayName: "",
Description: "",
}
@@ -95,10 +95,10 @@ func TestCommandIsValid(t *testing.T) {
o.Method = "https://example.com"
require.NotNil(t, o.IsValid(), "should be invalid")
o.Method = COMMAND_METHOD_GET
o.Method = CommandMethodGet
require.Nil(t, o.IsValid())
o.Method = COMMAND_METHOD_POST
o.Method = CommandMethodPost
require.Nil(t, o.IsValid())
o.DisplayName = strings.Repeat("1", 65)

Просмотреть файл

@@ -19,7 +19,7 @@ type CommandWebhook struct {
}
const (
COMMAND_WEBHOOK_LIFETIME = 1000 * 60 * 30
CommandWebhookLifetime = 1000 * 60 * 30
)
func (o *CommandWebhook) PreSave() {

Просмотреть файл

@@ -11,14 +11,14 @@ import (
)
const (
COMPLIANCE_STATUS_CREATED = "created"
COMPLIANCE_STATUS_RUNNING = "running"
COMPLIANCE_STATUS_FINISHED = "finished"
COMPLIANCE_STATUS_FAILED = "failed"
COMPLIANCE_STATUS_REMOVED = "removed"
ComplianceStatusCreated = "created"
ComplianceStatusRunning = "running"
ComplianceStatusFinished = "finished"
ComplianceStatusFailed = "failed"
ComplianceStatusRemoved = "removed"
COMPLIANCE_TYPE_DAILY = "daily"
COMPLIANCE_TYPE_ADHOC = "adhoc"
ComplianceTypeDaily = "daily"
ComplianceTypeAdhoc = "adhoc"
)
type Compliance struct {
@@ -61,7 +61,7 @@ func (c *Compliance) PreSave() {
}
if c.Status == "" {
c.Status = COMPLIANCE_STATUS_CREATED
c.Status = ComplianceStatusCreated
}
c.Count = 0
@@ -78,7 +78,7 @@ func (c *Compliance) DeepCopy() *Compliance {
func (c *Compliance) JobName() string {
jobName := c.Type
if c.Type == COMPLIANCE_TYPE_DAILY {
if c.Type == ComplianceTypeDaily {
jobName += "-" + c.Desc
}

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@@ -64,7 +64,7 @@ func TestConfigEmptySiteName(t *testing.T) {
}
c1.SetDefaults()
require.Equal(t, *c1.TeamSettings.SiteName, TEAM_SETTINGS_DEFAULT_SITE_NAME)
require.Equal(t, *c1.TeamSettings.SiteName, TeamSettingsDefaultSiteName)
}
func TestConfigEnableDeveloper(t *testing.T) {
@@ -73,7 +73,7 @@ func TestConfigEnableDeveloper(t *testing.T) {
EnableDeveloper *bool
ExpectedSiteURL string
}{
{"enable developer is true", NewBool(true), SERVICE_SETTINGS_DEFAULT_SITE_URL},
{"enable developer is true", NewBool(true), ServiceSettingsDefaultSiteUrl},
{"enable developer is false", NewBool(false), ""},
{"enable developer is nil", nil, ""},
}
@@ -103,7 +103,7 @@ func TestConfigDefaultEmailNotificationContentsType(t *testing.T) {
c1 := Config{}
c1.SetDefaults()
require.Equal(t, *c1.EmailSettings.EmailNotificationContentsType, EMAIL_NOTIFICATION_CONTENTS_FULL)
require.Equal(t, *c1.EmailSettings.EmailNotificationContentsType, EmailNotificationContentsFull)
}
func TestConfigDefaultFileSettingsS3SSE(t *testing.T) {
@@ -117,8 +117,8 @@ func TestConfigDefaultSignatureAlgorithm(t *testing.T) {
c1 := Config{}
c1.SetDefaults()
require.Equal(t, *c1.SamlSettings.SignatureAlgorithm, SAML_SETTINGS_DEFAULT_SIGNATURE_ALGORITHM)
require.Equal(t, *c1.SamlSettings.CanonicalAlgorithm, SAML_SETTINGS_DEFAULT_CANONICAL_ALGORITHM)
require.Equal(t, *c1.SamlSettings.SignatureAlgorithm, SamlSettingsDefaultSignatureAlgorithm)
require.Equal(t, *c1.SamlSettings.CanonicalAlgorithm, SamlSettingsDefaultCanonicalAlgorithm)
}
func TestConfigOverwriteSignatureAlgorithm(t *testing.T) {
@@ -237,7 +237,7 @@ func TestConfigDefaultServiceSettingsExperimentalGroupUnreadChannels(t *testing.
c1 := Config{}
c1.SetDefaults()
require.Equal(t, *c1.ServiceSettings.ExperimentalGroupUnreadChannels, GROUP_UNREAD_CHANNELS_DISABLED)
require.Equal(t, *c1.ServiceSettings.ExperimentalGroupUnreadChannels, GroupUnreadChannelsDisabled)
// This setting was briefly a boolean, so ensure that those values still work as expected
c1 = Config{
@@ -247,7 +247,7 @@ func TestConfigDefaultServiceSettingsExperimentalGroupUnreadChannels(t *testing.
}
c1.SetDefaults()
require.Equal(t, *c1.ServiceSettings.ExperimentalGroupUnreadChannels, GROUP_UNREAD_CHANNELS_DEFAULT_ON)
require.Equal(t, *c1.ServiceSettings.ExperimentalGroupUnreadChannels, GroupUnreadChannelsDefaultOn)
c1 = Config{
ServiceSettings: ServiceSettings{
@@ -256,7 +256,7 @@ func TestConfigDefaultServiceSettingsExperimentalGroupUnreadChannels(t *testing.
}
c1.SetDefaults()
require.Equal(t, *c1.ServiceSettings.ExperimentalGroupUnreadChannels, GROUP_UNREAD_CHANNELS_DISABLED)
require.Equal(t, *c1.ServiceSettings.ExperimentalGroupUnreadChannels, GroupUnreadChannelsDisabled)
}
func TestConfigDefaultNPSPluginState(t *testing.T) {
@@ -463,7 +463,7 @@ func TestMessageExportSettingsIsValidExportFormatInvalid(t *testing.T) {
func TestMessageExportSettingsIsValidGlobalRelayEmailAddressInvalid(t *testing.T) {
mes := &MessageExportSettings{
EnableExport: NewBool(true),
ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY),
ExportFormat: NewString(ComplianceExportTypeGlobalrelay),
ExportFromTimestamp: NewInt64(0),
DailyRunTime: NewString("15:04"),
BatchSize: NewInt(100),
@@ -476,7 +476,7 @@ func TestMessageExportSettingsIsValidGlobalRelayEmailAddressInvalid(t *testing.T
func TestMessageExportSettingsIsValidActiance(t *testing.T) {
mes := &MessageExportSettings{
EnableExport: NewBool(true),
ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_ACTIANCE),
ExportFormat: NewString(ComplianceExportTypeActiance),
ExportFromTimestamp: NewInt64(0),
DailyRunTime: NewString("15:04"),
BatchSize: NewInt(100),
@@ -489,7 +489,7 @@ func TestMessageExportSettingsIsValidActiance(t *testing.T) {
func TestMessageExportSettingsIsValidGlobalRelaySettingsMissing(t *testing.T) {
mes := &MessageExportSettings{
EnableExport: NewBool(true),
ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY),
ExportFormat: NewString(ComplianceExportTypeGlobalrelay),
ExportFromTimestamp: NewInt64(0),
DailyRunTime: NewString("15:04"),
BatchSize: NewInt(100),
@@ -502,7 +502,7 @@ func TestMessageExportSettingsIsValidGlobalRelaySettingsMissing(t *testing.T) {
func TestMessageExportSettingsIsValidGlobalRelaySettingsInvalidCustomerType(t *testing.T) {
mes := &MessageExportSettings{
EnableExport: NewBool(true),
ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY),
ExportFormat: NewString(ComplianceExportTypeGlobalrelay),
ExportFromTimestamp: NewInt64(0),
DailyRunTime: NewString("15:04"),
BatchSize: NewInt(100),
@@ -528,7 +528,7 @@ func TestMessageExportSettingsGlobalRelaySettings(t *testing.T) {
{
"Invalid email address",
&GlobalRelayMessageExportSettings{
CustomerType: NewString(GLOBALRELAY_CUSTOMER_TYPE_A9),
CustomerType: NewString(GlobalrelayCustomerTypeA9),
EmailAddress: NewString("invalidEmailAddress"),
SmtpUsername: NewString("SomeUsername"),
SmtpPassword: NewString("SomePassword"),
@@ -538,7 +538,7 @@ func TestMessageExportSettingsGlobalRelaySettings(t *testing.T) {
{
"Missing smtp username",
&GlobalRelayMessageExportSettings{
CustomerType: NewString(GLOBALRELAY_CUSTOMER_TYPE_A10),
CustomerType: NewString(GlobalrelayCustomerTypeA10),
EmailAddress: NewString("valid@mattermost.com"),
SmtpPassword: NewString("SomePassword"),
},
@@ -547,7 +547,7 @@ func TestMessageExportSettingsGlobalRelaySettings(t *testing.T) {
{
"Invalid smtp username",
&GlobalRelayMessageExportSettings{
CustomerType: NewString(GLOBALRELAY_CUSTOMER_TYPE_A10),
CustomerType: NewString(GlobalrelayCustomerTypeA10),
EmailAddress: NewString("valid@mattermost.com"),
SmtpUsername: NewString(""),
SmtpPassword: NewString("SomePassword"),
@@ -557,7 +557,7 @@ func TestMessageExportSettingsGlobalRelaySettings(t *testing.T) {
{
"Invalid smtp password",
&GlobalRelayMessageExportSettings{
CustomerType: NewString(GLOBALRELAY_CUSTOMER_TYPE_A10),
CustomerType: NewString(GlobalrelayCustomerTypeA10),
EmailAddress: NewString("valid@mattermost.com"),
SmtpUsername: NewString("SomeUsername"),
SmtpPassword: NewString(""),
@@ -567,7 +567,7 @@ func TestMessageExportSettingsGlobalRelaySettings(t *testing.T) {
{
"Valid data",
&GlobalRelayMessageExportSettings{
CustomerType: NewString(GLOBALRELAY_CUSTOMER_TYPE_A9),
CustomerType: NewString(GlobalrelayCustomerTypeA9),
EmailAddress: NewString("valid@mattermost.com"),
SmtpUsername: NewString("SomeUsername"),
SmtpPassword: NewString("SomePassword"),
@@ -580,7 +580,7 @@ func TestMessageExportSettingsGlobalRelaySettings(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
mes := &MessageExportSettings{
EnableExport: NewBool(true),
ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY),
ExportFormat: NewString(ComplianceExportTypeGlobalrelay),
ExportFromTimestamp: NewInt64(0),
DailyRunTime: NewString("15:04"),
BatchSize: NewInt(100),
@@ -604,7 +604,7 @@ func TestMessageExportSetDefaults(t *testing.T) {
require.Equal(t, "01:00", *mes.DailyRunTime)
require.Equal(t, int64(0), *mes.ExportFromTimestamp)
require.Equal(t, 10000, *mes.BatchSize)
require.Equal(t, COMPLIANCE_EXPORT_TYPE_ACTIANCE, *mes.ExportFormat)
require.Equal(t, ComplianceExportTypeActiance, *mes.ExportFormat)
}
func TestMessageExportSetDefaultsExportEnabledExportFromTimestampNil(t *testing.T) {
@@ -815,7 +815,7 @@ func TestListenAddressIsValidated(t *testing.T) {
func TestImageProxySettingsSetDefaults(t *testing.T) {
ss := ServiceSettings{
DEPRECATED_DO_NOT_USE_ImageProxyType: NewString(IMAGE_PROXY_TYPE_ATMOS_CAMO),
DEPRECATED_DO_NOT_USE_ImageProxyType: NewString(ImageProxyTypeAtmosCamo),
DEPRECATED_DO_NOT_USE_ImageProxyURL: NewString("http://images.example.com"),
DEPRECATED_DO_NOT_USE_ImageProxyOptions: NewString("1234abcd"),
}
@@ -825,7 +825,7 @@ func TestImageProxySettingsSetDefaults(t *testing.T) {
ips.SetDefaults(ServiceSettings{})
assert.Equal(t, false, *ips.Enable)
assert.Equal(t, IMAGE_PROXY_TYPE_LOCAL, *ips.ImageProxyType)
assert.Equal(t, ImageProxyTypeLocal, *ips.ImageProxyType)
assert.Equal(t, "", *ips.RemoteImageProxyURL)
assert.Equal(t, "", *ips.RemoteImageProxyOptions)
})
@@ -846,14 +846,14 @@ func TestImageProxySettingsSetDefaults(t *testing.T) {
ips := ImageProxySettings{
Enable: NewBool(false),
ImageProxyType: NewString(IMAGE_PROXY_TYPE_LOCAL),
ImageProxyType: NewString(ImageProxyTypeLocal),
RemoteImageProxyURL: &url,
RemoteImageProxyOptions: &options,
}
ips.SetDefaults(ss)
assert.Equal(t, false, *ips.Enable)
assert.Equal(t, IMAGE_PROXY_TYPE_LOCAL, *ips.ImageProxyType)
assert.Equal(t, ImageProxyTypeLocal, *ips.ImageProxyType)
assert.Equal(t, url, *ips.RemoteImageProxyURL)
assert.Equal(t, options, *ips.RemoteImageProxyOptions)
})
@@ -898,7 +898,7 @@ func TestImageProxySettingsIsValid(t *testing.T) {
{
Name: "atmos/camo",
Enable: true,
ImageProxyType: IMAGE_PROXY_TYPE_ATMOS_CAMO,
ImageProxyType: ImageProxyTypeAtmosCamo,
RemoteImageProxyURL: "someurl",
RemoteImageProxyOptions: "someoptions",
ExpectError: false,
@@ -906,7 +906,7 @@ func TestImageProxySettingsIsValid(t *testing.T) {
{
Name: "atmos/camo, missing url",
Enable: true,
ImageProxyType: IMAGE_PROXY_TYPE_ATMOS_CAMO,
ImageProxyType: ImageProxyTypeAtmosCamo,
RemoteImageProxyURL: "",
RemoteImageProxyOptions: "garbage",
ExpectError: true,
@@ -914,7 +914,7 @@ func TestImageProxySettingsIsValid(t *testing.T) {
{
Name: "atmos/camo, missing options",
Enable: true,
ImageProxyType: IMAGE_PROXY_TYPE_ATMOS_CAMO,
ImageProxyType: ImageProxyTypeAtmosCamo,
RemoteImageProxyURL: "someurl",
RemoteImageProxyOptions: "",
ExpectError: true,
@@ -1303,17 +1303,17 @@ func TestConfigSanitize(t *testing.T) {
c.Sanitize()
assert.Equal(t, FAKE_SETTING, *c.LdapSettings.BindPassword)
assert.Equal(t, FAKE_SETTING, *c.FileSettings.PublicLinkSalt)
assert.Equal(t, FAKE_SETTING, *c.FileSettings.AmazonS3SecretAccessKey)
assert.Equal(t, FAKE_SETTING, *c.EmailSettings.SMTPPassword)
assert.Equal(t, FAKE_SETTING, *c.GitLabSettings.Secret)
assert.Equal(t, FAKE_SETTING, *c.OpenIdSettings.Secret)
assert.Equal(t, FAKE_SETTING, *c.SqlSettings.DataSource)
assert.Equal(t, FAKE_SETTING, *c.SqlSettings.AtRestEncryptKey)
assert.Equal(t, FAKE_SETTING, *c.ElasticsearchSettings.Password)
assert.Equal(t, FAKE_SETTING, c.SqlSettings.DataSourceReplicas[0])
assert.Equal(t, FAKE_SETTING, c.SqlSettings.DataSourceSearchReplicas[0])
assert.Equal(t, FakeSetting, *c.LdapSettings.BindPassword)
assert.Equal(t, FakeSetting, *c.FileSettings.PublicLinkSalt)
assert.Equal(t, FakeSetting, *c.FileSettings.AmazonS3SecretAccessKey)
assert.Equal(t, FakeSetting, *c.EmailSettings.SMTPPassword)
assert.Equal(t, FakeSetting, *c.GitLabSettings.Secret)
assert.Equal(t, FakeSetting, *c.OpenIdSettings.Secret)
assert.Equal(t, FakeSetting, *c.SqlSettings.DataSource)
assert.Equal(t, FakeSetting, *c.SqlSettings.AtRestEncryptKey)
assert.Equal(t, FakeSetting, *c.ElasticsearchSettings.Password)
assert.Equal(t, FakeSetting, c.SqlSettings.DataSourceReplicas[0])
assert.Equal(t, FakeSetting, c.SqlSettings.DataSourceSearchReplicas[0])
}
func TestConfigFilteredByTag(t *testing.T) {
@@ -1368,18 +1368,18 @@ func TestConfigMarketplaceDefaults(t *testing.T) {
c.SetDefaults()
require.True(t, *c.PluginSettings.EnableMarketplace)
require.Equal(t, PLUGIN_SETTINGS_DEFAULT_MARKETPLACE_URL, *c.PluginSettings.MarketplaceUrl)
require.Equal(t, PluginSettingsDefaultMarketplaceUrl, *c.PluginSettings.MarketplaceUrl)
})
t.Run("old marketplace url", func(t *testing.T) {
c := Config{}
c.SetDefaults()
*c.PluginSettings.MarketplaceUrl = PLUGIN_SETTINGS_OLD_MARKETPLACE_URL
*c.PluginSettings.MarketplaceUrl = PluginSettingsOldMarketplaceUrl
c.SetDefaults()
require.True(t, *c.PluginSettings.EnableMarketplace)
require.Equal(t, PLUGIN_SETTINGS_DEFAULT_MARKETPLACE_URL, *c.PluginSettings.MarketplaceUrl)
require.Equal(t, PluginSettingsDefaultMarketplaceUrl, *c.PluginSettings.MarketplaceUrl)
})
t.Run("custom marketplace url", func(t *testing.T) {

Просмотреть файл

@@ -12,11 +12,11 @@ import (
)
const (
EMOJI_NAME_MAX_LENGTH = 64
EMOJI_SORT_BY_NAME = "name"
EmojiNameMaxLength = 64
EmojiSortByName = "name"
)
var EMOJI_PATTERN = regexp.MustCompile(`:[a-zA-Z0-9_+-]+:`)
var EmojiPattern = regexp.MustCompile(`:[a-zA-Z0-9_+-]+:`)
var ReverseSystemEmojisMap = makeReverseEmojiMap()
@@ -80,7 +80,7 @@ func (emoji *Emoji) IsValid() *AppError {
}
func IsValidEmojiName(name string) *AppError {
if name == "" || len(name) > EMOJI_NAME_MAX_LENGTH || !IsValidAlphaNumHyphenUnderscorePlus(name) || inSystemEmoji(name) {
if name == "" || len(name) > EmojiNameMaxLength || !IsValidAlphaNumHyphenUnderscorePlus(name) || inSystemEmoji(name) {
return NewAppError("Emoji.IsValid", "model.emoji.name.app_error", nil, "", http.StatusBadRequest)
}

Просмотреть файл

@@ -15,8 +15,8 @@ import (
)
const (
FILEINFO_SORT_BY_CREATED = "CreateAt"
FILEINFO_SORT_BY_SIZE = "Size"
FileinfoSortByCreated = "CreateAt"
FileinfoSortBySize = "Size"
)
// GetFileInfosOptions contains options for getting FileInfos

Просмотреть файл

@@ -37,9 +37,9 @@ func (o *FileInfoList) ToJson() string {
b, err := json.Marshal(o)
if err != nil {
return ""
} else {
return string(b)
}
return string(b)
}
func (o *FileInfoList) MakeNonNil() {

Просмотреть файл

@@ -4,5 +4,5 @@
package model
const (
USER_AUTH_SERVICE_GITLAB = "gitlab"
UserAuthServiceGitlab = "gitlab"
)

Просмотреть файл

@@ -27,7 +27,7 @@ type GitLabUser struct {
func init() {
provider := &GitLabProvider{}
einterfaces.RegisterOauthProvider(model.USER_AUTH_SERVICE_GITLAB, provider)
einterfaces.RegisterOAuthProvider(model.UserAuthServiceGitlab, provider)
}
func userFromGitLabUser(glu *GitLabUser) *model.User {
@@ -51,7 +51,7 @@ func userFromGitLabUser(glu *GitLabUser) *model.User {
user.Email = strings.ToLower(user.Email)
userId := glu.getAuthData()
user.AuthData = &userId
user.AuthService = model.USER_AUTH_SERVICE_GITLAB
user.AuthService = model.UserAuthServiceGitlab
return user
}

Просмотреть файл

@@ -23,7 +23,7 @@ func (i *GuestsInvite) IsValid() *AppError {
}
for _, email := range i.Emails {
if len(email) > USER_EMAIL_MAX_LENGTH || email == "" || !IsValidEmail(email) {
if len(email) > UserEmailMaxLength || email == "" || !IsValidEmail(email) {
return NewAppError("GuestsInvite.IsValid", "model.guest.is_valid.email.app_error", nil, "email="+email, http.StatusBadRequest)
}
}

Просмотреть файл

@@ -12,7 +12,7 @@ import (
)
const (
DEFAULT_WEBHOOK_USERNAME = "webhook"
DefaultWebhookUsername = "webhook"
)
type IncomingWebhook struct {

Просмотреть файл

@@ -22,9 +22,9 @@ import (
)
const (
POST_ACTION_TYPE_BUTTON = "button"
POST_ACTION_TYPE_SELECT = "select"
INTERACTIVE_DIALOG_TRIGGER_TIMEOUT_MILLISECONDS = 3000
PostActionTypeButton = "button"
PostActionTypeSelect = "select"
InteractiveDialogTriggerTimeoutMilliseconds = 3000
)
var PostActionRetainPropKeys = []string{"from_webhook", "override_username", "override_icon_url"}
@@ -289,8 +289,8 @@ func DecodeAndVerifyTriggerId(triggerId string, s *ecdsa.PrivateKey) (string, st
timestamp, _ := strconv.ParseInt(timestampStr, 10, 64)
now := GetMillis()
if now-timestamp > INTERACTIVE_DIALOG_TRIGGER_TIMEOUT_MILLISECONDS {
return "", "", NewAppError("DecodeAndVerifyTriggerId", "interactive_message.decode_trigger_id.expired", map[string]interface{}{"Seconds": INTERACTIVE_DIALOG_TRIGGER_TIMEOUT_MILLISECONDS / 1000}, "", http.StatusBadRequest)
if now-timestamp > InteractiveDialogTriggerTimeoutMilliseconds {
return "", "", NewAppError("DecodeAndVerifyTriggerId", "interactive_message.decode_trigger_id.expired", map[string]interface{}{"Seconds": InteractiveDialogTriggerTimeoutMilliseconds / 1000}, "", http.StatusBadRequest)
}
signature, err := base64.StdEncoding.DecodeString(split[3])

Просмотреть файл

@@ -11,50 +11,50 @@ import (
)
const (
JOB_TYPE_DATA_RETENTION = "data_retention"
JOB_TYPE_MESSAGE_EXPORT = "message_export"
JOB_TYPE_ELASTICSEARCH_POST_INDEXING = "elasticsearch_post_indexing"
JOB_TYPE_ELASTICSEARCH_POST_AGGREGATION = "elasticsearch_post_aggregation"
JOB_TYPE_BLEVE_POST_INDEXING = "bleve_post_indexing"
JOB_TYPE_LDAP_SYNC = "ldap_sync"
JOB_TYPE_MIGRATIONS = "migrations"
JOB_TYPE_PLUGINS = "plugins"
JOB_TYPE_EXPIRY_NOTIFY = "expiry_notify"
JOB_TYPE_PRODUCT_NOTICES = "product_notices"
JOB_TYPE_ACTIVE_USERS = "active_users"
JOB_TYPE_IMPORT_PROCESS = "import_process"
JOB_TYPE_IMPORT_DELETE = "import_delete"
JOB_TYPE_EXPORT_PROCESS = "export_process"
JOB_TYPE_EXPORT_DELETE = "export_delete"
JOB_TYPE_CLOUD = "cloud"
JOB_TYPE_RESEND_INVITATION_EMAIL = "resend_invitation_email"
JobTypeDataRetention = "data_retention"
JobTypeMessageExport = "message_export"
JobTypeElasticsearchPostIndexing = "elasticsearch_post_indexing"
JobTypeElasticsearchPostAggregation = "elasticsearch_post_aggregation"
JobTypeBlevePostIndexing = "bleve_post_indexing"
JobTypeLdapSync = "ldap_sync"
JobTypeMigrations = "migrations"
JobTypePlugins = "plugins"
JobTypeExpiryNotify = "expiry_notify"
JobTypeProductNotices = "product_notices"
JobTypeActiveUsers = "active_users"
JobTypeImportProcess = "import_process"
JobTypeImportDelete = "import_delete"
JobTypeExportProcess = "export_process"
JobTypeExportDelete = "export_delete"
JobTypeCloud = "cloud"
JobTypeResendInvitationEmail = "resend_invitation_email"
JOB_STATUS_PENDING = "pending"
JOB_STATUS_IN_PROGRESS = "in_progress"
JOB_STATUS_SUCCESS = "success"
JOB_STATUS_ERROR = "error"
JOB_STATUS_CANCEL_REQUESTED = "cancel_requested"
JOB_STATUS_CANCELED = "canceled"
JOB_STATUS_WARNING = "warning"
JobStatusPending = "pending"
JobStatusInProgress = "in_progress"
JobStatusSuccess = "success"
JobStatusError = "error"
JobStatusCancelRequested = "cancel_requested"
JobStatusCanceled = "canceled"
JobStatusWarning = "warning"
)
var ALL_JOB_TYPES = [...]string{
JOB_TYPE_DATA_RETENTION,
JOB_TYPE_MESSAGE_EXPORT,
JOB_TYPE_ELASTICSEARCH_POST_INDEXING,
JOB_TYPE_ELASTICSEARCH_POST_AGGREGATION,
JOB_TYPE_BLEVE_POST_INDEXING,
JOB_TYPE_LDAP_SYNC,
JOB_TYPE_MIGRATIONS,
JOB_TYPE_PLUGINS,
JOB_TYPE_EXPIRY_NOTIFY,
JOB_TYPE_PRODUCT_NOTICES,
JOB_TYPE_ACTIVE_USERS,
JOB_TYPE_IMPORT_PROCESS,
JOB_TYPE_IMPORT_DELETE,
JOB_TYPE_EXPORT_PROCESS,
JOB_TYPE_EXPORT_DELETE,
JOB_TYPE_CLOUD,
var AllJobTypes = [...]string{
JobTypeDataRetention,
JobTypeMessageExport,
JobTypeElasticsearchPostIndexing,
JobTypeElasticsearchPostAggregation,
JobTypeBlevePostIndexing,
JobTypeLdapSync,
JobTypeMigrations,
JobTypePlugins,
JobTypeExpiryNotify,
JobTypeProductNotices,
JobTypeActiveUsers,
JobTypeImportProcess,
JobTypeImportDelete,
JobTypeExportProcess,
JobTypeExportDelete,
JobTypeCloud,
}
type Job struct {
@@ -79,34 +79,34 @@ func (j *Job) IsValid() *AppError {
}
switch j.Type {
case JOB_TYPE_DATA_RETENTION:
case JOB_TYPE_ELASTICSEARCH_POST_INDEXING:
case JOB_TYPE_ELASTICSEARCH_POST_AGGREGATION:
case JOB_TYPE_BLEVE_POST_INDEXING:
case JOB_TYPE_LDAP_SYNC:
case JOB_TYPE_MESSAGE_EXPORT:
case JOB_TYPE_MIGRATIONS:
case JOB_TYPE_PLUGINS:
case JOB_TYPE_PRODUCT_NOTICES:
case JOB_TYPE_EXPIRY_NOTIFY:
case JOB_TYPE_ACTIVE_USERS:
case JOB_TYPE_IMPORT_PROCESS:
case JOB_TYPE_IMPORT_DELETE:
case JOB_TYPE_EXPORT_PROCESS:
case JOB_TYPE_EXPORT_DELETE:
case JOB_TYPE_CLOUD:
case JOB_TYPE_RESEND_INVITATION_EMAIL:
case JobTypeDataRetention:
case JobTypeElasticsearchPostIndexing:
case JobTypeElasticsearchPostAggregation:
case JobTypeBlevePostIndexing:
case JobTypeLdapSync:
case JobTypeMessageExport:
case JobTypeMigrations:
case JobTypePlugins:
case JobTypeProductNotices:
case JobTypeExpiryNotify:
case JobTypeActiveUsers:
case JobTypeImportProcess:
case JobTypeImportDelete:
case JobTypeExportProcess:
case JobTypeExportDelete:
case JobTypeCloud:
case JobTypeResendInvitationEmail:
default:
return NewAppError("Job.IsValid", "model.job.is_valid.type.app_error", nil, "id="+j.Id, http.StatusBadRequest)
}
switch j.Status {
case JOB_STATUS_PENDING:
case JOB_STATUS_IN_PROGRESS:
case JOB_STATUS_SUCCESS:
case JOB_STATUS_ERROR:
case JOB_STATUS_CANCEL_REQUESTED:
case JOB_STATUS_CANCELED:
case JobStatusPending:
case JobStatusInProgress:
case JobStatusSuccess:
case JobStatusError:
case JobStatusCancelRequested:
case JobStatusCanceled:
default:
return NewAppError("Job.IsValid", "model.job.is_valid.status.app_error", nil, "id="+j.Id, http.StatusBadRequest)
}

Просмотреть файл

@@ -4,7 +4,7 @@
package model
const (
USER_AUTH_SERVICE_LDAP = "ldap"
LDAP_PUBLIC_CERTIFICATE_NAME = "ldap-public.crt"
LDAP_PRIVATE_KEY_NAME = "ldap-private.key"
UserAuthServiceLdap = "ldap"
LdapPublicCertificateName = "ldap-public.crt"
LdapPrivateKeyName = "ldap-private.key"
)

Просмотреть файл

@@ -12,16 +12,14 @@ import (
)
const (
EXPIRED_LICENSE_ERROR = "api.license.add_license.expired.app_error"
INVALID_LICENSE_ERROR = "api.license.add_license.invalid.app_error"
LICENSE_GRACE_PERIOD = 1000 * 60 * 60 * 24 * 10 //10 days
LICENSE_RENEWAL_LINK = "https://mattermost.com/renew/"
ExpiredLicenseError = "api.license.add_license.expired.app_error"
InvalidLicenseError = "api.license.add_license.invalid.app_error"
LicenseGracePeriod = 1000 * 60 * 60 * 24 * 10 //10 days
LicenseRenewalLink = "https://mattermost.com/renew/"
)
const (
SIXTY_DAYS = 60
FIFTY_EIGHT = 58
LICENSE_UP_FOR_RENEWAL_EMAIL_SENT = "LicenseUpForRenewalEmailSent"
LicenseUpForRenewalEmailSent = "LicenseUpForRenewalEmailSent"
)
var (
@@ -269,12 +267,12 @@ func (l *License) IsExpired() bool {
func (l *License) IsPastGracePeriod() bool {
timeDiff := GetMillis() - l.ExpiresAt
return timeDiff > LICENSE_GRACE_PERIOD
return timeDiff > LicenseGracePeriod
}
func (l *License) IsWithinExpirationPeriod() bool {
days := l.DaysToExpiration()
return days <= SIXTY_DAYS && days >= FIFTY_EIGHT
return days <= 60 && days >= 58
}
func (l *License) DaysToExpiration() int {

Просмотреть файл

@@ -126,7 +126,7 @@ func TestLicenseIsExpired(t *testing.T) {
func TestLicenseIsPastGracePeriod(t *testing.T) {
l1 := License{}
l1.ExpiresAt = GetMillis() - LICENSE_GRACE_PERIOD - 1000
l1.ExpiresAt = GetMillis() - LicenseGracePeriod - 1000
assert.True(t, l1.IsPastGracePeriod())
l1.ExpiresAt = GetMillis() + 1000

Просмотреть файл

@@ -16,10 +16,10 @@ import (
)
const (
LINK_METADATA_TYPE_IMAGE LinkMetadataType = "image"
LINK_METADATA_TYPE_NONE LinkMetadataType = "none"
LINK_METADATA_TYPE_OPENGRAPH LinkMetadataType = "opengraph"
MAX_IMAGES int = 5
LinkMetadataTypeImage LinkMetadataType = "image"
LinkMetadataTypeNone LinkMetadataType = "none"
LinkMetadataTypeOpengraph LinkMetadataType = "opengraph"
LinkMetadataMaxImages int = 5
)
type LinkMetadataType string
@@ -51,8 +51,8 @@ func truncateText(original string) string {
}
func firstNImages(images []*opengraph.Image, maxImages int) []*opengraph.Image {
if maxImages < 0 { // dont break stuff, if it's weird, go for sane defaults
maxImages = MAX_IMAGES
if maxImages < 0 { // don't break stuff, if it's weird, go for sane defaults
maxImages = LinkMetadataMaxImages
}
numImages := len(images)
if numImages > maxImages {
@@ -76,7 +76,7 @@ func TruncateOpenGraph(ogdata *opengraph.OpenGraph) *opengraph.OpenGraph {
ogdata.Determiner = empty.Determiner
ogdata.Locale = empty.Locale
ogdata.LocalesAlternate = empty.LocalesAlternate
ogdata.Images = firstNImages(ogdata.Images, MAX_IMAGES)
ogdata.Images = firstNImages(ogdata.Images, LinkMetadataMaxImages)
ogdata.Audios = empty.Audios
ogdata.Videos = empty.Videos
}
@@ -97,7 +97,7 @@ func (o *LinkMetadata) IsValid() *AppError {
}
switch o.Type {
case LINK_METADATA_TYPE_IMAGE:
case LinkMetadataTypeImage:
if o.Data == nil {
return NewAppError("LinkMetadata.IsValid", "model.link_metadata.is_valid.data.app_error", nil, "", http.StatusBadRequest)
}
@@ -105,11 +105,11 @@ func (o *LinkMetadata) IsValid() *AppError {
if _, ok := o.Data.(*PostImage); !ok {
return NewAppError("LinkMetadata.IsValid", "model.link_metadata.is_valid.data_type.app_error", nil, "", http.StatusBadRequest)
}
case LINK_METADATA_TYPE_NONE:
case LinkMetadataTypeNone:
if o.Data != nil {
return NewAppError("LinkMetadata.IsValid", "model.link_metadata.is_valid.data_type.app_error", nil, "", http.StatusBadRequest)
}
case LINK_METADATA_TYPE_OPENGRAPH:
case LinkMetadataTypeOpengraph:
if o.Data == nil {
return NewAppError("LinkMetadata.IsValid", "model.link_metadata.is_valid.data.app_error", nil, "", http.StatusBadRequest)
}
@@ -146,13 +146,13 @@ func (o *LinkMetadata) DeserializeDataToConcreteType() error {
var err error
switch o.Type {
case LINK_METADATA_TYPE_IMAGE:
case LinkMetadataTypeImage:
image := &PostImage{}
err = json.Unmarshal(b, &image)
data = image
case LINK_METADATA_TYPE_OPENGRAPH:
case LinkMetadataTypeOpengraph:
og := &opengraph.OpenGraph{}
json.Unmarshal(b, &og)

Просмотреть файл

@@ -38,7 +38,7 @@ func TestLinkMetadataIsValid(t *testing.T) {
Metadata: &LinkMetadata{
URL: "http://example.com",
Timestamp: 1546300800000,
Type: LINK_METADATA_TYPE_IMAGE,
Type: LinkMetadataTypeImage,
Data: &PostImage{},
},
Expected: true,
@@ -48,7 +48,7 @@ func TestLinkMetadataIsValid(t *testing.T) {
Metadata: &LinkMetadata{
URL: "http://example.com",
Timestamp: 1546300800000,
Type: LINK_METADATA_TYPE_OPENGRAPH,
Type: LinkMetadataTypeOpengraph,
Data: &opengraph.OpenGraph{},
},
Expected: true,
@@ -58,7 +58,7 @@ func TestLinkMetadataIsValid(t *testing.T) {
Metadata: &LinkMetadata{
URL: "http://example.com",
Timestamp: 1546300800000,
Type: LINK_METADATA_TYPE_NONE,
Type: LinkMetadataTypeNone,
Data: nil,
},
Expected: true,
@@ -67,7 +67,7 @@ func TestLinkMetadataIsValid(t *testing.T) {
Name: "should be invalid because of empty URL",
Metadata: &LinkMetadata{
Timestamp: 1546300800000,
Type: LINK_METADATA_TYPE_IMAGE,
Type: LinkMetadataTypeImage,
Data: &PostImage{},
},
Expected: false,
@@ -76,7 +76,7 @@ func TestLinkMetadataIsValid(t *testing.T) {
Name: "should be invalid because of empty timestamp",
Metadata: &LinkMetadata{
URL: "http://example.com",
Type: LINK_METADATA_TYPE_IMAGE,
Type: LinkMetadataTypeImage,
Data: &PostImage{},
},
Expected: false,
@@ -86,7 +86,7 @@ func TestLinkMetadataIsValid(t *testing.T) {
Metadata: &LinkMetadata{
URL: "http://example.com",
Timestamp: 1546300800001,
Type: LINK_METADATA_TYPE_IMAGE,
Type: LinkMetadataTypeImage,
Data: &PostImage{},
},
Expected: false,
@@ -106,7 +106,7 @@ func TestLinkMetadataIsValid(t *testing.T) {
Metadata: &LinkMetadata{
URL: "http://example.com",
Timestamp: 1546300800000,
Type: LINK_METADATA_TYPE_IMAGE,
Type: LinkMetadataTypeImage,
},
Expected: false,
},
@@ -115,7 +115,7 @@ func TestLinkMetadataIsValid(t *testing.T) {
Metadata: &LinkMetadata{
URL: "http://example.com",
Timestamp: 1546300800000,
Type: LINK_METADATA_TYPE_IMAGE,
Type: LinkMetadataTypeImage,
Data: &opengraph.OpenGraph{},
},
Expected: false,
@@ -125,7 +125,7 @@ func TestLinkMetadataIsValid(t *testing.T) {
Metadata: &LinkMetadata{
URL: "http://example.com",
Timestamp: 1546300800000,
Type: LINK_METADATA_TYPE_OPENGRAPH,
Type: LinkMetadataTypeOpengraph,
Data: &PostImage{},
},
Expected: false,
@@ -135,7 +135,7 @@ func TestLinkMetadataIsValid(t *testing.T) {
Metadata: &LinkMetadata{
URL: "http://example.com",
Timestamp: 1546300800000,
Type: LINK_METADATA_TYPE_OPENGRAPH,
Type: LinkMetadataTypeOpengraph,
Data: &Channel{},
},
Expected: false,
@@ -161,7 +161,7 @@ func TestLinkMetadataDeserializeDataToConcreteType(t *testing.T) {
}
metadata := &LinkMetadata{
Type: LINK_METADATA_TYPE_IMAGE,
Type: LinkMetadataTypeImage,
Data: []byte(image.ToJson()),
}
@@ -190,7 +190,7 @@ func TestLinkMetadataDeserializeDataToConcreteType(t *testing.T) {
require.NoError(t, err)
metadata := &LinkMetadata{
Type: LINK_METADATA_TYPE_OPENGRAPH,
Type: LinkMetadataTypeOpengraph,
Data: b,
}
@@ -205,7 +205,7 @@ func TestLinkMetadataDeserializeDataToConcreteType(t *testing.T) {
t.Run("should ignore data of the correct type", func(t *testing.T) {
metadata := &LinkMetadata{
Type: LINK_METADATA_TYPE_OPENGRAPH,
Type: LinkMetadataTypeOpengraph,
Data: 1234,
}
@@ -227,7 +227,7 @@ func TestLinkMetadataDeserializeDataToConcreteType(t *testing.T) {
t.Run("should return error for invalid data", func(t *testing.T) {
metadata := &LinkMetadata{
Type: LINK_METADATA_TYPE_IMAGE,
Type: LinkMetadataTypeImage,
Data: "garbage",
}
@@ -283,7 +283,7 @@ func TestFirstNImages(t *testing.T) {
sampleImage("fifth.ico"),
sampleImage("notme.tiff"),
}
assert.Len(t, firstNImages(six, -10), MAX_IMAGES, "On negative, go for defaults")
assert.Len(t, firstNImages(six, -10), LinkMetadataMaxImages, "On negative, go for defaults")
})
}

Просмотреть файл

@@ -4,35 +4,35 @@
package model
const (
ADVANCED_PERMISSIONS_MIGRATION_KEY = "AdvancedPermissionsMigrationComplete"
MIGRATION_KEY_ADVANCED_PERMISSIONS_PHASE_2 = "migration_advanced_permissions_phase_2"
AdvancedPermissionsMigrationKey = "AdvancedPermissionsMigrationComplete"
MigrationKeyAdvancedPermissionsPhase2 = "migration_advanced_permissions_phase_2"
MIGRATION_KEY_EMOJI_PERMISSIONS_SPLIT = "emoji_permissions_split"
MIGRATION_KEY_WEBHOOK_PERMISSIONS_SPLIT = "webhook_permissions_split"
MIGRATION_KEY_LIST_JOIN_PUBLIC_PRIVATE_TEAMS = "list_join_public_private_teams"
MIGRATION_KEY_REMOVE_PERMANENT_DELETE_USER = "remove_permanent_delete_user"
MIGRATION_KEY_ADD_BOT_PERMISSIONS = "add_bot_permissions"
MIGRATION_KEY_APPLY_CHANNEL_MANAGE_DELETE_TO_CHANNEL_USER = "apply_channel_manage_delete_to_channel_user"
MIGRATION_KEY_REMOVE_CHANNEL_MANAGE_DELETE_FROM_TEAM_USER = "remove_channel_manage_delete_from_team_user"
MIGRATION_KEY_VIEW_MEMBERS_NEW_PERMISSION = "view_members_new_permission"
MIGRATION_KEY_ADD_MANAGE_GUESTS_PERMISSIONS = "add_manage_guests_permissions"
MIGRATION_KEY_CHANNEL_MODERATIONS_PERMISSIONS = "channel_moderations_permissions"
MIGRATION_KEY_ADD_USE_GROUP_MENTIONS_PERMISSION = "add_use_group_mentions_permission"
MIGRATION_KEY_ADD_SYSTEM_CONSOLE_PERMISSIONS = "add_system_console_permissions"
MIGRATION_KEY_SIDEBAR_CATEGORIES_PHASE_2 = "migration_sidebar_categories_phase_2"
MIGRATION_KEY_ADD_CONVERT_CHANNEL_PERMISSIONS = "add_convert_channel_permissions"
MIGRATION_KEY_ADD_SYSTEM_ROLES_PERMISSIONS = "add_system_roles_permissions"
MIGRATION_KEY_ADD_BILLING_PERMISSIONS = "add_billing_permissions"
MIGRATION_KEY_ADD_MANAGE_SHARED_CHANNEL_PERMISSIONS = "manage_shared_channel_permissions"
MIGRATION_KEY_ADD_MANAGE_SECURE_CONNECTIONS_PERMISSIONS = "manage_secure_connections_permissions"
MIGRATION_KEY_ADD_DOWNLOAD_COMPLIANCE_EXPORT_RESULTS = "download_compliance_export_results"
MIGRATION_KEY_ADD_COMPLIANCE_SUBSECTION_PERMISSIONS = "compliance_subsection_permissions"
MIGRATION_KEY_ADD_EXPERIMENTAL_SUBSECTION_PERMISSIONS = "experimental_subsection_permissions"
MIGRATION_KEY_ADD_AUTHENTICATION_SUBSECTION_PERMISSIONS = "authentication_subsection_permissions"
MIGRATION_KEY_ADD_SITE_SUBSECTION_PERMISSIONS = "site_subsection_permissions"
MIGRATION_KEY_ADD_ENVIRONMENT_SUBSECTION_PERMISSIONS = "environment_subsection_permissions"
MIGRATION_KEY_ADD_REPORTING_SUBSECTION_PERMISSIONS = "reporting_subsection_permissions"
MIGRATION_KEY_ADD_TEST_EMAIL_ANCILLARY_PERMISSION = "test_email_ancillary_permission"
MIGRATION_KEY_ADD_ABOUT_SUBSECTION_PERMISSIONS = "about_subsection_permissions"
MIGRATION_KEY_ADD_INTEGRATIONS_SUBSECTION_PERMISSIONS = "integrations_subsection_permissions"
MigrationKeyEmojiPermissionsSplit = "emoji_permissions_split"
MigrationKeyWebhookPermissionsSplit = "webhook_permissions_split"
MigrationKeyListJoinPublicPrivateTeams = "list_join_public_private_teams"
MigrationKeyRemovePermanentDeleteUser = "remove_permanent_delete_user"
MigrationKeyAddBotPermissions = "add_bot_permissions"
MigrationKeyApplyChannelManageDeleteToChannelUser = "apply_channel_manage_delete_to_channel_user"
MigrationKeyRemoveChannelManageDeleteFromTeamUser = "remove_channel_manage_delete_from_team_user"
MigrationKeyViewMembersNewPermission = "view_members_new_permission"
MigrationKeyAddManageGuestsPermissions = "add_manage_guests_permissions"
MigrationKeyChannelModerationsPermissions = "channel_moderations_permissions"
MigrationKeyAddUseGroupMentionsPermission = "add_use_group_mentions_permission"
MigrationKeyAddSystemConsolePermissions = "add_system_console_permissions"
MigrationKeySidebarCategoriesPhase2 = "migration_sidebar_categories_phase_2"
MigrationKeyAddConvertChannelPermissions = "add_convert_channel_permissions"
MigrationKeyAddSystemRolesPermissions = "add_system_roles_permissions"
MigrationKeyAddBillingPermissions = "add_billing_permissions"
MigrationKeyAddManageSharedChannelPermissions = "manage_shared_channel_permissions"
MigrationKeyAddManageSecureConnectionsPermissions = "manage_secure_connections_permissions"
MigrationKeyAddDownloadComplianceExportResults = "download_compliance_export_results"
MigrationKeyAddComplianceSubsectionPermissions = "compliance_subsection_permissions"
MigrationKeyAddExperimentalSubsectionPermissions = "experimental_subsection_permissions"
MigrationKeyAddAuthenticationSubsectionPermissions = "authentication_subsection_permissions"
MigrationKeyAddSiteSubsectionPermissions = "site_subsection_permissions"
MigrationKeyAddEnvironmentSubsectionPermissions = "environment_subsection_permissions"
MigrationKeyAddReportingSubsectionPermissions = "reporting_subsection_permissions"
MigrationKeyAddTestEmailAncillaryPermission = "test_email_ancillary_permission"
MigrationKeyAddAboutSubsectionPermissions = "about_subsection_permissions"
MigrationKeyAddIntegrationsSubsectionPermissions = "integrations_subsection_permissions"
)

Просмотреть файл

@@ -12,11 +12,11 @@ import (
)
const (
OAUTH_ACTION_SIGNUP = "signup"
OAUTH_ACTION_LOGIN = "login"
OAUTH_ACTION_EMAIL_TO_SSO = "email_to_sso"
OAUTH_ACTION_SSO_TO_EMAIL = "sso_to_email"
OAUTH_ACTION_MOBILE = "mobile"
OAuthActionSignup = "signup"
OAuthActionLogin = "login"
OAuthActionEmailToSSO = "email_to_sso"
OAuthActionSSOToEmail = "sso_to_email"
OAuthActionMobile = "mobile"
)
type OAuthApp struct {

Просмотреть файл

@@ -57,7 +57,7 @@ type OutgoingWebhookResponse struct {
ResponseType string `json:"response_type"`
}
const OUTGOING_HOOK_RESPONSE_TYPE_COMMENT = "comment"
const OutgoingHookResponseTypeComment = "comment"
func (o *OutgoingWebhookPayload) ToJSON() string {
b, _ := json.Marshal(o)

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@@ -4,8 +4,8 @@
package model
const (
PluginClusterEventSendTypeReliable = CLUSTER_SEND_RELIABLE
PluginClusterEventSendTypeBestEffort = CLUSTER_SEND_BEST_EFFORT
PluginClusterEventSendTypeReliable = ClusterSendReliable
PluginClusterEventSendTypeBestEffort = ClusterSendBestEffort
)
// PluginClusterEvent is used to allow intra-cluster plugin communication.

Просмотреть файл

@@ -9,8 +9,8 @@ import (
)
const (
KEY_VALUE_PLUGIN_ID_MAX_RUNES = 190
KEY_VALUE_KEY_MAX_RUNES = 50
KeyValuePluginIdMaxRunes = 190
KeyValueKeyMaxRunes = 50
)
type PluginKeyValue struct {
@@ -21,12 +21,12 @@ type PluginKeyValue struct {
}
func (kv *PluginKeyValue) IsValid() *AppError {
if kv.PluginId == "" || utf8.RuneCountInString(kv.PluginId) > KEY_VALUE_PLUGIN_ID_MAX_RUNES {
return NewAppError("PluginKeyValue.IsValid", "model.plugin_key_value.is_valid.plugin_id.app_error", map[string]interface{}{"Max": KEY_VALUE_KEY_MAX_RUNES, "Min": 0}, "key="+kv.Key, http.StatusBadRequest)
if kv.PluginId == "" || utf8.RuneCountInString(kv.PluginId) > KeyValuePluginIdMaxRunes {
return NewAppError("PluginKeyValue.IsValid", "model.plugin_key_value.is_valid.plugin_id.app_error", map[string]interface{}{"Max": KeyValueKeyMaxRunes, "Min": 0}, "key="+kv.Key, http.StatusBadRequest)
}
if kv.Key == "" || utf8.RuneCountInString(kv.Key) > KEY_VALUE_KEY_MAX_RUNES {
return NewAppError("PluginKeyValue.IsValid", "model.plugin_key_value.is_valid.key.app_error", map[string]interface{}{"Max": KEY_VALUE_KEY_MAX_RUNES, "Min": 0}, "key="+kv.Key, http.StatusBadRequest)
if kv.Key == "" || utf8.RuneCountInString(kv.Key) > KeyValueKeyMaxRunes {
return NewAppError("PluginKeyValue.IsValid", "model.plugin_key_value.is_valid.key.app_error", map[string]interface{}{"Max": KeyValueKeyMaxRunes, "Min": 0}, "key="+kv.Key, http.StatusBadRequest)
}
return nil

Просмотреть файл

@@ -18,56 +18,58 @@ import (
)
const (
POST_SYSTEM_MESSAGE_PREFIX = "system_"
POST_DEFAULT = ""
POST_SLACK_ATTACHMENT = "slack_attachment"
POST_SYSTEM_GENERIC = "system_generic"
POST_JOIN_LEAVE = "system_join_leave" // Deprecated, use POST_JOIN_CHANNEL or POST_LEAVE_CHANNEL instead
POST_JOIN_CHANNEL = "system_join_channel"
POST_GUEST_JOIN_CHANNEL = "system_guest_join_channel"
POST_LEAVE_CHANNEL = "system_leave_channel"
POST_JOIN_TEAM = "system_join_team"
POST_LEAVE_TEAM = "system_leave_team"
POST_AUTO_RESPONDER = "system_auto_responder"
POST_ADD_REMOVE = "system_add_remove" // Deprecated, use POST_ADD_TO_CHANNEL or POST_REMOVE_FROM_CHANNEL instead
POST_ADD_TO_CHANNEL = "system_add_to_channel"
POST_ADD_GUEST_TO_CHANNEL = "system_add_guest_to_chan"
POST_REMOVE_FROM_CHANNEL = "system_remove_from_channel"
POST_MOVE_CHANNEL = "system_move_channel"
POST_ADD_TO_TEAM = "system_add_to_team"
POST_REMOVE_FROM_TEAM = "system_remove_from_team"
POST_HEADER_CHANGE = "system_header_change"
POST_DISPLAYNAME_CHANGE = "system_displayname_change"
POST_CONVERT_CHANNEL = "system_convert_channel"
POST_PURPOSE_CHANGE = "system_purpose_change"
POST_CHANNEL_DELETED = "system_channel_deleted"
POST_CHANNEL_RESTORED = "system_channel_restored"
POST_EPHEMERAL = "system_ephemeral"
POST_CHANGE_CHANNEL_PRIVACY = "system_change_chan_privacy"
POST_ADD_BOT_TEAMS_CHANNELS = "add_bot_teams_channels"
POST_FILEIDS_MAX_RUNES = 300
POST_FILENAMES_MAX_RUNES = 4000
POST_HASHTAGS_MAX_RUNES = 1000
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_"
POST_ME = "me"
PROPS_ADD_CHANNEL_MEMBER = "add_channel_member"
PostSystemMessagePrefix = "system_"
PostTypeDefault = ""
PostTypeSlackAttachment = "slack_attachment"
PostTypeSystemGeneric = "system_generic"
PostTypeJoinLeave = "system_join_leave" // Deprecated, use PostJoinChannel or PostLeaveChannel instead
PostTypeJoinChannel = "system_join_channel"
PostTypeGuestJoinChannel = "system_guest_join_channel"
PostTypeLeaveChannel = "system_leave_channel"
PostTypeJoinTeam = "system_join_team"
PostTypeLeaveTeam = "system_leave_team"
PostTypeAutoResponder = "system_auto_responder"
PostTypeAddRemove = "system_add_remove" // Deprecated, use PostAddToChannel or PostRemoveFromChannel instead
PostTypeAddToChannel = "system_add_to_channel"
PostTypeAddGuestToChannel = "system_add_guest_to_chan"
PostTypeRemoveFromChannel = "system_remove_from_channel"
PostTypeMoveChannel = "system_move_channel"
PostTypeAddToTeam = "system_add_to_team"
PostTypeRemoveFromTeam = "system_remove_from_team"
PostTypeHeaderChange = "system_header_change"
PostTypeDisplaynameChange = "system_displayname_change"
PostTypeConvertChannel = "system_convert_channel"
PostTypePurposeChange = "system_purpose_change"
PostTypeChannelDeleted = "system_channel_deleted"
PostTypeChannelRestored = "system_channel_restored"
PostTypeEphemeral = "system_ephemeral"
PostTypeChangeChannelPrivacy = "system_change_chan_privacy"
PostTypeAddBotTeamsChannels = "add_bot_teams_channels"
PostTypeSystemWarnMetricStatus = "warn_metric_status"
PostTypeMe = "me"
PostCustomTypePrefix = "custom_"
POST_PROPS_ADDED_USER_ID = "addedUserId"
POST_PROPS_DELETE_BY = "deleteBy"
POST_PROPS_OVERRIDE_ICON_URL = "override_icon_url"
POST_PROPS_OVERRIDE_ICON_EMOJI = "override_icon_emoji"
PostFileidsMaxRunes = 300
PostFilenamesMaxRunes = 4000
PostHashtagsMaxRunes = 1000
PostMessageMaxRunesV1 = 4000
PostMessageMaxBytesV2 = 65535 // Maximum size of a TEXT column in MySQL
PostMessageMaxRunesV2 = PostMessageMaxBytesV2 / 4 // Assume a worst-case representation
PostPropsMaxRunes = 8000
PostPropsMaxUserRunes = PostPropsMaxRunes - 400 // Leave some room for system / pre-save modifications
POST_PROPS_MENTION_HIGHLIGHT_DISABLED = "mentionHighlightDisabled"
POST_PROPS_GROUP_HIGHLIGHT_DISABLED = "disable_group_highlight"
POST_SYSTEM_WARN_METRIC_STATUS = "warn_metric_status"
PropsAddChannelMember = "add_channel_member"
PostPropsAddedUserId = "addedUserId"
PostPropsDeleteBy = "deleteBy"
PostPropsOverrideIconUrl = "override_icon_url"
PostPropsOverrideIconEmoji = "override_icon_emoji"
PostPropsMentionHighlightDisabled = "mentionHighlightDisabled"
PostPropsGroupHighlightDisabled = "disable_group_highlight"
)
var AT_MENTION_PATTEN = regexp.MustCompile(`\B@`)
var AtMentionPattern = regexp.MustCompile(`\B@`)
type Post struct {
Id string `json:"id"`
@@ -316,54 +318,54 @@ func (o *Post) IsValid(maxPostSize int) *AppError {
return NewAppError("Post.IsValid", "model.post.is_valid.msg.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
if utf8.RuneCountInString(o.Hashtags) > POST_HASHTAGS_MAX_RUNES {
if utf8.RuneCountInString(o.Hashtags) > PostHashtagsMaxRunes {
return NewAppError("Post.IsValid", "model.post.is_valid.hashtags.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
switch o.Type {
case
POST_DEFAULT,
POST_SYSTEM_GENERIC,
POST_JOIN_LEAVE,
POST_AUTO_RESPONDER,
POST_ADD_REMOVE,
POST_JOIN_CHANNEL,
POST_GUEST_JOIN_CHANNEL,
POST_LEAVE_CHANNEL,
POST_JOIN_TEAM,
POST_LEAVE_TEAM,
POST_ADD_TO_CHANNEL,
POST_ADD_GUEST_TO_CHANNEL,
POST_REMOVE_FROM_CHANNEL,
POST_MOVE_CHANNEL,
POST_ADD_TO_TEAM,
POST_REMOVE_FROM_TEAM,
POST_SLACK_ATTACHMENT,
POST_HEADER_CHANGE,
POST_PURPOSE_CHANGE,
POST_DISPLAYNAME_CHANGE,
POST_CONVERT_CHANNEL,
POST_CHANNEL_DELETED,
POST_CHANNEL_RESTORED,
POST_CHANGE_CHANNEL_PRIVACY,
POST_ME,
POST_ADD_BOT_TEAMS_CHANNELS,
POST_SYSTEM_WARN_METRIC_STATUS:
PostTypeDefault,
PostTypeSystemGeneric,
PostTypeJoinLeave,
PostTypeAutoResponder,
PostTypeAddRemove,
PostTypeJoinChannel,
PostTypeGuestJoinChannel,
PostTypeLeaveChannel,
PostTypeJoinTeam,
PostTypeLeaveTeam,
PostTypeAddToChannel,
PostTypeAddGuestToChannel,
PostTypeRemoveFromChannel,
PostTypeMoveChannel,
PostTypeAddToTeam,
PostTypeRemoveFromTeam,
PostTypeSlackAttachment,
PostTypeHeaderChange,
PostTypePurposeChange,
PostTypeDisplaynameChange,
PostTypeConvertChannel,
PostTypeChannelDeleted,
PostTypeChannelRestored,
PostTypeChangeChannelPrivacy,
PostTypeAddBotTeamsChannels,
PostTypeSystemWarnMetricStatus,
PostTypeMe:
default:
if !strings.HasPrefix(o.Type, POST_CUSTOM_TYPE_PREFIX) {
if !strings.HasPrefix(o.Type, PostCustomTypePrefix) {
return NewAppError("Post.IsValid", "model.post.is_valid.type.app_error", nil, "id="+o.Type, http.StatusBadRequest)
}
}
if utf8.RuneCountInString(ArrayToJson(o.Filenames)) > POST_FILENAMES_MAX_RUNES {
if utf8.RuneCountInString(ArrayToJson(o.Filenames)) > PostFilenamesMaxRunes {
return NewAppError("Post.IsValid", "model.post.is_valid.filenames.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
if utf8.RuneCountInString(ArrayToJson(o.FileIds)) > POST_FILEIDS_MAX_RUNES {
if utf8.RuneCountInString(ArrayToJson(o.FileIds)) > PostFileidsMaxRunes {
return NewAppError("Post.IsValid", "model.post.is_valid.file_ids.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
if utf8.RuneCountInString(StringInterfaceToJson(o.GetProps())) > POST_PROPS_MAX_RUNES {
if utf8.RuneCountInString(StringInterfaceToJson(o.GetProps())) > PostPropsMaxRunes {
return NewAppError("Post.IsValid", "model.post.is_valid.props.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
@@ -375,7 +377,7 @@ func (o *Post) SanitizeProps() {
return
}
membersToSanitize := []string{
PROPS_ADD_CHANNEL_MEMBER,
PropsAddChannelMember,
}
for _, member := range membersToSanitize {
@@ -469,7 +471,7 @@ func (o *Post) GetProp(key string) interface{} {
}
func (o *Post) IsSystemMessage() bool {
return len(o.Type) >= len(POST_SYSTEM_MESSAGE_PREFIX) && o.Type[:len(POST_SYSTEM_MESSAGE_PREFIX)] == POST_SYSTEM_MESSAGE_PREFIX
return len(o.Type) >= len(PostSystemMessagePrefix) && o.Type[:len(PostSystemMessagePrefix)] == PostSystemMessagePrefix
}
// IsRemote returns true if the post originated on a remote cluster.
@@ -486,16 +488,16 @@ func (o *Post) GetRemoteID() string {
}
func (o *Post) IsJoinLeaveMessage() bool {
return o.Type == POST_JOIN_LEAVE ||
o.Type == POST_ADD_REMOVE ||
o.Type == POST_JOIN_CHANNEL ||
o.Type == POST_LEAVE_CHANNEL ||
o.Type == POST_JOIN_TEAM ||
o.Type == POST_LEAVE_TEAM ||
o.Type == POST_ADD_TO_CHANNEL ||
o.Type == POST_REMOVE_FROM_CHANNEL ||
o.Type == POST_ADD_TO_TEAM ||
o.Type == POST_REMOVE_FROM_TEAM
return o.Type == PostTypeJoinLeave ||
o.Type == PostTypeAddRemove ||
o.Type == PostTypeJoinChannel ||
o.Type == PostTypeLeaveChannel ||
o.Type == PostTypeJoinTeam ||
o.Type == PostTypeLeaveTeam ||
o.Type == PostTypeAddToChannel ||
o.Type == PostTypeRemoveFromChannel ||
o.Type == PostTypeAddToTeam ||
o.Type == PostTypeRemoveFromTeam
}
func (o *Post) Patch(patch *PostPatch) {
@@ -568,7 +570,7 @@ func (o *Post) ChannelMentions() []string {
func (o *Post) DisableMentionHighlights() string {
mention, hasMentions := findAtChannelMention(o.Message)
if hasMentions {
o.AddProp(POST_PROPS_MENTION_HIGHLIGHT_DISABLED, true)
o.AddProp(PostPropsMentionHighlightDisabled, true)
}
return mention
}
@@ -582,7 +584,7 @@ func (o *PostPatch) DisableMentionHighlights() {
if o.Props == nil {
o.Props = &StringInterface{}
}
(*o.Props)[POST_PROPS_MENTION_HIGHLIGHT_DISABLED] = true
(*o.Props)[PostPropsMentionHighlightDisabled] = true
}
}

Просмотреть файл

@@ -4,10 +4,10 @@
package model
const (
POST_EMBED_IMAGE PostEmbedType = "image"
POST_EMBED_MESSAGE_ATTACHMENT PostEmbedType = "message_attachment"
POST_EMBED_OPENGRAPH PostEmbedType = "opengraph"
POST_EMBED_LINK PostEmbedType = "link"
PostEmbedImage PostEmbedType = "image"
PostEmbedMessageAttachment PostEmbedType = "message_attachment"
PostEmbedOpengraph PostEmbedType = "opengraph"
PostEmbedLink PostEmbedType = "link"
)
type PostEmbedType string

Просмотреть файл

@@ -81,7 +81,7 @@ func TestPostIsValid(t *testing.T) {
err = o.IsValid(maxPostSize)
require.NotNil(t, err)
o.Type = POST_CUSTOM_TYPE_PREFIX + "type"
o.Type = PostCustomTypePrefix + "type"
err = o.IsValid(maxPostSize)
require.Nil(t, err)
}
@@ -107,7 +107,7 @@ func TestPostIsSystemMessage(t *testing.T) {
require.False(t, post1.IsSystemMessage())
post2 := Post{Message: "test_2", Type: POST_JOIN_LEAVE}
post2 := Post{Message: "test_2", Type: PostTypeJoinLeave}
post2.PreSave()
require.True(t, post2.IsSystemMessage())
@@ -125,30 +125,30 @@ func TestPostSanitizeProps(t *testing.T) {
post1.SanitizeProps()
require.Nil(t, post1.GetProp(PROPS_ADD_CHANNEL_MEMBER))
require.Nil(t, post1.GetProp(PropsAddChannelMember))
post2 := &Post{
Message: "test",
Props: StringInterface{
PROPS_ADD_CHANNEL_MEMBER: "test",
PropsAddChannelMember: "test",
},
}
post2.SanitizeProps()
require.Nil(t, post2.GetProp(PROPS_ADD_CHANNEL_MEMBER))
require.Nil(t, post2.GetProp(PropsAddChannelMember))
post3 := &Post{
Message: "test",
Props: StringInterface{
PROPS_ADD_CHANNEL_MEMBER: "no good",
"attachments": "good",
PropsAddChannelMember: "no good",
"attachments": "good",
},
}
post3.SanitizeProps()
require.Nil(t, post3.GetProp(PROPS_ADD_CHANNEL_MEMBER))
require.Nil(t, post3.GetProp(PropsAddChannelMember))
require.NotNil(t, post3.GetProp("attachments"))
}
@@ -778,21 +778,21 @@ func TestPostDisableMentionHighlights(t *testing.T) {
"",
},
{
"Sets POST_PROPS_MENTION_HIGHLIGHT_DISABLED and returns mention",
"Sets PostPropsMentionHighlightDisabled and returns mention",
"Sample message with @here",
StringInterface{POST_PROPS_MENTION_HIGHLIGHT_DISABLED: true},
StringInterface{PostPropsMentionHighlightDisabled: true},
"@here",
},
{
"Sets POST_PROPS_MENTION_HIGHLIGHT_DISABLED and returns mention",
"Sets PostPropsMentionHighlightDisabled and returns mention",
"Sample message with @channel",
StringInterface{POST_PROPS_MENTION_HIGHLIGHT_DISABLED: true},
StringInterface{PostPropsMentionHighlightDisabled: true},
"@channel",
},
{
"Sets POST_PROPS_MENTION_HIGHLIGHT_DISABLED and returns mention",
"Sets PostPropsMentionHighlightDisabled and returns mention",
"Sample message with @all",
StringInterface{POST_PROPS_MENTION_HIGHLIGHT_DISABLED: true},
StringInterface{PostPropsMentionHighlightDisabled: true},
"@all",
},
}
@@ -821,19 +821,19 @@ func TestPostPatchDisableMentionHighlights(t *testing.T) {
nil,
},
{
"Sets POST_PROPS_MENTION_HIGHLIGHT_DISABLED",
"Sets PostPropsMentionHighlightDisabled",
"Sample message with @here",
&StringInterface{POST_PROPS_MENTION_HIGHLIGHT_DISABLED: true},
&StringInterface{PostPropsMentionHighlightDisabled: true},
},
{
"Sets POST_PROPS_MENTION_HIGHLIGHT_DISABLED",
"Sets PostPropsMentionHighlightDisabled",
"Sample message with @channel",
&StringInterface{POST_PROPS_MENTION_HIGHLIGHT_DISABLED: true},
&StringInterface{PostPropsMentionHighlightDisabled: true},
},
{
"Sets POST_PROPS_MENTION_HIGHLIGHT_DISABLED",
"Sets PostPropsMentionHighlightDisabled",
"Sample message with @all",
&StringInterface{POST_PROPS_MENTION_HIGHLIGHT_DISABLED: true},
&StringInterface{PostPropsMentionHighlightDisabled: true},
},
}
for _, tc := range testCases {

Просмотреть файл

@@ -13,48 +13,48 @@ import (
)
const (
PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW = "direct_channel_show"
PREFERENCE_CATEGORY_GROUP_CHANNEL_SHOW = "group_channel_show"
PREFERENCE_CATEGORY_TUTORIAL_STEPS = "tutorial_step"
PREFERENCE_CATEGORY_ADVANCED_SETTINGS = "advanced_settings"
PREFERENCE_CATEGORY_FLAGGED_POST = "flagged_post"
PREFERENCE_CATEGORY_FAVORITE_CHANNEL = "favorite_channel"
PREFERENCE_CATEGORY_SIDEBAR_SETTINGS = "sidebar_settings"
PreferenceCategoryDirectChannelShow = "direct_channel_show"
PreferenceCategoryGroupChannelShow = "group_channel_show"
PreferenceCategoryTutorialSteps = "tutorial_step"
PreferenceCategoryAdvancedSettings = "advanced_settings"
PreferenceCategoryFlaggedPost = "flagged_post"
PreferenceCategoryFavoriteChannel = "favorite_channel"
PreferenceCategorySidebarSettings = "sidebar_settings"
PREFERENCE_CATEGORY_DISPLAY_SETTINGS = "display_settings"
PREFERENCE_NAME_COLLAPSED_THREADS_ENABLED = "collapsed_reply_threads"
PREFERENCE_NAME_CHANNEL_DISPLAY_MODE = "channel_display_mode"
PREFERENCE_NAME_COLLAPSE_SETTING = "collapse_previews"
PREFERENCE_NAME_MESSAGE_DISPLAY = "message_display"
PREFERENCE_NAME_NAME_FORMAT = "name_format"
PREFERENCE_NAME_USE_MILITARY_TIME = "use_military_time"
PreferenceCategoryDisplaySettings = "display_settings"
PreferenceNameCollapsedThreadsEnabled = "collapsed_reply_threads"
PreferenceNameChannelDisplayMode = "channel_display_mode"
PreferenceNameCollapseSetting = "collapse_previews"
PreferenceNameMessageDisplay = "message_display"
PreferenceNameNameFormat = "name_format"
PreferenceNameUseMilitaryTime = "use_military_time"
PREFERENCE_CATEGORY_THEME = "theme"
PreferenceCategoryTheme = "theme"
// the name for theme props is the team id
PREFERENCE_CATEGORY_AUTHORIZED_OAUTH_APP = "oauth_app"
PreferenceCategoryAuthorizedOAuthApp = "oauth_app"
// the name for oauth_app is the client_id and value is the current scope
PREFERENCE_CATEGORY_LAST = "last"
PREFERENCE_NAME_LAST_CHANNEL = "channel"
PREFERENCE_NAME_LAST_TEAM = "team"
PreferenceCategoryLast = "last"
PreferenceNameLastChannel = "channel"
PreferenceNameLastTeam = "team"
PREFERENCE_CATEGORY_CUSTOM_STATUS = "custom_status"
PREFERENCE_NAME_RECENT_CUSTOM_STATUSES = "recent_custom_statuses"
PREFERENCE_NAME_CUSTOM_STATUS_TUTORIAL_STATE = "custom_status_tutorial_state"
PreferenceCategoryCustomStatus = "custom_status"
PreferenceNameRecentCustomStatuses = "recent_custom_statuses"
PreferenceNameCustomStatusTutorialState = "custom_status_tutorial_state"
PREFERENCE_CUSTOM_STATUS_MODAL_VIEWED = "custom_status_modal_viewed"
PreferenceCustomStatusModalViewed = "custom_status_modal_viewed"
PREFERENCE_CATEGORY_NOTIFICATIONS = "notifications"
PREFERENCE_NAME_EMAIL_INTERVAL = "email_interval"
PreferenceCategoryNotifications = "notifications"
PreferenceNameEmailInterval = "email_interval"
PREFERENCE_EMAIL_INTERVAL_NO_BATCHING_SECONDS = "30" // the "immediate" setting is actually 30s
PREFERENCE_EMAIL_INTERVAL_BATCHING_SECONDS = "900" // fifteen minutes is 900 seconds
PREFERENCE_EMAIL_INTERVAL_IMMEDIATELY = "immediately"
PREFERENCE_EMAIL_INTERVAL_FIFTEEN = "fifteen"
PREFERENCE_EMAIL_INTERVAL_FIFTEEN_AS_SECONDS = "900"
PREFERENCE_EMAIL_INTERVAL_HOUR = "hour"
PREFERENCE_EMAIL_INTERVAL_HOUR_AS_SECONDS = "3600"
PreferenceEmailIntervalNoBatchingSeconds = "30" // the "immediate" setting is actually 30s
PreferenceEmailIntervalBatchingSeconds = "900" // fifteen minutes is 900 seconds
PreferenceEmailIntervalImmediately = "immediately"
PreferenceEmailIntervalFifteen = "fifteen"
PreferenceEmailIntervalFifteenAsSeconds = "900"
PreferenceEmailIntervalHour = "hour"
PreferenceEmailIntervalHourAsSeconds = "3600"
)
type Preference struct {
@@ -92,7 +92,7 @@ func (o *Preference) IsValid() *AppError {
return NewAppError("Preference.IsValid", "model.preference.is_valid.value.app_error", nil, "value="+o.Value, http.StatusBadRequest)
}
if o.Category == PREFERENCE_CATEGORY_THEME {
if o.Category == PreferenceCategoryTheme {
var unused map[string]string
if err := json.NewDecoder(strings.NewReader(o.Value)).Decode(&unused); err != nil {
return NewAppError("Preference.IsValid", "model.preference.is_valid.theme.app_error", nil, "value="+o.Value, http.StatusBadRequest)
@@ -103,7 +103,7 @@ func (o *Preference) IsValid() *AppError {
}
func (o *Preference) PreUpdate() {
if o.Category == PREFERENCE_CATEGORY_THEME {
if o.Category == PreferenceCategoryTheme {
// decode the value of theme (a map of strings to string) and eliminate any invalid values
var props map[string]string
if err := json.NewDecoder(strings.NewReader(o.Value)).Decode(&props); err != nil {

Просмотреть файл

@@ -14,7 +14,7 @@ import (
func TestPreferenceIsValid(t *testing.T) {
preference := Preference{
UserId: "1234garbage",
Category: PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW,
Category: PreferenceCategoryDirectChannelShow,
Name: NewId(),
}
@@ -26,7 +26,7 @@ func TestPreferenceIsValid(t *testing.T) {
preference.Category = strings.Repeat("01234567890", 20)
require.NotNil(t, preference.IsValid())
preference.Category = PREFERENCE_CATEGORY_DIRECT_CHANNEL_SHOW
preference.Category = PreferenceCategoryDirectChannelShow
require.Nil(t, preference.IsValid())
preference.Name = strings.Repeat("01234567890", 20)
@@ -41,7 +41,7 @@ func TestPreferenceIsValid(t *testing.T) {
preference.Value = "1234garbage"
require.Nil(t, preference.IsValid())
preference.Category = PREFERENCE_CATEGORY_THEME
preference.Category = PreferenceCategoryTheme
require.NotNil(t, preference.IsValid())
preference.Value = `{"color": "#ff0000", "color2": "#faf"}`
@@ -50,7 +50,7 @@ func TestPreferenceIsValid(t *testing.T) {
func TestPreferencePreUpdate(t *testing.T) {
preference := Preference{
Category: PREFERENCE_CATEGORY_THEME,
Category: PreferenceCategoryTheme,
Value: `{"color": "#ff0000", "color2": "#faf", "codeTheme": "github", "invalid": "invalid"}`,
}

Просмотреть файл

@@ -32,11 +32,11 @@ type ProductNotice struct {
}
func (n *ProductNotice) SysAdminOnly() bool {
return n.Conditions.Audience != nil && *n.Conditions.Audience == NoticeAudience_Sysadmin
return n.Conditions.Audience != nil && *n.Conditions.Audience == NoticeAudienceSysadmin
}
func (n *ProductNotice) TeamAdminOnly() bool {
return n.Conditions.Audience != nil && *n.Conditions.Audience == NoticeAudience_TeamAdmin
return n.Conditions.Audience != nil && *n.Conditions.Audience == NoticeAudienceTeamAdmin
}
type Conditions struct {
@@ -91,23 +91,23 @@ func NewNoticeAudience(s NoticeAudience) *NoticeAudience {
func (a *NoticeAudience) Matches(sysAdmin bool, teamAdmin bool) bool {
switch *a {
case NoticeAudience_All:
case NoticeAudienceAll:
return true
case NoticeAudience_Member:
case NoticeAudienceMember:
return !sysAdmin && !teamAdmin
case NoticeAudience_Sysadmin:
case NoticeAudienceSysadmin:
return sysAdmin
case NoticeAudience_TeamAdmin:
case NoticeAudienceTeamAdmin:
return teamAdmin
}
return false
}
const (
NoticeAudience_All NoticeAudience = "all"
NoticeAudience_Member NoticeAudience = "member"
NoticeAudience_Sysadmin NoticeAudience = "sysadmin"
NoticeAudience_TeamAdmin NoticeAudience = "teamadmin"
NoticeAudienceAll NoticeAudience = "all"
NoticeAudienceMember NoticeAudience = "member"
NoticeAudienceSysadmin NoticeAudience = "sysadmin"
NoticeAudienceTeamAdmin NoticeAudience = "teamadmin"
)
// Only show the notice on specific clients. Defaults to 'all'
@@ -119,36 +119,36 @@ func NewNoticeClientType(s NoticeClientType) *NoticeClientType { return &s }
func (c *NoticeClientType) Matches(other NoticeClientType) bool {
switch *c {
case NoticeClientType_All:
case NoticeClientTypeAll:
return true
case NoticeClientType_Mobile:
return other == NoticeClientType_MobileIos || other == NoticeClientType_MobileAndroid
case NoticeClientTypeMobile:
return other == NoticeClientTypeMobileIos || other == NoticeClientTypeMobileAndroid
default:
return *c == other
}
}
const (
NoticeClientType_All NoticeClientType = "all"
NoticeClientType_Desktop NoticeClientType = "desktop"
NoticeClientType_Mobile NoticeClientType = "mobile"
NoticeClientType_MobileAndroid NoticeClientType = "mobile-android"
NoticeClientType_MobileIos NoticeClientType = "mobile-ios"
NoticeClientType_Web NoticeClientType = "web"
NoticeClientTypeAll NoticeClientType = "all"
NoticeClientTypeDesktop NoticeClientType = "desktop"
NoticeClientTypeMobile NoticeClientType = "mobile"
NoticeClientTypeMobileAndroid NoticeClientType = "mobile-android"
NoticeClientTypeMobileIos NoticeClientType = "mobile-ios"
NoticeClientTypeWeb NoticeClientType = "web"
)
func NoticeClientTypeFromString(s string) (NoticeClientType, error) {
switch s {
case "web":
return NoticeClientType_Web, nil
return NoticeClientTypeWeb, nil
case "mobile-ios":
return NoticeClientType_MobileIos, nil
return NoticeClientTypeMobileIos, nil
case "mobile-android":
return NoticeClientType_MobileAndroid, nil
return NoticeClientTypeMobileAndroid, nil
case "desktop":
return NoticeClientType_Desktop, nil
return NoticeClientTypeDesktop, nil
}
return NoticeClientType_All, errors.New("Invalid client type supplied")
return NoticeClientTypeAll, errors.New("Invalid client type supplied")
}
// Instance type. Defaults to "both"
@@ -156,22 +156,22 @@ type NoticeInstanceType string
func NewNoticeInstanceType(n NoticeInstanceType) *NoticeInstanceType { return &n }
func (t *NoticeInstanceType) Matches(isCloud bool) bool {
if *t == NoticeInstanceType_Both {
if *t == NoticeInstanceTypeBoth {
return true
}
if *t == NoticeInstanceType_Cloud && !isCloud {
if *t == NoticeInstanceTypeCloud && !isCloud {
return false
}
if *t == NoticeInstanceType_OnPrem && isCloud {
if *t == NoticeInstanceTypeOnPrem && isCloud {
return false
}
return true
}
const (
NoticeInstanceType_Both NoticeInstanceType = "both"
NoticeInstanceType_Cloud NoticeInstanceType = "cloud"
NoticeInstanceType_OnPrem NoticeInstanceType = "onprem"
NoticeInstanceTypeBoth NoticeInstanceType = "both"
NoticeInstanceTypeCloud NoticeInstanceType = "cloud"
NoticeInstanceTypeOnPrem NoticeInstanceType = "onprem"
)
// SKU. Defaults to "all"
@@ -180,9 +180,9 @@ type NoticeSKU string
func NewNoticeSKU(s NoticeSKU) *NoticeSKU { return &s }
func (c *NoticeSKU) Matches(s string) bool {
switch *c {
case NoticeSKU_All:
case NoticeSKUAll:
return true
case NoticeSKU_E0, NoticeSKU_Team:
case NoticeSKUE0, NoticeSKUTeam:
return s == ""
default:
return s == string(*c)
@@ -190,11 +190,11 @@ func (c *NoticeSKU) Matches(s string) bool {
}
const (
NoticeSKU_E0 NoticeSKU = "e0"
NoticeSKU_E10 NoticeSKU = "e10"
NoticeSKU_E20 NoticeSKU = "e20"
NoticeSKU_All NoticeSKU = "all"
NoticeSKU_Team NoticeSKU = "team"
NoticeSKUE0 NoticeSKU = "e0"
NoticeSKUE10 NoticeSKU = "e10"
NoticeSKUE20 NoticeSKU = "e20"
NoticeSKUAll NoticeSKU = "all"
NoticeSKUTeam NoticeSKU = "team"
)
// Optional action to perform on action button click. (defaults to closing the notice)

Просмотреть файл

@@ -11,29 +11,29 @@ import (
)
const (
PUSH_NOTIFY_APPLE = "apple"
PUSH_NOTIFY_ANDROID = "android"
PUSH_NOTIFY_APPLE_REACT_NATIVE = "apple_rn"
PUSH_NOTIFY_ANDROID_REACT_NATIVE = "android_rn"
PushNotifyApple = "apple"
PushNotifyAndroid = "android"
PushNotifyAppleReactNative = "apple_rn"
PushNotifyAndroidReactNative = "android_rn"
PUSH_TYPE_MESSAGE = "message"
PUSH_TYPE_CLEAR = "clear"
PUSH_TYPE_UPDATE_BADGE = "update_badge"
PUSH_TYPE_SESSION = "session"
PUSH_MESSAGE_V2 = "v2"
PushTypeMessage = "message"
PushTypeClear = "clear"
PushTypeUpdateBadge = "update_badge"
PushTypeSession = "session"
PushMessageV2 = "v2"
PUSH_SOUND_NONE = "none"
PushSoundNone = "none"
// The category is set to handle a set of interactive Actions
// with the push notifications
CATEGORY_CAN_REPLY = "CAN_REPLY"
CategoryCanReply = "CAN_REPLY"
MHPNS = "https://push.mattermost.com"
PUSH_SEND_PREPARE = "Prepared to send"
PUSH_SEND_SUCCESS = "Successful"
PUSH_NOT_SENT = "Not Sent due to preferences"
PUSH_RECEIVED = "Received by device"
PushSendPrepare = "Prepared to send"
PushSendSuccess = "Successful"
PushNotSent = "Not Sent due to preferences"
PushReceived = "Received by device"
)
type PushNotificationAck struct {

Просмотреть файл

@@ -9,31 +9,31 @@ import (
)
const (
PUSH_STATUS = "status"
PUSH_STATUS_OK = "OK"
PUSH_STATUS_FAIL = "FAIL"
PUSH_STATUS_REMOVE = "REMOVE"
PUSH_STATUS_ERROR_MSG = "error"
PushStatus = "status"
PushStatusOk = "OK"
PushStatusFail = "FAIL"
PushStatusRemove = "REMOVE"
PushStatusErrorMsg = "error"
)
type PushResponse map[string]string
func NewOkPushResponse() PushResponse {
m := make(map[string]string)
m[PUSH_STATUS] = PUSH_STATUS_OK
m[PushStatus] = PushStatusOk
return m
}
func NewRemovePushResponse() PushResponse {
m := make(map[string]string)
m[PUSH_STATUS] = PUSH_STATUS_REMOVE
m[PushStatus] = PushStatusRemove
return m
}
func NewErrorPushResponse(message string) PushResponse {
m := make(map[string]string)
m[PUSH_STATUS] = PUSH_STATUS_FAIL
m[PUSH_STATUS_ERROR_MSG] = message
m[PushStatus] = PushStatusFail
m[PushStatusErrorMsg] = message
return m
}

Просмотреть файл

@@ -74,7 +74,7 @@ func (o *Reaction) IsValid() *AppError {
validName := regexp.MustCompile(`^[a-zA-Z0-9\-\+_]+$`)
if o.EmojiName == "" || len(o.EmojiName) > EMOJI_NAME_MAX_LENGTH || !validName.MatchString(o.EmojiName) {
if o.EmojiName == "" || len(o.EmojiName) > EmojiNameMaxLength || !validName.MatchString(o.EmojiName) {
return NewAppError("Reaction.IsValid", "model.reaction.is_valid.emoji_name.app_error", nil, "emoji_name="+o.EmojiName, http.StatusBadRequest)
}

Просмотреть файл

@@ -21,317 +21,317 @@ var NewSystemRoleIDs []string
func init() {
NewSystemRoleIDs = []string{
SYSTEM_USER_MANAGER_ROLE_ID,
SYSTEM_READ_ONLY_ADMIN_ROLE_ID,
SYSTEM_MANAGER_ROLE_ID,
SystemUserManagerRoleId,
SystemReadOnlyAdminRoleId,
SystemManagerRoleId,
}
BuiltInSchemeManagedRoleIDs = append([]string{
SYSTEM_GUEST_ROLE_ID,
SYSTEM_USER_ROLE_ID,
SYSTEM_ADMIN_ROLE_ID,
SYSTEM_POST_ALL_ROLE_ID,
SYSTEM_POST_ALL_PUBLIC_ROLE_ID,
SYSTEM_USER_ACCESS_TOKEN_ROLE_ID,
SystemGuestRoleId,
SystemUserRoleId,
SystemAdminRoleId,
SystemPostAllRoleId,
SystemPostAllPublicRoleId,
SystemUserAccessTokenRoleId,
TEAM_GUEST_ROLE_ID,
TEAM_USER_ROLE_ID,
TEAM_ADMIN_ROLE_ID,
TEAM_POST_ALL_ROLE_ID,
TEAM_POST_ALL_PUBLIC_ROLE_ID,
TeamGuestRoleId,
TeamUserRoleId,
TeamAdminRoleId,
TeamPostAllRoleId,
TeamPostAllPublicRoleId,
CHANNEL_GUEST_ROLE_ID,
CHANNEL_USER_ROLE_ID,
CHANNEL_ADMIN_ROLE_ID,
ChannelGuestRoleId,
ChannelUserRoleId,
ChannelAdminRoleId,
}, NewSystemRoleIDs...)
// When updating the values here, the values in mattermost-redux must also be updated.
SysconsoleAncillaryPermissions = map[string][]*Permission{
PERMISSION_SYSCONSOLE_READ_ABOUT_EDITION_AND_LICENSE.Id: {
PERMISSION_READ_LICENSE_INFORMATION,
PermissionSysconsoleReadAboutEditionAndLicense.Id: {
PermissionReadLicenseInformation,
},
PERMISSION_SYSCONSOLE_WRITE_ABOUT_EDITION_AND_LICENSE.Id: {
PERMISSION_MANAGE_LICENSE_INFORMATION,
PermissionSysconsoleWriteAboutEditionAndLicense.Id: {
PermissionManageLicenseInformation,
},
PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_CHANNELS.Id: {
PERMISSION_READ_PUBLIC_CHANNEL,
PERMISSION_READ_CHANNEL,
PERMISSION_READ_PUBLIC_CHANNEL_GROUPS,
PERMISSION_READ_PRIVATE_CHANNEL_GROUPS,
PermissionSysconsoleReadUserManagementChannels.Id: {
PermissionReadPublicChannel,
PermissionReadChannel,
PermissionReadPublicChannelGroups,
PermissionReadPrivateChannelGroups,
},
PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_USERS.Id: {
PERMISSION_READ_OTHER_USERS_TEAMS,
PERMISSION_GET_ANALYTICS,
PermissionSysconsoleReadUserManagementUsers.Id: {
PermissionReadOtherUsersTeams,
PermissionGetAnalytics,
},
PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_TEAMS.Id: {
PERMISSION_LIST_PRIVATE_TEAMS,
PERMISSION_LIST_PUBLIC_TEAMS,
PERMISSION_VIEW_TEAM,
PermissionSysconsoleReadUserManagementTeams.Id: {
PermissionListPrivateTeams,
PermissionListPublicTeams,
PermissionViewTeam,
},
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_ELASTICSEARCH.Id: {
PERMISSION_READ_ELASTICSEARCH_POST_INDEXING_JOB,
PERMISSION_READ_ELASTICSEARCH_POST_AGGREGATION_JOB,
PermissionSysconsoleReadEnvironmentElasticsearch.Id: {
PermissionReadElasticsearchPostIndexingJob,
PermissionReadElasticsearchPostAggregationJob,
},
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_WEB_SERVER.Id: {
PERMISSION_TEST_SITE_URL,
PERMISSION_RELOAD_CONFIG,
PERMISSION_INVALIDATE_CACHES,
PermissionSysconsoleWriteEnvironmentWebServer.Id: {
PermissionTestSiteUrl,
PermissionReloadConfig,
PermissionInvalidateCaches,
},
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_DATABASE.Id: {
PERMISSION_RECYCLE_DATABASE_CONNECTIONS,
PermissionSysconsoleWriteEnvironmentDatabase.Id: {
PermissionRecycleDatabaseConnections,
},
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_ELASTICSEARCH.Id: {
PERMISSION_TEST_ELASTICSEARCH,
PERMISSION_CREATE_ELASTICSEARCH_POST_INDEXING_JOB,
PERMISSION_CREATE_ELASTICSEARCH_POST_AGGREGATION_JOB,
PERMISSION_PURGE_ELASTICSEARCH_INDEXES,
PermissionSysconsoleWriteEnvironmentElasticsearch.Id: {
PermissionTestElasticsearch,
PermissionCreateElasticsearchPostIndexingJob,
PermissionCreateElasticsearchPostAggregationJob,
PermissionPurgeElasticsearchIndexes,
},
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_FILE_STORAGE.Id: {
PERMISSION_TEST_S3,
PermissionSysconsoleWriteEnvironmentFileStorage.Id: {
PermissionTestS3,
},
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_SMTP.Id: {
PERMISSION_TEST_EMAIL,
PermissionSysconsoleWriteEnvironmentSmtp.Id: {
PermissionTestEmail,
},
PERMISSION_SYSCONSOLE_READ_REPORTING_SERVER_LOGS.Id: {
PERMISSION_GET_LOGS,
PermissionSysconsoleReadReportingServerLogs.Id: {
PermissionGetLogs,
},
PERMISSION_SYSCONSOLE_READ_REPORTING_SITE_STATISTICS.Id: {
PERMISSION_GET_ANALYTICS,
PermissionSysconsoleReadReportingSiteStatistics.Id: {
PermissionGetAnalytics,
},
PERMISSION_SYSCONSOLE_READ_REPORTING_TEAM_STATISTICS.Id: {
PERMISSION_VIEW_TEAM,
PermissionSysconsoleReadReportingTeamStatistics.Id: {
PermissionViewTeam,
},
PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_USERS.Id: {
PERMISSION_EDIT_OTHER_USERS,
PERMISSION_DEMOTE_TO_GUEST,
PERMISSION_PROMOTE_GUEST,
PermissionSysconsoleWriteUserManagementUsers.Id: {
PermissionEditOtherUsers,
PermissionDemoteToGuest,
PermissionPromoteGuest,
},
PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_CHANNELS.Id: {
PERMISSION_MANAGE_TEAM,
PERMISSION_MANAGE_PUBLIC_CHANNEL_PROPERTIES,
PERMISSION_MANAGE_PRIVATE_CHANNEL_PROPERTIES,
PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS,
PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS,
PERMISSION_DELETE_PRIVATE_CHANNEL,
PERMISSION_DELETE_PUBLIC_CHANNEL,
PERMISSION_MANAGE_CHANNEL_ROLES,
PERMISSION_CONVERT_PUBLIC_CHANNEL_TO_PRIVATE,
PERMISSION_CONVERT_PRIVATE_CHANNEL_TO_PUBLIC,
PermissionSysconsoleWriteUserManagementChannels.Id: {
PermissionManageTeam,
PermissionManagePublicChannelProperties,
PermissionManagePrivateChannelProperties,
PermissionManagePrivateChannelMembers,
PermissionManagePublicChannelMembers,
PermissionDeletePrivateChannel,
PermissionDeletePublicChannel,
PermissionManageChannelRoles,
PermissionConvertPublicChannelToPrivate,
PermissionConvertPrivateChannelToPublic,
},
PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_TEAMS.Id: {
PERMISSION_MANAGE_TEAM,
PERMISSION_MANAGE_TEAM_ROLES,
PERMISSION_REMOVE_USER_FROM_TEAM,
PERMISSION_JOIN_PRIVATE_TEAMS,
PERMISSION_JOIN_PUBLIC_TEAMS,
PERMISSION_ADD_USER_TO_TEAM,
PermissionSysconsoleWriteUserManagementTeams.Id: {
PermissionManageTeam,
PermissionManageTeamRoles,
PermissionRemoveUserFromTeam,
PermissionJoinPrivateTeams,
PermissionJoinPublicTeams,
PermissionAddUserToTeam,
},
PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_GROUPS.Id: {
PERMISSION_MANAGE_TEAM,
PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS,
PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS,
PERMISSION_CONVERT_PUBLIC_CHANNEL_TO_PRIVATE,
PERMISSION_CONVERT_PRIVATE_CHANNEL_TO_PUBLIC,
PermissionSysconsoleWriteUserManagementGroups.Id: {
PermissionManageTeam,
PermissionManagePrivateChannelMembers,
PermissionManagePublicChannelMembers,
PermissionConvertPublicChannelToPrivate,
PermissionConvertPrivateChannelToPublic,
},
PERMISSION_SYSCONSOLE_WRITE_SITE_CUSTOMIZATION.Id: {
PERMISSION_EDIT_BRAND,
PermissionSysconsoleWriteSiteCustomization.Id: {
PermissionEditBrand,
},
PERMISSION_SYSCONSOLE_WRITE_COMPLIANCE_DATA_RETENTION_POLICY.Id: {
PERMISSION_CREATE_DATA_RETENTION_JOB,
PermissionSysconsoleWriteComplianceDataRetentionPolicy.Id: {
PermissionCreateDataRetentionJob,
},
PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY.Id: {
PERMISSION_READ_DATA_RETENTION_JOB,
PermissionSysconsoleReadComplianceDataRetentionPolicy.Id: {
PermissionReadDataRetentionJob,
},
PERMISSION_SYSCONSOLE_WRITE_COMPLIANCE_COMPLIANCE_EXPORT.Id: {
PERMISSION_CREATE_COMPLIANCE_EXPORT_JOB,
PERMISSION_DOWNLOAD_COMPLIANCE_EXPORT_RESULT,
PermissionSysconsoleWriteComplianceComplianceExport.Id: {
PermissionCreateComplianceExportJob,
PermissionDownloadComplianceExportResult,
},
PERMISSION_SYSCONSOLE_READ_COMPLIANCE_COMPLIANCE_EXPORT.Id: {
PERMISSION_READ_COMPLIANCE_EXPORT_JOB,
PERMISSION_DOWNLOAD_COMPLIANCE_EXPORT_RESULT,
PermissionSysconsoleReadComplianceComplianceExport.Id: {
PermissionReadComplianceExportJob,
PermissionDownloadComplianceExportResult,
},
PERMISSION_SYSCONSOLE_READ_COMPLIANCE_CUSTOM_TERMS_OF_SERVICE.Id: {
PERMISSION_READ_AUDITS,
PermissionSysconsoleReadComplianceCustomTermsOfService.Id: {
PermissionReadAudits,
},
PERMISSION_SYSCONSOLE_WRITE_EXPERIMENTAL_BLEVE.Id: {
PERMISSION_CREATE_POST_BLEVE_INDEXES_JOB,
PERMISSION_PURGE_BLEVE_INDEXES,
PermissionSysconsoleWriteExperimentalBleve.Id: {
PermissionCreatePostBleveIndexesJob,
PermissionPurgeBleveIndexes,
},
PERMISSION_SYSCONSOLE_WRITE_AUTHENTICATION_LDAP.Id: {
PERMISSION_CREATE_LDAP_SYNC_JOB,
PERMISSION_ADD_LDAP_PUBLIC_CERT,
PERMISSION_REMOVE_LDAP_PUBLIC_CERT,
PERMISSION_ADD_LDAP_PRIVATE_CERT,
PERMISSION_REMOVE_LDAP_PRIVATE_CERT,
PermissionSysconsoleWriteAuthenticationLdap.Id: {
PermissionCreateLdapSyncJob,
PermissionAddLdapPublicCert,
PermissionRemoveLdapPublicCert,
PermissionAddLdapPrivateCert,
PermissionRemoveLdapPrivateCert,
},
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_LDAP.Id: {
PERMISSION_TEST_LDAP,
PERMISSION_READ_LDAP_SYNC_JOB,
PermissionSysconsoleReadAuthenticationLdap.Id: {
PermissionTestLdap,
PermissionReadLdapSyncJob,
},
PERMISSION_SYSCONSOLE_WRITE_AUTHENTICATION_EMAIL.Id: {
PERMISSION_INVALIDATE_EMAIL_INVITE,
PermissionSysconsoleWriteAuthenticationEmail.Id: {
PermissionInvalidateEmailInvite,
},
PERMISSION_SYSCONSOLE_WRITE_AUTHENTICATION_SAML.Id: {
PERMISSION_GET_SAML_METADATA_FROM_IDP,
PERMISSION_ADD_SAML_PUBLIC_CERT,
PERMISSION_ADD_SAML_PRIVATE_CERT,
PERMISSION_ADD_SAML_IDP_CERT,
PERMISSION_REMOVE_SAML_PUBLIC_CERT,
PERMISSION_REMOVE_SAML_PRIVATE_CERT,
PERMISSION_REMOVE_SAML_IDP_CERT,
PERMISSION_GET_SAML_CERT_STATUS,
PermissionSysconsoleWriteAuthenticationSaml.Id: {
PermissionGetSamlMetadataFromIdp,
PermissionAddSamlPublicCert,
PermissionAddSamlPrivateCert,
PermissionAddSamlIdpCert,
PermissionRemoveSamlPublicCert,
PermissionRemoveSamlPrivateCert,
PermissionRemoveSamlIdpCert,
PermissionGetSamlCertStatus,
},
}
SystemUserManagerDefaultPermissions = []string{
PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS.Id,
PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_TEAMS.Id,
PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_CHANNELS.Id,
PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_PERMISSIONS.Id,
PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_GROUPS.Id,
PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_TEAMS.Id,
PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_CHANNELS.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_SIGNUP.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_EMAIL.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_PASSWORD.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_MFA.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_LDAP.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_SAML.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_OPENID.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_GUEST_ACCESS.Id,
PermissionSysconsoleReadUserManagementGroups.Id,
PermissionSysconsoleReadUserManagementTeams.Id,
PermissionSysconsoleReadUserManagementChannels.Id,
PermissionSysconsoleReadUserManagementPermissions.Id,
PermissionSysconsoleWriteUserManagementGroups.Id,
PermissionSysconsoleWriteUserManagementTeams.Id,
PermissionSysconsoleWriteUserManagementChannels.Id,
PermissionSysconsoleReadAuthenticationSignup.Id,
PermissionSysconsoleReadAuthenticationEmail.Id,
PermissionSysconsoleReadAuthenticationPassword.Id,
PermissionSysconsoleReadAuthenticationMfa.Id,
PermissionSysconsoleReadAuthenticationLdap.Id,
PermissionSysconsoleReadAuthenticationSaml.Id,
PermissionSysconsoleReadAuthenticationOpenid.Id,
PermissionSysconsoleReadAuthenticationGuestAccess.Id,
}
SystemReadOnlyAdminDefaultPermissions = []string{
PERMISSION_SYSCONSOLE_READ_ABOUT_EDITION_AND_LICENSE.Id,
PERMISSION_SYSCONSOLE_READ_REPORTING_SITE_STATISTICS.Id,
PERMISSION_SYSCONSOLE_READ_REPORTING_TEAM_STATISTICS.Id,
PERMISSION_SYSCONSOLE_READ_REPORTING_SERVER_LOGS.Id,
PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_USERS.Id,
PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS.Id,
PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_TEAMS.Id,
PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_CHANNELS.Id,
PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_PERMISSIONS.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_WEB_SERVER.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_DATABASE.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_ELASTICSEARCH.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_FILE_STORAGE.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_IMAGE_PROXY.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_SMTP.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_PUSH_NOTIFICATION_SERVER.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_HIGH_AVAILABILITY.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_RATE_LIMITING.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_LOGGING.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_SESSION_LENGTHS.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_PERFORMANCE_MONITORING.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_DEVELOPER.Id,
PERMISSION_SYSCONSOLE_READ_SITE_CUSTOMIZATION.Id,
PERMISSION_SYSCONSOLE_READ_SITE_LOCALIZATION.Id,
PERMISSION_SYSCONSOLE_READ_SITE_USERS_AND_TEAMS.Id,
PERMISSION_SYSCONSOLE_READ_SITE_NOTIFICATIONS.Id,
PERMISSION_SYSCONSOLE_READ_SITE_ANNOUNCEMENT_BANNER.Id,
PERMISSION_SYSCONSOLE_READ_SITE_EMOJI.Id,
PERMISSION_SYSCONSOLE_READ_SITE_POSTS.Id,
PERMISSION_SYSCONSOLE_READ_SITE_FILE_SHARING_AND_DOWNLOADS.Id,
PERMISSION_SYSCONSOLE_READ_SITE_PUBLIC_LINKS.Id,
PERMISSION_SYSCONSOLE_READ_SITE_NOTICES.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_SIGNUP.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_EMAIL.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_PASSWORD.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_MFA.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_LDAP.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_SAML.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_OPENID.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_GUEST_ACCESS.Id,
PERMISSION_SYSCONSOLE_READ_PLUGINS.Id,
PERMISSION_SYSCONSOLE_READ_INTEGRATIONS_INTEGRATION_MANAGEMENT.Id,
PERMISSION_SYSCONSOLE_READ_INTEGRATIONS_BOT_ACCOUNTS.Id,
PERMISSION_SYSCONSOLE_READ_INTEGRATIONS_GIF.Id,
PERMISSION_SYSCONSOLE_READ_INTEGRATIONS_CORS.Id,
PERMISSION_SYSCONSOLE_READ_COMPLIANCE_DATA_RETENTION_POLICY.Id,
PERMISSION_SYSCONSOLE_READ_COMPLIANCE_COMPLIANCE_EXPORT.Id,
PERMISSION_SYSCONSOLE_READ_COMPLIANCE_COMPLIANCE_MONITORING.Id,
PERMISSION_SYSCONSOLE_READ_COMPLIANCE_CUSTOM_TERMS_OF_SERVICE.Id,
PERMISSION_SYSCONSOLE_READ_EXPERIMENTAL_FEATURES.Id,
PERMISSION_SYSCONSOLE_READ_EXPERIMENTAL_FEATURE_FLAGS.Id,
PERMISSION_SYSCONSOLE_READ_EXPERIMENTAL_BLEVE.Id,
PermissionSysconsoleReadAboutEditionAndLicense.Id,
PermissionSysconsoleReadReportingSiteStatistics.Id,
PermissionSysconsoleReadReportingTeamStatistics.Id,
PermissionSysconsoleReadReportingServerLogs.Id,
PermissionSysconsoleReadUserManagementUsers.Id,
PermissionSysconsoleReadUserManagementGroups.Id,
PermissionSysconsoleReadUserManagementTeams.Id,
PermissionSysconsoleReadUserManagementChannels.Id,
PermissionSysconsoleReadUserManagementPermissions.Id,
PermissionSysconsoleReadEnvironmentWebServer.Id,
PermissionSysconsoleReadEnvironmentDatabase.Id,
PermissionSysconsoleReadEnvironmentElasticsearch.Id,
PermissionSysconsoleReadEnvironmentFileStorage.Id,
PermissionSysconsoleReadEnvironmentImageProxy.Id,
PermissionSysconsoleReadEnvironmentSmtp.Id,
PermissionSysconsoleReadEnvironmentPushNotificationServer.Id,
PermissionSysconsoleReadEnvironmentHighAvailability.Id,
PermissionSysconsoleReadEnvironmentRateLimiting.Id,
PermissionSysconsoleReadEnvironmentLogging.Id,
PermissionSysconsoleReadEnvironmentSessionLengths.Id,
PermissionSysconsoleReadEnvironmentPerformanceMonitoring.Id,
PermissionSysconsoleReadEnvironmentDeveloper.Id,
PermissionSysconsoleReadSiteCustomization.Id,
PermissionSysconsoleReadSiteLocalization.Id,
PermissionSysconsoleReadSiteUsersAndTeams.Id,
PermissionSysconsoleReadSiteNotifications.Id,
PermissionSysconsoleReadSiteAnnouncementBanner.Id,
PermissionSysconsoleReadSiteEmoji.Id,
PermissionSysconsoleReadSitePosts.Id,
PermissionSysconsoleReadSiteFileSharingAndDownloads.Id,
PermissionSysconsoleReadSitePublicLinks.Id,
PermissionSysconsoleReadSiteNotices.Id,
PermissionSysconsoleReadAuthenticationSignup.Id,
PermissionSysconsoleReadAuthenticationEmail.Id,
PermissionSysconsoleReadAuthenticationPassword.Id,
PermissionSysconsoleReadAuthenticationMfa.Id,
PermissionSysconsoleReadAuthenticationLdap.Id,
PermissionSysconsoleReadAuthenticationSaml.Id,
PermissionSysconsoleReadAuthenticationOpenid.Id,
PermissionSysconsoleReadAuthenticationGuestAccess.Id,
PermissionSysconsoleReadPlugins.Id,
PermissionSysconsoleReadIntegrationsIntegrationManagement.Id,
PermissionSysconsoleReadIntegrationsBotAccounts.Id,
PermissionSysconsoleReadIntegrationsGif.Id,
PermissionSysconsoleReadIntegrationsCors.Id,
PermissionSysconsoleReadComplianceDataRetentionPolicy.Id,
PermissionSysconsoleReadComplianceComplianceExport.Id,
PermissionSysconsoleReadComplianceComplianceMonitoring.Id,
PermissionSysconsoleReadComplianceCustomTermsOfService.Id,
PermissionSysconsoleReadExperimentalFeatures.Id,
PermissionSysconsoleReadExperimentalFeatureFlags.Id,
PermissionSysconsoleReadExperimentalBleve.Id,
}
SystemManagerDefaultPermissions = []string{
PERMISSION_SYSCONSOLE_READ_ABOUT_EDITION_AND_LICENSE.Id,
PERMISSION_SYSCONSOLE_READ_REPORTING_SITE_STATISTICS.Id,
PERMISSION_SYSCONSOLE_READ_REPORTING_TEAM_STATISTICS.Id,
PERMISSION_SYSCONSOLE_READ_REPORTING_SERVER_LOGS.Id,
PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_GROUPS.Id,
PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_TEAMS.Id,
PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_CHANNELS.Id,
PERMISSION_SYSCONSOLE_READ_USERMANAGEMENT_PERMISSIONS.Id,
PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_GROUPS.Id,
PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_TEAMS.Id,
PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_CHANNELS.Id,
PERMISSION_SYSCONSOLE_WRITE_USERMANAGEMENT_PERMISSIONS.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_WEB_SERVER.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_DATABASE.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_ELASTICSEARCH.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_FILE_STORAGE.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_IMAGE_PROXY.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_SMTP.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_PUSH_NOTIFICATION_SERVER.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_HIGH_AVAILABILITY.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_RATE_LIMITING.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_LOGGING.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_SESSION_LENGTHS.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_PERFORMANCE_MONITORING.Id,
PERMISSION_SYSCONSOLE_READ_ENVIRONMENT_DEVELOPER.Id,
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_WEB_SERVER.Id,
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_DATABASE.Id,
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_ELASTICSEARCH.Id,
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_FILE_STORAGE.Id,
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_IMAGE_PROXY.Id,
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_SMTP.Id,
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_PUSH_NOTIFICATION_SERVER.Id,
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_HIGH_AVAILABILITY.Id,
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_RATE_LIMITING.Id,
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_LOGGING.Id,
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_SESSION_LENGTHS.Id,
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_PERFORMANCE_MONITORING.Id,
PERMISSION_SYSCONSOLE_WRITE_ENVIRONMENT_DEVELOPER.Id,
PERMISSION_SYSCONSOLE_READ_SITE_CUSTOMIZATION.Id,
PERMISSION_SYSCONSOLE_WRITE_SITE_CUSTOMIZATION.Id,
PERMISSION_SYSCONSOLE_READ_SITE_LOCALIZATION.Id,
PERMISSION_SYSCONSOLE_WRITE_SITE_LOCALIZATION.Id,
PERMISSION_SYSCONSOLE_READ_SITE_USERS_AND_TEAMS.Id,
PERMISSION_SYSCONSOLE_WRITE_SITE_USERS_AND_TEAMS.Id,
PERMISSION_SYSCONSOLE_READ_SITE_NOTIFICATIONS.Id,
PERMISSION_SYSCONSOLE_WRITE_SITE_NOTIFICATIONS.Id,
PERMISSION_SYSCONSOLE_READ_SITE_ANNOUNCEMENT_BANNER.Id,
PERMISSION_SYSCONSOLE_WRITE_SITE_ANNOUNCEMENT_BANNER.Id,
PERMISSION_SYSCONSOLE_READ_SITE_EMOJI.Id,
PERMISSION_SYSCONSOLE_WRITE_SITE_EMOJI.Id,
PERMISSION_SYSCONSOLE_READ_SITE_POSTS.Id,
PERMISSION_SYSCONSOLE_WRITE_SITE_POSTS.Id,
PERMISSION_SYSCONSOLE_READ_SITE_FILE_SHARING_AND_DOWNLOADS.Id,
PERMISSION_SYSCONSOLE_WRITE_SITE_FILE_SHARING_AND_DOWNLOADS.Id,
PERMISSION_SYSCONSOLE_READ_SITE_PUBLIC_LINKS.Id,
PERMISSION_SYSCONSOLE_WRITE_SITE_PUBLIC_LINKS.Id,
PERMISSION_SYSCONSOLE_READ_SITE_NOTICES.Id,
PERMISSION_SYSCONSOLE_WRITE_SITE_NOTICES.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_SIGNUP.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_EMAIL.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_PASSWORD.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_MFA.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_LDAP.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_SAML.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_OPENID.Id,
PERMISSION_SYSCONSOLE_READ_AUTHENTICATION_GUEST_ACCESS.Id,
PERMISSION_SYSCONSOLE_READ_PLUGINS.Id,
PERMISSION_SYSCONSOLE_READ_INTEGRATIONS_INTEGRATION_MANAGEMENT.Id,
PERMISSION_SYSCONSOLE_READ_INTEGRATIONS_BOT_ACCOUNTS.Id,
PERMISSION_SYSCONSOLE_READ_INTEGRATIONS_GIF.Id,
PERMISSION_SYSCONSOLE_READ_INTEGRATIONS_CORS.Id,
PERMISSION_SYSCONSOLE_WRITE_INTEGRATIONS_INTEGRATION_MANAGEMENT.Id,
PERMISSION_SYSCONSOLE_WRITE_INTEGRATIONS_BOT_ACCOUNTS.Id,
PERMISSION_SYSCONSOLE_WRITE_INTEGRATIONS_GIF.Id,
PERMISSION_SYSCONSOLE_WRITE_INTEGRATIONS_CORS.Id,
PermissionSysconsoleReadAboutEditionAndLicense.Id,
PermissionSysconsoleReadReportingSiteStatistics.Id,
PermissionSysconsoleReadReportingTeamStatistics.Id,
PermissionSysconsoleReadReportingServerLogs.Id,
PermissionSysconsoleReadUserManagementGroups.Id,
PermissionSysconsoleReadUserManagementTeams.Id,
PermissionSysconsoleReadUserManagementChannels.Id,
PermissionSysconsoleReadUserManagementPermissions.Id,
PermissionSysconsoleWriteUserManagementGroups.Id,
PermissionSysconsoleWriteUserManagementTeams.Id,
PermissionSysconsoleWriteUserManagementChannels.Id,
PermissionSysconsoleWriteUserManagementPermissions.Id,
PermissionSysconsoleReadEnvironmentWebServer.Id,
PermissionSysconsoleReadEnvironmentDatabase.Id,
PermissionSysconsoleReadEnvironmentElasticsearch.Id,
PermissionSysconsoleReadEnvironmentFileStorage.Id,
PermissionSysconsoleReadEnvironmentImageProxy.Id,
PermissionSysconsoleReadEnvironmentSmtp.Id,
PermissionSysconsoleReadEnvironmentPushNotificationServer.Id,
PermissionSysconsoleReadEnvironmentHighAvailability.Id,
PermissionSysconsoleReadEnvironmentRateLimiting.Id,
PermissionSysconsoleReadEnvironmentLogging.Id,
PermissionSysconsoleReadEnvironmentSessionLengths.Id,
PermissionSysconsoleReadEnvironmentPerformanceMonitoring.Id,
PermissionSysconsoleReadEnvironmentDeveloper.Id,
PermissionSysconsoleWriteEnvironmentWebServer.Id,
PermissionSysconsoleWriteEnvironmentDatabase.Id,
PermissionSysconsoleWriteEnvironmentElasticsearch.Id,
PermissionSysconsoleWriteEnvironmentFileStorage.Id,
PermissionSysconsoleWriteEnvironmentImageProxy.Id,
PermissionSysconsoleWriteEnvironmentSmtp.Id,
PermissionSysconsoleWriteEnvironmentPushNotificationServer.Id,
PermissionSysconsoleWriteEnvironmentHighAvailability.Id,
PermissionSysconsoleWriteEnvironmentRateLimiting.Id,
PermissionSysconsoleWriteEnvironmentLogging.Id,
PermissionSysconsoleWriteEnvironmentSessionLengths.Id,
PermissionSysconsoleWriteEnvironmentPerformanceMonitoring.Id,
PermissionSysconsoleWriteEnvironmentDeveloper.Id,
PermissionSysconsoleReadSiteCustomization.Id,
PermissionSysconsoleWriteSiteCustomization.Id,
PermissionSysconsoleReadSiteLocalization.Id,
PermissionSysconsoleWriteSiteLocalization.Id,
PermissionSysconsoleReadSiteUsersAndTeams.Id,
PermissionSysconsoleWriteSiteUsersAndTeams.Id,
PermissionSysconsoleReadSiteNotifications.Id,
PermissionSysconsoleWriteSiteNotifications.Id,
PermissionSysconsoleReadSiteAnnouncementBanner.Id,
PermissionSysconsoleWriteSiteAnnouncementBanner.Id,
PermissionSysconsoleReadSiteEmoji.Id,
PermissionSysconsoleWriteSiteEmoji.Id,
PermissionSysconsoleReadSitePosts.Id,
PermissionSysconsoleWriteSitePosts.Id,
PermissionSysconsoleReadSiteFileSharingAndDownloads.Id,
PermissionSysconsoleWriteSiteFileSharingAndDownloads.Id,
PermissionSysconsoleReadSitePublicLinks.Id,
PermissionSysconsoleWriteSitePublicLinks.Id,
PermissionSysconsoleReadSiteNotices.Id,
PermissionSysconsoleWriteSiteNotices.Id,
PermissionSysconsoleReadAuthenticationSignup.Id,
PermissionSysconsoleReadAuthenticationEmail.Id,
PermissionSysconsoleReadAuthenticationPassword.Id,
PermissionSysconsoleReadAuthenticationMfa.Id,
PermissionSysconsoleReadAuthenticationLdap.Id,
PermissionSysconsoleReadAuthenticationSaml.Id,
PermissionSysconsoleReadAuthenticationOpenid.Id,
PermissionSysconsoleReadAuthenticationGuestAccess.Id,
PermissionSysconsoleReadPlugins.Id,
PermissionSysconsoleReadIntegrationsIntegrationManagement.Id,
PermissionSysconsoleReadIntegrationsBotAccounts.Id,
PermissionSysconsoleReadIntegrationsGif.Id,
PermissionSysconsoleReadIntegrationsCors.Id,
PermissionSysconsoleWriteIntegrationsIntegrationManagement.Id,
PermissionSysconsoleWriteIntegrationsBotAccounts.Id,
PermissionSysconsoleWriteIntegrationsGif.Id,
PermissionSysconsoleWriteIntegrationsCors.Id,
}
// Add the ancillary permissions to each system role
@@ -344,29 +344,29 @@ type RoleType string
type RoleScope string
const (
SYSTEM_GUEST_ROLE_ID = "system_guest"
SYSTEM_USER_ROLE_ID = "system_user"
SYSTEM_ADMIN_ROLE_ID = "system_admin"
SYSTEM_POST_ALL_ROLE_ID = "system_post_all"
SYSTEM_POST_ALL_PUBLIC_ROLE_ID = "system_post_all_public"
SYSTEM_USER_ACCESS_TOKEN_ROLE_ID = "system_user_access_token"
SYSTEM_USER_MANAGER_ROLE_ID = "system_user_manager"
SYSTEM_READ_ONLY_ADMIN_ROLE_ID = "system_read_only_admin"
SYSTEM_MANAGER_ROLE_ID = "system_manager"
SystemGuestRoleId = "system_guest"
SystemUserRoleId = "system_user"
SystemAdminRoleId = "system_admin"
SystemPostAllRoleId = "system_post_all"
SystemPostAllPublicRoleId = "system_post_all_public"
SystemUserAccessTokenRoleId = "system_user_access_token"
SystemUserManagerRoleId = "system_user_manager"
SystemReadOnlyAdminRoleId = "system_read_only_admin"
SystemManagerRoleId = "system_manager"
TEAM_GUEST_ROLE_ID = "team_guest"
TEAM_USER_ROLE_ID = "team_user"
TEAM_ADMIN_ROLE_ID = "team_admin"
TEAM_POST_ALL_ROLE_ID = "team_post_all"
TEAM_POST_ALL_PUBLIC_ROLE_ID = "team_post_all_public"
TeamGuestRoleId = "team_guest"
TeamUserRoleId = "team_user"
TeamAdminRoleId = "team_admin"
TeamPostAllRoleId = "team_post_all"
TeamPostAllPublicRoleId = "team_post_all_public"
CHANNEL_GUEST_ROLE_ID = "channel_guest"
CHANNEL_USER_ROLE_ID = "channel_user"
CHANNEL_ADMIN_ROLE_ID = "channel_admin"
ChannelGuestRoleId = "channel_guest"
ChannelUserRoleId = "channel_user"
ChannelAdminRoleId = "channel_admin"
ROLE_NAME_MAX_LENGTH = 64
ROLE_DISPLAY_NAME_MAX_LENGTH = 128
ROLE_DESCRIPTION_MAX_LENGTH = 1024
RoleNameMaxLength = 64
RoleDisplayNameMaxLength = 128
RoleDescriptionMaxLength = 1024
RoleScopeSystem RoleScope = "System"
RoleScopeTeam RoleScope = "Team"
@@ -456,7 +456,7 @@ func (r *Role) MergeChannelHigherScopedPermissions(higherScopedPermissions *Role
// For the channel admin role always look to the higher scope to determine if the role has their permission.
// The channel admin is a special case because they're not part of the UI to be "channel moderated", only
// channel members and channel guests are.
if higherScopedPermissions.RoleID == CHANNEL_ADMIN_ROLE_ID && presentOnHigherScope {
if higherScopedPermissions.RoleID == ChannelAdminRoleId && presentOnHigherScope {
mergedPermissions = append(mergedPermissions, cp.Id)
continue
}
@@ -569,9 +569,9 @@ func (r *Role) GetChannelModeratedPermissions(channelType string) map[string]boo
if moderated == permission {
// Special case where the channel moderated permission for `manage_members` is different depending on whether the channel is private or public
if moderated == PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id || moderated == PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS.Id {
canManagePublic := channelType == CHANNEL_OPEN && moderated == PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id
canManagePrivate := channelType == CHANNEL_PRIVATE && moderated == PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS.Id
if moderated == PermissionManagePublicChannelMembers.Id || moderated == PermissionManagePrivateChannelMembers.Id {
canManagePublic := channelType == ChannelTypeOpen && moderated == PermissionManagePublicChannelMembers.Id
canManagePrivate := channelType == ChannelTypePrivate && moderated == PermissionManagePrivateChannelMembers.Id
moderatedPermissions[moderatedPermissionValue] = canManagePublic || canManagePrivate
} else {
moderatedPermissions[moderatedPermissionValue] = true
@@ -650,11 +650,11 @@ func (r *Role) IsValidWithoutId() bool {
return false
}
if r.DisplayName == "" || len(r.DisplayName) > ROLE_DISPLAY_NAME_MAX_LENGTH {
if r.DisplayName == "" || len(r.DisplayName) > RoleDisplayNameMaxLength {
return false
}
if len(r.Description) > ROLE_DESCRIPTION_MAX_LENGTH {
if len(r.Description) > RoleDescriptionMaxLength {
return false
}
@@ -694,7 +694,7 @@ func CleanRoleNames(roleNames []string) ([]string, bool) {
}
func IsValidRoleName(roleName string) bool {
if roleName == "" || len(roleName) > ROLE_NAME_MAX_LENGTH {
if roleName == "" || len(roleName) > RoleNameMaxLength {
return false
}
@@ -708,192 +708,192 @@ func IsValidRoleName(roleName string) bool {
func MakeDefaultRoles() map[string]*Role {
roles := make(map[string]*Role)
roles[CHANNEL_GUEST_ROLE_ID] = &Role{
roles[ChannelGuestRoleId] = &Role{
Name: "channel_guest",
DisplayName: "authentication.roles.channel_guest.name",
Description: "authentication.roles.channel_guest.description",
Permissions: []string{
PERMISSION_READ_CHANNEL.Id,
PERMISSION_ADD_REACTION.Id,
PERMISSION_REMOVE_REACTION.Id,
PERMISSION_UPLOAD_FILE.Id,
PERMISSION_EDIT_POST.Id,
PERMISSION_CREATE_POST.Id,
PERMISSION_USE_CHANNEL_MENTIONS.Id,
PERMISSION_USE_SLASH_COMMANDS.Id,
PermissionReadChannel.Id,
PermissionAddReaction.Id,
PermissionRemoveReaction.Id,
PermissionUploadFile.Id,
PermissionEditPost.Id,
PermissionCreatePost.Id,
PermissionUseChannelMentions.Id,
PermissionUseSlashCommands.Id,
},
SchemeManaged: true,
BuiltIn: true,
}
roles[CHANNEL_USER_ROLE_ID] = &Role{
roles[ChannelUserRoleId] = &Role{
Name: "channel_user",
DisplayName: "authentication.roles.channel_user.name",
Description: "authentication.roles.channel_user.description",
Permissions: []string{
PERMISSION_READ_CHANNEL.Id,
PERMISSION_ADD_REACTION.Id,
PERMISSION_REMOVE_REACTION.Id,
PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id,
PERMISSION_UPLOAD_FILE.Id,
PERMISSION_GET_PUBLIC_LINK.Id,
PERMISSION_CREATE_POST.Id,
PERMISSION_USE_CHANNEL_MENTIONS.Id,
PERMISSION_USE_SLASH_COMMANDS.Id,
PermissionReadChannel.Id,
PermissionAddReaction.Id,
PermissionRemoveReaction.Id,
PermissionManagePublicChannelMembers.Id,
PermissionUploadFile.Id,
PermissionGetPublicLink.Id,
PermissionCreatePost.Id,
PermissionUseChannelMentions.Id,
PermissionUseSlashCommands.Id,
},
SchemeManaged: true,
BuiltIn: true,
}
roles[CHANNEL_ADMIN_ROLE_ID] = &Role{
roles[ChannelAdminRoleId] = &Role{
Name: "channel_admin",
DisplayName: "authentication.roles.channel_admin.name",
Description: "authentication.roles.channel_admin.description",
Permissions: []string{
PERMISSION_MANAGE_CHANNEL_ROLES.Id,
PERMISSION_USE_GROUP_MENTIONS.Id,
PermissionManageChannelRoles.Id,
PermissionUseGroupMentions.Id,
},
SchemeManaged: true,
BuiltIn: true,
}
roles[TEAM_GUEST_ROLE_ID] = &Role{
roles[TeamGuestRoleId] = &Role{
Name: "team_guest",
DisplayName: "authentication.roles.team_guest.name",
Description: "authentication.roles.team_guest.description",
Permissions: []string{
PERMISSION_VIEW_TEAM.Id,
PermissionViewTeam.Id,
},
SchemeManaged: true,
BuiltIn: true,
}
roles[TEAM_USER_ROLE_ID] = &Role{
roles[TeamUserRoleId] = &Role{
Name: "team_user",
DisplayName: "authentication.roles.team_user.name",
Description: "authentication.roles.team_user.description",
Permissions: []string{
PERMISSION_LIST_TEAM_CHANNELS.Id,
PERMISSION_JOIN_PUBLIC_CHANNELS.Id,
PERMISSION_READ_PUBLIC_CHANNEL.Id,
PERMISSION_VIEW_TEAM.Id,
PermissionListTeamChannels.Id,
PermissionJoinPublicChannels.Id,
PermissionReadPublicChannel.Id,
PermissionViewTeam.Id,
},
SchemeManaged: true,
BuiltIn: true,
}
roles[TEAM_POST_ALL_ROLE_ID] = &Role{
roles[TeamPostAllRoleId] = &Role{
Name: "team_post_all",
DisplayName: "authentication.roles.team_post_all.name",
Description: "authentication.roles.team_post_all.description",
Permissions: []string{
PERMISSION_CREATE_POST.Id,
PERMISSION_USE_CHANNEL_MENTIONS.Id,
PermissionCreatePost.Id,
PermissionUseChannelMentions.Id,
},
SchemeManaged: false,
BuiltIn: true,
}
roles[TEAM_POST_ALL_PUBLIC_ROLE_ID] = &Role{
roles[TeamPostAllPublicRoleId] = &Role{
Name: "team_post_all_public",
DisplayName: "authentication.roles.team_post_all_public.name",
Description: "authentication.roles.team_post_all_public.description",
Permissions: []string{
PERMISSION_CREATE_POST_PUBLIC.Id,
PERMISSION_USE_CHANNEL_MENTIONS.Id,
PermissionCreatePostPublic.Id,
PermissionUseChannelMentions.Id,
},
SchemeManaged: false,
BuiltIn: true,
}
roles[TEAM_ADMIN_ROLE_ID] = &Role{
roles[TeamAdminRoleId] = &Role{
Name: "team_admin",
DisplayName: "authentication.roles.team_admin.name",
Description: "authentication.roles.team_admin.description",
Permissions: []string{
PERMISSION_REMOVE_USER_FROM_TEAM.Id,
PERMISSION_MANAGE_TEAM.Id,
PERMISSION_IMPORT_TEAM.Id,
PERMISSION_MANAGE_TEAM_ROLES.Id,
PERMISSION_MANAGE_CHANNEL_ROLES.Id,
PERMISSION_MANAGE_OTHERS_INCOMING_WEBHOOKS.Id,
PERMISSION_MANAGE_OTHERS_OUTGOING_WEBHOOKS.Id,
PERMISSION_MANAGE_SLASH_COMMANDS.Id,
PERMISSION_MANAGE_OTHERS_SLASH_COMMANDS.Id,
PERMISSION_MANAGE_INCOMING_WEBHOOKS.Id,
PERMISSION_MANAGE_OUTGOING_WEBHOOKS.Id,
PERMISSION_CONVERT_PUBLIC_CHANNEL_TO_PRIVATE.Id,
PERMISSION_CONVERT_PRIVATE_CHANNEL_TO_PUBLIC.Id,
PermissionRemoveUserFromTeam.Id,
PermissionManageTeam.Id,
PermissionImportTeam.Id,
PermissionManageTeamRoles.Id,
PermissionManageChannelRoles.Id,
PermissionManageOthersIncomingWebhooks.Id,
PermissionManageOthersOutgoingWebhooks.Id,
PermissionManageSlashCommands.Id,
PermissionManageOthersSlashCommands.Id,
PermissionManageIncomingWebhooks.Id,
PermissionManageOutgoingWebhooks.Id,
PermissionConvertPublicChannelToPrivate.Id,
PermissionConvertPrivateChannelToPublic.Id,
},
SchemeManaged: true,
BuiltIn: true,
}
roles[SYSTEM_GUEST_ROLE_ID] = &Role{
roles[SystemGuestRoleId] = &Role{
Name: "system_guest",
DisplayName: "authentication.roles.global_guest.name",
Description: "authentication.roles.global_guest.description",
Permissions: []string{
PERMISSION_CREATE_DIRECT_CHANNEL.Id,
PERMISSION_CREATE_GROUP_CHANNEL.Id,
PermissionCreateDirectChannel.Id,
PermissionCreateGroupChannel.Id,
},
SchemeManaged: true,
BuiltIn: true,
}
roles[SYSTEM_USER_ROLE_ID] = &Role{
roles[SystemUserRoleId] = &Role{
Name: "system_user",
DisplayName: "authentication.roles.global_user.name",
Description: "authentication.roles.global_user.description",
Permissions: []string{
PERMISSION_LIST_PUBLIC_TEAMS.Id,
PERMISSION_JOIN_PUBLIC_TEAMS.Id,
PERMISSION_CREATE_DIRECT_CHANNEL.Id,
PERMISSION_CREATE_GROUP_CHANNEL.Id,
PERMISSION_VIEW_MEMBERS.Id,
PermissionListPublicTeams.Id,
PermissionJoinPublicTeams.Id,
PermissionCreateDirectChannel.Id,
PermissionCreateGroupChannel.Id,
PermissionViewMembers.Id,
},
SchemeManaged: true,
BuiltIn: true,
}
roles[SYSTEM_POST_ALL_ROLE_ID] = &Role{
roles[SystemPostAllRoleId] = &Role{
Name: "system_post_all",
DisplayName: "authentication.roles.system_post_all.name",
Description: "authentication.roles.system_post_all.description",
Permissions: []string{
PERMISSION_CREATE_POST.Id,
PERMISSION_USE_CHANNEL_MENTIONS.Id,
PermissionCreatePost.Id,
PermissionUseChannelMentions.Id,
},
SchemeManaged: false,
BuiltIn: true,
}
roles[SYSTEM_POST_ALL_PUBLIC_ROLE_ID] = &Role{
roles[SystemPostAllPublicRoleId] = &Role{
Name: "system_post_all_public",
DisplayName: "authentication.roles.system_post_all_public.name",
Description: "authentication.roles.system_post_all_public.description",
Permissions: []string{
PERMISSION_CREATE_POST_PUBLIC.Id,
PERMISSION_USE_CHANNEL_MENTIONS.Id,
PermissionCreatePostPublic.Id,
PermissionUseChannelMentions.Id,
},
SchemeManaged: false,
BuiltIn: true,
}
roles[SYSTEM_USER_ACCESS_TOKEN_ROLE_ID] = &Role{
roles[SystemUserAccessTokenRoleId] = &Role{
Name: "system_user_access_token",
DisplayName: "authentication.roles.system_user_access_token.name",
Description: "authentication.roles.system_user_access_token.description",
Permissions: []string{
PERMISSION_CREATE_USER_ACCESS_TOKEN.Id,
PERMISSION_READ_USER_ACCESS_TOKEN.Id,
PERMISSION_REVOKE_USER_ACCESS_TOKEN.Id,
PermissionCreateUserAccessToken.Id,
PermissionReadUserAccessToken.Id,
PermissionRevokeUserAccessToken.Id,
},
SchemeManaged: false,
BuiltIn: true,
}
roles[SYSTEM_USER_MANAGER_ROLE_ID] = &Role{
roles[SystemUserManagerRoleId] = &Role{
Name: "system_user_manager",
DisplayName: "authentication.roles.system_user_manager.name",
Description: "authentication.roles.system_user_manager.description",
@@ -902,7 +902,7 @@ func MakeDefaultRoles() map[string]*Role {
BuiltIn: true,
}
roles[SYSTEM_READ_ONLY_ADMIN_ROLE_ID] = &Role{
roles[SystemReadOnlyAdminRoleId] = &Role{
Name: "system_read_only_admin",
DisplayName: "authentication.roles.system_read_only_admin.name",
Description: "authentication.roles.system_read_only_admin.description",
@@ -911,7 +911,7 @@ func MakeDefaultRoles() map[string]*Role {
BuiltIn: true,
}
roles[SYSTEM_MANAGER_ROLE_ID] = &Role{
roles[SystemManagerRoleId] = &Role{
Name: "system_manager",
DisplayName: "authentication.roles.system_manager.name",
Description: "authentication.roles.system_manager.description",
@@ -925,7 +925,7 @@ func MakeDefaultRoles() map[string]*Role {
allPermissionIDs = append(allPermissionIDs, permission.Id)
}
roles[SYSTEM_ADMIN_ROLE_ID] = &Role{
roles[SystemAdminRoleId] = &Role{
Name: "system_admin",
DisplayName: "authentication.roles.global_admin.name",
Description: "authentication.roles.global_admin.description",

Просмотреть файл

@@ -25,25 +25,25 @@ func TestChannelModeratedPermissionsChangedByPatch(t *testing.T) {
{
"Adds permissions to empty initial permissions list",
[]string{},
[]string{PERMISSION_CREATE_POST.Id, PERMISSION_ADD_REACTION.Id},
[]string{PermissionCreatePost.Id, PermissionAddReaction.Id},
[]string{ChannelModeratedPermissions[0], ChannelModeratedPermissions[1]},
},
{
"Ignores non moderated permissions in initial permissions list",
[]string{PERMISSION_ASSIGN_BOT.Id},
[]string{PERMISSION_CREATE_POST.Id, PERMISSION_REMOVE_REACTION.Id},
[]string{PermissionAssignBot.Id},
[]string{PermissionCreatePost.Id, PermissionRemoveReaction.Id},
[]string{ChannelModeratedPermissions[0], ChannelModeratedPermissions[1]},
},
{
"Adds removed moderated permissions from initial permissions list",
[]string{PERMISSION_CREATE_POST.Id},
[]string{PermissionCreatePost.Id},
[]string{},
[]string{PERMISSION_CREATE_POST.Id},
[]string{PermissionCreatePost.Id},
},
{
"No changes returns empty slice",
[]string{PERMISSION_CREATE_POST.Id, PERMISSION_ASSIGN_BOT.Id},
[]string{PERMISSION_CREATE_POST.Id},
[]string{PermissionCreatePost.Id, PermissionAssignBot.Id},
[]string{PermissionCreatePost.Id},
[]string{},
},
}
@@ -64,22 +64,22 @@ func TestRolePatchFromChannelModerationsPatch(t *testing.T) {
channelMentions := ChannelModeratedPermissions[3]
basePermissions := []string{
PERMISSION_ADD_REACTION.Id,
PERMISSION_REMOVE_REACTION.Id,
PERMISSION_CREATE_POST.Id,
PERMISSION_USE_CHANNEL_MENTIONS.Id,
PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id,
PERMISSION_UPLOAD_FILE.Id,
PERMISSION_GET_PUBLIC_LINK.Id,
PERMISSION_USE_SLASH_COMMANDS.Id,
PermissionAddReaction.Id,
PermissionRemoveReaction.Id,
PermissionCreatePost.Id,
PermissionUseChannelMentions.Id,
PermissionManagePublicChannelMembers.Id,
PermissionUploadFile.Id,
PermissionGetPublicLink.Id,
PermissionUseSlashCommands.Id,
}
baseModeratedPermissions := []string{
PERMISSION_ADD_REACTION.Id,
PERMISSION_REMOVE_REACTION.Id,
PERMISSION_CREATE_POST.Id,
PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id,
PERMISSION_USE_CHANNEL_MENTIONS.Id,
PermissionAddReaction.Id,
PermissionRemoveReaction.Id,
PermissionCreatePost.Id,
PermissionManagePublicChannelMembers.Id,
PermissionUseChannelMentions.Id,
}
testCases := []struct {
@@ -143,7 +143,7 @@ func TestRolePatchFromChannelModerationsPatch(t *testing.T) {
},
},
"members",
[]string{PERMISSION_CREATE_POST.Id},
[]string{PermissionCreatePost.Id},
},
{
"Patch to guest role removing multiple channel moderated permissions",
@@ -163,11 +163,11 @@ func TestRolePatchFromChannelModerationsPatch(t *testing.T) {
},
},
"guests",
[]string{PERMISSION_CREATE_POST.Id},
[]string{PermissionCreatePost.Id},
},
{
"Patch enabling and removing multiple channel moderated permissions ",
[]string{PERMISSION_ADD_REACTION.Id, PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id},
[]string{PermissionAddReaction.Id, PermissionManagePublicChannelMembers.Id},
[]*ChannelModerationPatch{
{
Name: &createReactions,
@@ -187,11 +187,11 @@ func TestRolePatchFromChannelModerationsPatch(t *testing.T) {
},
},
"members",
[]string{PERMISSION_CREATE_POST.Id, PERMISSION_USE_CHANNEL_MENTIONS.Id},
[]string{PermissionCreatePost.Id, PermissionUseChannelMentions.Id},
},
{
"Patch enabling a partially enabled permission",
[]string{PERMISSION_ADD_REACTION.Id},
[]string{PermissionAddReaction.Id},
[]*ChannelModerationPatch{
{
Name: &createReactions,
@@ -199,11 +199,11 @@ func TestRolePatchFromChannelModerationsPatch(t *testing.T) {
},
},
"members",
[]string{PERMISSION_ADD_REACTION.Id, PERMISSION_REMOVE_REACTION.Id},
[]string{PermissionAddReaction.Id, PermissionRemoveReaction.Id},
},
{
"Patch disabling a partially disabled permission",
[]string{PERMISSION_ADD_REACTION.Id},
[]string{PermissionAddReaction.Id},
[]*ChannelModerationPatch{
{
Name: &createReactions,
@@ -215,7 +215,7 @@ func TestRolePatchFromChannelModerationsPatch(t *testing.T) {
},
},
"members",
[]string{PERMISSION_CREATE_POST.Id},
[]string{PermissionCreatePost.Id},
},
}
for _, tc := range testCases {
@@ -236,14 +236,14 @@ func TestGetChannelModeratedPermissions(t *testing.T) {
}{
{
"Filters non moderated permissions",
[]string{PERMISSION_CREATE_BOT.Id},
CHANNEL_OPEN,
[]string{PermissionCreateBot.Id},
ChannelTypeOpen,
map[string]bool{},
},
{
"Returns a map of moderated permissions",
[]string{PERMISSION_CREATE_POST.Id, PERMISSION_ADD_REACTION.Id, PERMISSION_REMOVE_REACTION.Id, PERMISSION_MANAGE_PUBLIC_CHANNEL_MEMBERS.Id, PERMISSION_MANAGE_PRIVATE_CHANNEL_MEMBERS.Id, PERMISSION_USE_CHANNEL_MENTIONS.Id},
CHANNEL_OPEN,
[]string{PermissionCreatePost.Id, PermissionAddReaction.Id, PermissionRemoveReaction.Id, PermissionManagePublicChannelMembers.Id, PermissionManagePrivateChannelMembers.Id, PermissionUseChannelMentions.Id},
ChannelTypeOpen,
map[string]bool{
ChannelModeratedPermissions[0]: true,
ChannelModeratedPermissions[1]: true,
@@ -253,8 +253,8 @@ func TestGetChannelModeratedPermissions(t *testing.T) {
},
{
"Returns a map of moderated permissions when non moderated present",
[]string{PERMISSION_CREATE_POST.Id, PERMISSION_CREATE_DIRECT_CHANNEL.Id},
CHANNEL_OPEN,
[]string{PermissionCreatePost.Id, PermissionCreateDirectChannel.Id},
ChannelTypeOpen,
map[string]bool{
ChannelModeratedPermissions[0]: true,
},
@@ -262,7 +262,7 @@ func TestGetChannelModeratedPermissions(t *testing.T) {
{
"Returns a nothing when no permissions present",
[]string{},
CHANNEL_OPEN,
ChannelTypeOpen,
map[string]bool{},
},
}

Просмотреть файл

@@ -11,11 +11,11 @@ import (
)
const (
USER_AUTH_SERVICE_SAML = "saml"
USER_AUTH_SERVICE_SAML_TEXT = "SAML"
USER_AUTH_SERVICE_IS_SAML = "isSaml"
USER_AUTH_SERVICE_IS_MOBILE = "isMobile"
USER_AUTH_SERVICE_IS_OAUTH = "isOAuthUser"
UserAuthServiceSaml = "saml"
UserAuthServiceSamlText = "SAML"
UserAuthServiceIsSaml = "isSaml"
UserAuthServiceIsMobile = "isMobile"
UserAuthServiceIsOAuth = "isOAuthUser"
)
type SamlAuthRequest struct {

Просмотреть файл

@@ -13,71 +13,71 @@ import (
)
func TestCreateTask(t *testing.T) {
TASK_NAME := "Test Task"
TASK_TIME := time.Second * 2
TaskName := "Test Task"
TaskTime := time.Second * 2
executionCount := new(int32)
testFunc := func() {
atomic.AddInt32(executionCount, 1)
}
task := CreateTask(TASK_NAME, testFunc, TASK_TIME)
task := CreateTask(TaskName, testFunc, TaskTime)
assert.EqualValues(t, 0, atomic.LoadInt32(executionCount))
time.Sleep(TASK_TIME + time.Second)
time.Sleep(TaskTime + time.Second)
assert.EqualValues(t, 1, atomic.LoadInt32(executionCount))
assert.Equal(t, TASK_NAME, task.Name)
assert.Equal(t, TASK_TIME, task.Interval)
assert.Equal(t, TaskName, task.Name)
assert.Equal(t, TaskTime, task.Interval)
assert.False(t, task.Recurring)
}
func TestCreateRecurringTask(t *testing.T) {
TASK_NAME := "Test Recurring Task"
TASK_TIME := time.Second * 2
TaskName := "Test Recurring Task"
TaskTime := time.Second * 2
executionCount := new(int32)
testFunc := func() {
atomic.AddInt32(executionCount, 1)
}
task := CreateRecurringTask(TASK_NAME, testFunc, TASK_TIME)
task := CreateRecurringTask(TaskName, testFunc, TaskTime)
assert.EqualValues(t, 0, atomic.LoadInt32(executionCount))
time.Sleep(TASK_TIME + time.Second)
time.Sleep(TaskTime + time.Second)
assert.EqualValues(t, 1, atomic.LoadInt32(executionCount))
time.Sleep(TASK_TIME)
time.Sleep(TaskTime)
assert.EqualValues(t, 2, atomic.LoadInt32(executionCount))
assert.Equal(t, TASK_NAME, task.Name)
assert.Equal(t, TASK_TIME, task.Interval)
assert.Equal(t, TaskName, task.Name)
assert.Equal(t, TaskTime, task.Interval)
assert.True(t, task.Recurring)
task.Cancel()
}
func TestCancelTask(t *testing.T) {
TASK_NAME := "Test Task"
TASK_TIME := time.Second
TaskName := "Test Task"
TaskTime := time.Second
executionCount := new(int32)
testFunc := func() {
atomic.AddInt32(executionCount, 1)
}
task := CreateTask(TASK_NAME, testFunc, TASK_TIME)
task := CreateTask(TaskName, testFunc, TaskTime)
assert.EqualValues(t, 0, atomic.LoadInt32(executionCount))
task.Cancel()
time.Sleep(TASK_TIME + time.Second)
time.Sleep(TaskTime + time.Second)
assert.EqualValues(t, 0, atomic.LoadInt32(executionCount))
}
func TestCreateRecurringTaskFromNextIntervalTime(t *testing.T) {
TASK_NAME := "Test Recurring Task starting from next interval time"
TASK_TIME := time.Second * 2
TaskName := "Test Recurring Task starting from next interval time"
TaskTime := time.Second * 2
var executionTime time.Time
var mu sync.Mutex
@@ -87,22 +87,22 @@ func TestCreateRecurringTaskFromNextIntervalTime(t *testing.T) {
mu.Unlock()
}
task := CreateRecurringTaskFromNextIntervalTime(TASK_NAME, testFunc, TASK_TIME)
task := CreateRecurringTaskFromNextIntervalTime(TaskName, testFunc, TaskTime)
defer task.Cancel()
time.Sleep(TASK_TIME)
time.Sleep(TaskTime)
mu.Lock()
expectedSeconds := executionTime.Second()
mu.Unlock()
assert.EqualValues(t, 0, expectedSeconds%2)
time.Sleep(TASK_TIME)
time.Sleep(TaskTime)
mu.Lock()
expectedSeconds = executionTime.Second()
mu.Unlock()
assert.EqualValues(t, 0, expectedSeconds%2)
assert.Equal(t, TASK_NAME, task.Name)
assert.Equal(t, TASK_TIME, task.Interval)
assert.Equal(t, TaskName, task.Name)
assert.Equal(t, TaskTime, task.Interval)
assert.True(t, task.Recurring)
}

Просмотреть файл

@@ -11,11 +11,11 @@ import (
)
const (
SCHEME_DISPLAY_NAME_MAX_LENGTH = 128
SCHEME_NAME_MAX_LENGTH = 64
SCHEME_DESCRIPTION_MAX_LENGTH = 1024
SCHEME_SCOPE_TEAM = "team"
SCHEME_SCOPE_CHANNEL = "channel"
SchemeDisplayNameMaxLength = 128
SchemeNameMaxLength = 64
SchemeDescriptionMaxLength = 1024
SchemeScopeTeam = "team"
SchemeScopeChannel = "channel"
)
type Scheme struct {
@@ -114,7 +114,7 @@ func (scheme *Scheme) IsValid() bool {
}
func (scheme *Scheme) IsValidForCreate() bool {
if scheme.DisplayName == "" || len(scheme.DisplayName) > SCHEME_DISPLAY_NAME_MAX_LENGTH {
if scheme.DisplayName == "" || len(scheme.DisplayName) > SchemeDisplayNameMaxLength {
return false
}
@@ -122,12 +122,12 @@ func (scheme *Scheme) IsValidForCreate() bool {
return false
}
if len(scheme.Description) > SCHEME_DESCRIPTION_MAX_LENGTH {
if len(scheme.Description) > SchemeDescriptionMaxLength {
return false
}
switch scheme.Scope {
case SCHEME_SCOPE_TEAM, SCHEME_SCOPE_CHANNEL:
case SchemeScopeTeam, SchemeScopeChannel:
default:
return false
}
@@ -144,7 +144,7 @@ func (scheme *Scheme) IsValidForCreate() bool {
return false
}
if scheme.Scope == SCHEME_SCOPE_TEAM {
if scheme.Scope == SchemeScopeTeam {
if !IsValidRoleName(scheme.DefaultTeamAdminRole) {
return false
}
@@ -158,7 +158,7 @@ func (scheme *Scheme) IsValidForCreate() bool {
}
}
if scheme.Scope == SCHEME_SCOPE_CHANNEL {
if scheme.Scope == SchemeScopeChannel {
if scheme.DefaultTeamAdminRole != "" {
return false
}
@@ -210,7 +210,7 @@ func (p *SchemeIDPatch) ToJson() string {
}
func IsValidSchemeName(name string) bool {
re := regexp.MustCompile(fmt.Sprintf("^[a-z0-9_]{2,%d}$", SCHEME_NAME_MAX_LENGTH))
re := regexp.MustCompile(fmt.Sprintf("^[a-z0-9_]{2,%d}$", SchemeNameMaxLength))
return re.MatchString(name)
}

Просмотреть файл

@@ -13,23 +13,23 @@ import (
)
const (
SESSION_COOKIE_TOKEN = "MMAUTHTOKEN"
SESSION_COOKIE_USER = "MMUSERID"
SESSION_COOKIE_CSRF = "MMCSRF"
SESSION_CACHE_SIZE = 35000
SESSION_PROP_PLATFORM = "platform"
SESSION_PROP_OS = "os"
SESSION_PROP_BROWSER = "browser"
SESSION_PROP_TYPE = "type"
SESSION_PROP_USER_ACCESS_TOKEN_ID = "user_access_token_id"
SESSION_PROP_IS_BOT = "is_bot"
SESSION_PROP_IS_BOT_VALUE = "true"
SESSION_TYPE_USER_ACCESS_TOKEN = "UserAccessToken"
SESSION_TYPE_CLOUD_KEY = "CloudKey"
SESSION_TYPE_REMOTECLUSTER_TOKEN = "RemoteClusterToken"
SESSION_PROP_IS_GUEST = "is_guest"
SESSION_ACTIVITY_TIMEOUT = 1000 * 60 * 5 // 5 minutes
SESSION_USER_ACCESS_TOKEN_EXPIRY = 100 * 365 // 100 years
SessionCookieToken = "MMAUTHTOKEN"
SessionCookieUser = "MMUSERID"
SessionCookieCsrf = "MMCSRF"
SessionCacheSize = 35000
SessionPropPlatform = "platform"
SessionPropOs = "os"
SessionPropBrowser = "browser"
SessionPropType = "type"
SessionPropUserAccessTokenId = "user_access_token_id"
SessionPropIsBot = "is_bot"
SessionPropIsBotValue = "true"
SessionTypeUserAccessToken = "UserAccessToken"
SessionTypeCloudKey = "CloudKey"
SessionTypeRemoteclusterToken = "RemoteClusterToken"
SessionPropIsGuest = "is_guest"
SessionActivityTimeout = 1000 * 60 * 5 // 5 minutes
SessionUserAccessTokenExpiry = 100 * 365 // 100 years
)
//msgp StringMap
@@ -160,7 +160,7 @@ func (s *Session) IsMobileApp() bool {
}
func (s *Session) IsMobile() bool {
val, ok := s.Props[USER_AUTH_SERVICE_IS_MOBILE]
val, ok := s.Props[UserAuthServiceIsMobile]
if !ok {
return false
}
@@ -173,7 +173,7 @@ func (s *Session) IsMobile() bool {
}
func (s *Session) IsSaml() bool {
val, ok := s.Props[USER_AUTH_SERVICE_IS_SAML]
val, ok := s.Props[UserAuthServiceIsSaml]
if !ok {
return false
}
@@ -186,7 +186,7 @@ func (s *Session) IsSaml() bool {
}
func (s *Session) IsOAuthUser() bool {
val, ok := s.Props[USER_AUTH_SERVICE_IS_OAUTH]
val, ok := s.Props[UserAuthServiceIsOAuth]
if !ok {
return false
}

Просмотреть файл

@@ -81,10 +81,10 @@ func TestSessionIsOAuthUser(t *testing.T) {
isOAuthUser bool
}{
{"False on empty props", Session{}, false},
{"True when key is set to true", Session{Props: StringMap{USER_AUTH_SERVICE_IS_OAUTH: strconv.FormatBool(true)}}, true},
{"False when key is set to false", Session{Props: StringMap{USER_AUTH_SERVICE_IS_OAUTH: strconv.FormatBool(false)}}, false},
{"Not affected by Session.IsOauth being true", Session{IsOAuth: true}, false},
{"Not affected by Session.IsOauth being false", Session{IsOAuth: false, Props: StringMap{USER_AUTH_SERVICE_IS_OAUTH: strconv.FormatBool(true)}}, true},
{"True when key is set to true", Session{Props: StringMap{UserAuthServiceIsOAuth: strconv.FormatBool(true)}}, true},
{"False when key is set to false", Session{Props: StringMap{UserAuthServiceIsOAuth: strconv.FormatBool(false)}}, false},
{"Not affected by Session.IsOAuth being true", Session{IsOAuth: true}, false},
{"Not affected by Session.IsOAuth being false", Session{IsOAuth: false, Props: StringMap{UserAuthServiceIsOAuth: strconv.FormatBool(true)}}, true},
}
for _, tc := range testCases {

Просмотреть файл

@@ -47,7 +47,7 @@ func (sc *SharedChannel) IsValid() *AppError {
return NewAppError("SharedChannel.IsValid", "model.channel.is_valid.id.app_error", nil, "ChannelId="+sc.ChannelId, http.StatusBadRequest)
}
if sc.Type != CHANNEL_DIRECT && !IsValidId(sc.TeamId) {
if sc.Type != ChannelTypeDirect && !IsValidId(sc.TeamId) {
return NewAppError("SharedChannel.IsValid", "model.channel.is_valid.id.app_error", nil, "TeamId="+sc.TeamId, http.StatusBadRequest)
}
@@ -59,7 +59,7 @@ func (sc *SharedChannel) IsValid() *AppError {
return NewAppError("SharedChannel.IsValid", "model.channel.is_valid.update_at.app_error", nil, "id="+sc.ChannelId, http.StatusBadRequest)
}
if utf8.RuneCountInString(sc.ShareDisplayName) > CHANNEL_DISPLAY_NAME_MAX_RUNES {
if utf8.RuneCountInString(sc.ShareDisplayName) > ChannelDisplayNameMaxRunes {
return NewAppError("SharedChannel.IsValid", "model.channel.is_valid.display_name.app_error", nil, "id="+sc.ChannelId, http.StatusBadRequest)
}
@@ -67,11 +67,11 @@ func (sc *SharedChannel) IsValid() *AppError {
return NewAppError("SharedChannel.IsValid", "model.channel.is_valid.2_or_more.app_error", nil, "id="+sc.ChannelId, http.StatusBadRequest)
}
if utf8.RuneCountInString(sc.ShareHeader) > CHANNEL_HEADER_MAX_RUNES {
if utf8.RuneCountInString(sc.ShareHeader) > ChannelHeaderMaxRunes {
return NewAppError("SharedChannel.IsValid", "model.channel.is_valid.header.app_error", nil, "id="+sc.ChannelId, http.StatusBadRequest)
}
if utf8.RuneCountInString(sc.SharePurpose) > CHANNEL_PURPOSE_MAX_RUNES {
if utf8.RuneCountInString(sc.SharePurpose) > ChannelPurposeMaxRunes {
return NewAppError("SharedChannel.IsValid", "model.channel.is_valid.purpose.app_error", nil, "id="+sc.ChannelId, http.StatusBadRequest)
}

Просмотреть файл

@@ -165,7 +165,7 @@ func StringifySlackFieldValue(a []*SlackAttachment) []*SlackAttachment {
// all else should be set in the post which is passed
func ParseSlackAttachment(post *Post, attachments []*SlackAttachment) {
if post.Type == "" {
post.Type = POST_SLACK_ATTACHMENT
post.Type = PostTypeSlackAttachment
}
postAttachments := []*SlackAttachment{}

Просмотреть файл

@@ -17,7 +17,7 @@ func TestParseSlackAttachment(t *testing.T) {
ParseSlackAttachment(post, attachments)
expectedPost := &Post{
Type: POST_SLACK_ATTACHMENT,
Type: PostTypeSlackAttachment,
Props: map[string]interface{}{
"attachments": []*SlackAttachment{},
},
@@ -34,7 +34,7 @@ func TestParseSlackAttachment(t *testing.T) {
ParseSlackAttachment(post, attachments)
expectedPost := &Post{
Type: POST_SLACK_ATTACHMENT,
Type: PostTypeSlackAttachment,
Props: map[string]interface{}{
"attachments": []*SlackAttachment{},
},

Просмотреть файл

@@ -9,14 +9,14 @@ import (
)
const (
STATUS_OUT_OF_OFFICE = "ooo"
STATUS_OFFLINE = "offline"
STATUS_AWAY = "away"
STATUS_DND = "dnd"
STATUS_ONLINE = "online"
STATUS_CACHE_SIZE = SESSION_CACHE_SIZE
STATUS_CHANNEL_TIMEOUT = 20000 // 20 seconds
STATUS_MIN_UPDATE_TIME = 120000 // 2 minutes
StatusOutOfOffice = "ooo"
StatusOffline = "offline"
StatusAway = "away"
StatusDnd = "dnd"
StatusOnline = "online"
StatusCacheSize = SessionCacheSize
StatusChannelTimeout = 20000 // 20 seconds
StatusMinUpdateTime = 120000 // 2 minutes
)
type Status struct {
@@ -70,7 +70,7 @@ func StatusMapToInterfaceMap(statusMap map[string]*Status) map[string]interface{
interfaceMap := map[string]interface{}{}
for _, s := range statusMap {
// Omitted statues mean offline
if s.Status != STATUS_OFFLINE {
if s.Status != StatusOffline {
interfaceMap[s.UserId] = s.Status
}
}

Просмотреть файл

@@ -12,7 +12,7 @@ import (
)
func TestStatus(t *testing.T) {
status := Status{NewId(), STATUS_ONLINE, true, 0, "123", 0, ""}
status := Status{NewId(), StatusOnline, true, 0, "123", 0, ""}
json := status.ToJson()
status2 := StatusFromJson(strings.NewReader(json))
@@ -29,7 +29,7 @@ func TestStatus(t *testing.T) {
}
func TestStatusListToJson(t *testing.T) {
statuses := []*Status{{NewId(), STATUS_ONLINE, true, 0, "123", 0, ""}, {NewId(), STATUS_OFFLINE, true, 0, "", 0, ""}}
statuses := []*Status{{NewId(), StatusOnline, true, 0, "123", 0, ""}, {NewId(), StatusOffline, true, 0, "", 0, ""}}
jsonStatuses := StatusListToJson(statuses)
var dat []map[string]interface{}

Просмотреть файл

@@ -30,26 +30,26 @@ func SwitchRequestFromJson(data io.Reader) *SwitchRequest {
}
func (o *SwitchRequest) EmailToOAuth() bool {
return o.CurrentService == USER_AUTH_SERVICE_EMAIL &&
(o.NewService == USER_AUTH_SERVICE_SAML ||
o.NewService == USER_AUTH_SERVICE_GITLAB ||
o.NewService == SERVICE_GOOGLE ||
o.NewService == SERVICE_OFFICE365 ||
o.NewService == SERVICE_OPENID)
return o.CurrentService == UserAuthServiceEmail &&
(o.NewService == UserAuthServiceSaml ||
o.NewService == UserAuthServiceGitlab ||
o.NewService == ServiceGoogle ||
o.NewService == ServiceOffice365 ||
o.NewService == ServiceOpenid)
}
func (o *SwitchRequest) OAuthToEmail() bool {
return (o.CurrentService == USER_AUTH_SERVICE_SAML ||
o.CurrentService == USER_AUTH_SERVICE_GITLAB ||
o.CurrentService == SERVICE_GOOGLE ||
o.CurrentService == SERVICE_OFFICE365 ||
o.CurrentService == SERVICE_OPENID) && o.NewService == USER_AUTH_SERVICE_EMAIL
return (o.CurrentService == UserAuthServiceSaml ||
o.CurrentService == UserAuthServiceGitlab ||
o.CurrentService == ServiceGoogle ||
o.CurrentService == ServiceOffice365 ||
o.CurrentService == ServiceOpenid) && o.NewService == UserAuthServiceEmail
}
func (o *SwitchRequest) EmailToLdap() bool {
return o.CurrentService == USER_AUTH_SERVICE_EMAIL && o.NewService == USER_AUTH_SERVICE_LDAP
return o.CurrentService == UserAuthServiceEmail && o.NewService == UserAuthServiceLdap
}
func (o *SwitchRequest) LdapToEmail() bool {
return o.CurrentService == USER_AUTH_SERVICE_LDAP && o.NewService == USER_AUTH_SERVICE_EMAIL
return o.CurrentService == UserAuthServiceLdap && o.NewService == UserAuthServiceEmail
}

Просмотреть файл

@@ -10,45 +10,45 @@ import (
)
const (
SYSTEM_TELEMETRY_ID = "DiagnosticId"
SYSTEM_RAN_UNIT_TESTS = "RanUnitTests"
SYSTEM_LAST_SECURITY_TIME = "LastSecurityTime"
SYSTEM_ACTIVE_LICENSE_ID = "ActiveLicenseId"
SYSTEM_LICENSE_RENEWAL_TOKEN = "LicenseRenewalToken"
SYSTEM_LAST_COMPLIANCE_TIME = "LastComplianceTime"
SYSTEM_ASYMMETRIC_SIGNING_KEY = "AsymmetricSigningKey"
SYSTEM_POST_ACTION_COOKIE_SECRET = "PostActionCookieSecret"
SYSTEM_INSTALLATION_DATE_KEY = "InstallationDate"
SYSTEM_FIRST_SERVER_RUN_TIMESTAMP_KEY = "FirstServerRunTimestamp"
SYSTEM_CLUSTER_ENCRYPTION_KEY = "ClusterEncryptionKey"
SYSTEM_UPGRADED_FROM_TE_ID = "UpgradedFromTE"
SYSTEM_WARN_METRIC_NUMBER_OF_TEAMS_5 = "warn_metric_number_of_teams_5"
SYSTEM_WARN_METRIC_NUMBER_OF_CHANNELS_50 = "warn_metric_number_of_channels_50"
SYSTEM_WARN_METRIC_MFA = "warn_metric_mfa"
SYSTEM_WARN_METRIC_EMAIL_DOMAIN = "warn_metric_email_domain"
SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_100 = "warn_metric_number_of_active_users_100"
SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_200 = "warn_metric_number_of_active_users_200"
SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_300 = "warn_metric_number_of_active_users_300"
SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_500 = "warn_metric_number_of_active_users_500"
SYSTEM_WARN_METRIC_NUMBER_OF_POSTS_2M = "warn_metric_number_of_posts_2M"
SYSTEM_WARN_METRIC_LAST_RUN_TIMESTAMP_KEY = "LastWarnMetricRunTimestamp"
SYSTEM_METRIC_SUPPORT_EMAIL_NOT_CONFIGURED = "warn_metric_support_email_not_configured"
SYSTEM_FIRST_ADMIN_VISIT_MARKETPLACE = "FirstAdminVisitMarketplace"
AWS_METERING_REPORT_INTERVAL = 1
AWS_METERING_DIMENSION_USAGE_HRS = "UsageHrs"
USER_LIMIT_OVERAGE_CYCLE_END_DATE = "UserLimitOverageCycleEndDate"
OVER_USER_LIMIT_FORGIVEN_COUNT = "OverUserLimitForgivenCount"
OVER_USER_LIMIT_LAST_EMAIL_SENT = "OverUserLimitLastEmailSent"
SystemTelemetryId = "DiagnosticId"
SystemRanUnitTests = "RanUnitTests"
SystemLastSecurityTime = "LastSecurityTime"
SystemActiveLicenseId = "ActiveLicenseId"
SystemLicenseRenewalToken = "LicenseRenewalToken"
SystemLastComplianceTime = "LastComplianceTime"
SystemAsymmetricSigningKeyKey = "AsymmetricSigningKey"
SystemPostActionCookieSecretKey = "PostActionCookieSecret"
SystemInstallationDateKey = "InstallationDate"
SystemFirstServerRunTimestampKey = "FirstServerRunTimestamp"
SystemClusterEncryptionKey = "ClusterEncryptionKey"
SystemUpgradedFromTeId = "UpgradedFromTE"
SystemWarnMetricNumberOfTeams5 = "warn_metric_number_of_teams_5"
SystemWarnMetricNumberOfChannels50 = "warn_metric_number_of_channels_50"
SystemWarnMetricMfa = "warn_metric_mfa"
SystemWarnMetricEmailDomain = "warn_metric_email_domain"
SystemWarnMetricNumberOfActiveUsers100 = "warn_metric_number_of_active_users_100"
SystemWarnMetricNumberOfActiveUsers200 = "warn_metric_number_of_active_users_200"
SystemWarnMetricNumberOfActiveUsers300 = "warn_metric_number_of_active_users_300"
SystemWarnMetricNumberOfActiveUsers500 = "warn_metric_number_of_active_users_500"
SystemWarnMetricNumberOfPosts2m = "warn_metric_number_of_posts_2M"
SystemWarnMetricLastRunTimestampKey = "LastWarnMetricRunTimestamp"
SystemMetricSupportEmailNotConfigured = "warn_metric_support_email_not_configured"
SystemFirstAdminVisitMarketplace = "FirstAdminVisitMarketplace"
AwsMeteringReportInterval = 1
AwsMeteringDimensionUsageHrs = "UsageHrs"
UserLimitOverageCycleEndDate = "UserLimitOverageCycleEndDate"
OverUserLimitForgivenCount = "OverUserLimitForgivenCount"
OverUserLimitLastEmailSent = "OverUserLimitLastEmailSent"
)
const (
WARN_METRIC_STATUS_LIMIT_REACHED = "true"
WARN_METRIC_STATUS_RUNONCE = "runonce"
WARN_METRIC_STATUS_ACK = "ack"
WARN_METRIC_STATUS_STORE_PREFIX = "warn_metric_"
WARN_METRIC_JOB_INTERVAL = 24 * 7
WARN_METRIC_NUMBER_OF_ACTIVE_USERS_25 = 25
WARN_METRIC_JOB_WAIT_TIME = 1000 * 3600 * 24 * 7 // 7 days
WarnMetricStatusLimitReached = "true"
WarnMetricStatusRunonce = "runonce"
WarnMetricStatusAck = "ack"
WarnMetricStatusStorePrefix = "warn_metric_"
WarnMetricJobInterval = 24 * 7
WarnMetricNumberOfActiveUsers25 = 25
WarnMetricJobWaitTime = 1000 * 3600 * 24 * 7 // 7 days
)
type System struct {
@@ -84,9 +84,9 @@ type SystemECDSAKey struct {
// ServerBusyState provides serialization for app.Busy.
type ServerBusyState struct {
Busy bool `json:"busy"`
Expires int64 `json:"expires"`
Expires_ts string `json:"expires_ts,omitempty"`
Busy bool `json:"busy"`
Expires int64 `json:"expires"`
ExpiresTS string `json:"expires_ts,omitempty"`
}
type SupportPacket struct {
@@ -117,62 +117,62 @@ func ServerBusyStateFromJson(r io.Reader) *ServerBusyState {
}
var WarnMetricsTable = map[string]WarnMetric{
SYSTEM_WARN_METRIC_MFA: {
Id: SYSTEM_WARN_METRIC_MFA,
SystemWarnMetricMfa: {
Id: SystemWarnMetricMfa,
Limit: -1,
IsBotOnly: true,
IsRunOnce: true,
},
SYSTEM_WARN_METRIC_EMAIL_DOMAIN: {
Id: SYSTEM_WARN_METRIC_EMAIL_DOMAIN,
SystemWarnMetricEmailDomain: {
Id: SystemWarnMetricEmailDomain,
Limit: -1,
IsBotOnly: true,
IsRunOnce: true,
},
SYSTEM_WARN_METRIC_NUMBER_OF_TEAMS_5: {
Id: SYSTEM_WARN_METRIC_NUMBER_OF_TEAMS_5,
SystemWarnMetricNumberOfTeams5: {
Id: SystemWarnMetricNumberOfTeams5,
Limit: 5,
IsBotOnly: true,
IsRunOnce: true,
},
SYSTEM_WARN_METRIC_NUMBER_OF_CHANNELS_50: {
Id: SYSTEM_WARN_METRIC_NUMBER_OF_CHANNELS_50,
SystemWarnMetricNumberOfChannels50: {
Id: SystemWarnMetricNumberOfChannels50,
Limit: 50,
IsBotOnly: true,
IsRunOnce: true,
},
SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_100: {
Id: SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_100,
SystemWarnMetricNumberOfActiveUsers100: {
Id: SystemWarnMetricNumberOfActiveUsers100,
Limit: 100,
IsBotOnly: true,
IsRunOnce: true,
},
SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_200: {
Id: SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_200,
SystemWarnMetricNumberOfActiveUsers200: {
Id: SystemWarnMetricNumberOfActiveUsers200,
Limit: 200,
IsBotOnly: true,
IsRunOnce: true,
},
SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_300: {
Id: SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_300,
SystemWarnMetricNumberOfActiveUsers300: {
Id: SystemWarnMetricNumberOfActiveUsers300,
Limit: 300,
IsBotOnly: true,
IsRunOnce: true,
},
SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_500: {
Id: SYSTEM_WARN_METRIC_NUMBER_OF_ACTIVE_USERS_500,
SystemWarnMetricNumberOfActiveUsers500: {
Id: SystemWarnMetricNumberOfActiveUsers500,
Limit: 500,
IsBotOnly: false,
IsRunOnce: true,
},
SYSTEM_WARN_METRIC_NUMBER_OF_POSTS_2M: {
Id: SYSTEM_WARN_METRIC_NUMBER_OF_POSTS_2M,
SystemWarnMetricNumberOfPosts2m: {
Id: SystemWarnMetricNumberOfPosts2m,
Limit: 2000000,
IsBotOnly: false,
IsRunOnce: true,
},
SYSTEM_METRIC_SUPPORT_EMAIL_NOT_CONFIGURED: {
Id: SYSTEM_METRIC_SUPPORT_EMAIL_NOT_CONFIGURED,
SystemMetricSupportEmailNotConfigured: {
Id: SystemMetricSupportEmailNotConfigured,
Limit: -1,
IsBotOnly: true,
IsRunOnce: false,

Просмотреть файл

@@ -14,15 +14,15 @@ import (
)
const (
TEAM_OPEN = "O"
TEAM_INVITE = "I"
TEAM_ALLOWED_DOMAINS_MAX_LENGTH = 500
TEAM_COMPANY_NAME_MAX_LENGTH = 64
TEAM_DESCRIPTION_MAX_LENGTH = 255
TEAM_DISPLAY_NAME_MAX_RUNES = 64
TEAM_EMAIL_MAX_LENGTH = 128
TEAM_NAME_MAX_LENGTH = 64
TEAM_NAME_MIN_LENGTH = 2
TeamOpen = "O"
TeamInvite = "I"
TeamAllowedDomainsMaxLength = 500
TeamCompanyNameMaxLength = 64
TeamDescriptionMaxLength = 255
TeamDisplayNameMaxRunes = 64
TeamEmailMaxLength = 128
TeamNameMaxLength = 64
TeamNameMinLength = 2
)
type Team struct {
@@ -149,7 +149,7 @@ func (o *Team) IsValid() *AppError {
return NewAppError("Team.IsValid", "model.team.is_valid.update_at.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
if len(o.Email) > TEAM_EMAIL_MAX_LENGTH {
if len(o.Email) > TeamEmailMaxLength {
return NewAppError("Team.IsValid", "model.team.is_valid.email.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
@@ -157,15 +157,15 @@ func (o *Team) IsValid() *AppError {
return NewAppError("Team.IsValid", "model.team.is_valid.email.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
if utf8.RuneCountInString(o.DisplayName) == 0 || utf8.RuneCountInString(o.DisplayName) > TEAM_DISPLAY_NAME_MAX_RUNES {
if utf8.RuneCountInString(o.DisplayName) == 0 || utf8.RuneCountInString(o.DisplayName) > TeamDisplayNameMaxRunes {
return NewAppError("Team.IsValid", "model.team.is_valid.name.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
if len(o.Name) > TEAM_NAME_MAX_LENGTH {
if len(o.Name) > TeamNameMaxLength {
return NewAppError("Team.IsValid", "model.team.is_valid.url.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
if len(o.Description) > TEAM_DESCRIPTION_MAX_LENGTH {
if len(o.Description) > TeamDescriptionMaxLength {
return NewAppError("Team.IsValid", "model.team.is_valid.description.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
@@ -181,15 +181,15 @@ func (o *Team) IsValid() *AppError {
return NewAppError("Team.IsValid", "model.team.is_valid.characters.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
if !(o.Type == TEAM_OPEN || o.Type == TEAM_INVITE) {
if !(o.Type == TeamOpen || o.Type == TeamInvite) {
return NewAppError("Team.IsValid", "model.team.is_valid.type.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
if len(o.CompanyName) > TEAM_COMPANY_NAME_MAX_LENGTH {
if len(o.CompanyName) > TeamCompanyNameMaxLength {
return NewAppError("Team.IsValid", "model.team.is_valid.company.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
if len(o.AllowedDomains) > TEAM_ALLOWED_DOMAINS_MAX_LENGTH {
if len(o.AllowedDomains) > TeamAllowedDomainsMaxLength {
return NewAppError("Team.IsValid", "model.team.is_valid.domains.app_error", nil, "id="+o.Id, http.StatusBadRequest)
}
@@ -239,7 +239,7 @@ func IsValidTeamName(s string) bool {
return false
}
if len(s) < TEAM_NAME_MIN_LENGTH {
if len(s) < TeamNameMinLength {
return false
}

Просмотреть файл

@@ -52,7 +52,7 @@ func TestTeamIsValid(t *testing.T) {
require.NotNil(t, err, "should be invalid")
o.Name = "zzzzz"
o.Type = TEAM_OPEN
o.Type = TeamOpen
o.InviteId = NewId()
err = o.IsValid()
require.Nil(t, err, err)

Просмотреть файл

@@ -11,8 +11,6 @@ import (
"unicode/utf8"
)
const TERMS_OF_SERVICE_CACHE_SIZE = 1
type TermsOfService struct {
Id string `json:"id"`
CreateAt int64 `json:"create_at"`
@@ -33,7 +31,7 @@ func (t *TermsOfService) IsValid() *AppError {
return InvalidTermsOfServiceError("user_id", t.Id)
}
if utf8.RuneCountInString(t.Text) > POST_MESSAGE_MAX_RUNES_V2 {
if utf8.RuneCountInString(t.Text) > PostMessageMaxRunesV2 {
return InvalidTermsOfServiceError("text", t.Id)
}
@@ -57,7 +55,7 @@ func InvalidTermsOfServiceError(fieldName string, termsOfServiceId string) *AppE
if termsOfServiceId != "" {
details = "terms_of_service_id=" + termsOfServiceId
}
return NewAppError("TermsOfService.IsValid", id, map[string]interface{}{"MaxLength": POST_MESSAGE_MAX_RUNES_V2}, details, http.StatusBadRequest)
return NewAppError("TermsOfService.IsValid", id, map[string]interface{}{"MaxLength": PostMessageMaxRunesV2}, details, http.StatusBadRequest)
}
func (t *TermsOfService) PreSave() {

Просмотреть файл

@@ -24,10 +24,10 @@ func TestTermsOfServiceIsValid(t *testing.T) {
s.UserId = NewId()
assert.Nil(t, s.IsValid(), "should be valid")
s.Text = strings.Repeat("0", POST_MESSAGE_MAX_RUNES_V2+1)
s.Text = strings.Repeat("0", PostMessageMaxRunesV2+1)
assert.NotNil(t, s.IsValid(), "should be invalid")
s.Text = strings.Repeat("0", POST_MESSAGE_MAX_RUNES_V2)
s.Text = strings.Repeat("0", PostMessageMaxRunesV2)
assert.Nil(t, s.IsValid(), "should be valid")
s.Text = "test"

Просмотреть файл

@@ -8,9 +8,9 @@ import (
)
const (
TOKEN_SIZE = 64
MAX_TOKEN_EXIPRY_TIME = 1000 * 60 * 60 * 48 // 48 hour
TOKEN_TYPE_OAUTH = "oauth"
TokenSize = 64
MaxTokenExipryTime = 1000 * 60 * 60 * 48 // 48 hour
TokenTypeOAuth = "oauth"
)
type Token struct {
@@ -22,7 +22,7 @@ type Token struct {
func NewToken(tokentype, extra string) *Token {
return &Token{
Token: NewRandomString(TOKEN_SIZE),
Token: NewRandomString(TokenSize),
CreateAt: GetMillis(),
Type: tokentype,
Extra: extra,
@@ -30,7 +30,7 @@ func NewToken(tokentype, extra string) *Token {
}
func (t *Token) IsValid() *AppError {
if len(t.Token) != TOKEN_SIZE {
if len(t.Token) != TokenSize {
return NewAppError("Token.IsValid", "model.token.is_valid.size", nil, "", http.StatusInternalServerError)
}

Просмотреть файл

@@ -23,41 +23,41 @@ import (
)
const (
ME = "me"
USER_NOTIFY_ALL = "all"
USER_NOTIFY_HERE = "here"
USER_NOTIFY_MENTION = "mention"
USER_NOTIFY_NONE = "none"
DESKTOP_NOTIFY_PROP = "desktop"
DESKTOP_SOUND_NOTIFY_PROP = "desktop_sound"
MARK_UNREAD_NOTIFY_PROP = "mark_unread"
PUSH_NOTIFY_PROP = "push"
PUSH_STATUS_NOTIFY_PROP = "push_status"
EMAIL_NOTIFY_PROP = "email"
CHANNEL_MENTIONS_NOTIFY_PROP = "channel"
COMMENTS_NOTIFY_PROP = "comments"
MENTION_KEYS_NOTIFY_PROP = "mention_keys"
COMMENTS_NOTIFY_NEVER = "never"
COMMENTS_NOTIFY_ROOT = "root"
COMMENTS_NOTIFY_ANY = "any"
FIRST_NAME_NOTIFY_PROP = "first_name"
AUTO_RESPONDER_ACTIVE_NOTIFY_PROP = "auto_responder_active"
AUTO_RESPONDER_MESSAGE_NOTIFY_PROP = "auto_responder_message"
Me = "me"
UserNotifyAll = "all"
UserNotifyHere = "here"
UserNotifyMention = "mention"
UserNotifyNone = "none"
DesktopNotifyProp = "desktop"
DesktopSoundNotifyProp = "desktop_sound"
MarkUnreadNotifyProp = "mark_unread"
PushNotifyProp = "push"
PushStatusNotifyProp = "push_status"
EmailNotifyProp = "email"
ChannelMentionsNotifyProp = "channel"
CommentsNotifyProp = "comments"
MentionKeysNotifyProp = "mention_keys"
CommentsNotifyNever = "never"
CommentsNotifyRoot = "root"
CommentsNotifyAny = "any"
FirstNameNotifyProp = "first_name"
AutoResponderActiveNotifyProp = "auto_responder_active"
AutoResponderMessageNotifyProp = "auto_responder_message"
DEFAULT_LOCALE = "en"
USER_AUTH_SERVICE_EMAIL = "email"
DefaultLocale = "en"
UserAuthServiceEmail = "email"
USER_EMAIL_MAX_LENGTH = 128
USER_NICKNAME_MAX_RUNES = 64
USER_POSITION_MAX_RUNES = 128
USER_FIRST_NAME_MAX_RUNES = 64
USER_LAST_NAME_MAX_RUNES = 64
USER_AUTH_DATA_MAX_LENGTH = 128
USER_NAME_MAX_LENGTH = 64
USER_NAME_MIN_LENGTH = 1
USER_PASSWORD_MAX_LENGTH = 72
USER_LOCALE_MAX_LENGTH = 5
USER_TIMEZONE_MAX_RUNES = 256
UserEmailMaxLength = 128
UserNicknameMaxRunes = 64
UserPositionMaxRunes = 128
UserFirstNameMaxRunes = 64
UserLastNameMaxRunes = 64
UserAuthDataMaxLength = 128
UserNameMaxLength = 64
UserNameMinLength = 1
UserPasswordMaxLength = 72
UserLocaleMaxLength = 5
UserTimezoneMaxRunes = 256
)
//msgp:tuple User
@@ -282,27 +282,27 @@ func (u *User) IsValid() *AppError {
}
}
if len(u.Email) > USER_EMAIL_MAX_LENGTH || u.Email == "" || !IsValidEmail(u.Email) {
if len(u.Email) > UserEmailMaxLength || u.Email == "" || !IsValidEmail(u.Email) {
return InvalidUserError("email", u.Id)
}
if utf8.RuneCountInString(u.Nickname) > USER_NICKNAME_MAX_RUNES {
if utf8.RuneCountInString(u.Nickname) > UserNicknameMaxRunes {
return InvalidUserError("nickname", u.Id)
}
if utf8.RuneCountInString(u.Position) > USER_POSITION_MAX_RUNES {
if utf8.RuneCountInString(u.Position) > UserPositionMaxRunes {
return InvalidUserError("position", u.Id)
}
if utf8.RuneCountInString(u.FirstName) > USER_FIRST_NAME_MAX_RUNES {
if utf8.RuneCountInString(u.FirstName) > UserFirstNameMaxRunes {
return InvalidUserError("first_name", u.Id)
}
if utf8.RuneCountInString(u.LastName) > USER_LAST_NAME_MAX_RUNES {
if utf8.RuneCountInString(u.LastName) > UserLastNameMaxRunes {
return InvalidUserError("last_name", u.Id)
}
if u.AuthData != nil && len(*u.AuthData) > USER_AUTH_DATA_MAX_LENGTH {
if u.AuthData != nil && len(*u.AuthData) > UserAuthDataMaxLength {
return InvalidUserError("auth_data", u.Id)
}
@@ -314,7 +314,7 @@ func (u *User) IsValid() *AppError {
return InvalidUserError("auth_data_pwd", u.Id)
}
if len(u.Password) > USER_PASSWORD_MAX_LENGTH {
if len(u.Password) > UserPasswordMaxLength {
return InvalidUserError("password_limit", u.Id)
}
@@ -325,7 +325,7 @@ func (u *User) IsValid() *AppError {
if len(u.Timezone) > 0 {
if tzJSON, err := json.Marshal(u.Timezone); err != nil {
return NewAppError("User.IsValid", "model.user.is_valid.marshal.app_error", nil, err.Error(), http.StatusInternalServerError)
} else if utf8.RuneCount(tzJSON) > USER_TIMEZONE_MAX_RUNES {
} else if utf8.RuneCount(tzJSON) > UserTimezoneMaxRunes {
return InvalidUserError("timezone_limit", u.Id)
}
}
@@ -382,7 +382,7 @@ func (u *User) PreSave() {
u.MfaActive = false
if u.Locale == "" {
u.Locale = DEFAULT_LOCALE
u.Locale = DefaultLocale
}
if u.Props == nil {
@@ -425,30 +425,30 @@ func (u *User) PreUpdate() {
if u.NotifyProps == nil || len(u.NotifyProps) == 0 {
u.SetDefaultNotifications()
} else if _, ok := u.NotifyProps[MENTION_KEYS_NOTIFY_PROP]; ok {
} else if _, ok := u.NotifyProps[MentionKeysNotifyProp]; ok {
// Remove any blank mention keys
splitKeys := strings.Split(u.NotifyProps[MENTION_KEYS_NOTIFY_PROP], ",")
splitKeys := strings.Split(u.NotifyProps[MentionKeysNotifyProp], ",")
goodKeys := []string{}
for _, key := range splitKeys {
if key != "" {
goodKeys = append(goodKeys, strings.ToLower(key))
}
}
u.NotifyProps[MENTION_KEYS_NOTIFY_PROP] = strings.Join(goodKeys, ",")
u.NotifyProps[MentionKeysNotifyProp] = strings.Join(goodKeys, ",")
}
}
func (u *User) SetDefaultNotifications() {
u.NotifyProps = make(map[string]string)
u.NotifyProps[EMAIL_NOTIFY_PROP] = "true"
u.NotifyProps[PUSH_NOTIFY_PROP] = USER_NOTIFY_MENTION
u.NotifyProps[DESKTOP_NOTIFY_PROP] = USER_NOTIFY_MENTION
u.NotifyProps[DESKTOP_SOUND_NOTIFY_PROP] = "true"
u.NotifyProps[MENTION_KEYS_NOTIFY_PROP] = ""
u.NotifyProps[CHANNEL_MENTIONS_NOTIFY_PROP] = "true"
u.NotifyProps[PUSH_STATUS_NOTIFY_PROP] = STATUS_AWAY
u.NotifyProps[COMMENTS_NOTIFY_PROP] = COMMENTS_NOTIFY_NEVER
u.NotifyProps[FIRST_NAME_NOTIFY_PROP] = "false"
u.NotifyProps[EmailNotifyProp] = "true"
u.NotifyProps[PushNotifyProp] = UserNotifyMention
u.NotifyProps[DesktopNotifyProp] = UserNotifyMention
u.NotifyProps[DesktopSoundNotifyProp] = "true"
u.NotifyProps[MentionKeysNotifyProp] = ""
u.NotifyProps[ChannelMentionsNotifyProp] = "true"
u.NotifyProps[PushStatusNotifyProp] = StatusAway
u.NotifyProps[CommentsNotifyProp] = CommentsNotifyNever
u.NotifyProps[FirstNameNotifyProp] = "false"
}
func (u *User) UpdateMentionKeysFromUsername(oldUsername string) {
@@ -459,16 +459,16 @@ func (u *User) UpdateMentionKeysFromUsername(oldUsername string) {
}
}
u.NotifyProps[MENTION_KEYS_NOTIFY_PROP] = ""
u.NotifyProps[MentionKeysNotifyProp] = ""
if len(nonUsernameKeys) > 0 {
u.NotifyProps[MENTION_KEYS_NOTIFY_PROP] += "," + strings.Join(nonUsernameKeys, ",")
u.NotifyProps[MentionKeysNotifyProp] += "," + strings.Join(nonUsernameKeys, ",")
}
}
func (u *User) GetMentionKeys() []string {
var keys []string
for _, key := range strings.Split(u.NotifyProps[MENTION_KEYS_NOTIFY_PROP], ",") {
for _, key := range strings.Split(u.NotifyProps[MentionKeysNotifyProp], ",") {
trimmedKey := strings.TrimSpace(key)
if trimmedKey == "" {
@@ -642,13 +642,13 @@ func (u *User) GetFullName() string {
func (u *User) getDisplayName(baseName, nameFormat string) string {
displayName := baseName
if nameFormat == SHOW_NICKNAME_FULLNAME {
if nameFormat == ShowNicknameFullName {
if u.Nickname != "" {
displayName = u.Nickname
} else if fullName := u.GetFullName(); fullName != "" {
displayName = fullName
}
} else if nameFormat == SHOW_FULLNAME {
} else if nameFormat == ShowFullName {
if fullName := u.GetFullName(); fullName != "" {
displayName = fullName
}
@@ -698,11 +698,11 @@ func IsValidUserRoles(userRoles string) bool {
// Make sure you acually want to use this function. In context.go there are functions to check permissions
// This function should not be used to check permissions.
func (u *User) IsGuest() bool {
return IsInRole(u.Roles, SYSTEM_GUEST_ROLE_ID)
return IsInRole(u.Roles, SystemGuestRoleId)
}
func (u *User) IsSystemAdmin() bool {
return IsInRole(u.Roles, SYSTEM_ADMIN_ROLE_ID)
return IsInRole(u.Roles, SystemAdminRoleId)
}
// Make sure you acually want to use this function. In context.go there are functions to check permissions
@@ -726,22 +726,22 @@ func IsInRole(userRoles string, inRole string) bool {
}
func (u *User) IsSSOUser() bool {
return u.AuthService != "" && u.AuthService != USER_AUTH_SERVICE_EMAIL
return u.AuthService != "" && u.AuthService != UserAuthServiceEmail
}
func (u *User) IsOAuthUser() bool {
return u.AuthService == SERVICE_GITLAB ||
u.AuthService == SERVICE_GOOGLE ||
u.AuthService == SERVICE_OFFICE365 ||
u.AuthService == SERVICE_OPENID
return u.AuthService == ServiceGitlab ||
u.AuthService == ServiceGoogle ||
u.AuthService == ServiceOffice365 ||
u.AuthService == ServiceOpenid
}
func (u *User) IsLDAPUser() bool {
return u.AuthService == USER_AUTH_SERVICE_LDAP
return u.AuthService == UserAuthServiceLdap
}
func (u *User) IsSAMLUser() bool {
return u.AuthService == USER_AUTH_SERVICE_SAML
return u.AuthService == UserAuthServiceSaml
}
func (u *User) GetPreferredTimezone() string {
@@ -877,7 +877,7 @@ var restrictedUsernames = map[string]struct{}{
}
func IsValidUsername(s string) bool {
if len(s) < USER_NAME_MIN_LENGTH || len(s) > USER_NAME_MAX_LENGTH {
if len(s) < UserNameMinLength || len(s) > UserNameMaxLength {
return false
}
@@ -890,7 +890,7 @@ func IsValidUsername(s string) bool {
}
func IsValidUsernameAllowRemote(s string) bool {
if len(s) < USER_NAME_MIN_LENGTH || len(s) > USER_NAME_MAX_LENGTH {
if len(s) < UserNameMinLength || len(s) > UserNameMaxLength {
return false
}
@@ -932,32 +932,32 @@ func CleanUsername(username string) string {
}
func IsValidUserNotifyLevel(notifyLevel string) bool {
return notifyLevel == CHANNEL_NOTIFY_ALL ||
notifyLevel == CHANNEL_NOTIFY_MENTION ||
notifyLevel == CHANNEL_NOTIFY_NONE
return notifyLevel == ChannelNotifyAll ||
notifyLevel == ChannelNotifyMention ||
notifyLevel == ChannelNotifyNone
}
func IsValidPushStatusNotifyLevel(notifyLevel string) bool {
return notifyLevel == STATUS_ONLINE ||
notifyLevel == STATUS_AWAY ||
notifyLevel == STATUS_OFFLINE
return notifyLevel == StatusOnline ||
notifyLevel == StatusAway ||
notifyLevel == StatusOffline
}
func IsValidCommentsNotifyLevel(notifyLevel string) bool {
return notifyLevel == COMMENTS_NOTIFY_ANY ||
notifyLevel == COMMENTS_NOTIFY_ROOT ||
notifyLevel == COMMENTS_NOTIFY_NEVER
return notifyLevel == CommentsNotifyAny ||
notifyLevel == CommentsNotifyRoot ||
notifyLevel == CommentsNotifyNever
}
func IsValidEmailBatchingInterval(emailInterval string) bool {
return emailInterval == PREFERENCE_EMAIL_INTERVAL_IMMEDIATELY ||
emailInterval == PREFERENCE_EMAIL_INTERVAL_FIFTEEN ||
emailInterval == PREFERENCE_EMAIL_INTERVAL_HOUR
return emailInterval == PreferenceEmailIntervalImmediately ||
emailInterval == PreferenceEmailIntervalFifteen ||
emailInterval == PreferenceEmailIntervalHour
}
func IsValidLocale(locale string) bool {
if locale != "" {
if len(locale) > USER_LOCALE_MAX_LENGTH {
if len(locale) > UserLocaleMaxLength {
return false
} else if _, err := language.Parse(locale); err != nil {
return false

Просмотреть файл

@@ -8,8 +8,8 @@ import (
"io"
)
const USER_SEARCH_MAX_LIMIT = 1000
const USER_SEARCH_DEFAULT_LIMIT = 100
const UserSearchMaxLimit = 1000
const UserSearchDefaultLimit = 100
// UserSearch captures the parameters provided by a client for initiating a user search.
type UserSearch struct {
@@ -41,7 +41,7 @@ func UserSearchFromJson(data io.Reader) *UserSearch {
json.NewDecoder(data).Decode(&us)
if us.Limit == 0 {
us.Limit = USER_SEARCH_DEFAULT_LIMIT
us.Limit = UserSearchDefaultLimit
}
return &us

Просмотреть файл

@@ -178,37 +178,37 @@ func TestUserGetFullName(t *testing.T) {
func TestUserGetDisplayName(t *testing.T) {
user := User{Username: "username"}
assert.Equal(t, user.GetDisplayName(SHOW_FULLNAME), "username", "Display name should be username")
assert.Equal(t, user.GetDisplayName(SHOW_NICKNAME_FULLNAME), "username", "Display name should be username")
assert.Equal(t, user.GetDisplayName(SHOW_USERNAME), "username", "Display name should be username")
assert.Equal(t, user.GetDisplayName(ShowFullName), "username", "Display name should be username")
assert.Equal(t, user.GetDisplayName(ShowNicknameFullName), "username", "Display name should be username")
assert.Equal(t, user.GetDisplayName(ShowUsername), "username", "Display name should be username")
user.FirstName = "first"
user.LastName = "last"
assert.Equal(t, user.GetDisplayName(SHOW_FULLNAME), "first last", "Display name should be full name")
assert.Equal(t, user.GetDisplayName(SHOW_NICKNAME_FULLNAME), "first last", "Display name should be full name since there is no nickname")
assert.Equal(t, user.GetDisplayName(SHOW_USERNAME), "username", "Display name should be username")
assert.Equal(t, user.GetDisplayName(ShowFullName), "first last", "Display name should be full name")
assert.Equal(t, user.GetDisplayName(ShowNicknameFullName), "first last", "Display name should be full name since there is no nickname")
assert.Equal(t, user.GetDisplayName(ShowUsername), "username", "Display name should be username")
user.Nickname = "nickname"
assert.Equal(t, user.GetDisplayName(SHOW_NICKNAME_FULLNAME), "nickname", "Display name should be nickname")
assert.Equal(t, user.GetDisplayName(ShowNicknameFullName), "nickname", "Display name should be nickname")
}
func TestUserGetDisplayNameWithPrefix(t *testing.T) {
user := User{Username: "username"}
assert.Equal(t, user.GetDisplayNameWithPrefix(SHOW_FULLNAME, "@"), "@username", "Display name should be username")
assert.Equal(t, user.GetDisplayNameWithPrefix(SHOW_NICKNAME_FULLNAME, "@"), "@username", "Display name should be username")
assert.Equal(t, user.GetDisplayNameWithPrefix(SHOW_USERNAME, "@"), "@username", "Display name should be username")
assert.Equal(t, user.GetDisplayNameWithPrefix(ShowFullName, "@"), "@username", "Display name should be username")
assert.Equal(t, user.GetDisplayNameWithPrefix(ShowNicknameFullName, "@"), "@username", "Display name should be username")
assert.Equal(t, user.GetDisplayNameWithPrefix(ShowUsername, "@"), "@username", "Display name should be username")
user.FirstName = "first"
user.LastName = "last"
assert.Equal(t, user.GetDisplayNameWithPrefix(SHOW_FULLNAME, "@"), "first last", "Display name should be full name")
assert.Equal(t, user.GetDisplayNameWithPrefix(SHOW_NICKNAME_FULLNAME, "@"), "first last", "Display name should be full name since there is no nickname")
assert.Equal(t, user.GetDisplayNameWithPrefix(SHOW_USERNAME, "@"), "@username", "Display name should be username")
assert.Equal(t, user.GetDisplayNameWithPrefix(ShowFullName, "@"), "first last", "Display name should be full name")
assert.Equal(t, user.GetDisplayNameWithPrefix(ShowNicknameFullName, "@"), "first last", "Display name should be full name since there is no nickname")
assert.Equal(t, user.GetDisplayNameWithPrefix(ShowUsername, "@"), "@username", "Display name should be username")
user.Nickname = "nickname"
assert.Equal(t, user.GetDisplayNameWithPrefix(SHOW_NICKNAME_FULLNAME, "@"), "nickname", "Display name should be nickname")
assert.Equal(t, user.GetDisplayNameWithPrefix(ShowNicknameFullName, "@"), "nickname", "Display name should be nickname")
}
type usernamesTest struct {

Просмотреть файл

@@ -27,11 +27,11 @@ import (
)
const (
LOWERCASE_LETTERS = "abcdefghijklmnopqrstuvwxyz"
UPPERCASE_LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
NUMBERS = "0123456789"
SYMBOLS = " !\"\\#$%&'()*+,-./:;<=>?@[]^_`|~"
MB = 1 << 20
LowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
UppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
NUMBERS = "0123456789"
SYMBOLS = " !\"\\#$%&'()*+,-./:;<=>?@[]^_`|~"
MB = 1 << 20
)
type StringInterface map[string]interface{}
@@ -415,7 +415,7 @@ func IsValidChannelIdentifier(s string) bool {
return false
}
if len(s) < CHANNEL_NAME_MIN_LENGTH {
if len(s) < ChannelNameMinLength {
return false
}

Просмотреть файл

@@ -14,8 +14,8 @@ import (
)
const (
SOCKET_MAX_MESSAGE_SIZE_KB = 8 * 1024 // 8KB
PING_TIMEOUT_BUFFER_SECONDS = 5
SocketMaxMessageSizeKb = 8 * 1024 // 8KB
PingTimeoutBufferSeconds = 5
)
type msgType int
@@ -66,15 +66,15 @@ func NewWebSocketClient(url, authToken string) (*WebSocketClient, *AppError) {
// NewWebSocketClientWithDialer constructs a new WebSocket client with convenience
// methods for talking to the server using a custom dialer.
func NewWebSocketClientWithDialer(dialer *websocket.Dialer, url, authToken string) (*WebSocketClient, *AppError) {
conn, _, err := dialer.Dial(url+API_URL_SUFFIX+"/websocket", nil)
conn, _, err := dialer.Dial(url+ApiUrlSuffix+"/websocket", nil)
if err != nil {
return nil, NewAppError("NewWebSocketClient", "model.websocket_client.connect_fail.app_error", nil, err.Error(), http.StatusInternalServerError)
}
client := &WebSocketClient{
Url: url,
ApiUrl: url + API_URL_SUFFIX,
ConnectUrl: url + API_URL_SUFFIX + "/websocket",
ApiUrl: url + ApiUrlSuffix,
ConnectUrl: url + ApiUrlSuffix + "/websocket",
Conn: conn,
AuthToken: authToken,
Sequence: 1,
@@ -90,7 +90,7 @@ func NewWebSocketClientWithDialer(dialer *websocket.Dialer, url, authToken strin
client.configurePingHandling()
go client.writer()
client.SendMessage(WEBSOCKET_AUTHENTICATION_CHALLENGE, map[string]interface{}{"token": authToken})
client.SendMessage(WebsocketAuthenticationChallenge, map[string]interface{}{"token": authToken})
return client, nil
}
@@ -136,7 +136,7 @@ func (wsc *WebSocketClient) ConnectWithDialer(dialer *websocket.Dialer) *AppErro
wsc.EventChannel = make(chan *WebSocketEvent, 100)
wsc.ResponseChannel = make(chan *WebSocketResponse, 100)
wsc.SendMessage(WEBSOCKET_AUTHENTICATION_CHALLENGE, map[string]interface{}{"token": wsc.AuthToken})
wsc.SendMessage(WebsocketAuthenticationChallenge, map[string]interface{}{"token": wsc.AuthToken})
return nil
}
@@ -282,7 +282,7 @@ func (wsc *WebSocketClient) GetStatusesByIds(userIds []string) {
func (wsc *WebSocketClient) configurePingHandling() {
wsc.Conn.SetPingHandler(wsc.pingHandler)
wsc.pingTimeoutTimer = time.NewTimer(time.Second * (60 + PING_TIMEOUT_BUFFER_SECONDS))
wsc.pingTimeoutTimer = time.NewTimer(time.Second * (60 + PingTimeoutBufferSeconds))
go wsc.pingWatchdog()
}
@@ -309,11 +309,11 @@ func (wsc *WebSocketClient) pingWatchdog() {
if !wsc.pingTimeoutTimer.Stop() {
<-wsc.pingTimeoutTimer.C
}
wsc.pingTimeoutTimer.Reset(time.Second * (60 + PING_TIMEOUT_BUFFER_SECONDS))
wsc.pingTimeoutTimer.Reset(time.Second * (60 + PingTimeoutBufferSeconds))
case <-wsc.pingTimeoutTimer.C:
wsc.PingTimeoutChannel <- true
wsc.pingTimeoutTimer.Reset(time.Second * (60 + PING_TIMEOUT_BUFFER_SECONDS))
wsc.pingTimeoutTimer.Reset(time.Second * (60 + PingTimeoutBufferSeconds))
case <-wsc.quitPingWatchdog:
return
}

Просмотреть файл

@@ -11,69 +11,69 @@ import (
)
const (
WEBSOCKET_EVENT_TYPING = "typing"
WEBSOCKET_EVENT_POSTED = "posted"
WEBSOCKET_EVENT_POST_EDITED = "post_edited"
WEBSOCKET_EVENT_POST_DELETED = "post_deleted"
WEBSOCKET_EVENT_POST_UNREAD = "post_unread"
WEBSOCKET_EVENT_CHANNEL_CONVERTED = "channel_converted"
WEBSOCKET_EVENT_CHANNEL_CREATED = "channel_created"
WEBSOCKET_EVENT_CHANNEL_DELETED = "channel_deleted"
WEBSOCKET_EVENT_CHANNEL_RESTORED = "channel_restored"
WEBSOCKET_EVENT_CHANNEL_UPDATED = "channel_updated"
WEBSOCKET_EVENT_CHANNEL_MEMBER_UPDATED = "channel_member_updated"
WEBSOCKET_EVENT_CHANNEL_SCHEME_UPDATED = "channel_scheme_updated"
WEBSOCKET_EVENT_DIRECT_ADDED = "direct_added"
WEBSOCKET_EVENT_GROUP_ADDED = "group_added"
WEBSOCKET_EVENT_NEW_USER = "new_user"
WEBSOCKET_EVENT_ADDED_TO_TEAM = "added_to_team"
WEBSOCKET_EVENT_LEAVE_TEAM = "leave_team"
WEBSOCKET_EVENT_UPDATE_TEAM = "update_team"
WEBSOCKET_EVENT_DELETE_TEAM = "delete_team"
WEBSOCKET_EVENT_RESTORE_TEAM = "restore_team"
WEBSOCKET_EVENT_UPDATE_TEAM_SCHEME = "update_team_scheme"
WEBSOCKET_EVENT_USER_ADDED = "user_added"
WEBSOCKET_EVENT_USER_UPDATED = "user_updated"
WEBSOCKET_EVENT_USER_ROLE_UPDATED = "user_role_updated"
WEBSOCKET_EVENT_MEMBERROLE_UPDATED = "memberrole_updated"
WEBSOCKET_EVENT_USER_REMOVED = "user_removed"
WEBSOCKET_EVENT_PREFERENCE_CHANGED = "preference_changed"
WEBSOCKET_EVENT_PREFERENCES_CHANGED = "preferences_changed"
WEBSOCKET_EVENT_PREFERENCES_DELETED = "preferences_deleted"
WEBSOCKET_EVENT_EPHEMERAL_MESSAGE = "ephemeral_message"
WEBSOCKET_EVENT_STATUS_CHANGE = "status_change"
WEBSOCKET_EVENT_HELLO = "hello"
WEBSOCKET_AUTHENTICATION_CHALLENGE = "authentication_challenge"
WEBSOCKET_EVENT_REACTION_ADDED = "reaction_added"
WEBSOCKET_EVENT_REACTION_REMOVED = "reaction_removed"
WEBSOCKET_EVENT_RESPONSE = "response"
WEBSOCKET_EVENT_EMOJI_ADDED = "emoji_added"
WEBSOCKET_EVENT_CHANNEL_VIEWED = "channel_viewed"
WEBSOCKET_EVENT_PLUGIN_STATUSES_CHANGED = "plugin_statuses_changed"
WEBSOCKET_EVENT_PLUGIN_ENABLED = "plugin_enabled"
WEBSOCKET_EVENT_PLUGIN_DISABLED = "plugin_disabled"
WEBSOCKET_EVENT_ROLE_UPDATED = "role_updated"
WEBSOCKET_EVENT_LICENSE_CHANGED = "license_changed"
WEBSOCKET_EVENT_CONFIG_CHANGED = "config_changed"
WEBSOCKET_EVENT_OPEN_DIALOG = "open_dialog"
WEBSOCKET_EVENT_GUESTS_DEACTIVATED = "guests_deactivated"
WEBSOCKET_EVENT_USER_ACTIVATION_STATUS_CHANGE = "user_activation_status_change"
WEBSOCKET_EVENT_RECEIVED_GROUP = "received_group"
WEBSOCKET_EVENT_RECEIVED_GROUP_ASSOCIATED_TO_TEAM = "received_group_associated_to_team"
WEBSOCKET_EVENT_RECEIVED_GROUP_NOT_ASSOCIATED_TO_TEAM = "received_group_not_associated_to_team"
WEBSOCKET_EVENT_RECEIVED_GROUP_ASSOCIATED_TO_CHANNEL = "received_group_associated_to_channel"
WEBSOCKET_EVENT_RECEIVED_GROUP_NOT_ASSOCIATED_TO_CHANNEL = "received_group_not_associated_to_channel"
WEBSOCKET_EVENT_SIDEBAR_CATEGORY_CREATED = "sidebar_category_created"
WEBSOCKET_EVENT_SIDEBAR_CATEGORY_UPDATED = "sidebar_category_updated"
WEBSOCKET_EVENT_SIDEBAR_CATEGORY_DELETED = "sidebar_category_deleted"
WEBSOCKET_EVENT_SIDEBAR_CATEGORY_ORDER_UPDATED = "sidebar_category_order_updated"
WEBSOCKET_WARN_METRIC_STATUS_RECEIVED = "warn_metric_status_received"
WEBSOCKET_WARN_METRIC_STATUS_REMOVED = "warn_metric_status_removed"
WEBSOCKET_EVENT_CLOUD_PAYMENT_STATUS_UPDATED = "cloud_payment_status_updated"
WEBSOCKET_EVENT_THREAD_UPDATED = "thread_updated"
WEBSOCKET_EVENT_THREAD_FOLLOW_CHANGED = "thread_follow_changed"
WEBSOCKET_EVENT_THREAD_READ_CHANGED = "thread_read_changed"
WEBSOCKET_FIRST_ADMIN_VISIT_MARKETPLACE_STATUS_RECEIVED = "first_admin_visit_marketplace_status_received"
WebsocketEventTyping = "typing"
WebsocketEventPosted = "posted"
WebsocketEventPostEdited = "post_edited"
WebsocketEventPostDeleted = "post_deleted"
WebsocketEventPostUnread = "post_unread"
WebsocketEventChannelConverted = "channel_converted"
WebsocketEventChannelCreated = "channel_created"
WebsocketEventChannelDeleted = "channel_deleted"
WebsocketEventChannelRestored = "channel_restored"
WebsocketEventChannelUpdated = "channel_updated"
WebsocketEventChannelMemberUpdated = "channel_member_updated"
WebsocketEventChannelSchemeUpdated = "channel_scheme_updated"
WebsocketEventDirectAdded = "direct_added"
WebsocketEventGroupAdded = "group_added"
WebsocketEventNewUser = "new_user"
WebsocketEventAddedToTeam = "added_to_team"
WebsocketEventLeaveTeam = "leave_team"
WebsocketEventUpdateTeam = "update_team"
WebsocketEventDeleteTeam = "delete_team"
WebsocketEventRestoreTeam = "restore_team"
WebsocketEventUpdateTeamScheme = "update_team_scheme"
WebsocketEventUserAdded = "user_added"
WebsocketEventUserUpdated = "user_updated"
WebsocketEventUserRoleUpdated = "user_role_updated"
WebsocketEventMemberroleUpdated = "memberrole_updated"
WebsocketEventUserRemoved = "user_removed"
WebsocketEventPreferenceChanged = "preference_changed"
WebsocketEventPreferencesChanged = "preferences_changed"
WebsocketEventPreferencesDeleted = "preferences_deleted"
WebsocketEventEphemeralMessage = "ephemeral_message"
WebsocketEventStatusChange = "status_change"
WebsocketEventHello = "hello"
WebsocketAuthenticationChallenge = "authentication_challenge"
WebsocketEventReactionAdded = "reaction_added"
WebsocketEventReactionRemoved = "reaction_removed"
WebsocketEventResponse = "response"
WebsocketEventEmojiAdded = "emoji_added"
WebsocketEventChannelViewed = "channel_viewed"
WebsocketEventPluginStatusesChanged = "plugin_statuses_changed"
WebsocketEventPluginEnabled = "plugin_enabled"
WebsocketEventPluginDisabled = "plugin_disabled"
WebsocketEventRoleUpdated = "role_updated"
WebsocketEventLicenseChanged = "license_changed"
WebsocketEventConfigChanged = "config_changed"
WebsocketEventOpenDialog = "open_dialog"
WebsocketEventGuestsDeactivated = "guests_deactivated"
WebsocketEventUserActivationStatusChange = "user_activation_status_change"
WebsocketEventReceivedGroup = "received_group"
WebsocketEventReceivedGroupAssociatedToTeam = "received_group_associated_to_team"
WebsocketEventReceivedGroupNotAssociatedToTeam = "received_group_not_associated_to_team"
WebsocketEventReceivedGroupAssociatedToChannel = "received_group_associated_to_channel"
WebsocketEventReceivedGroupNotAssociatedToChannel = "received_group_not_associated_to_channel"
WebsocketEventSidebarCategoryCreated = "sidebar_category_created"
WebsocketEventSidebarCategoryUpdated = "sidebar_category_updated"
WebsocketEventSidebarCategoryDeleted = "sidebar_category_deleted"
WebsocketEventSidebarCategoryOrderUpdated = "sidebar_category_order_updated"
WebsocketWarnMetricStatusReceived = "warn_metric_status_received"
WebsocketWarnMetricStatusRemoved = "warn_metric_status_removed"
WebsocketEventCloudPaymentStatusUpdated = "cloud_payment_status_updated"
WebsocketEventThreadUpdated = "thread_updated"
WebsocketEventThreadFollowChanged = "thread_follow_changed"
WebsocketEventThreadReadChanged = "thread_read_changed"
WebsocketFirstAdminVisitMarketplaceStatusReceived = "first_admin_visit_marketplace_status_received"
)
type WebSocketMessage interface {
@@ -264,7 +264,7 @@ func NewWebSocketResponse(status string, seqReply int64, data map[string]interfa
}
func NewWebSocketError(seqReply int64, err *AppError) *WebSocketResponse {
return &WebSocketResponse{Status: STATUS_FAIL, SeqReply: seqReply, Error: err}
return &WebSocketResponse{Status: StatusFail, SeqReply: seqReply, Error: err}
}
func (m *WebSocketResponse) IsValid() bool {
@@ -272,7 +272,7 @@ func (m *WebSocketResponse) IsValid() bool {
}
func (m *WebSocketResponse) EventType() string {
return WEBSOCKET_EVENT_RESPONSE
return WebsocketEventResponse
}
func (m *WebSocketResponse) ToJson() string {

Просмотреть файл

@@ -105,7 +105,7 @@ func TestWebSocketResponse(t *testing.T) {
}
func TestWebSocketEvent_PrecomputeJSON(t *testing.T) {
event := NewWebSocketEvent(WEBSOCKET_EVENT_POSTED, "foo", "bar", "baz", nil)
event := NewWebSocketEvent(WebsocketEventPosted, "foo", "bar", "baz", nil)
event = event.SetSequence(7)
before := event.ToJson()
@@ -118,7 +118,7 @@ func TestWebSocketEvent_PrecomputeJSON(t *testing.T) {
var stringSink string
func BenchmarkWebSocketEvent_ToJson(b *testing.B) {
event := NewWebSocketEvent(WEBSOCKET_EVENT_POSTED, "foo", "bar", "baz", nil)
event := NewWebSocketEvent(WebsocketEventPosted, "foo", "bar", "baz", nil)
for i := 0; i < 100; i++ {
event.GetData()[NewId()] = NewId()
}