ref: ca6b26fe65761e0a6f29d9f5480098de7b1eae68
parent: 5572e3496b97ace93fea88cdbcf4dfce93e8adc2
author: Cameron Moore <moorereason@gmail.com>
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 {--
⑨