ref: ca6b26fe65761e0a6f29d9f5480098de7b1eae68
parent: 5572e3496b97ace93fea88cdbcf4dfce93e8adc2
author: Cameron Moore <[email protected]>
date: Thu May 12 14:06:56 EDT 2016
commands: Allow schema-less baseURL on command line Fixes #1632
--- a/commands/server.go
+++ b/commands/server.go
@@ -209,7 +209,6 @@
http.Handle(u.Path, http.StripPrefix(u.Path, fileserver))
}
- u.Scheme = "http"
jww.FEEDBACK.Printf("Web Server is available at %s (bind address %s)\n", u.String(), serverInterface)
fmt.Println("Press Ctrl+C to stop")
@@ -229,37 +228,45 @@
s = viper.GetString("BaseURL")
useLocalhost = true
}
- if !strings.HasPrefix(s, "http://") && !strings.HasPrefix(s, "https://") {
- s = "http://" + s
- }
+
if !strings.HasSuffix(s, "/") {
s = s + "/"
}
+
+ // do an initial parse of the input string
u, err := url.Parse(s)
if err != nil {
return "", err
}
- if serverAppend {
- if useLocalhost {
- u.Host = fmt.Sprintf("localhost:%d", serverPort)
+ // if no Host is defined, then assume that no schema or double-slash were
+ // present in the url. Add a double-slash and make a best effort attempt.
+ if u.Host == "" && s != "/" {
+ s = "//" + s
+
+ u, err = url.Parse(s)
+ if err != nil {
+ return "", err
+ }
+ }
+
+ if useLocalhost {
+ if u.Scheme == "https" {
u.Scheme = "http"
- return u.String(), nil
}
- host := u.Host
- if strings.Contains(host, ":") {
- host, _, err = net.SplitHostPort(u.Host)
+ u.Host = "localhost"
+ }
+
+ if serverAppend {
+ if strings.Contains(u.Host, ":") {
+ u.Host, _, err = net.SplitHostPort(u.Host)
if err != nil {
return "", fmt.Errorf("Failed to split BaseURL hostpost: %s", err)
}
}
- u.Host = fmt.Sprintf("%s:%d", host, serverPort)
- return u.String(), nil
+ u.Host += fmt.Sprintf(":%d", serverPort)
}
- if useLocalhost {
- u.Host = "localhost"
- }
return u.String(), nil
}
--- a/commands/server_test.go
+++ b/commands/server_test.go
@@ -36,10 +36,11 @@
{"Basic subdir", "", "http://foo.com/bar", true, 1313, "http://localhost:1313/bar/"},
{"Basic production", "http://foo.com", "http://foo.com", false, 80, "http://foo.com/"},
{"Production subdir", "http://foo.com/bar", "http://foo.com/bar", false, 80, "http://foo.com/bar/"},
- {"No http", "", "foo.com", true, 1313, "http://localhost:1313/"},
- {"Override configured port", "", "foo.com:2020", true, 1313, "http://localhost:1313/"},
- {"No http production", "foo.com", "foo.com", false, 80, "http://foo.com/"},
- {"No http production with port", "foo.com", "foo.com", true, 2020, "http://foo.com:2020/"},
+ {"No http", "", "foo.com", true, 1313, "//localhost:1313/"},
+ {"Override configured port", "", "foo.com:2020", true, 1313, "//localhost:1313/"},
+ {"No http production", "foo.com", "foo.com", false, 80, "//foo.com/"},
+ {"No http production with port", "foo.com", "foo.com", true, 2020, "//foo.com:2020/"},
+ {"No config", "", "", true, 1313, "//localhost:1313/"},
}
for i, test := range tests {