diff options
Diffstat (limited to 'model')
-rw-r--r-- | model/authorization.go | 13 | ||||
-rw-r--r-- | model/channel.go | 5 | ||||
-rw-r--r-- | model/client4.go | 86 | ||||
-rw-r--r-- | model/cluster_info.go | 6 | ||||
-rw-r--r-- | model/compliance_post.go | 3 | ||||
-rw-r--r-- | model/config.go | 66 | ||||
-rw-r--r-- | model/config_test.go | 120 | ||||
-rw-r--r-- | model/emoji.go | 4 | ||||
-rw-r--r-- | model/ldap.go | 1 | ||||
-rw-r--r-- | model/manifest.go | 9 | ||||
-rw-r--r-- | model/manifest_test.go | 6 | ||||
-rw-r--r-- | model/message_export.go | 1 | ||||
-rw-r--r-- | model/oauth.go | 11 | ||||
-rw-r--r-- | model/saml.go | 3 | ||||
-rw-r--r-- | model/search_params.go | 6 | ||||
-rw-r--r-- | model/team.go | 36 | ||||
-rw-r--r-- | model/user.go | 6 | ||||
-rw-r--r-- | model/utils.go | 15 | ||||
-rw-r--r-- | model/version.go | 4 | ||||
-rw-r--r-- | model/websocket_message.go | 2 |
20 files changed, 264 insertions, 139 deletions
diff --git a/model/authorization.go b/model/authorization.go index 9f4e36eab..34faf8bba 100644 --- a/model/authorization.go +++ b/model/authorization.go @@ -503,19 +503,6 @@ func initializeDefaultRoles() { } } -func RoleIdsToString(roles []string) string { - output := "" - for _, role := range roles { - output += role + ", " - } - - if output == "" { - return "[<NO ROLES>]" - } - - return output[:len(output)-1] -} - func init() { initializePermissions() initializeDefaultRoles() diff --git a/model/channel.go b/model/channel.go index ce812be3d..df68202d6 100644 --- a/model/channel.go +++ b/model/channel.go @@ -86,12 +86,7 @@ func (o *Channel) Etag() string { return Etag(o.Id, o.UpdateAt) } -func (o *Channel) StatsEtag() string { - return Etag(o.Id, o.ExtraUpdateAt) -} - func (o *Channel) IsValid() *AppError { - if len(o.Id) != 26 { return NewAppError("Channel.IsValid", "model.channel.is_valid.id.app_error", nil, "", http.StatusBadRequest) } diff --git a/model/client4.go b/model/client4.go index 4772d38b3..e7fe2bba0 100644 --- a/model/client4.go +++ b/model/client4.go @@ -198,6 +198,10 @@ func (c *Client4) GetTestEmailRoute() string { return fmt.Sprintf("/email/test") } +func (c *Client4) GetTestS3Route() string { + return fmt.Sprintf("/file/s3_test") +} + func (c *Client4) GetDatabaseRoute() string { return fmt.Sprintf("/database") } @@ -691,7 +695,7 @@ func (c *Client4) GetUsersNotInTeam(teamId string, page int, perPage int, etag s } } -// GetUsersInChannel returns a page of users on a team. Page counting starts at 0. +// GetUsersInChannel returns a page of users in a channel. Page counting starts at 0. func (c *Client4) GetUsersInChannel(channelId string, page int, perPage int, etag string) ([]*User, *Response) { query := fmt.Sprintf("?in_channel=%v&page=%v&per_page=%v", channelId, page, perPage) if r, err := c.DoApiGet(c.GetUsersRoute()+query, etag); err != nil { @@ -702,7 +706,18 @@ func (c *Client4) GetUsersInChannel(channelId string, page int, perPage int, eta } } -// GetUsersNotInChannel returns a page of users on a team. Page counting starts at 0. +// GetUsersInChannelStatus returns a page of users in a channel. Page counting starts at 0. Sorted by Status +func (c *Client4) GetUsersInChannelByStatus(channelId string, page int, perPage int, etag string) ([]*User, *Response) { + query := fmt.Sprintf("?in_channel=%v&page=%v&per_page=%v&sort=status", channelId, page, perPage) + if r, err := c.DoApiGet(c.GetUsersRoute()+query, etag); err != nil { + return nil, BuildErrorResponse(r, err) + } else { + defer closeBody(r) + return UserListFromJson(r.Body), BuildResponse(r) + } +} + +// GetUsersNotInChannel returns a page of users not in a channel. Page counting starts at 0. func (c *Client4) GetUsersNotInChannel(teamId, channelId string, page int, perPage int, etag string) ([]*User, *Response) { query := fmt.Sprintf("?in_team=%v¬_in_channel=%v&page=%v&per_page=%v", teamId, channelId, page, perPage) if r, err := c.DoApiGet(c.GetUsersRoute()+query, etag); err != nil { @@ -2083,8 +2098,18 @@ func (c *Client4) GetPing() (string, *Response) { } // TestEmail will attempt to connect to the configured SMTP server. -func (c *Client4) TestEmail() (bool, *Response) { - if r, err := c.DoApiPost(c.GetTestEmailRoute(), ""); err != nil { +func (c *Client4) TestEmail(config *Config) (bool, *Response) { + if r, err := c.DoApiPost(c.GetTestEmailRoute(), config.ToJson()); err != nil { + return false, BuildErrorResponse(r, err) + } else { + defer closeBody(r) + return CheckStatusOK(r), BuildResponse(r) + } +} + +// TestS3Connection will attempt to connect to the AWS S3. +func (c *Client4) TestS3Connection(config *Config) (bool, *Response) { + if r, err := c.DoApiPost(c.GetTestS3Route(), config.ToJson()); err != nil { return false, BuildErrorResponse(r, err) } else { defer closeBody(r) @@ -3304,3 +3329,56 @@ func (c *Client4) DeactivatePlugin(id string) (bool, *Response) { return CheckStatusOK(r), BuildResponse(r) } } + +// SetTeamIcon sets team icon of the team +func (c *Client4) SetTeamIcon(teamId string, data []byte) (bool, *Response) { + + body := &bytes.Buffer{} + writer := multipart.NewWriter(body) + + if part, err := writer.CreateFormFile("image", "teamIcon.png"); err != nil { + return false, &Response{Error: NewAppError("SetTeamIcon", "model.client.set_team_icon.no_file.app_error", nil, err.Error(), http.StatusBadRequest)} + } else if _, err = io.Copy(part, bytes.NewBuffer(data)); err != nil { + return false, &Response{Error: NewAppError("SetTeamIcon", "model.client.set_team_icon.no_file.app_error", nil, err.Error(), http.StatusBadRequest)} + } + + if err := writer.Close(); err != nil { + return false, &Response{Error: NewAppError("SetTeamIcon", "model.client.set_team_icon.writer.app_error", nil, err.Error(), http.StatusBadRequest)} + } + + rq, _ := http.NewRequest("POST", c.ApiUrl+c.GetTeamRoute(teamId)+"/image", bytes.NewReader(body.Bytes())) + rq.Header.Set("Content-Type", writer.FormDataContentType()) + rq.Close = true + + if len(c.AuthToken) > 0 { + rq.Header.Set(HEADER_AUTH, c.AuthType+" "+c.AuthToken) + } + + if rp, err := c.HttpClient.Do(rq); err != nil || rp == nil { + // set to http.StatusForbidden(403) + return false, &Response{StatusCode: http.StatusForbidden, Error: NewAppError(c.GetTeamRoute(teamId)+"/image", "model.client.connecting.app_error", nil, err.Error(), 403)} + } else { + defer closeBody(rp) + + if rp.StatusCode >= 300 { + return false, BuildErrorResponse(rp, AppErrorFromJson(rp.Body)) + } else { + return CheckStatusOK(rp), BuildResponse(rp) + } + } +} + +// GetTeamIcon gets the team icon of the team +func (c *Client4) GetTeamIcon(teamId, etag string) ([]byte, *Response) { + if r, err := c.DoApiGet(c.GetTeamRoute(teamId)+"/image", etag); err != nil { + return nil, BuildErrorResponse(r, err) + } else { + defer closeBody(r) + + if data, err := ioutil.ReadAll(r.Body); err != nil { + return nil, BuildErrorResponse(r, NewAppError("GetTeamIcon", "model.client.get_team_icon.app_error", nil, err.Error(), r.StatusCode)) + } else { + return data, BuildResponse(r) + } + } +} diff --git a/model/cluster_info.go b/model/cluster_info.go index a8d63ec32..46a3487a9 100644 --- a/model/cluster_info.go +++ b/model/cluster_info.go @@ -6,7 +6,6 @@ package model import ( "encoding/json" "io" - "strings" ) type ClusterInfo struct { @@ -22,11 +21,6 @@ func (me *ClusterInfo) ToJson() string { return string(b) } -func (me *ClusterInfo) Copy() *ClusterInfo { - json := me.ToJson() - return ClusterInfoFromJson(strings.NewReader(json)) -} - func ClusterInfoFromJson(data io.Reader) *ClusterInfo { var me *ClusterInfo json.NewDecoder(data).Decode(&me) diff --git a/model/compliance_post.go b/model/compliance_post.go index 3751c5862..75e8de1f1 100644 --- a/model/compliance_post.go +++ b/model/compliance_post.go @@ -17,6 +17,7 @@ type CompliancePost struct { // From Channel ChannelName string ChannelDisplayName string + ChannelType string // From User UserUsername string @@ -45,6 +46,7 @@ func CompliancePostHeader() []string { "ChannelName", "ChannelDisplayName", + "ChannelType", "UserUsername", "UserEmail", @@ -92,6 +94,7 @@ func (me *CompliancePost) Row() []string { cleanComplianceStrings(me.ChannelName), cleanComplianceStrings(me.ChannelDisplayName), + cleanComplianceStrings(me.ChannelType), cleanComplianceStrings(me.UserUsername), cleanComplianceStrings(me.UserEmail), diff --git a/model/config.go b/model/config.go index 1b916fe13..98e331f10 100644 --- a/model/config.go +++ b/model/config.go @@ -35,10 +35,6 @@ const ( SERVICE_GOOGLE = "google" SERVICE_OFFICE365 = "office365" - WEBSERVER_MODE_REGULAR = "regular" - WEBSERVER_MODE_GZIP = "gzip" - WEBSERVER_MODE_DISABLED = "disabled" - GENERIC_NO_CHANNEL_NOTIFICATION = "generic_no_channel" GENERIC_NOTIFICATION = "generic" FULL_NOTIFICATION = "full" @@ -99,15 +95,12 @@ const ( EMAIL_SETTINGS_DEFAULT_FEEDBACK_ORGANIZATION = "" - SUPPORT_SETTINGS_DEFAULT_TERMS_OF_SERVICE_LINK = "https://about.mattermost.com/default-terms/" - SUPPORT_SETTINGS_DEFAULT_PRIVACY_POLICY_LINK = "https://about.mattermost.com/default-privacy-policy/" - SUPPORT_SETTINGS_DEFAULT_ABOUT_LINK = "https://about.mattermost.com/default-about/" - SUPPORT_SETTINGS_DEFAULT_HELP_LINK = "https://about.mattermost.com/default-help/" - SUPPORT_SETTINGS_DEFAULT_REPORT_A_PROBLEM_LINK = "https://about.mattermost.com/default-report-a-problem/" - SUPPORT_SETTINGS_DEFAULT_ADMINISTRATORS_GUIDE_LINK = "https://about.mattermost.com/administrators-guide/" - SUPPORT_SETTINGS_DEFAULT_TROUBLESHOOTING_FORUM_LINK = "https://about.mattermost.com/troubleshooting-forum/" - SUPPORT_SETTINGS_DEFAULT_COMMERCIAL_SUPPORT_LINK = "https://about.mattermost.com/commercial-support/" - SUPPORT_SETTINGS_DEFAULT_SUPPORT_EMAIL = "feedback@mattermost.com" + SUPPORT_SETTINGS_DEFAULT_TERMS_OF_SERVICE_LINK = "https://about.mattermost.com/default-terms/" + SUPPORT_SETTINGS_DEFAULT_PRIVACY_POLICY_LINK = "https://about.mattermost.com/default-privacy-policy/" + SUPPORT_SETTINGS_DEFAULT_ABOUT_LINK = "https://about.mattermost.com/default-about/" + SUPPORT_SETTINGS_DEFAULT_HELP_LINK = "https://about.mattermost.com/default-help/" + SUPPORT_SETTINGS_DEFAULT_REPORT_A_PROBLEM_LINK = "https://about.mattermost.com/default-report-a-problem/" + SUPPORT_SETTINGS_DEFAULT_SUPPORT_EMAIL = "feedback@mattermost.com" LDAP_SETTINGS_DEFAULT_FIRST_NAME_ATTRIBUTE = "" LDAP_SETTINGS_DEFAULT_LAST_NAME_ATTRIBUTE = "" @@ -161,6 +154,8 @@ const ( COMPLIANCE_EXPORT_TYPE_ACTIANCE = "actiance" COMPLIANCE_EXPORT_TYPE_GLOBALRELAY = "globalrelay" + GLOBALRELAY_CUSTOMER_TYPE_A9 = "A9" + GLOBALRELAY_CUSTOMER_TYPE_A10 = "A10" ) type ServiceSettings struct { @@ -1634,6 +1629,28 @@ func (s *PluginSettings) SetDefaults() { } } +type GlobalRelayMessageExportSettings struct { + CustomerType *string // must be either A9 or A10, dictates SMTP server url + SmtpUsername *string + SmtpPassword *string + EmailAddress *string // the address to send messages to +} + +func (s *GlobalRelayMessageExportSettings) SetDefaults() { + if s.CustomerType == nil { + s.CustomerType = NewString(GLOBALRELAY_CUSTOMER_TYPE_A9) + } + if s.SmtpUsername == nil { + s.SmtpUsername = NewString("") + } + if s.SmtpPassword == nil { + s.SmtpPassword = NewString("") + } + if s.EmailAddress == nil { + s.EmailAddress = NewString("") + } +} + type MessageExportSettings struct { EnableExport *bool ExportFormat *string @@ -1642,7 +1659,7 @@ type MessageExportSettings struct { BatchSize *int // formatter-specific settings - these are only expected to be non-nil if ExportFormat is set to the associated format - GlobalRelayEmailAddress *string + GlobalRelaySettings *GlobalRelayMessageExportSettings } func (s *MessageExportSettings) SetDefaults() { @@ -1673,6 +1690,11 @@ func (s *MessageExportSettings) SetDefaults() { if s.BatchSize == nil { s.BatchSize = NewInt(10000) } + + if s.GlobalRelaySettings == nil { + s.GlobalRelaySettings = &GlobalRelayMessageExportSettings{} + s.GlobalRelaySettings.SetDefaults() + } } type ConfigFunc func() *Config @@ -2206,10 +2228,18 @@ func (mes *MessageExportSettings) isValid(fs FileSettings) *AppError { } if *mes.ExportFormat == COMPLIANCE_EXPORT_TYPE_GLOBALRELAY { - // validating email addresses is hard - just make sure it contains an '@' sign - // see https://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address - if mes.GlobalRelayEmailAddress == nil || !strings.Contains(*mes.GlobalRelayEmailAddress, "@") { - return NewAppError("Config.IsValid", "model.config.is_valid.message_export.global_relay_email_address.app_error", nil, "", http.StatusBadRequest) + if mes.GlobalRelaySettings == nil { + return NewAppError("Config.IsValid", "model.config.is_valid.message_export.global_relay.config_missing.app_error", nil, "", http.StatusBadRequest) + } else if mes.GlobalRelaySettings.CustomerType == nil || (*mes.GlobalRelaySettings.CustomerType != GLOBALRELAY_CUSTOMER_TYPE_A9 && *mes.GlobalRelaySettings.CustomerType != GLOBALRELAY_CUSTOMER_TYPE_A10) { + return NewAppError("Config.IsValid", "model.config.is_valid.message_export.global_relay.customer_type.app_error", nil, "", http.StatusBadRequest) + } else if mes.GlobalRelaySettings.EmailAddress == nil || !strings.Contains(*mes.GlobalRelaySettings.EmailAddress, "@") { + // validating email addresses is hard - just make sure it contains an '@' sign + // see https://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address + return NewAppError("Config.IsValid", "model.config.is_valid.message_export.global_relay.email_address.app_error", nil, "", http.StatusBadRequest) + } else if mes.GlobalRelaySettings.SmtpUsername == nil || *mes.GlobalRelaySettings.SmtpUsername == "" { + return NewAppError("Config.IsValid", "model.config.is_valid.message_export.global_relay.smtp_username.app_error", nil, "", http.StatusBadRequest) + } else if mes.GlobalRelaySettings.SmtpPassword == nil || *mes.GlobalRelaySettings.SmtpPassword == "" { + return NewAppError("Config.IsValid", "model.config.is_valid.message_export.global_relay.smtp_password.app_error", nil, "", http.StatusBadRequest) } } } diff --git a/model/config_test.go b/model/config_test.go index 919f73fd7..1f917af27 100644 --- a/model/config_test.go +++ b/model/config_test.go @@ -183,21 +183,123 @@ func TestMessageExportSettingsIsValidActiance(t *testing.T) { require.Nil(t, mes.isValid(*fs)) } -func TestMessageExportSettingsIsValidGlobalRelay(t *testing.T) { +func TestMessageExportSettingsIsValidGlobalRelaySettingsMissing(t *testing.T) { fs := &FileSettings{ DriverName: NewString("foo"), // bypass file location check } mes := &MessageExportSettings{ - EnableExport: NewBool(true), - ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY), - ExportFromTimestamp: NewInt64(0), - DailyRunTime: NewString("15:04"), - BatchSize: NewInt(100), - GlobalRelayEmailAddress: NewString("test@mattermost.com"), + EnableExport: NewBool(true), + ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY), + ExportFromTimestamp: NewInt64(0), + DailyRunTime: NewString("15:04"), + BatchSize: NewInt(100), } - // should pass because everything is valid - require.Nil(t, mes.isValid(*fs)) + // should fail because globalrelay settings are missing + require.Error(t, mes.isValid(*fs)) +} + +func TestMessageExportSettingsIsValidGlobalRelaySettingsInvalidCustomerType(t *testing.T) { + fs := &FileSettings{ + DriverName: NewString("foo"), // bypass file location check + } + mes := &MessageExportSettings{ + EnableExport: NewBool(true), + ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY), + ExportFromTimestamp: NewInt64(0), + DailyRunTime: NewString("15:04"), + BatchSize: NewInt(100), + GlobalRelaySettings: &GlobalRelayMessageExportSettings{ + CustomerType: NewString("Invalid"), + EmailAddress: NewString("valid@mattermost.com"), + SmtpUsername: NewString("SomeUsername"), + SmtpPassword: NewString("SomePassword"), + }, + } + + // should fail because customer type is invalid + require.Error(t, mes.isValid(*fs)) +} + +// func TestMessageExportSettingsIsValidGlobalRelaySettingsInvalidEmailAddress(t *testing.T) { +func TestMessageExportSettingsGlobalRelaySettings(t *testing.T) { + fs := &FileSettings{ + DriverName: NewString("foo"), // bypass file location check + } + tests := []struct { + name string + value *GlobalRelayMessageExportSettings + success bool + }{ + { + "Invalid email address", + &GlobalRelayMessageExportSettings{ + CustomerType: NewString(GLOBALRELAY_CUSTOMER_TYPE_A9), + EmailAddress: NewString("invalidEmailAddress"), + SmtpUsername: NewString("SomeUsername"), + SmtpPassword: NewString("SomePassword"), + }, + false, + }, + { + "Missing smtp username", + &GlobalRelayMessageExportSettings{ + CustomerType: NewString(GLOBALRELAY_CUSTOMER_TYPE_A10), + EmailAddress: NewString("valid@mattermost.com"), + SmtpPassword: NewString("SomePassword"), + }, + false, + }, + { + "Invalid smtp username", + &GlobalRelayMessageExportSettings{ + CustomerType: NewString(GLOBALRELAY_CUSTOMER_TYPE_A10), + EmailAddress: NewString("valid@mattermost.com"), + SmtpUsername: NewString(""), + SmtpPassword: NewString("SomePassword"), + }, + false, + }, + { + "Invalid smtp password", + &GlobalRelayMessageExportSettings{ + CustomerType: NewString(GLOBALRELAY_CUSTOMER_TYPE_A10), + EmailAddress: NewString("valid@mattermost.com"), + SmtpUsername: NewString("SomeUsername"), + SmtpPassword: NewString(""), + }, + false, + }, + { + "Valid data", + &GlobalRelayMessageExportSettings{ + CustomerType: NewString(GLOBALRELAY_CUSTOMER_TYPE_A9), + EmailAddress: NewString("valid@mattermost.com"), + SmtpUsername: NewString("SomeUsername"), + SmtpPassword: NewString("SomePassword"), + }, + true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mes := &MessageExportSettings{ + EnableExport: NewBool(true), + ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY), + ExportFromTimestamp: NewInt64(0), + DailyRunTime: NewString("15:04"), + BatchSize: NewInt(100), + GlobalRelaySettings: tt.value, + } + + if tt.success { + require.Nil(t, mes.isValid(*fs)) + } else { + require.Error(t, mes.isValid(*fs)) + } + }) + } } func TestMessageExportSetDefaults(t *testing.T) { diff --git a/model/emoji.go b/model/emoji.go index a1703abb1..47d170bb3 100644 --- a/model/emoji.go +++ b/model/emoji.go @@ -56,10 +56,6 @@ func (emoji *Emoji) PreSave() { emoji.UpdateAt = emoji.CreateAt } -func (emoji *Emoji) PreUpdate() { - emoji.UpdateAt = GetMillis() -} - func (emoji *Emoji) ToJson() string { b, _ := json.Marshal(emoji) return string(b) diff --git a/model/ldap.go b/model/ldap.go index 1453a4add..9051c5a30 100644 --- a/model/ldap.go +++ b/model/ldap.go @@ -5,5 +5,4 @@ package model const ( USER_AUTH_SERVICE_LDAP = "ldap" - LDAP_SYNC_TASK_NAME = "LDAP Syncronization" ) diff --git a/model/manifest.go b/model/manifest.go index 2b415dc62..32d4341cd 100644 --- a/model/manifest.go +++ b/model/manifest.go @@ -13,15 +13,6 @@ import ( "gopkg.in/yaml.v2" ) -const ( - PLUGIN_CONFIG_TYPE_TEXT = "text" - PLUGIN_CONFIG_TYPE_BOOL = "bool" - PLUGIN_CONFIG_TYPE_RADIO = "radio" - PLUGIN_CONFIG_TYPE_DROPDOWN = "dropdown" - PLUGIN_CONFIG_TYPE_GENERATED = "generated" - PLUGIN_CONFIG_TYPE_USERNAME = "username" -) - type PluginOption struct { // The display name for the option. DisplayName string `json:"display_name" yaml:"display_name"` diff --git a/model/manifest_test.go b/model/manifest_test.go index 3fdc13ec4..b63e388bc 100644 --- a/model/manifest_test.go +++ b/model/manifest_test.go @@ -74,7 +74,7 @@ func TestManifestUnmarshal(t *testing.T) { &PluginSetting{ Key: "thesetting", DisplayName: "thedisplayname", - Type: PLUGIN_CONFIG_TYPE_DROPDOWN, + Type: "dropdown", HelpText: "thehelptext", RegenerateHelpText: "theregeneratehelptext", Placeholder: "theplaceholder", @@ -181,7 +181,7 @@ func TestManifestJson(t *testing.T) { &PluginSetting{ Key: "thesetting", DisplayName: "thedisplayname", - Type: PLUGIN_CONFIG_TYPE_DROPDOWN, + Type: "dropdown", HelpText: "thehelptext", RegenerateHelpText: "theregeneratehelptext", Placeholder: "theplaceholder", @@ -246,7 +246,7 @@ func TestManifestClientManifest(t *testing.T) { &PluginSetting{ Key: "thesetting", DisplayName: "thedisplayname", - Type: PLUGIN_CONFIG_TYPE_DROPDOWN, + Type: "dropdown", HelpText: "thehelptext", RegenerateHelpText: "theregeneratehelptext", Placeholder: "theplaceholder", diff --git a/model/message_export.go b/model/message_export.go index 22641deee..6efb8c6a4 100644 --- a/model/message_export.go +++ b/model/message_export.go @@ -6,6 +6,7 @@ package model type MessageExport struct { ChannelId *string ChannelDisplayName *string + ChannelType *string UserId *string UserEmail *string diff --git a/model/oauth.go b/model/oauth.go index 70e8a3f26..c92b1ec41 100644 --- a/model/oauth.go +++ b/model/oauth.go @@ -141,17 +141,6 @@ func OAuthAppFromJson(data io.Reader) *OAuthApp { return app } -func OAuthAppMapToJson(a map[string]*OAuthApp) string { - b, _ := json.Marshal(a) - return string(b) -} - -func OAuthAppMapFromJson(data io.Reader) map[string]*OAuthApp { - var apps map[string]*OAuthApp - json.NewDecoder(data).Decode(&apps) - return apps -} - func OAuthAppListToJson(l []*OAuthApp) string { b, _ := json.Marshal(l) return string(b) diff --git a/model/saml.go b/model/saml.go index e74750156..528ac45cc 100644 --- a/model/saml.go +++ b/model/saml.go @@ -11,9 +11,6 @@ import ( const ( USER_AUTH_SERVICE_SAML = "saml" USER_AUTH_SERVICE_SAML_TEXT = "With SAML" - SAML_IDP_CERTIFICATE = 1 - SAML_PRIVATE_KEY = 2 - SAML_PUBLIC_CERT = 3 ) type SamlAuthRequest struct { diff --git a/model/search_params.go b/model/search_params.go index 1692b3aaf..481671ab5 100644 --- a/model/search_params.go +++ b/model/search_params.go @@ -4,7 +4,6 @@ package model import ( - "encoding/json" "regexp" "strings" ) @@ -20,11 +19,6 @@ type SearchParams struct { OrTerms bool } -func (o *SearchParams) ToJson() string { - b, _ := json.Marshal(o) - return string(b) -} - var searchFlags = [...]string{"from", "channel", "in"} func splitWords(text string) []string { diff --git a/model/team.go b/model/team.go index 5b6eb1fa0..7968c9d48 100644 --- a/model/team.go +++ b/model/team.go @@ -26,19 +26,20 @@ const ( ) type Team struct { - Id string `json:"id"` - CreateAt int64 `json:"create_at"` - UpdateAt int64 `json:"update_at"` - DeleteAt int64 `json:"delete_at"` - DisplayName string `json:"display_name"` - Name string `json:"name"` - Description string `json:"description"` - Email string `json:"email"` - Type string `json:"type"` - CompanyName string `json:"company_name"` - AllowedDomains string `json:"allowed_domains"` - InviteId string `json:"invite_id"` - AllowOpenInvite bool `json:"allow_open_invite"` + Id string `json:"id"` + CreateAt int64 `json:"create_at"` + UpdateAt int64 `json:"update_at"` + DeleteAt int64 `json:"delete_at"` + DisplayName string `json:"display_name"` + Name string `json:"name"` + Description string `json:"description"` + Email string `json:"email"` + Type string `json:"type"` + CompanyName string `json:"company_name"` + AllowedDomains string `json:"allowed_domains"` + InviteId string `json:"invite_id"` + AllowOpenInvite bool `json:"allow_open_invite"` + LastTeamIconUpdate int64 `json:"last_team_icon_update,omitempty"` } type TeamPatch struct { @@ -242,15 +243,6 @@ func (o *Team) Sanitize() { o.AllowedDomains = "" } -func (o *Team) SanitizeForNotLoggedIn() { - o.Email = "" - o.AllowedDomains = "" - o.CompanyName = "" - if !o.AllowOpenInvite { - o.InviteId = "" - } -} - func (t *Team) Patch(patch *TeamPatch) { if patch.DisplayName != nil { t.DisplayName = *patch.DisplayName diff --git a/model/user.go b/model/user.go index 1e1d49f7d..f64275c83 100644 --- a/model/user.go +++ b/model/user.go @@ -373,12 +373,6 @@ func (u *User) MakeNonNil() { } } -func (u *User) AddProp(key string, value string) { - u.MakeNonNil() - - u.Props[key] = value -} - func (u *User) AddNotifyProp(key string, value string) { u.MakeNonNil() diff --git a/model/utils.go b/model/utils.go index 331a1aaaa..72369852b 100644 --- a/model/utils.go +++ b/model/utils.go @@ -394,9 +394,6 @@ func ClearMentionTags(post string) string { return post } -var UrlRegex = regexp.MustCompile(`^((?:[a-z]+:\/\/)?(?:(?:[a-z0-9\-]+\.)+(?:[a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel|local|internal))(:[0-9]{1,5})?(?:\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(?:\?[a-z0-9+_~\-\.%=&]*)?)?(?:#[a-zA-Z0-9!$&'()*+.=-_~:@/?]*)?)(?:\s+|$)$`) -var PartialUrlRegex = regexp.MustCompile(`/([A-Za-z0-9]{26})/([A-Za-z0-9]{26})/((?:[A-Za-z0-9]{26})?.+(?:\.[A-Za-z0-9]{3,})?)`) - func IsValidHttpUrl(rawUrl string) bool { if strings.Index(rawUrl, "http://") != 0 && strings.Index(rawUrl, "https://") != 0 { return false @@ -409,18 +406,6 @@ func IsValidHttpUrl(rawUrl string) bool { return true } -func IsValidHttpsUrl(rawUrl string) bool { - if strings.Index(rawUrl, "https://") != 0 { - return false - } - - if _, err := url.ParseRequestURI(rawUrl); err != nil { - return false - } - - return true -} - func IsValidTurnOrStunServer(rawUri string) bool { if strings.Index(rawUri, "turn:") != 0 && strings.Index(rawUri, "stun:") != 0 { return false diff --git a/model/version.go b/model/version.go index 3e75478d3..e4e0af491 100644 --- a/model/version.go +++ b/model/version.go @@ -107,10 +107,6 @@ func GetPreviousVersion(version string) string { return "" } -func IsOfficalBuild() bool { - return BuildNumber != "_BUILD_NUMBER_" -} - func IsCurrentVersion(versionToCheck string) bool { currentMajor, currentMinor, _ := SplitVersion(CurrentVersion) toCheckMajor, toCheckMinor, _ := SplitVersion(versionToCheck) diff --git a/model/websocket_message.go b/model/websocket_message.go index 8d1abecfa..76326ee3f 100644 --- a/model/websocket_message.go +++ b/model/websocket_message.go @@ -44,6 +44,8 @@ const ( WEBSOCKET_EVENT_CHANNEL_VIEWED = "channel_viewed" WEBSOCKET_EVENT_PLUGIN_ACTIVATED = "plugin_activated" // EXPERIMENTAL - SUBJECT TO CHANGE WEBSOCKET_EVENT_PLUGIN_DEACTIVATED = "plugin_deactivated" // EXPERIMENTAL - SUBJECT TO CHANGE + WEBSOCKET_EVENT_LICENSE_CHANGED = "license_changed" + WEBSOCKET_EVENT_CONFIG_CHANGED = "config_changed" ) type WebSocketMessage interface { |