diff options
Diffstat (limited to 'vendor/github.com/mattermost/platform/model/config.go')
-rw-r--r-- | vendor/github.com/mattermost/platform/model/config.go | 2364 |
1 files changed, 1362 insertions, 1002 deletions
diff --git a/vendor/github.com/mattermost/platform/model/config.go b/vendor/github.com/mattermost/platform/model/config.go index 1717d61a..fb34d1a0 100644 --- a/vendor/github.com/mattermost/platform/model/config.go +++ b/vendor/github.com/mattermost/platform/model/config.go @@ -8,6 +8,8 @@ import ( "io" "net/http" "net/url" + "strings" + "time" ) const ( @@ -22,6 +24,10 @@ const ( DATABASE_DRIVER_MYSQL = "mysql" DATABASE_DRIVER_POSTGRES = "postgres" + MINIO_ACCESS_KEY = "minioaccesskey" + MINIO_SECRET_KEY = "miniosecretkey" + MINIO_BUCKET = "mattermost-test" + PASSWORD_MAXIMUM_LENGTH = 64 PASSWORD_MINIMUM_LENGTH = 5 @@ -71,17 +77,22 @@ const ( SITENAME_MAX_LENGTH = 30 - SERVICE_SETTINGS_DEFAULT_SITE_URL = "" - SERVICE_SETTINGS_DEFAULT_TLS_CERT_FILE = "" - SERVICE_SETTINGS_DEFAULT_TLS_KEY_FILE = "" - SERVICE_SETTINGS_DEFAULT_READ_TIMEOUT = 300 - SERVICE_SETTINGS_DEFAULT_WRITE_TIMEOUT = 300 - SERVICE_SETTINGS_DEFAULT_ALLOW_CORS_FROM = "" + SERVICE_SETTINGS_DEFAULT_SITE_URL = "" + SERVICE_SETTINGS_DEFAULT_TLS_CERT_FILE = "" + SERVICE_SETTINGS_DEFAULT_TLS_KEY_FILE = "" + SERVICE_SETTINGS_DEFAULT_READ_TIMEOUT = 300 + SERVICE_SETTINGS_DEFAULT_WRITE_TIMEOUT = 300 + SERVICE_SETTINGS_DEFAULT_MAX_LOGIN_ATTEMPTS = 10 + SERVICE_SETTINGS_DEFAULT_ALLOW_CORS_FROM = "" + SERVICE_SETTINGS_DEFAULT_LISTEN_AND_ADDRESS = ":8065" + TEAM_SETTINGS_DEFAULT_MAX_USERS_PER_TEAM = 50 TEAM_SETTINGS_DEFAULT_CUSTOM_BRAND_TEXT = "" TEAM_SETTINGS_DEFAULT_CUSTOM_DESCRIPTION_TEXT = "" TEAM_SETTINGS_DEFAULT_USER_STATUS_AWAY_TIMEOUT = 300 + SQL_SETTINGS_DEFAULT_DATA_SOURCE = "mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s" + EMAIL_SETTINGS_DEFAULT_FEEDBACK_ORGANIZATION = "" SUPPORT_SETTINGS_DEFAULT_TERMS_OF_SERVICE_LINK = "https://about.mattermost.com/default-terms/" @@ -123,17 +134,32 @@ const ( ANNOUNCEMENT_SETTINGS_DEFAULT_BANNER_COLOR = "#f2a93b" ANNOUNCEMENT_SETTINGS_DEFAULT_BANNER_TEXT_COLOR = "#333333" - ELASTICSEARCH_SETTINGS_DEFAULT_CONNECTION_URL = "" - ELASTICSEARCH_SETTINGS_DEFAULT_USERNAME = "" - ELASTICSEARCH_SETTINGS_DEFAULT_PASSWORD = "" - ELASTICSEARCH_SETTINGS_DEFAULT_POST_INDEX_REPLICAS = 1 - ELASTICSEARCH_SETTINGS_DEFAULT_POST_INDEX_SHARDS = 1 + TEAM_SETTINGS_DEFAULT_TEAM_TEXT = "default" + + ELASTICSEARCH_SETTINGS_DEFAULT_CONNECTION_URL = "" + ELASTICSEARCH_SETTINGS_DEFAULT_USERNAME = "" + ELASTICSEARCH_SETTINGS_DEFAULT_PASSWORD = "" + ELASTICSEARCH_SETTINGS_DEFAULT_POST_INDEX_REPLICAS = 1 + ELASTICSEARCH_SETTINGS_DEFAULT_POST_INDEX_SHARDS = 1 + ELASTICSEARCH_SETTINGS_DEFAULT_AGGREGATE_POSTS_AFTER_DAYS = 365 + ELASTICSEARCH_SETTINGS_DEFAULT_POSTS_AGGREGATOR_JOB_START_TIME = "03:00" + ELASTICSEARCH_SETTINGS_DEFAULT_INDEX_PREFIX = "" + ELASTICSEARCH_SETTINGS_DEFAULT_LIVE_INDEXING_BATCH_SIZE = 1 + ELASTICSEARCH_SETTINGS_DEFAULT_BULK_INDEXING_TIME_WINDOW_SECONDS = 3600 + ELASTICSEARCH_SETTINGS_DEFAULT_REQUEST_TIMEOUT_SECONDS = 30 + + DATA_RETENTION_SETTINGS_DEFAULT_MESSAGE_RETENTION_DAYS = 365 + DATA_RETENTION_SETTINGS_DEFAULT_FILE_RETENTION_DAYS = 365 + DATA_RETENTION_SETTINGS_DEFAULT_DELETION_JOB_START_TIME = "02:00" + + PLUGIN_SETTINGS_DEFAULT_DIRECTORY = "./plugins" + PLUGIN_SETTINGS_DEFAULT_CLIENT_DIRECTORY = "./client/plugins" ) type ServiceSettings struct { SiteURL *string LicenseFileLocation *string - ListenAddress string + ListenAddress *string ConnectionSecurity *string TLSCertFile *string TLSKeyFile *string @@ -142,7 +168,7 @@ type ServiceSettings struct { Forward80To443 *bool ReadTimeout *int WriteTimeout *int - MaximumLoginAttempts int + MaximumLoginAttempts *int GoroutineHealthThreshold *int GoogleDeveloperKey string EnableOAuthServiceProvider bool @@ -158,6 +184,7 @@ type ServiceSettings struct { EnableDeveloper *bool EnableSecurityFixAlert *bool EnableInsecureOutgoingConnections *bool + AllowedUntrustedInternalConnections *string EnableMultifactorAuthentication *bool EnforceMultifactorAuthentication *bool EnableUserAccessTokens *bool @@ -166,6 +193,7 @@ type ServiceSettings struct { SessionLengthMobileInDays *int SessionLengthSSOInDays *int SessionCacheInMinutes *int + SessionIdleTimeoutInMinutes *int WebsocketSecurePort *int WebsocketPort *int WebserverMode *string @@ -180,7 +208,211 @@ type ServiceSettings struct { EnableUserTypingMessages *bool EnableChannelViewedMessages *bool EnableUserStatuses *bool + ExperimentalEnableAuthenticationTransfer *bool ClusterLogTimeoutMilliseconds *int + CloseUnusedDirectMessages *bool + EnablePreviewFeatures *bool + EnableTutorial *bool +} + +func (s *ServiceSettings) SetDefaults() { + if s.SiteURL == nil { + s.SiteURL = NewString(SERVICE_SETTINGS_DEFAULT_SITE_URL) + } + + if s.LicenseFileLocation == nil { + s.LicenseFileLocation = NewString("") + } + + if s.ListenAddress == nil { + s.ListenAddress = NewString(SERVICE_SETTINGS_DEFAULT_LISTEN_AND_ADDRESS) + } + + if s.EnableAPIv3 == nil { + s.EnableAPIv3 = NewBool(true) + } + + if s.EnableLinkPreviews == nil { + s.EnableLinkPreviews = NewBool(false) + } + + if s.EnableDeveloper == nil { + s.EnableDeveloper = NewBool(false) + } + + if s.EnableSecurityFixAlert == nil { + s.EnableSecurityFixAlert = NewBool(true) + } + + if s.EnableInsecureOutgoingConnections == nil { + s.EnableInsecureOutgoingConnections = NewBool(false) + } + + if s.AllowedUntrustedInternalConnections == nil { + s.AllowedUntrustedInternalConnections = new(string) + } + + if s.EnableMultifactorAuthentication == nil { + s.EnableMultifactorAuthentication = NewBool(false) + } + + if s.EnforceMultifactorAuthentication == nil { + s.EnforceMultifactorAuthentication = NewBool(false) + } + + if s.EnableUserAccessTokens == nil { + s.EnableUserAccessTokens = NewBool(false) + } + + if s.GoroutineHealthThreshold == nil { + s.GoroutineHealthThreshold = NewInt(-1) + } + + if s.ConnectionSecurity == nil { + s.ConnectionSecurity = NewString("") + } + + if s.TLSKeyFile == nil { + s.TLSKeyFile = NewString(SERVICE_SETTINGS_DEFAULT_TLS_KEY_FILE) + } + + if s.TLSCertFile == nil { + s.TLSCertFile = NewString(SERVICE_SETTINGS_DEFAULT_TLS_CERT_FILE) + } + + if s.UseLetsEncrypt == nil { + s.UseLetsEncrypt = NewBool(false) + } + + if s.LetsEncryptCertificateCacheFile == nil { + s.LetsEncryptCertificateCacheFile = NewString("./config/letsencrypt.cache") + } + + if s.ReadTimeout == nil { + s.ReadTimeout = NewInt(SERVICE_SETTINGS_DEFAULT_READ_TIMEOUT) + } + + if s.WriteTimeout == nil { + s.WriteTimeout = NewInt(SERVICE_SETTINGS_DEFAULT_WRITE_TIMEOUT) + } + + if s.MaximumLoginAttempts == nil { + s.MaximumLoginAttempts = NewInt(SERVICE_SETTINGS_DEFAULT_MAX_LOGIN_ATTEMPTS) + } + + if s.Forward80To443 == nil { + s.Forward80To443 = NewBool(false) + } + + if s.TimeBetweenUserTypingUpdatesMilliseconds == nil { + s.TimeBetweenUserTypingUpdatesMilliseconds = NewInt64(5000) + } + + if s.EnablePostSearch == nil { + s.EnablePostSearch = NewBool(true) + } + + if s.EnableUserTypingMessages == nil { + s.EnableUserTypingMessages = NewBool(true) + } + + if s.EnableChannelViewedMessages == nil { + s.EnableChannelViewedMessages = NewBool(true) + } + + if s.EnableUserStatuses == nil { + s.EnableUserStatuses = NewBool(true) + } + + if s.ClusterLogTimeoutMilliseconds == nil { + s.ClusterLogTimeoutMilliseconds = NewInt(2000) + } + + if s.CloseUnusedDirectMessages == nil { + s.CloseUnusedDirectMessages = NewBool(false) + } + + if s.EnableTutorial == nil { + s.EnableTutorial = NewBool(true) + } + + if s.SessionLengthWebInDays == nil { + s.SessionLengthWebInDays = NewInt(30) + } + + if s.SessionLengthMobileInDays == nil { + s.SessionLengthMobileInDays = NewInt(30) + } + + if s.SessionLengthSSOInDays == nil { + s.SessionLengthSSOInDays = NewInt(30) + } + + if s.SessionCacheInMinutes == nil { + s.SessionCacheInMinutes = NewInt(10) + } + + if s.SessionIdleTimeoutInMinutes == nil { + s.SessionIdleTimeoutInMinutes = NewInt(0) + } + + if s.EnableCommands == nil { + s.EnableCommands = NewBool(false) + } + + if s.EnableOnlyAdminIntegrations == nil { + s.EnableOnlyAdminIntegrations = NewBool(true) + } + + if s.WebsocketPort == nil { + s.WebsocketPort = NewInt(80) + } + + if s.WebsocketSecurePort == nil { + s.WebsocketSecurePort = NewInt(443) + } + + if s.AllowCorsFrom == nil { + s.AllowCorsFrom = NewString(SERVICE_SETTINGS_DEFAULT_ALLOW_CORS_FROM) + } + + if s.WebserverMode == nil { + s.WebserverMode = NewString("gzip") + } else if *s.WebserverMode == "regular" { + *s.WebserverMode = "gzip" + } + + if s.EnableCustomEmoji == nil { + s.EnableCustomEmoji = NewBool(false) + } + + if s.EnableEmojiPicker == nil { + s.EnableEmojiPicker = NewBool(true) + } + + if s.RestrictCustomEmojiCreation == nil { + s.RestrictCustomEmojiCreation = NewString(RESTRICT_EMOJI_CREATION_ALL) + } + + if s.RestrictPostDelete == nil { + s.RestrictPostDelete = NewString(PERMISSIONS_DELETE_POST_ALL) + } + + if s.AllowEditPost == nil { + s.AllowEditPost = NewString(ALLOW_EDIT_POST_ALWAYS) + } + + if s.ExperimentalEnableAuthenticationTransfer == nil { + s.ExperimentalEnableAuthenticationTransfer = NewBool(true) + } + + if s.PostEditTimeLimit == nil { + s.PostEditTimeLimit = NewInt(300) + } + + if s.EnablePreviewFeatures == nil { + s.EnablePreviewFeatures = NewBool(true) + } } type ClusterSettings struct { @@ -194,16 +426,70 @@ type ClusterSettings struct { StreamingPort *int } +func (s *ClusterSettings) SetDefaults() { + if s.Enable == nil { + s.Enable = NewBool(false) + } + + if s.ClusterName == nil { + s.ClusterName = NewString("") + } + + if s.OverrideHostname == nil { + s.OverrideHostname = NewString("") + } + + if s.UseIpAddress == nil { + s.UseIpAddress = NewBool(true) + } + + if s.UseExperimentalGossip == nil { + s.UseExperimentalGossip = NewBool(false) + } + + if s.ReadOnlyConfig == nil { + s.ReadOnlyConfig = NewBool(true) + } + + if s.GossipPort == nil { + s.GossipPort = NewInt(8074) + } + + if s.StreamingPort == nil { + s.StreamingPort = NewInt(8075) + } +} + type MetricsSettings struct { Enable *bool BlockProfileRate *int ListenAddress *string } +func (s *MetricsSettings) SetDefaults() { + if s.ListenAddress == nil { + s.ListenAddress = NewString(":8067") + } + + if s.Enable == nil { + s.Enable = NewBool(false) + } + + if s.BlockProfileRate == nil { + s.BlockProfileRate = NewInt(0) + } +} + type AnalyticsSettings struct { MaxUsersForStatistics *int } +func (s *AnalyticsSettings) SetDefaults() { + if s.MaxUsersForStatistics == nil { + s.MaxUsersForStatistics = NewInt(ANALYTICS_SETTINGS_DEFAULT_MAX_USERS_FOR_STATISTICS) + } +} + type SSOSettings struct { Enable bool Secret string @@ -215,17 +501,43 @@ type SSOSettings struct { } type SqlSettings struct { - DriverName string - DataSource string + DriverName *string + DataSource *string DataSourceReplicas []string DataSourceSearchReplicas []string - MaxIdleConns int - MaxOpenConns int + MaxIdleConns *int + MaxOpenConns *int Trace bool AtRestEncryptKey string QueryTimeout *int } +func (s *SqlSettings) SetDefaults() { + if s.DriverName == nil { + s.DriverName = NewString(DATABASE_DRIVER_MYSQL) + } + + if s.DataSource == nil { + s.DataSource = NewString(SQL_SETTINGS_DEFAULT_DATA_SOURCE) + } + + if len(s.AtRestEncryptKey) == 0 { + s.AtRestEncryptKey = NewRandomString(32) + } + + if s.MaxIdleConns == nil { + s.MaxIdleConns = NewInt(20) + } + + if s.MaxOpenConns == nil { + s.MaxOpenConns = NewInt(300) + } + + if s.QueryTimeout == nil { + s.QueryTimeout = NewInt(30) + } +} + type LogSettings struct { EnableConsole bool ConsoleLevel string @@ -237,6 +549,12 @@ type LogSettings struct { EnableDiagnostics *bool } +func (s *LogSettings) SetDefaults() { + if s.EnableDiagnostics == nil { + s.EnableDiagnostics = NewBool(true) + } +} + type PasswordSettings struct { MinimumLength *int Lowercase *bool @@ -245,12 +563,34 @@ type PasswordSettings struct { Symbol *bool } +func (s *PasswordSettings) SetDefaults() { + if s.MinimumLength == nil { + s.MinimumLength = NewInt(PASSWORD_MINIMUM_LENGTH) + } + + if s.Lowercase == nil { + s.Lowercase = NewBool(false) + } + + if s.Number == nil { + s.Number = NewBool(false) + } + + if s.Uppercase == nil { + s.Uppercase = NewBool(false) + } + + if s.Symbol == nil { + s.Symbol = NewBool(false) + } +} + type FileSettings struct { EnableFileAttachments *bool EnableMobileUpload *bool EnableMobileDownload *bool MaxFileSize *int64 - DriverName string + DriverName *string Directory string EnablePublicLink bool PublicLinkSalt *string @@ -263,6 +603,64 @@ type FileSettings struct { AmazonS3SSL *bool AmazonS3SignV2 *bool AmazonS3SSE *bool + AmazonS3Trace *bool +} + +func (s *FileSettings) SetDefaults() { + if s.DriverName == nil { + s.DriverName = NewString(IMAGE_DRIVER_LOCAL) + } + + if s.AmazonS3Endpoint == "" { + // Defaults to "s3.amazonaws.com" + s.AmazonS3Endpoint = "s3.amazonaws.com" + } + + if s.AmazonS3SSL == nil { + s.AmazonS3SSL = NewBool(true) // Secure by default. + } + + if s.AmazonS3SignV2 == nil { + s.AmazonS3SignV2 = new(bool) + // Signature v2 is not enabled by default. + } + + if s.AmazonS3SSE == nil { + s.AmazonS3SSE = NewBool(false) // Not Encrypted by default. + } + + if s.AmazonS3Trace == nil { + s.AmazonS3Trace = NewBool(false) + } + + if s.EnableFileAttachments == nil { + s.EnableFileAttachments = NewBool(true) + } + + if s.EnableMobileUpload == nil { + s.EnableMobileUpload = NewBool(true) + } + + if s.EnableMobileDownload == nil { + s.EnableMobileDownload = NewBool(true) + } + + if s.MaxFileSize == nil { + s.MaxFileSize = NewInt64(52428800) // 50 MB + } + + if s.PublicLinkSalt == nil || len(*s.PublicLinkSalt) == 0 { + s.PublicLinkSalt = NewString(NewRandomString(32)) + } + + if s.InitialFont == "" { + // Defaults to "luximbi.ttf" + s.InitialFont = "luximbi.ttf" + } + + if s.Directory == "" { + s.Directory = "./data/" + } } type EmailSettings struct { @@ -270,6 +668,7 @@ type EmailSettings struct { EnableSignInWithEmail *bool EnableSignInWithUsername *bool SendEmailNotifications bool + UseChannelInEmailNotifications *bool RequireEmailVerification bool FeedbackName string FeedbackEmail string @@ -289,1412 +688,1441 @@ type EmailSettings struct { EmailBatchingInterval *int SkipServerCertificateVerification *bool EmailNotificationContentsType *string + LoginButtonColor *string + LoginButtonBorderColor *string + LoginButtonTextColor *string } -type RateLimitSettings struct { - Enable *bool - PerSec int - MaxBurst *int - MemoryStoreSize int - VaryByRemoteAddr bool - VaryByHeader string -} - -type PrivacySettings struct { - ShowEmailAddress bool - ShowFullName bool -} - -type SupportSettings struct { - TermsOfServiceLink *string - PrivacyPolicyLink *string - AboutLink *string - HelpLink *string - ReportAProblemLink *string - AdministratorsGuideLink *string - TroubleshootingForumLink *string - CommercialSupportLink *string - SupportEmail *string -} - -type AnnouncementSettings struct { - EnableBanner *bool - BannerText *string - BannerColor *string - BannerTextColor *string - AllowBannerDismissal *bool -} - -type TeamSettings struct { - SiteName string - MaxUsersPerTeam int - EnableTeamCreation bool - EnableUserCreation bool - EnableOpenServer *bool - RestrictCreationToDomains string - EnableCustomBrand *bool - CustomBrandText *string - CustomDescriptionText *string - RestrictDirectMessage *string - RestrictTeamInvite *string - RestrictPublicChannelManagement *string - RestrictPrivateChannelManagement *string - RestrictPublicChannelCreation *string - RestrictPrivateChannelCreation *string - RestrictPublicChannelDeletion *string - RestrictPrivateChannelDeletion *string - RestrictPrivateChannelManageMembers *string - UserStatusAwayTimeout *int64 - MaxChannelsPerTeam *int64 - MaxNotificationsPerChannel *int64 - TeammateNameDisplay *string -} - -type LdapSettings struct { - // Basic - Enable *bool - LdapServer *string - LdapPort *int - ConnectionSecurity *string - BaseDN *string - BindUsername *string - BindPassword *string - - // Filtering - UserFilter *string - - // User Mapping - FirstNameAttribute *string - LastNameAttribute *string - EmailAttribute *string - UsernameAttribute *string - NicknameAttribute *string - IdAttribute *string - PositionAttribute *string - - // Syncronization - SyncIntervalMinutes *int - - // Advanced - SkipCertificateVerification *bool - QueryTimeout *int - MaxPageSize *int - - // Customization - LoginFieldName *string -} - -type ComplianceSettings struct { - Enable *bool - Directory *string - EnableDaily *bool -} +func (s *EmailSettings) SetDefaults() { + if len(s.InviteSalt) == 0 { + s.InviteSalt = NewRandomString(32) + } -type LocalizationSettings struct { - DefaultServerLocale *string - DefaultClientLocale *string - AvailableLocales *string -} + if s.EnableSignInWithEmail == nil { + s.EnableSignInWithEmail = NewBool(s.EnableSignUpWithEmail) + } -type SamlSettings struct { - // Basic - Enable *bool - Verify *bool - Encrypt *bool + if s.EnableSignInWithUsername == nil { + s.EnableSignInWithUsername = NewBool(false) + } - IdpUrl *string - IdpDescriptorUrl *string - AssertionConsumerServiceURL *string + if s.UseChannelInEmailNotifications == nil { + s.UseChannelInEmailNotifications = NewBool(false) + } - IdpCertificateFile *string - PublicCertificateFile *string - PrivateKeyFile *string + if s.SendPushNotifications == nil { + s.SendPushNotifications = NewBool(false) + } - // User Mapping - FirstNameAttribute *string - LastNameAttribute *string - EmailAttribute *string - UsernameAttribute *string - NicknameAttribute *string - LocaleAttribute *string - PositionAttribute *string + if s.PushNotificationServer == nil { + s.PushNotificationServer = NewString("") + } - LoginButtonText *string -} + if s.PushNotificationContents == nil { + s.PushNotificationContents = NewString(GENERIC_NOTIFICATION) + } -type NativeAppSettings struct { - AppDownloadLink *string - AndroidAppDownloadLink *string - IosAppDownloadLink *string -} + if s.FeedbackOrganization == nil { + s.FeedbackOrganization = NewString(EMAIL_SETTINGS_DEFAULT_FEEDBACK_ORGANIZATION) + } -type WebrtcSettings struct { - Enable *bool - GatewayWebsocketUrl *string - GatewayAdminUrl *string - GatewayAdminSecret *string - StunURI *string - TurnURI *string - TurnUsername *string - TurnSharedKey *string -} + if s.EnableEmailBatching == nil { + s.EnableEmailBatching = NewBool(false) + } -type ElasticsearchSettings struct { - ConnectionUrl *string - Username *string - Password *string - EnableIndexing *bool - EnableSearching *bool - Sniff *bool - PostIndexReplicas *int - PostIndexShards *int -} + if s.EmailBatchingBufferSize == nil { + s.EmailBatchingBufferSize = NewInt(EMAIL_BATCHING_BUFFER_SIZE) + } -type DataRetentionSettings struct { - Enable *bool -} + if s.EmailBatchingInterval == nil { + s.EmailBatchingInterval = NewInt(EMAIL_BATCHING_INTERVAL) + } -type JobSettings struct { - RunJobs *bool - RunScheduler *bool -} + if s.EnableSMTPAuth == nil { + s.EnableSMTPAuth = new(bool) + if s.ConnectionSecurity == CONN_SECURITY_NONE { + *s.EnableSMTPAuth = false + } else { + *s.EnableSMTPAuth = true + } + } -type PluginSettings struct { - Plugins map[string]interface{} -} + if s.ConnectionSecurity == CONN_SECURITY_PLAIN { + s.ConnectionSecurity = CONN_SECURITY_NONE + } -type Config struct { - ServiceSettings ServiceSettings - TeamSettings TeamSettings - SqlSettings SqlSettings - LogSettings LogSettings - PasswordSettings PasswordSettings - FileSettings FileSettings - EmailSettings EmailSettings - RateLimitSettings RateLimitSettings - PrivacySettings PrivacySettings - SupportSettings SupportSettings - AnnouncementSettings AnnouncementSettings - GitLabSettings SSOSettings - GoogleSettings SSOSettings - Office365Settings SSOSettings - LdapSettings LdapSettings - ComplianceSettings ComplianceSettings - LocalizationSettings LocalizationSettings - SamlSettings SamlSettings - NativeAppSettings NativeAppSettings - ClusterSettings ClusterSettings - MetricsSettings MetricsSettings - AnalyticsSettings AnalyticsSettings - WebrtcSettings WebrtcSettings - ElasticsearchSettings ElasticsearchSettings - DataRetentionSettings DataRetentionSettings - JobSettings JobSettings - PluginSettings PluginSettings -} + if s.SkipServerCertificateVerification == nil { + s.SkipServerCertificateVerification = NewBool(false) + } -func (o *Config) ToJson() string { - b, err := json.Marshal(o) - if err != nil { - return "" - } else { - return string(b) + if s.EmailNotificationContentsType == nil { + s.EmailNotificationContentsType = NewString(EMAIL_NOTIFICATION_CONTENTS_FULL) } -} -func (o *Config) GetSSOService(service string) *SSOSettings { - switch service { - case SERVICE_GITLAB: - return &o.GitLabSettings - case SERVICE_GOOGLE: - return &o.GoogleSettings - case SERVICE_OFFICE365: - return &o.Office365Settings + if s.LoginButtonColor == nil { + s.LoginButtonColor = NewString("#0000") } - return nil -} + if s.LoginButtonBorderColor == nil { + s.LoginButtonBorderColor = NewString("#2389D7") + } -func ConfigFromJson(data io.Reader) *Config { - decoder := json.NewDecoder(data) - var o Config - err := decoder.Decode(&o) - if err == nil { - return &o - } else { - return nil + if s.LoginButtonTextColor == nil { + s.LoginButtonTextColor = NewString("#2389D7") } } -func (o *Config) SetDefaults() { +type RateLimitSettings struct { + Enable *bool + PerSec *int + MaxBurst *int + MemoryStoreSize *int + VaryByRemoteAddr bool + VaryByHeader string +} - if len(o.SqlSettings.AtRestEncryptKey) == 0 { - o.SqlSettings.AtRestEncryptKey = NewRandomString(32) +func (s *RateLimitSettings) SetDefaults() { + if s.Enable == nil { + s.Enable = NewBool(false) } - if o.SqlSettings.QueryTimeout == nil { - o.SqlSettings.QueryTimeout = new(int) - *o.SqlSettings.QueryTimeout = 30 + if s.PerSec == nil { + s.PerSec = NewInt(10) } - if o.FileSettings.AmazonS3Endpoint == "" { - // Defaults to "s3.amazonaws.com" - o.FileSettings.AmazonS3Endpoint = "s3.amazonaws.com" + if s.MaxBurst == nil { + s.MaxBurst = NewInt(100) } - if o.FileSettings.AmazonS3SSL == nil { - o.FileSettings.AmazonS3SSL = new(bool) - *o.FileSettings.AmazonS3SSL = true // Secure by default. + if s.MemoryStoreSize == nil { + s.MemoryStoreSize = NewInt(10000) } +} - if o.FileSettings.AmazonS3SignV2 == nil { - o.FileSettings.AmazonS3SignV2 = new(bool) - // Signature v2 is not enabled by default. - } +type PrivacySettings struct { + ShowEmailAddress bool + ShowFullName bool +} - if o.FileSettings.AmazonS3SSE == nil { - o.FileSettings.AmazonS3SSE = new(bool) - *o.FileSettings.AmazonS3SSE = false // Not Encrypted by default. - } +type SupportSettings struct { + TermsOfServiceLink *string + PrivacyPolicyLink *string + AboutLink *string + HelpLink *string + ReportAProblemLink *string + SupportEmail *string +} - if o.FileSettings.EnableFileAttachments == nil { - o.FileSettings.EnableFileAttachments = new(bool) - *o.FileSettings.EnableFileAttachments = true +func (s *SupportSettings) SetDefaults() { + if !IsSafeLink(s.TermsOfServiceLink) { + *s.TermsOfServiceLink = SUPPORT_SETTINGS_DEFAULT_TERMS_OF_SERVICE_LINK } - if o.FileSettings.EnableMobileUpload == nil { - o.FileSettings.EnableMobileUpload = new(bool) - *o.FileSettings.EnableMobileUpload = true + if s.TermsOfServiceLink == nil { + s.TermsOfServiceLink = NewString(SUPPORT_SETTINGS_DEFAULT_TERMS_OF_SERVICE_LINK) } - if o.FileSettings.EnableMobileDownload == nil { - o.FileSettings.EnableMobileDownload = new(bool) - *o.FileSettings.EnableMobileDownload = true + if !IsSafeLink(s.PrivacyPolicyLink) { + *s.PrivacyPolicyLink = "" } - if o.FileSettings.MaxFileSize == nil { - o.FileSettings.MaxFileSize = new(int64) - *o.FileSettings.MaxFileSize = 52428800 // 50 MB + if s.PrivacyPolicyLink == nil { + s.PrivacyPolicyLink = NewString(SUPPORT_SETTINGS_DEFAULT_PRIVACY_POLICY_LINK) } - if o.FileSettings.PublicLinkSalt == nil || len(*o.FileSettings.PublicLinkSalt) == 0 { - o.FileSettings.PublicLinkSalt = new(string) - *o.FileSettings.PublicLinkSalt = NewRandomString(32) + if !IsSafeLink(s.AboutLink) { + *s.AboutLink = "" } - if o.FileSettings.InitialFont == "" { - // Defaults to "luximbi.ttf" - o.FileSettings.InitialFont = "luximbi.ttf" + if s.AboutLink == nil { + s.AboutLink = NewString(SUPPORT_SETTINGS_DEFAULT_ABOUT_LINK) } - if o.FileSettings.Directory == "" { - o.FileSettings.Directory = "./data/" + if !IsSafeLink(s.HelpLink) { + *s.HelpLink = "" } - if len(o.EmailSettings.InviteSalt) == 0 { - o.EmailSettings.InviteSalt = NewRandomString(32) + if s.HelpLink == nil { + s.HelpLink = NewString(SUPPORT_SETTINGS_DEFAULT_HELP_LINK) } - if o.ServiceSettings.SiteURL == nil { - o.ServiceSettings.SiteURL = new(string) - *o.ServiceSettings.SiteURL = SERVICE_SETTINGS_DEFAULT_SITE_URL + if !IsSafeLink(s.ReportAProblemLink) { + *s.ReportAProblemLink = "" } - if o.ServiceSettings.LicenseFileLocation == nil { - o.ServiceSettings.LicenseFileLocation = new(string) + if s.ReportAProblemLink == nil { + s.ReportAProblemLink = NewString(SUPPORT_SETTINGS_DEFAULT_REPORT_A_PROBLEM_LINK) } - if o.ServiceSettings.EnableAPIv3 == nil { - o.ServiceSettings.EnableAPIv3 = new(bool) - *o.ServiceSettings.EnableAPIv3 = true + if s.SupportEmail == nil { + s.SupportEmail = NewString(SUPPORT_SETTINGS_DEFAULT_SUPPORT_EMAIL) } +} - if o.ServiceSettings.EnableLinkPreviews == nil { - o.ServiceSettings.EnableLinkPreviews = new(bool) - *o.ServiceSettings.EnableLinkPreviews = false - } +type AnnouncementSettings struct { + EnableBanner *bool + BannerText *string + BannerColor *string + BannerTextColor *string + AllowBannerDismissal *bool +} - if o.ServiceSettings.EnableDeveloper == nil { - o.ServiceSettings.EnableDeveloper = new(bool) - *o.ServiceSettings.EnableDeveloper = false +func (s *AnnouncementSettings) SetDefaults() { + if s.EnableBanner == nil { + s.EnableBanner = NewBool(false) } - if o.ServiceSettings.EnableSecurityFixAlert == nil { - o.ServiceSettings.EnableSecurityFixAlert = new(bool) - *o.ServiceSettings.EnableSecurityFixAlert = true + if s.BannerText == nil { + s.BannerText = NewString("") } - if o.ServiceSettings.EnableInsecureOutgoingConnections == nil { - o.ServiceSettings.EnableInsecureOutgoingConnections = new(bool) - *o.ServiceSettings.EnableInsecureOutgoingConnections = false + if s.BannerColor == nil { + s.BannerColor = NewString(ANNOUNCEMENT_SETTINGS_DEFAULT_BANNER_COLOR) } - if o.ServiceSettings.EnableMultifactorAuthentication == nil { - o.ServiceSettings.EnableMultifactorAuthentication = new(bool) - *o.ServiceSettings.EnableMultifactorAuthentication = false + if s.BannerTextColor == nil { + s.BannerTextColor = NewString(ANNOUNCEMENT_SETTINGS_DEFAULT_BANNER_TEXT_COLOR) } - if o.ServiceSettings.EnforceMultifactorAuthentication == nil { - o.ServiceSettings.EnforceMultifactorAuthentication = new(bool) - *o.ServiceSettings.EnforceMultifactorAuthentication = false + if s.AllowBannerDismissal == nil { + s.AllowBannerDismissal = NewBool(true) } +} - if o.ServiceSettings.EnableUserAccessTokens == nil { - o.ServiceSettings.EnableUserAccessTokens = new(bool) - *o.ServiceSettings.EnableUserAccessTokens = false - } +type ThemeSettings struct { + EnableThemeSelection *bool + DefaultTheme *string + AllowCustomThemes *bool + AllowedThemes []string +} - if o.PasswordSettings.MinimumLength == nil { - o.PasswordSettings.MinimumLength = new(int) - *o.PasswordSettings.MinimumLength = PASSWORD_MINIMUM_LENGTH +func (s *ThemeSettings) SetDefaults() { + if s.EnableThemeSelection == nil { + s.EnableThemeSelection = NewBool(true) } - if o.PasswordSettings.Lowercase == nil { - o.PasswordSettings.Lowercase = new(bool) - *o.PasswordSettings.Lowercase = false + if s.DefaultTheme == nil { + s.DefaultTheme = NewString(TEAM_SETTINGS_DEFAULT_TEAM_TEXT) } - if o.PasswordSettings.Number == nil { - o.PasswordSettings.Number = new(bool) - *o.PasswordSettings.Number = false + if s.AllowCustomThemes == nil { + s.AllowCustomThemes = NewBool(true) } - if o.PasswordSettings.Uppercase == nil { - o.PasswordSettings.Uppercase = new(bool) - *o.PasswordSettings.Uppercase = false + if s.AllowedThemes == nil { + s.AllowedThemes = []string{} } +} + +type TeamSettings struct { + SiteName string + MaxUsersPerTeam *int + EnableTeamCreation bool + EnableUserCreation bool + EnableOpenServer *bool + RestrictCreationToDomains string + EnableCustomBrand *bool + CustomBrandText *string + CustomDescriptionText *string + RestrictDirectMessage *string + RestrictTeamInvite *string + RestrictPublicChannelManagement *string + RestrictPrivateChannelManagement *string + RestrictPublicChannelCreation *string + RestrictPrivateChannelCreation *string + RestrictPublicChannelDeletion *string + RestrictPrivateChannelDeletion *string + RestrictPrivateChannelManageMembers *string + EnableXToLeaveChannelsFromLHS *bool + UserStatusAwayTimeout *int64 + MaxChannelsPerTeam *int64 + MaxNotificationsPerChannel *int64 + EnableConfirmNotificationsToChannel *bool + TeammateNameDisplay *string + ExperimentalTownSquareIsReadOnly *bool + ExperimentalPrimaryTeam *string +} - if o.PasswordSettings.Symbol == nil { - o.PasswordSettings.Symbol = new(bool) - *o.PasswordSettings.Symbol = false +func (s *TeamSettings) SetDefaults() { + if s.MaxUsersPerTeam == nil { + s.MaxUsersPerTeam = NewInt(TEAM_SETTINGS_DEFAULT_MAX_USERS_PER_TEAM) } - if o.TeamSettings.EnableCustomBrand == nil { - o.TeamSettings.EnableCustomBrand = new(bool) - *o.TeamSettings.EnableCustomBrand = false + if s.EnableCustomBrand == nil { + s.EnableCustomBrand = NewBool(false) } - if o.TeamSettings.CustomBrandText == nil { - o.TeamSettings.CustomBrandText = new(string) - *o.TeamSettings.CustomBrandText = TEAM_SETTINGS_DEFAULT_CUSTOM_BRAND_TEXT + if s.CustomBrandText == nil { + s.CustomBrandText = NewString(TEAM_SETTINGS_DEFAULT_CUSTOM_BRAND_TEXT) } - if o.TeamSettings.CustomDescriptionText == nil { - o.TeamSettings.CustomDescriptionText = new(string) - *o.TeamSettings.CustomDescriptionText = TEAM_SETTINGS_DEFAULT_CUSTOM_DESCRIPTION_TEXT + if s.CustomDescriptionText == nil { + s.CustomDescriptionText = NewString(TEAM_SETTINGS_DEFAULT_CUSTOM_DESCRIPTION_TEXT) } - if o.TeamSettings.EnableOpenServer == nil { - o.TeamSettings.EnableOpenServer = new(bool) - *o.TeamSettings.EnableOpenServer = false + if s.EnableOpenServer == nil { + s.EnableOpenServer = NewBool(false) } - if o.TeamSettings.RestrictDirectMessage == nil { - o.TeamSettings.RestrictDirectMessage = new(string) - *o.TeamSettings.RestrictDirectMessage = DIRECT_MESSAGE_ANY + if s.RestrictDirectMessage == nil { + s.RestrictDirectMessage = NewString(DIRECT_MESSAGE_ANY) } - if o.TeamSettings.RestrictTeamInvite == nil { - o.TeamSettings.RestrictTeamInvite = new(string) - *o.TeamSettings.RestrictTeamInvite = PERMISSIONS_ALL + if s.RestrictTeamInvite == nil { + s.RestrictTeamInvite = NewString(PERMISSIONS_ALL) } - if o.TeamSettings.RestrictPublicChannelManagement == nil { - o.TeamSettings.RestrictPublicChannelManagement = new(string) - *o.TeamSettings.RestrictPublicChannelManagement = PERMISSIONS_ALL + if s.RestrictPublicChannelManagement == nil { + s.RestrictPublicChannelManagement = NewString(PERMISSIONS_ALL) } - if o.TeamSettings.RestrictPrivateChannelManagement == nil { - o.TeamSettings.RestrictPrivateChannelManagement = new(string) - *o.TeamSettings.RestrictPrivateChannelManagement = PERMISSIONS_ALL + if s.RestrictPrivateChannelManagement == nil { + s.RestrictPrivateChannelManagement = NewString(PERMISSIONS_ALL) } - if o.TeamSettings.RestrictPublicChannelCreation == nil { - o.TeamSettings.RestrictPublicChannelCreation = new(string) + if s.RestrictPublicChannelCreation == nil { + s.RestrictPublicChannelCreation = new(string) // If this setting does not exist, assume migration from <3.6, so use management setting as default. - if *o.TeamSettings.RestrictPublicChannelManagement == PERMISSIONS_CHANNEL_ADMIN { - *o.TeamSettings.RestrictPublicChannelCreation = PERMISSIONS_TEAM_ADMIN + if *s.RestrictPublicChannelManagement == PERMISSIONS_CHANNEL_ADMIN { + *s.RestrictPublicChannelCreation = PERMISSIONS_TEAM_ADMIN } else { - *o.TeamSettings.RestrictPublicChannelCreation = *o.TeamSettings.RestrictPublicChannelManagement + *s.RestrictPublicChannelCreation = *s.RestrictPublicChannelManagement } } - if o.TeamSettings.RestrictPrivateChannelCreation == nil { - o.TeamSettings.RestrictPrivateChannelCreation = new(string) + if s.RestrictPrivateChannelCreation == nil { // If this setting does not exist, assume migration from <3.6, so use management setting as default. - if *o.TeamSettings.RestrictPrivateChannelManagement == PERMISSIONS_CHANNEL_ADMIN { - *o.TeamSettings.RestrictPrivateChannelCreation = PERMISSIONS_TEAM_ADMIN + if *s.RestrictPrivateChannelManagement == PERMISSIONS_CHANNEL_ADMIN { + s.RestrictPrivateChannelCreation = NewString(PERMISSIONS_TEAM_ADMIN) } else { - *o.TeamSettings.RestrictPrivateChannelCreation = *o.TeamSettings.RestrictPrivateChannelManagement + s.RestrictPrivateChannelCreation = NewString(*s.RestrictPrivateChannelManagement) } } - if o.TeamSettings.RestrictPublicChannelDeletion == nil { - o.TeamSettings.RestrictPublicChannelDeletion = new(string) + if s.RestrictPublicChannelDeletion == nil { // If this setting does not exist, assume migration from <3.6, so use management setting as default. - *o.TeamSettings.RestrictPublicChannelDeletion = *o.TeamSettings.RestrictPublicChannelManagement + s.RestrictPublicChannelDeletion = NewString(*s.RestrictPublicChannelManagement) } - if o.TeamSettings.RestrictPrivateChannelDeletion == nil { - o.TeamSettings.RestrictPrivateChannelDeletion = new(string) + if s.RestrictPrivateChannelDeletion == nil { // If this setting does not exist, assume migration from <3.6, so use management setting as default. - *o.TeamSettings.RestrictPrivateChannelDeletion = *o.TeamSettings.RestrictPrivateChannelManagement + s.RestrictPrivateChannelDeletion = NewString(*s.RestrictPrivateChannelManagement) } - if o.TeamSettings.RestrictPrivateChannelManageMembers == nil { - o.TeamSettings.RestrictPrivateChannelManageMembers = new(string) - *o.TeamSettings.RestrictPrivateChannelManageMembers = PERMISSIONS_ALL + if s.RestrictPrivateChannelManageMembers == nil { + s.RestrictPrivateChannelManageMembers = NewString(PERMISSIONS_ALL) } - if o.TeamSettings.UserStatusAwayTimeout == nil { - o.TeamSettings.UserStatusAwayTimeout = new(int64) - *o.TeamSettings.UserStatusAwayTimeout = TEAM_SETTINGS_DEFAULT_USER_STATUS_AWAY_TIMEOUT + if s.EnableXToLeaveChannelsFromLHS == nil { + s.EnableXToLeaveChannelsFromLHS = NewBool(false) } - if o.TeamSettings.MaxChannelsPerTeam == nil { - o.TeamSettings.MaxChannelsPerTeam = new(int64) - *o.TeamSettings.MaxChannelsPerTeam = 2000 + if s.UserStatusAwayTimeout == nil { + s.UserStatusAwayTimeout = NewInt64(TEAM_SETTINGS_DEFAULT_USER_STATUS_AWAY_TIMEOUT) } - if o.TeamSettings.MaxNotificationsPerChannel == nil { - o.TeamSettings.MaxNotificationsPerChannel = new(int64) - *o.TeamSettings.MaxNotificationsPerChannel = 1000 + if s.MaxChannelsPerTeam == nil { + s.MaxChannelsPerTeam = NewInt64(2000) } - if o.EmailSettings.EnableSignInWithEmail == nil { - o.EmailSettings.EnableSignInWithEmail = new(bool) - - if o.EmailSettings.EnableSignUpWithEmail == true { - *o.EmailSettings.EnableSignInWithEmail = true - } else { - *o.EmailSettings.EnableSignInWithEmail = false - } + if s.MaxNotificationsPerChannel == nil { + s.MaxNotificationsPerChannel = NewInt64(1000) } - if o.EmailSettings.EnableSignInWithUsername == nil { - o.EmailSettings.EnableSignInWithUsername = new(bool) - *o.EmailSettings.EnableSignInWithUsername = false + if s.EnableConfirmNotificationsToChannel == nil { + s.EnableConfirmNotificationsToChannel = NewBool(true) } - if o.EmailSettings.SendPushNotifications == nil { - o.EmailSettings.SendPushNotifications = new(bool) - *o.EmailSettings.SendPushNotifications = false + if s.ExperimentalTownSquareIsReadOnly == nil { + s.ExperimentalTownSquareIsReadOnly = NewBool(false) } - if o.EmailSettings.PushNotificationServer == nil { - o.EmailSettings.PushNotificationServer = new(string) - *o.EmailSettings.PushNotificationServer = "" + if s.ExperimentalPrimaryTeam == nil { + s.ExperimentalPrimaryTeam = NewString("") } +} - if o.EmailSettings.PushNotificationContents == nil { - o.EmailSettings.PushNotificationContents = new(string) - *o.EmailSettings.PushNotificationContents = GENERIC_NOTIFICATION - } +type ClientRequirements struct { + AndroidLatestVersion string + AndroidMinVersion string + DesktopLatestVersion string + DesktopMinVersion string + IosLatestVersion string + IosMinVersion string +} - if o.EmailSettings.FeedbackOrganization == nil { - o.EmailSettings.FeedbackOrganization = new(string) - *o.EmailSettings.FeedbackOrganization = EMAIL_SETTINGS_DEFAULT_FEEDBACK_ORGANIZATION - } +type LdapSettings struct { + // Basic + Enable *bool + EnableSync *bool + LdapServer *string + LdapPort *int + ConnectionSecurity *string + BaseDN *string + BindUsername *string + BindPassword *string - if o.EmailSettings.EnableEmailBatching == nil { - o.EmailSettings.EnableEmailBatching = new(bool) - *o.EmailSettings.EnableEmailBatching = false - } + // Filtering + UserFilter *string - if o.EmailSettings.EmailBatchingBufferSize == nil { - o.EmailSettings.EmailBatchingBufferSize = new(int) - *o.EmailSettings.EmailBatchingBufferSize = EMAIL_BATCHING_BUFFER_SIZE - } + // User Mapping + FirstNameAttribute *string + LastNameAttribute *string + EmailAttribute *string + UsernameAttribute *string + NicknameAttribute *string + IdAttribute *string + PositionAttribute *string - if o.EmailSettings.EmailBatchingInterval == nil { - o.EmailSettings.EmailBatchingInterval = new(int) - *o.EmailSettings.EmailBatchingInterval = EMAIL_BATCHING_INTERVAL - } + // Syncronization + SyncIntervalMinutes *int - if o.EmailSettings.EnableSMTPAuth == nil { - o.EmailSettings.EnableSMTPAuth = new(bool) - if o.EmailSettings.ConnectionSecurity == CONN_SECURITY_NONE { - *o.EmailSettings.EnableSMTPAuth = false - } else { - *o.EmailSettings.EnableSMTPAuth = true - } - } + // Advanced + SkipCertificateVerification *bool + QueryTimeout *int + MaxPageSize *int - if o.EmailSettings.ConnectionSecurity == CONN_SECURITY_PLAIN { - o.EmailSettings.ConnectionSecurity = CONN_SECURITY_NONE - } + // Customization + LoginFieldName *string - if o.EmailSettings.SkipServerCertificateVerification == nil { - o.EmailSettings.SkipServerCertificateVerification = new(bool) - *o.EmailSettings.SkipServerCertificateVerification = false - } + LoginButtonColor *string + LoginButtonBorderColor *string + LoginButtonTextColor *string +} - if o.EmailSettings.EmailNotificationContentsType == nil { - o.EmailSettings.EmailNotificationContentsType = new(string) - *o.EmailSettings.EmailNotificationContentsType = EMAIL_NOTIFICATION_CONTENTS_FULL +func (s *LdapSettings) SetDefaults() { + if s.Enable == nil { + s.Enable = NewBool(false) } - if !IsSafeLink(o.SupportSettings.TermsOfServiceLink) { - *o.SupportSettings.TermsOfServiceLink = SUPPORT_SETTINGS_DEFAULT_TERMS_OF_SERVICE_LINK + // When unset should default to LDAP Enabled + if s.EnableSync == nil { + s.EnableSync = NewBool(*s.Enable) } - if o.SupportSettings.TermsOfServiceLink == nil { - o.SupportSettings.TermsOfServiceLink = new(string) - *o.SupportSettings.TermsOfServiceLink = SUPPORT_SETTINGS_DEFAULT_TERMS_OF_SERVICE_LINK + if s.LdapServer == nil { + s.LdapServer = NewString("") } - if !IsSafeLink(o.SupportSettings.PrivacyPolicyLink) { - *o.SupportSettings.PrivacyPolicyLink = "" + if s.LdapPort == nil { + s.LdapPort = NewInt(389) } - if o.SupportSettings.PrivacyPolicyLink == nil { - o.SupportSettings.PrivacyPolicyLink = new(string) - *o.SupportSettings.PrivacyPolicyLink = SUPPORT_SETTINGS_DEFAULT_PRIVACY_POLICY_LINK + if s.ConnectionSecurity == nil { + s.ConnectionSecurity = NewString("") } - if !IsSafeLink(o.SupportSettings.AboutLink) { - *o.SupportSettings.AboutLink = "" + if s.BaseDN == nil { + s.BaseDN = NewString("") } - if o.SupportSettings.AboutLink == nil { - o.SupportSettings.AboutLink = new(string) - *o.SupportSettings.AboutLink = SUPPORT_SETTINGS_DEFAULT_ABOUT_LINK + if s.BindUsername == nil { + s.BindUsername = NewString("") } - if !IsSafeLink(o.SupportSettings.HelpLink) { - *o.SupportSettings.HelpLink = "" + if s.BindPassword == nil { + s.BindPassword = NewString("") } - if o.SupportSettings.HelpLink == nil { - o.SupportSettings.HelpLink = new(string) - *o.SupportSettings.HelpLink = SUPPORT_SETTINGS_DEFAULT_HELP_LINK + if s.UserFilter == nil { + s.UserFilter = NewString("") } - if !IsSafeLink(o.SupportSettings.ReportAProblemLink) { - *o.SupportSettings.ReportAProblemLink = "" + if s.FirstNameAttribute == nil { + s.FirstNameAttribute = NewString(LDAP_SETTINGS_DEFAULT_FIRST_NAME_ATTRIBUTE) } - if o.SupportSettings.ReportAProblemLink == nil { - o.SupportSettings.ReportAProblemLink = new(string) - *o.SupportSettings.ReportAProblemLink = SUPPORT_SETTINGS_DEFAULT_REPORT_A_PROBLEM_LINK + if s.LastNameAttribute == nil { + s.LastNameAttribute = NewString(LDAP_SETTINGS_DEFAULT_LAST_NAME_ATTRIBUTE) } - if !IsSafeLink(o.SupportSettings.AdministratorsGuideLink) { - *o.SupportSettings.AdministratorsGuideLink = "" + if s.EmailAttribute == nil { + s.EmailAttribute = NewString(LDAP_SETTINGS_DEFAULT_EMAIL_ATTRIBUTE) } - if o.SupportSettings.AdministratorsGuideLink == nil { - o.SupportSettings.AdministratorsGuideLink = new(string) - *o.SupportSettings.AdministratorsGuideLink = SUPPORT_SETTINGS_DEFAULT_ADMINISTRATORS_GUIDE_LINK + if s.UsernameAttribute == nil { + s.UsernameAttribute = NewString(LDAP_SETTINGS_DEFAULT_USERNAME_ATTRIBUTE) } - if !IsSafeLink(o.SupportSettings.TroubleshootingForumLink) { - *o.SupportSettings.TroubleshootingForumLink = "" + if s.NicknameAttribute == nil { + s.NicknameAttribute = NewString(LDAP_SETTINGS_DEFAULT_NICKNAME_ATTRIBUTE) } - if o.SupportSettings.TroubleshootingForumLink == nil { - o.SupportSettings.TroubleshootingForumLink = new(string) - *o.SupportSettings.TroubleshootingForumLink = SUPPORT_SETTINGS_DEFAULT_TROUBLESHOOTING_FORUM_LINK + if s.IdAttribute == nil { + s.IdAttribute = NewString(LDAP_SETTINGS_DEFAULT_ID_ATTRIBUTE) } - if !IsSafeLink(o.SupportSettings.CommercialSupportLink) { - *o.SupportSettings.CommercialSupportLink = "" + if s.PositionAttribute == nil { + s.PositionAttribute = NewString(LDAP_SETTINGS_DEFAULT_POSITION_ATTRIBUTE) } - if o.SupportSettings.CommercialSupportLink == nil { - o.SupportSettings.CommercialSupportLink = new(string) - *o.SupportSettings.CommercialSupportLink = SUPPORT_SETTINGS_DEFAULT_COMMERCIAL_SUPPORT_LINK + if s.SyncIntervalMinutes == nil { + s.SyncIntervalMinutes = NewInt(60) } - if o.SupportSettings.SupportEmail == nil { - o.SupportSettings.SupportEmail = new(string) - *o.SupportSettings.SupportEmail = SUPPORT_SETTINGS_DEFAULT_SUPPORT_EMAIL + if s.SkipCertificateVerification == nil { + s.SkipCertificateVerification = NewBool(false) } - if o.AnnouncementSettings.EnableBanner == nil { - o.AnnouncementSettings.EnableBanner = new(bool) - *o.AnnouncementSettings.EnableBanner = false + if s.QueryTimeout == nil { + s.QueryTimeout = NewInt(60) } - if o.AnnouncementSettings.BannerText == nil { - o.AnnouncementSettings.BannerText = new(string) - *o.AnnouncementSettings.BannerText = "" + if s.MaxPageSize == nil { + s.MaxPageSize = NewInt(0) } - if o.AnnouncementSettings.BannerColor == nil { - o.AnnouncementSettings.BannerColor = new(string) - *o.AnnouncementSettings.BannerColor = ANNOUNCEMENT_SETTINGS_DEFAULT_BANNER_COLOR + if s.LoginFieldName == nil { + s.LoginFieldName = NewString(LDAP_SETTINGS_DEFAULT_LOGIN_FIELD_NAME) } - if o.AnnouncementSettings.BannerTextColor == nil { - o.AnnouncementSettings.BannerTextColor = new(string) - *o.AnnouncementSettings.BannerTextColor = ANNOUNCEMENT_SETTINGS_DEFAULT_BANNER_TEXT_COLOR + if s.LoginButtonColor == nil { + s.LoginButtonColor = NewString("#0000") } - if o.AnnouncementSettings.AllowBannerDismissal == nil { - o.AnnouncementSettings.AllowBannerDismissal = new(bool) - *o.AnnouncementSettings.AllowBannerDismissal = true + if s.LoginButtonBorderColor == nil { + s.LoginButtonBorderColor = NewString("#2389D7") } - if o.LdapSettings.Enable == nil { - o.LdapSettings.Enable = new(bool) - *o.LdapSettings.Enable = false + if s.LoginButtonTextColor == nil { + s.LoginButtonTextColor = NewString("#2389D7") } +} - if o.LdapSettings.LdapServer == nil { - o.LdapSettings.LdapServer = new(string) - *o.LdapSettings.LdapServer = "" - } +type ComplianceSettings struct { + Enable *bool + Directory *string + EnableDaily *bool +} - if o.LdapSettings.LdapPort == nil { - o.LdapSettings.LdapPort = new(int) - *o.LdapSettings.LdapPort = 389 +func (s *ComplianceSettings) SetDefaults() { + if s.Enable == nil { + s.Enable = NewBool(false) } - if o.LdapSettings.ConnectionSecurity == nil { - o.LdapSettings.ConnectionSecurity = new(string) - *o.LdapSettings.ConnectionSecurity = "" + if s.Directory == nil { + s.Directory = NewString("./data/") } - if o.LdapSettings.BaseDN == nil { - o.LdapSettings.BaseDN = new(string) - *o.LdapSettings.BaseDN = "" + if s.EnableDaily == nil { + s.EnableDaily = NewBool(false) } +} - if o.LdapSettings.BindUsername == nil { - o.LdapSettings.BindUsername = new(string) - *o.LdapSettings.BindUsername = "" - } +type LocalizationSettings struct { + DefaultServerLocale *string + DefaultClientLocale *string + AvailableLocales *string +} - if o.LdapSettings.BindPassword == nil { - o.LdapSettings.BindPassword = new(string) - *o.LdapSettings.BindPassword = "" +func (s *LocalizationSettings) SetDefaults() { + if s.DefaultServerLocale == nil { + s.DefaultServerLocale = NewString(DEFAULT_LOCALE) } - if o.LdapSettings.UserFilter == nil { - o.LdapSettings.UserFilter = new(string) - *o.LdapSettings.UserFilter = "" + if s.DefaultClientLocale == nil { + s.DefaultClientLocale = NewString(DEFAULT_LOCALE) } - if o.LdapSettings.FirstNameAttribute == nil { - o.LdapSettings.FirstNameAttribute = new(string) - *o.LdapSettings.FirstNameAttribute = LDAP_SETTINGS_DEFAULT_FIRST_NAME_ATTRIBUTE + if s.AvailableLocales == nil { + s.AvailableLocales = NewString("") } +} - if o.LdapSettings.LastNameAttribute == nil { - o.LdapSettings.LastNameAttribute = new(string) - *o.LdapSettings.LastNameAttribute = LDAP_SETTINGS_DEFAULT_LAST_NAME_ATTRIBUTE - } +type SamlSettings struct { + // Basic + Enable *bool + EnableSyncWithLdap *bool - if o.LdapSettings.EmailAttribute == nil { - o.LdapSettings.EmailAttribute = new(string) - *o.LdapSettings.EmailAttribute = LDAP_SETTINGS_DEFAULT_EMAIL_ATTRIBUTE - } + Verify *bool + Encrypt *bool - if o.LdapSettings.UsernameAttribute == nil { - o.LdapSettings.UsernameAttribute = new(string) - *o.LdapSettings.UsernameAttribute = LDAP_SETTINGS_DEFAULT_USERNAME_ATTRIBUTE - } + IdpUrl *string + IdpDescriptorUrl *string + AssertionConsumerServiceURL *string - if o.LdapSettings.NicknameAttribute == nil { - o.LdapSettings.NicknameAttribute = new(string) - *o.LdapSettings.NicknameAttribute = LDAP_SETTINGS_DEFAULT_NICKNAME_ATTRIBUTE - } + IdpCertificateFile *string + PublicCertificateFile *string + PrivateKeyFile *string - if o.LdapSettings.IdAttribute == nil { - o.LdapSettings.IdAttribute = new(string) - *o.LdapSettings.IdAttribute = LDAP_SETTINGS_DEFAULT_ID_ATTRIBUTE - } + // User Mapping + FirstNameAttribute *string + LastNameAttribute *string + EmailAttribute *string + UsernameAttribute *string + NicknameAttribute *string + LocaleAttribute *string + PositionAttribute *string - if o.LdapSettings.PositionAttribute == nil { - o.LdapSettings.PositionAttribute = new(string) - *o.LdapSettings.PositionAttribute = LDAP_SETTINGS_DEFAULT_POSITION_ATTRIBUTE - } + LoginButtonText *string - if o.LdapSettings.SyncIntervalMinutes == nil { - o.LdapSettings.SyncIntervalMinutes = new(int) - *o.LdapSettings.SyncIntervalMinutes = 60 - } + LoginButtonColor *string + LoginButtonBorderColor *string + LoginButtonTextColor *string +} - if o.LdapSettings.SkipCertificateVerification == nil { - o.LdapSettings.SkipCertificateVerification = new(bool) - *o.LdapSettings.SkipCertificateVerification = false +func (s *SamlSettings) SetDefaults() { + if s.Enable == nil { + s.Enable = NewBool(false) } - if o.LdapSettings.QueryTimeout == nil { - o.LdapSettings.QueryTimeout = new(int) - *o.LdapSettings.QueryTimeout = 60 + if s.EnableSyncWithLdap == nil { + s.EnableSyncWithLdap = NewBool(false) } - if o.LdapSettings.MaxPageSize == nil { - o.LdapSettings.MaxPageSize = new(int) - *o.LdapSettings.MaxPageSize = 0 + if s.Verify == nil { + s.Verify = NewBool(true) } - if o.LdapSettings.LoginFieldName == nil { - o.LdapSettings.LoginFieldName = new(string) - *o.LdapSettings.LoginFieldName = LDAP_SETTINGS_DEFAULT_LOGIN_FIELD_NAME + if s.Encrypt == nil { + s.Encrypt = NewBool(true) } - if o.ServiceSettings.SessionLengthWebInDays == nil { - o.ServiceSettings.SessionLengthWebInDays = new(int) - *o.ServiceSettings.SessionLengthWebInDays = 30 + if s.IdpUrl == nil { + s.IdpUrl = NewString("") } - if o.ServiceSettings.SessionLengthMobileInDays == nil { - o.ServiceSettings.SessionLengthMobileInDays = new(int) - *o.ServiceSettings.SessionLengthMobileInDays = 30 + if s.IdpDescriptorUrl == nil { + s.IdpDescriptorUrl = NewString("") } - if o.ServiceSettings.SessionLengthSSOInDays == nil { - o.ServiceSettings.SessionLengthSSOInDays = new(int) - *o.ServiceSettings.SessionLengthSSOInDays = 30 + if s.IdpCertificateFile == nil { + s.IdpCertificateFile = NewString("") } - if o.ServiceSettings.SessionCacheInMinutes == nil { - o.ServiceSettings.SessionCacheInMinutes = new(int) - *o.ServiceSettings.SessionCacheInMinutes = 10 + if s.PublicCertificateFile == nil { + s.PublicCertificateFile = NewString("") } - if o.ServiceSettings.EnableCommands == nil { - o.ServiceSettings.EnableCommands = new(bool) - *o.ServiceSettings.EnableCommands = false + if s.PrivateKeyFile == nil { + s.PrivateKeyFile = NewString("") } - if o.ServiceSettings.EnableOnlyAdminIntegrations == nil { - o.ServiceSettings.EnableOnlyAdminIntegrations = new(bool) - *o.ServiceSettings.EnableOnlyAdminIntegrations = true + if s.AssertionConsumerServiceURL == nil { + s.AssertionConsumerServiceURL = NewString("") } - if o.ServiceSettings.WebsocketPort == nil { - o.ServiceSettings.WebsocketPort = new(int) - *o.ServiceSettings.WebsocketPort = 80 + if s.LoginButtonText == nil || *s.LoginButtonText == "" { + s.LoginButtonText = NewString(USER_AUTH_SERVICE_SAML_TEXT) } - if o.ServiceSettings.WebsocketSecurePort == nil { - o.ServiceSettings.WebsocketSecurePort = new(int) - *o.ServiceSettings.WebsocketSecurePort = 443 + if s.FirstNameAttribute == nil { + s.FirstNameAttribute = NewString(SAML_SETTINGS_DEFAULT_FIRST_NAME_ATTRIBUTE) } - if o.ServiceSettings.AllowCorsFrom == nil { - o.ServiceSettings.AllowCorsFrom = new(string) - *o.ServiceSettings.AllowCorsFrom = SERVICE_SETTINGS_DEFAULT_ALLOW_CORS_FROM + if s.LastNameAttribute == nil { + s.LastNameAttribute = NewString(SAML_SETTINGS_DEFAULT_LAST_NAME_ATTRIBUTE) } - if o.ServiceSettings.WebserverMode == nil { - o.ServiceSettings.WebserverMode = new(string) - *o.ServiceSettings.WebserverMode = "gzip" - } else if *o.ServiceSettings.WebserverMode == "regular" { - *o.ServiceSettings.WebserverMode = "gzip" + if s.EmailAttribute == nil { + s.EmailAttribute = NewString(SAML_SETTINGS_DEFAULT_EMAIL_ATTRIBUTE) } - if o.ServiceSettings.EnableCustomEmoji == nil { - o.ServiceSettings.EnableCustomEmoji = new(bool) - *o.ServiceSettings.EnableCustomEmoji = false + if s.UsernameAttribute == nil { + s.UsernameAttribute = NewString(SAML_SETTINGS_DEFAULT_USERNAME_ATTRIBUTE) } - if o.ServiceSettings.EnableEmojiPicker == nil { - o.ServiceSettings.EnableEmojiPicker = new(bool) - *o.ServiceSettings.EnableEmojiPicker = true + if s.NicknameAttribute == nil { + s.NicknameAttribute = NewString(SAML_SETTINGS_DEFAULT_NICKNAME_ATTRIBUTE) } - if o.ServiceSettings.RestrictCustomEmojiCreation == nil { - o.ServiceSettings.RestrictCustomEmojiCreation = new(string) - *o.ServiceSettings.RestrictCustomEmojiCreation = RESTRICT_EMOJI_CREATION_ALL + if s.PositionAttribute == nil { + s.PositionAttribute = NewString(SAML_SETTINGS_DEFAULT_POSITION_ATTRIBUTE) } - if o.ServiceSettings.RestrictPostDelete == nil { - o.ServiceSettings.RestrictPostDelete = new(string) - *o.ServiceSettings.RestrictPostDelete = PERMISSIONS_DELETE_POST_ALL + if s.LocaleAttribute == nil { + s.LocaleAttribute = NewString(SAML_SETTINGS_DEFAULT_LOCALE_ATTRIBUTE) } - if o.ServiceSettings.AllowEditPost == nil { - o.ServiceSettings.AllowEditPost = new(string) - *o.ServiceSettings.AllowEditPost = ALLOW_EDIT_POST_ALWAYS + if s.LoginButtonColor == nil { + s.LoginButtonColor = NewString("#34a28b") } - if o.ServiceSettings.PostEditTimeLimit == nil { - o.ServiceSettings.PostEditTimeLimit = new(int) - *o.ServiceSettings.PostEditTimeLimit = 300 + if s.LoginButtonBorderColor == nil { + s.LoginButtonBorderColor = NewString("#2389D7") } - if o.ClusterSettings.Enable == nil { - o.ClusterSettings.Enable = new(bool) - *o.ClusterSettings.Enable = false + if s.LoginButtonTextColor == nil { + s.LoginButtonTextColor = NewString("#ffffff") } +} - if o.ClusterSettings.ClusterName == nil { - o.ClusterSettings.ClusterName = new(string) - *o.ClusterSettings.ClusterName = "" - } +type NativeAppSettings struct { + AppDownloadLink *string + AndroidAppDownloadLink *string + IosAppDownloadLink *string +} - if o.ClusterSettings.OverrideHostname == nil { - o.ClusterSettings.OverrideHostname = new(string) - *o.ClusterSettings.OverrideHostname = "" +func (s *NativeAppSettings) SetDefaults() { + if s.AppDownloadLink == nil { + s.AppDownloadLink = NewString(NATIVEAPP_SETTINGS_DEFAULT_APP_DOWNLOAD_LINK) } - if o.ClusterSettings.UseIpAddress == nil { - o.ClusterSettings.UseIpAddress = new(bool) - *o.ClusterSettings.UseIpAddress = true + if s.AndroidAppDownloadLink == nil { + s.AndroidAppDownloadLink = NewString(NATIVEAPP_SETTINGS_DEFAULT_ANDROID_APP_DOWNLOAD_LINK) } - if o.ClusterSettings.UseExperimentalGossip == nil { - o.ClusterSettings.UseExperimentalGossip = new(bool) - *o.ClusterSettings.UseExperimentalGossip = false + if s.IosAppDownloadLink == nil { + s.IosAppDownloadLink = NewString(NATIVEAPP_SETTINGS_DEFAULT_IOS_APP_DOWNLOAD_LINK) } +} - if o.ClusterSettings.ReadOnlyConfig == nil { - o.ClusterSettings.ReadOnlyConfig = new(bool) - *o.ClusterSettings.ReadOnlyConfig = true - } +type WebrtcSettings struct { + Enable *bool + GatewayWebsocketUrl *string + GatewayAdminUrl *string + GatewayAdminSecret *string + StunURI *string + TurnURI *string + TurnUsername *string + TurnSharedKey *string +} - if o.ClusterSettings.GossipPort == nil { - o.ClusterSettings.GossipPort = new(int) - *o.ClusterSettings.GossipPort = 8074 +func (s *WebrtcSettings) SetDefaults() { + if s.Enable == nil { + s.Enable = NewBool(false) } - if o.ClusterSettings.StreamingPort == nil { - o.ClusterSettings.StreamingPort = new(int) - *o.ClusterSettings.StreamingPort = 8075 + if s.GatewayWebsocketUrl == nil { + s.GatewayWebsocketUrl = NewString("") } - if o.MetricsSettings.ListenAddress == nil { - o.MetricsSettings.ListenAddress = new(string) - *o.MetricsSettings.ListenAddress = ":8067" + if s.GatewayAdminUrl == nil { + s.GatewayAdminUrl = NewString("") } - if o.MetricsSettings.Enable == nil { - o.MetricsSettings.Enable = new(bool) - *o.MetricsSettings.Enable = false + if s.GatewayAdminSecret == nil { + s.GatewayAdminSecret = NewString("") } - if o.AnalyticsSettings.MaxUsersForStatistics == nil { - o.AnalyticsSettings.MaxUsersForStatistics = new(int) - *o.AnalyticsSettings.MaxUsersForStatistics = ANALYTICS_SETTINGS_DEFAULT_MAX_USERS_FOR_STATISTICS + if s.StunURI == nil { + s.StunURI = NewString(WEBRTC_SETTINGS_DEFAULT_STUN_URI) } - if o.ComplianceSettings.Enable == nil { - o.ComplianceSettings.Enable = new(bool) - *o.ComplianceSettings.Enable = false + if s.TurnURI == nil { + s.TurnURI = NewString(WEBRTC_SETTINGS_DEFAULT_TURN_URI) } - if o.ComplianceSettings.Directory == nil { - o.ComplianceSettings.Directory = new(string) - *o.ComplianceSettings.Directory = "./data/" + if s.TurnUsername == nil { + s.TurnUsername = NewString("") } - if o.ComplianceSettings.EnableDaily == nil { - o.ComplianceSettings.EnableDaily = new(bool) - *o.ComplianceSettings.EnableDaily = false + if s.TurnSharedKey == nil { + s.TurnSharedKey = NewString("") } +} + +type ElasticsearchSettings struct { + ConnectionUrl *string + Username *string + Password *string + EnableIndexing *bool + EnableSearching *bool + Sniff *bool + PostIndexReplicas *int + PostIndexShards *int + AggregatePostsAfterDays *int + PostsAggregatorJobStartTime *string + IndexPrefix *string + LiveIndexingBatchSize *int + BulkIndexingTimeWindowSeconds *int + RequestTimeoutSeconds *int +} - if o.LocalizationSettings.DefaultServerLocale == nil { - o.LocalizationSettings.DefaultServerLocale = new(string) - *o.LocalizationSettings.DefaultServerLocale = DEFAULT_LOCALE +func (s *ElasticsearchSettings) SetDefaults() { + if s.ConnectionUrl == nil { + s.ConnectionUrl = NewString(ELASTICSEARCH_SETTINGS_DEFAULT_CONNECTION_URL) } - if o.LocalizationSettings.DefaultClientLocale == nil { - o.LocalizationSettings.DefaultClientLocale = new(string) - *o.LocalizationSettings.DefaultClientLocale = DEFAULT_LOCALE + if s.Username == nil { + s.Username = NewString(ELASTICSEARCH_SETTINGS_DEFAULT_USERNAME) } - if o.LocalizationSettings.AvailableLocales == nil { - o.LocalizationSettings.AvailableLocales = new(string) - *o.LocalizationSettings.AvailableLocales = "" + if s.Password == nil { + s.Password = NewString(ELASTICSEARCH_SETTINGS_DEFAULT_PASSWORD) } - if o.LogSettings.EnableDiagnostics == nil { - o.LogSettings.EnableDiagnostics = new(bool) - *o.LogSettings.EnableDiagnostics = true + if s.EnableIndexing == nil { + s.EnableIndexing = NewBool(false) } - if o.SamlSettings.Enable == nil { - o.SamlSettings.Enable = new(bool) - *o.SamlSettings.Enable = false + if s.EnableSearching == nil { + s.EnableSearching = NewBool(false) } - if o.SamlSettings.Verify == nil { - o.SamlSettings.Verify = new(bool) - *o.SamlSettings.Verify = true + if s.Sniff == nil { + s.Sniff = NewBool(true) } - if o.SamlSettings.Encrypt == nil { - o.SamlSettings.Encrypt = new(bool) - *o.SamlSettings.Encrypt = true + if s.PostIndexReplicas == nil { + s.PostIndexReplicas = NewInt(ELASTICSEARCH_SETTINGS_DEFAULT_POST_INDEX_REPLICAS) } - if o.SamlSettings.IdpUrl == nil { - o.SamlSettings.IdpUrl = new(string) - *o.SamlSettings.IdpUrl = "" + if s.PostIndexShards == nil { + s.PostIndexShards = NewInt(ELASTICSEARCH_SETTINGS_DEFAULT_POST_INDEX_SHARDS) } - if o.SamlSettings.IdpDescriptorUrl == nil { - o.SamlSettings.IdpDescriptorUrl = new(string) - *o.SamlSettings.IdpDescriptorUrl = "" + if s.AggregatePostsAfterDays == nil { + s.AggregatePostsAfterDays = NewInt(ELASTICSEARCH_SETTINGS_DEFAULT_AGGREGATE_POSTS_AFTER_DAYS) } - if o.SamlSettings.IdpCertificateFile == nil { - o.SamlSettings.IdpCertificateFile = new(string) - *o.SamlSettings.IdpCertificateFile = "" + if s.PostsAggregatorJobStartTime == nil { + s.PostsAggregatorJobStartTime = NewString(ELASTICSEARCH_SETTINGS_DEFAULT_POSTS_AGGREGATOR_JOB_START_TIME) } - if o.SamlSettings.PublicCertificateFile == nil { - o.SamlSettings.PublicCertificateFile = new(string) - *o.SamlSettings.PublicCertificateFile = "" + if s.IndexPrefix == nil { + s.IndexPrefix = NewString(ELASTICSEARCH_SETTINGS_DEFAULT_INDEX_PREFIX) } - if o.SamlSettings.PrivateKeyFile == nil { - o.SamlSettings.PrivateKeyFile = new(string) - *o.SamlSettings.PrivateKeyFile = "" + if s.LiveIndexingBatchSize == nil { + s.LiveIndexingBatchSize = NewInt(ELASTICSEARCH_SETTINGS_DEFAULT_LIVE_INDEXING_BATCH_SIZE) } - if o.SamlSettings.AssertionConsumerServiceURL == nil { - o.SamlSettings.AssertionConsumerServiceURL = new(string) - *o.SamlSettings.AssertionConsumerServiceURL = "" + if s.BulkIndexingTimeWindowSeconds == nil { + s.BulkIndexingTimeWindowSeconds = NewInt(ELASTICSEARCH_SETTINGS_DEFAULT_BULK_INDEXING_TIME_WINDOW_SECONDS) } - if o.SamlSettings.LoginButtonText == nil || *o.SamlSettings.LoginButtonText == "" { - o.SamlSettings.LoginButtonText = new(string) - *o.SamlSettings.LoginButtonText = USER_AUTH_SERVICE_SAML_TEXT + if s.RequestTimeoutSeconds == nil { + s.RequestTimeoutSeconds = NewInt(ELASTICSEARCH_SETTINGS_DEFAULT_REQUEST_TIMEOUT_SECONDS) } +} + +type DataRetentionSettings struct { + EnableMessageDeletion *bool + EnableFileDeletion *bool + MessageRetentionDays *int + FileRetentionDays *int + DeletionJobStartTime *string +} - if o.SamlSettings.FirstNameAttribute == nil { - o.SamlSettings.FirstNameAttribute = new(string) - *o.SamlSettings.FirstNameAttribute = SAML_SETTINGS_DEFAULT_FIRST_NAME_ATTRIBUTE +func (s *DataRetentionSettings) SetDefaults() { + if s.EnableMessageDeletion == nil { + s.EnableMessageDeletion = NewBool(false) } - if o.SamlSettings.LastNameAttribute == nil { - o.SamlSettings.LastNameAttribute = new(string) - *o.SamlSettings.LastNameAttribute = SAML_SETTINGS_DEFAULT_LAST_NAME_ATTRIBUTE + if s.EnableFileDeletion == nil { + s.EnableFileDeletion = NewBool(false) } - if o.SamlSettings.EmailAttribute == nil { - o.SamlSettings.EmailAttribute = new(string) - *o.SamlSettings.EmailAttribute = SAML_SETTINGS_DEFAULT_EMAIL_ATTRIBUTE + if s.MessageRetentionDays == nil { + s.MessageRetentionDays = NewInt(DATA_RETENTION_SETTINGS_DEFAULT_MESSAGE_RETENTION_DAYS) } - if o.SamlSettings.UsernameAttribute == nil { - o.SamlSettings.UsernameAttribute = new(string) - *o.SamlSettings.UsernameAttribute = SAML_SETTINGS_DEFAULT_USERNAME_ATTRIBUTE + if s.FileRetentionDays == nil { + s.FileRetentionDays = NewInt(DATA_RETENTION_SETTINGS_DEFAULT_FILE_RETENTION_DAYS) } - if o.SamlSettings.NicknameAttribute == nil { - o.SamlSettings.NicknameAttribute = new(string) - *o.SamlSettings.NicknameAttribute = SAML_SETTINGS_DEFAULT_NICKNAME_ATTRIBUTE + if s.DeletionJobStartTime == nil { + s.DeletionJobStartTime = NewString(DATA_RETENTION_SETTINGS_DEFAULT_DELETION_JOB_START_TIME) } +} + +type JobSettings struct { + RunJobs *bool + RunScheduler *bool +} - if o.SamlSettings.PositionAttribute == nil { - o.SamlSettings.PositionAttribute = new(string) - *o.SamlSettings.PositionAttribute = SAML_SETTINGS_DEFAULT_POSITION_ATTRIBUTE +func (s *JobSettings) SetDefaults() { + if s.RunJobs == nil { + s.RunJobs = NewBool(true) } - if o.SamlSettings.LocaleAttribute == nil { - o.SamlSettings.LocaleAttribute = new(string) - *o.SamlSettings.LocaleAttribute = SAML_SETTINGS_DEFAULT_LOCALE_ATTRIBUTE + if s.RunScheduler == nil { + s.RunScheduler = NewBool(true) } +} - if o.TeamSettings.TeammateNameDisplay == nil { - o.TeamSettings.TeammateNameDisplay = new(string) - *o.TeamSettings.TeammateNameDisplay = SHOW_USERNAME +type PluginState struct { + Enable bool +} - if *o.SamlSettings.Enable || *o.LdapSettings.Enable { - *o.TeamSettings.TeammateNameDisplay = SHOW_FULLNAME - } +type PluginSettings struct { + Enable *bool + EnableUploads *bool + Directory *string + ClientDirectory *string + Plugins map[string]interface{} + PluginStates map[string]*PluginState +} + +func (s *PluginSettings) SetDefaults() { + if s.Enable == nil { + s.Enable = NewBool(true) } - if o.NativeAppSettings.AppDownloadLink == nil { - o.NativeAppSettings.AppDownloadLink = new(string) - *o.NativeAppSettings.AppDownloadLink = NATIVEAPP_SETTINGS_DEFAULT_APP_DOWNLOAD_LINK + if s.EnableUploads == nil { + s.EnableUploads = NewBool(false) } - if o.NativeAppSettings.AndroidAppDownloadLink == nil { - o.NativeAppSettings.AndroidAppDownloadLink = new(string) - *o.NativeAppSettings.AndroidAppDownloadLink = NATIVEAPP_SETTINGS_DEFAULT_ANDROID_APP_DOWNLOAD_LINK + if s.Directory == nil { + s.Directory = NewString(PLUGIN_SETTINGS_DEFAULT_DIRECTORY) } - if o.NativeAppSettings.IosAppDownloadLink == nil { - o.NativeAppSettings.IosAppDownloadLink = new(string) - *o.NativeAppSettings.IosAppDownloadLink = NATIVEAPP_SETTINGS_DEFAULT_IOS_APP_DOWNLOAD_LINK + if *s.Directory == "" { + *s.Directory = PLUGIN_SETTINGS_DEFAULT_DIRECTORY } - if o.RateLimitSettings.Enable == nil { - o.RateLimitSettings.Enable = new(bool) - *o.RateLimitSettings.Enable = false + if s.ClientDirectory == nil { + s.ClientDirectory = NewString(PLUGIN_SETTINGS_DEFAULT_CLIENT_DIRECTORY) } - if o.ServiceSettings.GoroutineHealthThreshold == nil { - o.ServiceSettings.GoroutineHealthThreshold = new(int) - *o.ServiceSettings.GoroutineHealthThreshold = -1 + if *s.ClientDirectory == "" { + *s.ClientDirectory = PLUGIN_SETTINGS_DEFAULT_CLIENT_DIRECTORY } - if o.RateLimitSettings.MaxBurst == nil { - o.RateLimitSettings.MaxBurst = new(int) - *o.RateLimitSettings.MaxBurst = 100 + if s.Plugins == nil { + s.Plugins = make(map[string]interface{}) } - if o.ServiceSettings.ConnectionSecurity == nil { - o.ServiceSettings.ConnectionSecurity = new(string) - *o.ServiceSettings.ConnectionSecurity = "" + if s.PluginStates == nil { + s.PluginStates = make(map[string]*PluginState) } +} + +type MessageExportSettings struct { + EnableExport *bool + DailyRunTime *string + ExportFromTimestamp *int64 + BatchSize *int +} - if o.ServiceSettings.TLSKeyFile == nil { - o.ServiceSettings.TLSKeyFile = new(string) - *o.ServiceSettings.TLSKeyFile = SERVICE_SETTINGS_DEFAULT_TLS_KEY_FILE +func (s *MessageExportSettings) SetDefaults() { + if s.EnableExport == nil { + s.EnableExport = NewBool(false) } - if o.ServiceSettings.TLSCertFile == nil { - o.ServiceSettings.TLSCertFile = new(string) - *o.ServiceSettings.TLSCertFile = SERVICE_SETTINGS_DEFAULT_TLS_CERT_FILE + if s.DailyRunTime == nil { + s.DailyRunTime = NewString("01:00") } - if o.ServiceSettings.UseLetsEncrypt == nil { - o.ServiceSettings.UseLetsEncrypt = new(bool) - *o.ServiceSettings.UseLetsEncrypt = false + if s.ExportFromTimestamp == nil { + s.ExportFromTimestamp = NewInt64(0) } - if o.ServiceSettings.LetsEncryptCertificateCacheFile == nil { - o.ServiceSettings.LetsEncryptCertificateCacheFile = new(string) - *o.ServiceSettings.LetsEncryptCertificateCacheFile = "./config/letsencrypt.cache" + if s.EnableExport != nil && *s.EnableExport && *s.ExportFromTimestamp == int64(0) { + // when the feature is enabled via the System Console, use the current timestamp as the start time for future exports + s.ExportFromTimestamp = NewInt64(GetMillis()) + } else if s.EnableExport != nil && !*s.EnableExport { + // when the feature is disabled, reset the timestamp so that the timestamp will be set if the feature is re-enabled + s.ExportFromTimestamp = NewInt64(0) } - if o.ServiceSettings.ReadTimeout == nil { - o.ServiceSettings.ReadTimeout = new(int) - *o.ServiceSettings.ReadTimeout = SERVICE_SETTINGS_DEFAULT_READ_TIMEOUT + if s.BatchSize == nil { + s.BatchSize = NewInt(10000) } +} + +type ConfigFunc func() *Config + +type Config struct { + ServiceSettings ServiceSettings + TeamSettings TeamSettings + ClientRequirements ClientRequirements + SqlSettings SqlSettings + LogSettings LogSettings + PasswordSettings PasswordSettings + FileSettings FileSettings + EmailSettings EmailSettings + RateLimitSettings RateLimitSettings + PrivacySettings PrivacySettings + SupportSettings SupportSettings + AnnouncementSettings AnnouncementSettings + ThemeSettings ThemeSettings + GitLabSettings SSOSettings + GoogleSettings SSOSettings + Office365Settings SSOSettings + LdapSettings LdapSettings + ComplianceSettings ComplianceSettings + LocalizationSettings LocalizationSettings + SamlSettings SamlSettings + NativeAppSettings NativeAppSettings + ClusterSettings ClusterSettings + MetricsSettings MetricsSettings + AnalyticsSettings AnalyticsSettings + WebrtcSettings WebrtcSettings + ElasticsearchSettings ElasticsearchSettings + DataRetentionSettings DataRetentionSettings + MessageExportSettings MessageExportSettings + JobSettings JobSettings + PluginSettings PluginSettings +} - if o.ServiceSettings.WriteTimeout == nil { - o.ServiceSettings.WriteTimeout = new(int) - *o.ServiceSettings.WriteTimeout = SERVICE_SETTINGS_DEFAULT_WRITE_TIMEOUT +func (o *Config) Clone() *Config { + var ret Config + if err := json.Unmarshal([]byte(o.ToJson()), &ret); err != nil { + panic(err) } + return &ret +} - if o.ServiceSettings.Forward80To443 == nil { - o.ServiceSettings.Forward80To443 = new(bool) - *o.ServiceSettings.Forward80To443 = false +func (o *Config) ToJson() string { + b, err := json.Marshal(o) + if err != nil { + return "" + } else { + return string(b) } +} - if o.MetricsSettings.BlockProfileRate == nil { - o.MetricsSettings.BlockProfileRate = new(int) - *o.MetricsSettings.BlockProfileRate = 0 +func (o *Config) GetSSOService(service string) *SSOSettings { + switch service { + case SERVICE_GITLAB: + return &o.GitLabSettings + case SERVICE_GOOGLE: + return &o.GoogleSettings + case SERVICE_OFFICE365: + return &o.Office365Settings } - if o.ServiceSettings.TimeBetweenUserTypingUpdatesMilliseconds == nil { - o.ServiceSettings.TimeBetweenUserTypingUpdatesMilliseconds = new(int64) - *o.ServiceSettings.TimeBetweenUserTypingUpdatesMilliseconds = 5000 + return nil +} + +func ConfigFromJson(data io.Reader) *Config { + decoder := json.NewDecoder(data) + var o Config + err := decoder.Decode(&o) + if err == nil { + return &o + } else { + return nil } +} + +func (o *Config) SetDefaults() { + o.LdapSettings.SetDefaults() + o.SamlSettings.SetDefaults() - if o.ServiceSettings.EnablePostSearch == nil { - o.ServiceSettings.EnablePostSearch = new(bool) - *o.ServiceSettings.EnablePostSearch = true + if o.TeamSettings.TeammateNameDisplay == nil { + o.TeamSettings.TeammateNameDisplay = NewString(SHOW_USERNAME) + + if *o.SamlSettings.Enable || *o.LdapSettings.Enable { + *o.TeamSettings.TeammateNameDisplay = SHOW_FULLNAME + } } - if o.ServiceSettings.EnableUserTypingMessages == nil { - o.ServiceSettings.EnableUserTypingMessages = new(bool) - *o.ServiceSettings.EnableUserTypingMessages = true + o.SqlSettings.SetDefaults() + o.FileSettings.SetDefaults() + o.EmailSettings.SetDefaults() + o.ServiceSettings.SetDefaults() + o.PasswordSettings.SetDefaults() + o.TeamSettings.SetDefaults() + o.MetricsSettings.SetDefaults() + o.SupportSettings.SetDefaults() + o.AnnouncementSettings.SetDefaults() + o.ThemeSettings.SetDefaults() + o.ClusterSettings.SetDefaults() + o.PluginSettings.SetDefaults() + o.AnalyticsSettings.SetDefaults() + o.ComplianceSettings.SetDefaults() + o.LocalizationSettings.SetDefaults() + o.ElasticsearchSettings.SetDefaults() + o.NativeAppSettings.SetDefaults() + o.DataRetentionSettings.SetDefaults() + o.RateLimitSettings.SetDefaults() + o.LogSettings.SetDefaults() + o.JobSettings.SetDefaults() + o.WebrtcSettings.SetDefaults() + o.MessageExportSettings.SetDefaults() +} + +func (o *Config) IsValid() *AppError { + if len(*o.ServiceSettings.SiteURL) == 0 && *o.EmailSettings.EnableEmailBatching { + return NewAppError("Config.IsValid", "model.config.is_valid.site_url_email_batching.app_error", nil, "", http.StatusBadRequest) } - if o.ServiceSettings.EnableChannelViewedMessages == nil { - o.ServiceSettings.EnableChannelViewedMessages = new(bool) - *o.ServiceSettings.EnableChannelViewedMessages = true + if *o.ClusterSettings.Enable && *o.EmailSettings.EnableEmailBatching { + return NewAppError("Config.IsValid", "model.config.is_valid.cluster_email_batching.app_error", nil, "", http.StatusBadRequest) } - if o.ServiceSettings.EnableUserStatuses == nil { - o.ServiceSettings.EnableUserStatuses = new(bool) - *o.ServiceSettings.EnableUserStatuses = true + if err := o.TeamSettings.isValid(); err != nil { + return err } - if o.ServiceSettings.ClusterLogTimeoutMilliseconds == nil { - o.ServiceSettings.ClusterLogTimeoutMilliseconds = new(int) - *o.ServiceSettings.ClusterLogTimeoutMilliseconds = 2000 + if err := o.SqlSettings.isValid(); err != nil { + return err } - if o.ElasticsearchSettings.ConnectionUrl == nil { - o.ElasticsearchSettings.ConnectionUrl = new(string) - *o.ElasticsearchSettings.ConnectionUrl = ELASTICSEARCH_SETTINGS_DEFAULT_CONNECTION_URL + if err := o.FileSettings.isValid(); err != nil { + return err } - if o.ElasticsearchSettings.Username == nil { - o.ElasticsearchSettings.Username = new(string) - *o.ElasticsearchSettings.Username = ELASTICSEARCH_SETTINGS_DEFAULT_USERNAME + if err := o.EmailSettings.isValid(); err != nil { + return err } - if o.ElasticsearchSettings.Password == nil { - o.ElasticsearchSettings.Password = new(string) - *o.ElasticsearchSettings.Password = ELASTICSEARCH_SETTINGS_DEFAULT_PASSWORD + if err := o.LdapSettings.isValid(); err != nil { + return err } - if o.ElasticsearchSettings.EnableIndexing == nil { - o.ElasticsearchSettings.EnableIndexing = new(bool) - *o.ElasticsearchSettings.EnableIndexing = false + if err := o.SamlSettings.isValid(); err != nil { + return err } - if o.ElasticsearchSettings.EnableSearching == nil { - o.ElasticsearchSettings.EnableSearching = new(bool) - *o.ElasticsearchSettings.EnableSearching = false + if *o.PasswordSettings.MinimumLength < PASSWORD_MINIMUM_LENGTH || *o.PasswordSettings.MinimumLength > PASSWORD_MAXIMUM_LENGTH { + return NewAppError("Config.IsValid", "model.config.is_valid.password_length.app_error", map[string]interface{}{"MinLength": PASSWORD_MINIMUM_LENGTH, "MaxLength": PASSWORD_MAXIMUM_LENGTH}, "", http.StatusBadRequest) } - if o.ElasticsearchSettings.Sniff == nil { - o.ElasticsearchSettings.Sniff = new(bool) - *o.ElasticsearchSettings.Sniff = true + if err := o.RateLimitSettings.isValid(); err != nil { + return err } - if o.ElasticsearchSettings.PostIndexReplicas == nil { - o.ElasticsearchSettings.PostIndexReplicas = new(int) - *o.ElasticsearchSettings.PostIndexReplicas = ELASTICSEARCH_SETTINGS_DEFAULT_POST_INDEX_REPLICAS + if err := o.WebrtcSettings.isValid(); err != nil { + return err } - if o.ElasticsearchSettings.PostIndexShards == nil { - o.ElasticsearchSettings.PostIndexShards = new(int) - *o.ElasticsearchSettings.PostIndexShards = ELASTICSEARCH_SETTINGS_DEFAULT_POST_INDEX_SHARDS + if err := o.ServiceSettings.isValid(); err != nil { + return err } - if o.DataRetentionSettings.Enable == nil { - o.DataRetentionSettings.Enable = new(bool) - *o.DataRetentionSettings.Enable = false + if err := o.ElasticsearchSettings.isValid(); err != nil { + return err } - if o.JobSettings.RunJobs == nil { - o.JobSettings.RunJobs = new(bool) - *o.JobSettings.RunJobs = true + if err := o.DataRetentionSettings.isValid(); err != nil { + return err } - if o.JobSettings.RunScheduler == nil { - o.JobSettings.RunScheduler = new(bool) - *o.JobSettings.RunScheduler = true + if err := o.LocalizationSettings.isValid(); err != nil { + return err } - if o.PluginSettings.Plugins == nil { - o.PluginSettings.Plugins = make(map[string]interface{}) + if err := o.MessageExportSettings.isValid(o.FileSettings); err != nil { + return err } - o.defaultWebrtcSettings() + return nil } -func (o *Config) IsValid() *AppError { - - if o.ServiceSettings.MaximumLoginAttempts <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.login_attempts.app_error", nil, "") +func (ts *TeamSettings) isValid() *AppError { + if *ts.MaxUsersPerTeam <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.max_users.app_error", nil, "", http.StatusBadRequest) } - if len(*o.ServiceSettings.SiteURL) != 0 { - if _, err := url.ParseRequestURI(*o.ServiceSettings.SiteURL); err != nil { - return NewLocAppError("Config.IsValid", "model.config.is_valid.site_url.app_error", nil, "") - } + if *ts.MaxChannelsPerTeam <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.max_channels.app_error", nil, "", http.StatusBadRequest) } - if len(o.ServiceSettings.ListenAddress) == 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.listen_address.app_error", nil, "") + if *ts.MaxNotificationsPerChannel <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.max_notify_per_channel.app_error", nil, "", http.StatusBadRequest) } - if *o.ClusterSettings.Enable && *o.EmailSettings.EnableEmailBatching { - return NewLocAppError("Config.IsValid", "model.config.is_valid.cluster_email_batching.app_error", nil, "") + if !(*ts.RestrictDirectMessage == DIRECT_MESSAGE_ANY || *ts.RestrictDirectMessage == DIRECT_MESSAGE_TEAM) { + return NewAppError("Config.IsValid", "model.config.is_valid.restrict_direct_message.app_error", nil, "", http.StatusBadRequest) } - if len(*o.ServiceSettings.SiteURL) == 0 && *o.EmailSettings.EnableEmailBatching { - return NewLocAppError("Config.IsValid", "model.config.is_valid.site_url_email_batching.app_error", nil, "") + if !(*ts.TeammateNameDisplay == SHOW_FULLNAME || *ts.TeammateNameDisplay == SHOW_NICKNAME_FULLNAME || *ts.TeammateNameDisplay == SHOW_USERNAME) { + return NewAppError("Config.IsValid", "model.config.is_valid.teammate_name_display.app_error", nil, "", http.StatusBadRequest) } - if o.TeamSettings.MaxUsersPerTeam <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.max_users.app_error", nil, "") + if len(ts.SiteName) > SITENAME_MAX_LENGTH { + return NewAppError("Config.IsValid", "model.config.is_valid.sitename_length.app_error", map[string]interface{}{"MaxLength": SITENAME_MAX_LENGTH}, "", http.StatusBadRequest) } - if *o.TeamSettings.MaxChannelsPerTeam <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.max_channels.app_error", nil, "") - } + return nil +} - if *o.TeamSettings.MaxNotificationsPerChannel <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.max_notify_per_channel.app_error", nil, "") +func (ss *SqlSettings) isValid() *AppError { + if len(ss.AtRestEncryptKey) < 32 { + return NewAppError("Config.IsValid", "model.config.is_valid.encrypt_sql.app_error", nil, "", http.StatusBadRequest) } - if !(*o.TeamSettings.RestrictDirectMessage == DIRECT_MESSAGE_ANY || *o.TeamSettings.RestrictDirectMessage == DIRECT_MESSAGE_TEAM) { - return NewLocAppError("Config.IsValid", "model.config.is_valid.restrict_direct_message.app_error", nil, "") + if !(*ss.DriverName == DATABASE_DRIVER_MYSQL || *ss.DriverName == DATABASE_DRIVER_POSTGRES) { + return NewAppError("Config.IsValid", "model.config.is_valid.sql_driver.app_error", nil, "", http.StatusBadRequest) } - if !(*o.TeamSettings.TeammateNameDisplay == SHOW_FULLNAME || *o.TeamSettings.TeammateNameDisplay == SHOW_NICKNAME_FULLNAME || *o.TeamSettings.TeammateNameDisplay == SHOW_USERNAME) { - return NewLocAppError("Config.IsValid", "model.config.is_valid.teammate_name_display.app_error", nil, "") + if *ss.MaxIdleConns <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.sql_idle.app_error", nil, "", http.StatusBadRequest) } - if len(o.SqlSettings.AtRestEncryptKey) < 32 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.encrypt_sql.app_error", nil, "") + if *ss.QueryTimeout <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.sql_query_timeout.app_error", nil, "", http.StatusBadRequest) } - if !(o.SqlSettings.DriverName == DATABASE_DRIVER_MYSQL || o.SqlSettings.DriverName == DATABASE_DRIVER_POSTGRES) { - return NewLocAppError("Config.IsValid", "model.config.is_valid.sql_driver.app_error", nil, "") + if len(*ss.DataSource) == 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.sql_data_src.app_error", nil, "", http.StatusBadRequest) } - if o.SqlSettings.MaxIdleConns <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.sql_idle.app_error", nil, "") + if *ss.MaxOpenConns <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.sql_max_conn.app_error", nil, "", http.StatusBadRequest) } - if *o.SqlSettings.QueryTimeout <= 0 { - return NewAppError("Config.IsValid", "model.config.is_valid.sql_query_timeout.app_error", nil, "", http.StatusBadRequest) - } + return nil +} - if len(o.SqlSettings.DataSource) == 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.sql_data_src.app_error", nil, "") +func (fs *FileSettings) isValid() *AppError { + if *fs.MaxFileSize <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.max_file_size.app_error", nil, "", http.StatusBadRequest) } - if o.SqlSettings.MaxOpenConns <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.sql_max_conn.app_error", nil, "") + if !(*fs.DriverName == IMAGE_DRIVER_LOCAL || *fs.DriverName == IMAGE_DRIVER_S3) { + return NewAppError("Config.IsValid", "model.config.is_valid.file_driver.app_error", nil, "", http.StatusBadRequest) } - if *o.FileSettings.MaxFileSize <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.max_file_size.app_error", nil, "") + if len(*fs.PublicLinkSalt) < 32 { + return NewAppError("Config.IsValid", "model.config.is_valid.file_salt.app_error", nil, "", http.StatusBadRequest) } - if !(o.FileSettings.DriverName == IMAGE_DRIVER_LOCAL || o.FileSettings.DriverName == IMAGE_DRIVER_S3) { - return NewLocAppError("Config.IsValid", "model.config.is_valid.file_driver.app_error", nil, "") - } + return nil +} - if len(*o.FileSettings.PublicLinkSalt) < 32 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.file_salt.app_error", nil, "") +func (es *EmailSettings) isValid() *AppError { + if !(es.ConnectionSecurity == CONN_SECURITY_NONE || es.ConnectionSecurity == CONN_SECURITY_TLS || es.ConnectionSecurity == CONN_SECURITY_STARTTLS || es.ConnectionSecurity == CONN_SECURITY_PLAIN) { + return NewAppError("Config.IsValid", "model.config.is_valid.email_security.app_error", nil, "", http.StatusBadRequest) } - if !(o.EmailSettings.ConnectionSecurity == CONN_SECURITY_NONE || o.EmailSettings.ConnectionSecurity == CONN_SECURITY_TLS || o.EmailSettings.ConnectionSecurity == CONN_SECURITY_STARTTLS || o.EmailSettings.ConnectionSecurity == CONN_SECURITY_PLAIN) { - return NewLocAppError("Config.IsValid", "model.config.is_valid.email_security.app_error", nil, "") + if len(es.InviteSalt) < 32 { + return NewAppError("Config.IsValid", "model.config.is_valid.email_salt.app_error", nil, "", http.StatusBadRequest) } - if len(o.EmailSettings.InviteSalt) < 32 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.email_salt.app_error", nil, "") + if *es.EmailBatchingBufferSize <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.email_batching_buffer_size.app_error", nil, "", http.StatusBadRequest) } - if *o.EmailSettings.EmailBatchingBufferSize <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.email_batching_buffer_size.app_error", nil, "") + if *es.EmailBatchingInterval < 30 { + return NewAppError("Config.IsValid", "model.config.is_valid.email_batching_interval.app_error", nil, "", http.StatusBadRequest) } - if *o.EmailSettings.EmailBatchingInterval < 30 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.email_batching_interval.app_error", nil, "") + if !(*es.EmailNotificationContentsType == EMAIL_NOTIFICATION_CONTENTS_FULL || *es.EmailNotificationContentsType == EMAIL_NOTIFICATION_CONTENTS_GENERIC) { + return NewAppError("Config.IsValid", "model.config.is_valid.email_notification_contents_type.app_error", nil, "", http.StatusBadRequest) } - if !(*o.EmailSettings.EmailNotificationContentsType == EMAIL_NOTIFICATION_CONTENTS_FULL || *o.EmailSettings.EmailNotificationContentsType == EMAIL_NOTIFICATION_CONTENTS_GENERIC) { - return NewLocAppError("Config.IsValid", "model.config.is_valid.email_notification_contents_type.app_error", nil, "") + return nil +} + +func (rls *RateLimitSettings) isValid() *AppError { + if *rls.MemoryStoreSize <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.rate_mem.app_error", nil, "", http.StatusBadRequest) } - if o.RateLimitSettings.MemoryStoreSize <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.rate_mem.app_error", nil, "") + if *rls.PerSec <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.rate_sec.app_error", nil, "", http.StatusBadRequest) } - if o.RateLimitSettings.PerSec <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.rate_sec.app_error", nil, "") + if *rls.MaxBurst <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.max_burst.app_error", nil, "", http.StatusBadRequest) } - if !(*o.LdapSettings.ConnectionSecurity == CONN_SECURITY_NONE || *o.LdapSettings.ConnectionSecurity == CONN_SECURITY_TLS || *o.LdapSettings.ConnectionSecurity == CONN_SECURITY_STARTTLS) { - return NewLocAppError("Config.IsValid", "model.config.is_valid.ldap_security.app_error", nil, "") + return nil +} + +func (ls *LdapSettings) isValid() *AppError { + if !(*ls.ConnectionSecurity == CONN_SECURITY_NONE || *ls.ConnectionSecurity == CONN_SECURITY_TLS || *ls.ConnectionSecurity == CONN_SECURITY_STARTTLS) { + return NewAppError("Config.IsValid", "model.config.is_valid.ldap_security.app_error", nil, "", http.StatusBadRequest) } - if *o.LdapSettings.SyncIntervalMinutes <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.ldap_sync_interval.app_error", nil, "") + if *ls.SyncIntervalMinutes <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.ldap_sync_interval.app_error", nil, "", http.StatusBadRequest) } - if *o.LdapSettings.MaxPageSize < 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.ldap_max_page_size.app_error", nil, "") + if *ls.MaxPageSize < 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.ldap_max_page_size.app_error", nil, "", http.StatusBadRequest) } - if *o.LdapSettings.Enable { - if *o.LdapSettings.LdapServer == "" { - return NewLocAppError("Config.IsValid", "model.config.is_valid.ldap_server", nil, "") + if *ls.Enable { + if *ls.LdapServer == "" { + return NewAppError("Config.IsValid", "model.config.is_valid.ldap_server", nil, "", http.StatusBadRequest) } - if *o.LdapSettings.BaseDN == "" { - return NewLocAppError("Config.IsValid", "model.config.is_valid.ldap_basedn", nil, "") + if *ls.BaseDN == "" { + return NewAppError("Config.IsValid", "model.config.is_valid.ldap_basedn", nil, "", http.StatusBadRequest) } - if *o.LdapSettings.EmailAttribute == "" { - return NewLocAppError("Config.IsValid", "model.config.is_valid.ldap_email", nil, "") + if *ls.EmailAttribute == "" { + return NewAppError("Config.IsValid", "model.config.is_valid.ldap_email", nil, "", http.StatusBadRequest) } - if *o.LdapSettings.UsernameAttribute == "" { - return NewLocAppError("Config.IsValid", "model.config.is_valid.ldap_username", nil, "") + if *ls.UsernameAttribute == "" { + return NewAppError("Config.IsValid", "model.config.is_valid.ldap_username", nil, "", http.StatusBadRequest) } - if *o.LdapSettings.IdAttribute == "" { - return NewLocAppError("Config.IsValid", "model.config.is_valid.ldap_id", nil, "") + if *ls.IdAttribute == "" { + return NewAppError("Config.IsValid", "model.config.is_valid.ldap_id", nil, "", http.StatusBadRequest) } } - if *o.SamlSettings.Enable { - if len(*o.SamlSettings.IdpUrl) == 0 || !IsValidHttpUrl(*o.SamlSettings.IdpUrl) { - return NewLocAppError("Config.IsValid", "model.config.is_valid.saml_idp_url.app_error", nil, "") + return nil +} + +func (ss *SamlSettings) isValid() *AppError { + if *ss.Enable { + if len(*ss.IdpUrl) == 0 || !IsValidHttpUrl(*ss.IdpUrl) { + return NewAppError("Config.IsValid", "model.config.is_valid.saml_idp_url.app_error", nil, "", http.StatusBadRequest) } - if len(*o.SamlSettings.IdpDescriptorUrl) == 0 || !IsValidHttpUrl(*o.SamlSettings.IdpDescriptorUrl) { - return NewLocAppError("Config.IsValid", "model.config.is_valid.saml_idp_descriptor_url.app_error", nil, "") + if len(*ss.IdpDescriptorUrl) == 0 || !IsValidHttpUrl(*ss.IdpDescriptorUrl) { + return NewAppError("Config.IsValid", "model.config.is_valid.saml_idp_descriptor_url.app_error", nil, "", http.StatusBadRequest) } - if len(*o.SamlSettings.IdpCertificateFile) == 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.saml_idp_cert.app_error", nil, "") + if len(*ss.IdpCertificateFile) == 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.saml_idp_cert.app_error", nil, "", http.StatusBadRequest) } - if len(*o.SamlSettings.EmailAttribute) == 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.saml_email_attribute.app_error", nil, "") + if len(*ss.EmailAttribute) == 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.saml_email_attribute.app_error", nil, "", http.StatusBadRequest) } - if len(*o.SamlSettings.UsernameAttribute) == 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.saml_username_attribute.app_error", nil, "") + if len(*ss.UsernameAttribute) == 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.saml_username_attribute.app_error", nil, "", http.StatusBadRequest) } - if *o.SamlSettings.Verify { - if len(*o.SamlSettings.AssertionConsumerServiceURL) == 0 || !IsValidHttpUrl(*o.SamlSettings.AssertionConsumerServiceURL) { - return NewLocAppError("Config.IsValid", "model.config.is_valid.saml_assertion_consumer_service_url.app_error", nil, "") + if *ss.Verify { + if len(*ss.AssertionConsumerServiceURL) == 0 || !IsValidHttpUrl(*ss.AssertionConsumerServiceURL) { + return NewAppError("Config.IsValid", "model.config.is_valid.saml_assertion_consumer_service_url.app_error", nil, "", http.StatusBadRequest) } } - if *o.SamlSettings.Encrypt { - if len(*o.SamlSettings.PrivateKeyFile) == 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.saml_private_key.app_error", nil, "") + if *ss.Encrypt { + if len(*ss.PrivateKeyFile) == 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.saml_private_key.app_error", nil, "", http.StatusBadRequest) } - if len(*o.SamlSettings.PublicCertificateFile) == 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.saml_public_cert.app_error", nil, "") + if len(*ss.PublicCertificateFile) == 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.saml_public_cert.app_error", nil, "", http.StatusBadRequest) } } - if len(*o.SamlSettings.EmailAttribute) == 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.saml_email_attribute.app_error", nil, "") + if len(*ss.EmailAttribute) == 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.saml_email_attribute.app_error", nil, "", http.StatusBadRequest) } } - if *o.PasswordSettings.MinimumLength < PASSWORD_MINIMUM_LENGTH || *o.PasswordSettings.MinimumLength > PASSWORD_MAXIMUM_LENGTH { - return NewLocAppError("Config.IsValid", "model.config.is_valid.password_length.app_error", map[string]interface{}{"MinLength": PASSWORD_MINIMUM_LENGTH, "MaxLength": PASSWORD_MAXIMUM_LENGTH}, "") + return nil +} + +func (ws *WebrtcSettings) isValid() *AppError { + if *ws.Enable { + if len(*ws.GatewayWebsocketUrl) == 0 || !IsValidWebsocketUrl(*ws.GatewayWebsocketUrl) { + return NewAppError("Config.IsValid", "model.config.is_valid.webrtc_gateway_ws_url.app_error", nil, "", http.StatusBadRequest) + } else if len(*ws.GatewayAdminUrl) == 0 || !IsValidHttpUrl(*ws.GatewayAdminUrl) { + return NewAppError("Config.IsValid", "model.config.is_valid.webrtc_gateway_admin_url.app_error", nil, "", http.StatusBadRequest) + } else if len(*ws.GatewayAdminSecret) == 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.webrtc_gateway_admin_secret.app_error", nil, "", http.StatusBadRequest) + } else if len(*ws.StunURI) != 0 && !IsValidTurnOrStunServer(*ws.StunURI) { + return NewAppError("Config.IsValid", "model.config.is_valid.webrtc_stun_uri.app_error", nil, "", http.StatusBadRequest) + } else if len(*ws.TurnURI) != 0 { + if !IsValidTurnOrStunServer(*ws.TurnURI) { + return NewAppError("Config.IsValid", "model.config.is_valid.webrtc_turn_uri.app_error", nil, "", http.StatusBadRequest) + } + if len(*ws.TurnUsername) == 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.webrtc_turn_username.app_error", nil, "", http.StatusBadRequest) + } else if len(*ws.TurnSharedKey) == 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.webrtc_turn_shared_key.app_error", nil, "", http.StatusBadRequest) + } + } } - if len(o.TeamSettings.SiteName) > SITENAME_MAX_LENGTH { - return NewLocAppError("Config.IsValid", "model.config.is_valid.sitename_length.app_error", map[string]interface{}{"MaxLength": SITENAME_MAX_LENGTH}, "") + return nil +} + +func (ss *ServiceSettings) isValid() *AppError { + if !(*ss.ConnectionSecurity == CONN_SECURITY_NONE || *ss.ConnectionSecurity == CONN_SECURITY_TLS) { + return NewAppError("Config.IsValid", "model.config.is_valid.webserver_security.app_error", nil, "", http.StatusBadRequest) } - if *o.RateLimitSettings.MaxBurst <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.max_burst.app_error", nil, "") + if *ss.ReadTimeout <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.read_timeout.app_error", nil, "", http.StatusBadRequest) } - if err := o.isValidWebrtcSettings(); err != nil { - return err + if *ss.WriteTimeout <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.write_timeout.app_error", nil, "", http.StatusBadRequest) } - if !(*o.ServiceSettings.ConnectionSecurity == CONN_SECURITY_NONE || *o.ServiceSettings.ConnectionSecurity == CONN_SECURITY_TLS) { - return NewLocAppError("Config.IsValid", "model.config.is_valid.webserver_security.app_error", nil, "") + if *ss.TimeBetweenUserTypingUpdatesMilliseconds < 1000 { + return NewAppError("Config.IsValid", "model.config.is_valid.time_between_user_typing.app_error", nil, "", http.StatusBadRequest) } - if *o.ServiceSettings.ReadTimeout <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.read_timeout.app_error", nil, "") + if *ss.MaximumLoginAttempts <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.login_attempts.app_error", nil, "", http.StatusBadRequest) } - if *o.ServiceSettings.WriteTimeout <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.write_timeout.app_error", nil, "") + if len(*ss.SiteURL) != 0 { + if _, err := url.ParseRequestURI(*ss.SiteURL); err != nil { + return NewAppError("Config.IsValid", "model.config.is_valid.site_url.app_error", nil, "", http.StatusBadRequest) + } } - if *o.ServiceSettings.TimeBetweenUserTypingUpdatesMilliseconds < 1000 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.time_between_user_typing.app_error", nil, "") + if len(*ss.ListenAddress) == 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.listen_address.app_error", nil, "", http.StatusBadRequest) } - if *o.ElasticsearchSettings.EnableIndexing { - if len(*o.ElasticsearchSettings.ConnectionUrl) == 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.elastic_search.connection_url.app_error", nil, "") + return nil +} + +func (ess *ElasticsearchSettings) isValid() *AppError { + if *ess.EnableIndexing { + if len(*ess.ConnectionUrl) == 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.elastic_search.connection_url.app_error", nil, "", http.StatusBadRequest) } } - if *o.ElasticsearchSettings.EnableSearching && !*o.ElasticsearchSettings.EnableIndexing { - return NewLocAppError("Config.IsValid", "model.config.is_valid.elastic_search.enable_searching.app_error", nil, "") + if *ess.EnableSearching && !*ess.EnableIndexing { + return NewAppError("Config.IsValid", "model.config.is_valid.elastic_search.enable_searching.app_error", nil, "", http.StatusBadRequest) + } + + if *ess.AggregatePostsAfterDays < 1 { + return NewAppError("Config.IsValid", "model.config.is_valid.elastic_search.aggregate_posts_after_days.app_error", nil, "", http.StatusBadRequest) + } + + if _, err := time.Parse("15:04", *ess.PostsAggregatorJobStartTime); err != nil { + return NewAppError("Config.IsValid", "model.config.is_valid.elastic_search.posts_aggregator_job_start_time.app_error", nil, err.Error(), http.StatusBadRequest) + } + + if *ess.LiveIndexingBatchSize < 1 { + return NewAppError("Config.IsValid", "model.config.is_valid.elastic_search.live_indexing_batch_size.app_error", nil, "", http.StatusBadRequest) } + if *ess.BulkIndexingTimeWindowSeconds < 1 { + return NewAppError("Config.IsValid", "model.config.is_valid.elastic_search.bulk_indexing_time_window_seconds.app_error", nil, "", http.StatusBadRequest) + } + + if *ess.RequestTimeoutSeconds < 1 { + return NewAppError("Config.IsValid", "model.config.is_valid.elastic_search.request_timeout_seconds.app_error", nil, "", http.StatusBadRequest) + } + + return nil +} + +func (drs *DataRetentionSettings) isValid() *AppError { + if *drs.MessageRetentionDays <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.data_retention.message_retention_days_too_low.app_error", nil, "", http.StatusBadRequest) + } + + if *drs.FileRetentionDays <= 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.data_retention.file_retention_days_too_low.app_error", nil, "", http.StatusBadRequest) + } + + if _, err := time.Parse("15:04", *drs.DeletionJobStartTime); err != nil { + return NewAppError("Config.IsValid", "model.config.is_valid.data_retention.deletion_job_start_time.app_error", nil, err.Error(), http.StatusBadRequest) + } + + return nil +} + +func (ls *LocalizationSettings) isValid() *AppError { + if len(*ls.AvailableLocales) > 0 { + if !strings.Contains(*ls.AvailableLocales, *ls.DefaultClientLocale) { + return NewAppError("Config.IsValid", "model.config.is_valid.localization.available_locales.app_error", nil, "", http.StatusBadRequest) + } + } + + return nil +} + +func (mes *MessageExportSettings) isValid(fs FileSettings) *AppError { + if mes.EnableExport == nil { + return NewAppError("Config.IsValid", "model.config.is_valid.message_export.enable.app_error", nil, "", http.StatusBadRequest) + } + if *mes.EnableExport { + if mes.ExportFromTimestamp == nil || *mes.ExportFromTimestamp < 0 || *mes.ExportFromTimestamp > GetMillis() { + return NewAppError("Config.IsValid", "model.config.is_valid.message_export.export_from.app_error", nil, "", http.StatusBadRequest) + } else if mes.DailyRunTime == nil { + return NewAppError("Config.IsValid", "model.config.is_valid.message_export.daily_runtime.app_error", nil, "", http.StatusBadRequest) + } else if _, err := time.Parse("15:04", *mes.DailyRunTime); err != nil { + return NewAppError("Config.IsValid", "model.config.is_valid.message_export.daily_runtime.app_error", nil, err.Error(), http.StatusBadRequest) + } else if mes.BatchSize == nil || *mes.BatchSize < 0 { + return NewAppError("Config.IsValid", "model.config.is_valid.message_export.batch_size.app_error", nil, "", http.StatusBadRequest) + } + } return nil } @@ -1725,7 +2153,7 @@ func (o *Config) Sanitize() { o.GitLabSettings.Secret = FAKE_SETTING } - o.SqlSettings.DataSource = FAKE_SETTING + *o.SqlSettings.DataSource = FAKE_SETTING o.SqlSettings.AtRestEncryptKey = FAKE_SETTING for i := range o.SqlSettings.DataSourceReplicas { @@ -1738,71 +2166,3 @@ func (o *Config) Sanitize() { *o.ElasticsearchSettings.Password = FAKE_SETTING } - -func (o *Config) defaultWebrtcSettings() { - if o.WebrtcSettings.Enable == nil { - o.WebrtcSettings.Enable = new(bool) - *o.WebrtcSettings.Enable = false - } - - if o.WebrtcSettings.GatewayWebsocketUrl == nil { - o.WebrtcSettings.GatewayWebsocketUrl = new(string) - *o.WebrtcSettings.GatewayWebsocketUrl = "" - } - - if o.WebrtcSettings.GatewayAdminUrl == nil { - o.WebrtcSettings.GatewayAdminUrl = new(string) - *o.WebrtcSettings.GatewayAdminUrl = "" - } - - if o.WebrtcSettings.GatewayAdminSecret == nil { - o.WebrtcSettings.GatewayAdminSecret = new(string) - *o.WebrtcSettings.GatewayAdminSecret = "" - } - - if o.WebrtcSettings.StunURI == nil { - o.WebrtcSettings.StunURI = new(string) - *o.WebrtcSettings.StunURI = WEBRTC_SETTINGS_DEFAULT_STUN_URI - } - - if o.WebrtcSettings.TurnURI == nil { - o.WebrtcSettings.TurnURI = new(string) - *o.WebrtcSettings.TurnURI = WEBRTC_SETTINGS_DEFAULT_TURN_URI - } - - if o.WebrtcSettings.TurnUsername == nil { - o.WebrtcSettings.TurnUsername = new(string) - *o.WebrtcSettings.TurnUsername = "" - } - - if o.WebrtcSettings.TurnSharedKey == nil { - o.WebrtcSettings.TurnSharedKey = new(string) - *o.WebrtcSettings.TurnSharedKey = "" - } -} - -func (o *Config) isValidWebrtcSettings() *AppError { - if *o.WebrtcSettings.Enable { - if len(*o.WebrtcSettings.GatewayWebsocketUrl) == 0 || !IsValidWebsocketUrl(*o.WebrtcSettings.GatewayWebsocketUrl) { - return NewLocAppError("Config.IsValid", "model.config.is_valid.webrtc_gateway_ws_url.app_error", nil, "") - } else if len(*o.WebrtcSettings.GatewayAdminUrl) == 0 || !IsValidHttpUrl(*o.WebrtcSettings.GatewayAdminUrl) { - return NewLocAppError("Config.IsValid", "model.config.is_valid.webrtc_gateway_admin_url.app_error", nil, "") - } else if len(*o.WebrtcSettings.GatewayAdminSecret) == 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.webrtc_gateway_admin_secret.app_error", nil, "") - } else if len(*o.WebrtcSettings.StunURI) != 0 && !IsValidTurnOrStunServer(*o.WebrtcSettings.StunURI) { - return NewLocAppError("Config.IsValid", "model.config.is_valid.webrtc_stun_uri.app_error", nil, "") - } else if len(*o.WebrtcSettings.TurnURI) != 0 { - if !IsValidTurnOrStunServer(*o.WebrtcSettings.TurnURI) { - return NewLocAppError("Config.IsValid", "model.config.is_valid.webrtc_turn_uri.app_error", nil, "") - } - if len(*o.WebrtcSettings.TurnUsername) == 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.webrtc_turn_username.app_error", nil, "") - } else if len(*o.WebrtcSettings.TurnSharedKey) == 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.webrtc_turn_shared_key.app_error", nil, "") - } - - } - } - - return nil -} |