You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
983 B
51 lines
983 B
package main
|
|
|
|
import (
|
|
"net/http"
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
type addheaders struct {
|
|
h http.Handler
|
|
headers []string
|
|
}
|
|
|
|
func (a addheaders) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
for _, header := range a.headers {
|
|
headerSplit := strings.SplitN(header, ": ", 2)
|
|
w.Header().Add(headerSplit[0], headerSplit[1])
|
|
}
|
|
|
|
a.h.ServeHTTP(w, r)
|
|
}
|
|
|
|
func AddHeaders(headers []string) func(http.Handler) http.Handler {
|
|
fn := func(h http.Handler) http.Handler {
|
|
return addheaders{h, headers}
|
|
}
|
|
return fn
|
|
}
|
|
|
|
func getSiteURL(r *http.Request) string {
|
|
if Config.siteURL != "" {
|
|
return Config.siteURL
|
|
} else {
|
|
u := &url.URL{}
|
|
u.Host = r.Host
|
|
|
|
if Config.sitePath != "" {
|
|
u.Path = Config.sitePath
|
|
}
|
|
|
|
if scheme := r.Header.Get("X-Forwarded-Proto"); scheme != "" {
|
|
u.Scheme = scheme
|
|
} else if Config.certFile != "" || (r.TLS != nil && r.TLS.HandshakeComplete == true) {
|
|
u.Scheme = "https"
|
|
} else {
|
|
u.Scheme = "http"
|
|
}
|
|
|
|
return u.String()
|
|
}
|
|
}
|