armbian-router/http.go

51 lines
1.0 KiB
Go
Raw Normal View History

2022-01-10 04:47:40 +00:00
package main
import (
"fmt"
"net"
"net/http"
"net/url"
"path"
)
func statusRequest(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
}
func redirectRequest(w http.ResponseWriter, r *http.Request) {
ipStr, _, err := net.SplitHostPort(r.RemoteAddr)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
ip := net.ParseIP(ipStr)
if ip.IsPrivate() {
ip = net.ParseIP("1.1.1.1")
}
server, distance, err := settings.Servers.Closest(ip)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
scheme := r.URL.Scheme
if scheme == "" {
scheme = "https"
}
u := &url.URL{
Scheme: scheme,
Host: server.Host,
Path: path.Join(server.Path, r.URL.Path),
}
w.Header().Set("X-Geo-Distance", fmt.Sprintf("%f", distance))
w.Header().Set("Location", u.String())
w.WriteHeader(http.StatusFound)
}