impl home.
This commit is contained in:
@@ -13,8 +13,10 @@ import (
|
||||
"net/http"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"slices"
|
||||
"strconv"
|
||||
"strings"
|
||||
"text/template"
|
||||
"time"
|
||||
|
||||
"gitea.bel.blue/local/rproxy3/config"
|
||||
@@ -198,9 +200,13 @@ func (s *Server) Pre(foo http.HandlerFunc) http.HandlerFunc {
|
||||
return
|
||||
}
|
||||
|
||||
if mapKey(r.Host) == "_" {
|
||||
switch mapKey(r.Host) {
|
||||
case "_":
|
||||
s.List(w)
|
||||
return
|
||||
case "home":
|
||||
s.Home(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
if auth, err := s.lookupAuth(mapKey(r.Host)); err != nil {
|
||||
@@ -285,6 +291,50 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
s.Pre(s.Proxy)(w, r)
|
||||
}
|
||||
|
||||
func (s *Server) Home(w http.ResponseWriter, r *http.Request) {
|
||||
keys := s.db.Keys(nsRouting)
|
||||
routePrefixes := []string{}
|
||||
for _, key := range keys {
|
||||
u, _ := s.lookup(key)
|
||||
if u != nil && u.String() != "" {
|
||||
routePrefixes = append(routePrefixes, strings.Split(key, "/")[0])
|
||||
}
|
||||
}
|
||||
slices.Sort(routePrefixes)
|
||||
t := strings.ReplaceAll(`
|
||||
<DOCTYPE! html>
|
||||
<html>
|
||||
<header>
|
||||
</header>
|
||||
<body>
|
||||
{{- $baseDomain := .baseDomain }}
|
||||
{{- $scheme := .scheme }}
|
||||
{{- range .routePrefixes }}
|
||||
{{- $url := printf "%s://%s.%s" $scheme . $baseDomain }}
|
||||
<a href="{{ $url }}">{{ . }}</a><br>
|
||||
{{- end }}
|
||||
</body>
|
||||
<footer>
|
||||
</footer>
|
||||
</html>
|
||||
`, "\t", " ")
|
||||
tmpl, err := template.New("home").Parse(t)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
w.Header().Set("Content-Type", "text/html")
|
||||
if err := tmpl.Execute(w, map[string]any{
|
||||
"routePrefixes": routePrefixes,
|
||||
"domain": r.Host,
|
||||
"baseDomain": strings.Join(strings.Split(r.Host, ".")[1:], "."),
|
||||
"scheme": r.URL.Scheme,
|
||||
}); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Server) List(w http.ResponseWriter) {
|
||||
keys := s.db.Keys(nsRouting)
|
||||
hostURL := map[string]string{}
|
||||
|
||||
Reference in New Issue
Block a user