github.com/weaveworks/common@v0.0.0-20230728070032-dd9e68f319d5/sanitize/sanitize.go (about) 1 package sanitize 2 3 import ( 4 "fmt" 5 "net" 6 "net/url" 7 "strings" 8 9 log "github.com/sirupsen/logrus" 10 ) 11 12 // URL returns a function that sanitizes a URL string. It lets underspecified 13 // strings to be converted to usable URLs via some default arguments. 14 func URL(defaultScheme string, defaultPort int, defaultPath string) func(string) string { 15 if defaultScheme == "" { 16 defaultScheme = "http://" 17 } 18 return func(s string) string { 19 if s == "" { 20 return s // can't do much here 21 } 22 if !strings.Contains(s, "://") { 23 s = defaultScheme + s 24 } 25 u, err := url.Parse(s) 26 if err != nil { 27 log.Errorf("%q: %v", s, err) 28 return s // oh well 29 } 30 if _, port, err := net.SplitHostPort(u.Host); err != nil && defaultPort > 0 { 31 u.Host += fmt.Sprintf(":%d", defaultPort) 32 } else if port == "443" { 33 if u.Scheme == "ws" { 34 u.Scheme = "wss" 35 } else { 36 u.Scheme = "https" 37 } 38 } 39 if defaultPath != "" && u.Path != defaultPath { 40 u.Path = defaultPath 41 } 42 return u.String() 43 } 44 }