summaryrefslogtreecommitdiffstats
path: root/model/config.go
diff options
context:
space:
mode:
authorHarrison Healey <harrisonmhealey@gmail.com>2018-05-30 10:48:04 -0400
committerGitHub <noreply@github.com>2018-05-30 10:48:04 -0400
commit2fe88787492077af294ee82a8775304f655c8805 (patch)
treebd119c4baf0d484ecb1df59f890b2190824364a6 /model/config.go
parent81852ab1911f9bc3234c35683bb5fae83b57d863 (diff)
downloadchat-2fe88787492077af294ee82a8775304f655c8805.tar.gz
chat-2fe88787492077af294ee82a8775304f655c8805.tar.bz2
chat-2fe88787492077af294ee82a8775304f655c8805.zip
MM-9547 Added config setting to control url autolinking schemes (#8862)
* MM-9547 Added config setting to control autolinking schemes * Renamed AutolinkingSchemes to CustomUrlSchemes
Diffstat (limited to 'model/config.go')
-rw-r--r--model/config.go31
1 files changed, 31 insertions, 0 deletions
diff --git a/model/config.go b/model/config.go
index d5a8ad38e..074632a67 100644
--- a/model/config.go
+++ b/model/config.go
@@ -8,6 +8,7 @@ import (
"io"
"net/http"
"net/url"
+ "regexp"
"strings"
"time"
)
@@ -1772,10 +1773,16 @@ func (s *MessageExportSettings) SetDefaults() {
}
type DisplaySettings struct {
+ CustomUrlSchemes *[]string
ExperimentalTimezone *bool
}
func (s *DisplaySettings) SetDefaults() {
+ if s.CustomUrlSchemes == nil {
+ customUrlSchemes := []string{}
+ s.CustomUrlSchemes = &customUrlSchemes
+ }
+
if s.ExperimentalTimezone == nil {
s.ExperimentalTimezone = NewBool(false)
}
@@ -1968,6 +1975,10 @@ func (o *Config) IsValid() *AppError {
return err
}
+ if err := o.DisplaySettings.isValid(); err != nil {
+ return err
+ }
+
return nil
}
@@ -2348,6 +2359,26 @@ func (mes *MessageExportSettings) isValid(fs FileSettings) *AppError {
return nil
}
+func (ds *DisplaySettings) isValid() *AppError {
+ if len(*ds.CustomUrlSchemes) != 0 {
+ validProtocolPattern := regexp.MustCompile(`(?i)^\s*[a-z][a-z0-9+.-]*\s*$`)
+
+ for _, scheme := range *ds.CustomUrlSchemes {
+ if !validProtocolPattern.MatchString(scheme) {
+ return NewAppError(
+ "Config.IsValid",
+ "model.config.is_valid.display.custom_url_schemes.app_error",
+ map[string]interface{}{"Protocol": scheme},
+ "",
+ http.StatusBadRequest,
+ )
+ }
+ }
+ }
+
+ return nil
+}
+
func (o *Config) GetSanitizeOptions() map[string]bool {
options := map[string]bool{}
options["fullname"] = o.PrivacySettings.ShowFullName