need manual test

This commit is contained in:
Bel LaPointe
2026-05-31 08:55:00 -07:00
parent 84e1623032
commit 8b47133661

52
main.go
View File

@@ -1,9 +1,12 @@
package main package main
import ( import (
"crypto/tls"
"fmt" "fmt"
"log" "log"
"net/http" "net/http"
"net/http/httputil"
"net/url"
"strings" "strings"
) )
@@ -30,6 +33,11 @@ func main() {
} }
func (c Config) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (c Config) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if c.endpoint(r).To == "" {
http.NotFound(w, r)
return
}
if r.Method == http.MethodOptions { if r.Method == http.MethodOptions {
cors(w) cors(w)
return return
@@ -47,7 +55,20 @@ func (c Config) ServeHTTP(w http.ResponseWriter, r *http.Request) {
return return
} }
http.Error(w, "not yet", http.StatusNotImplemented) endpoint := c.endpoint(r)
u, err := url.Parse(endpoint.To)
if err != nil {
log.Printf("[%s] %v", c.key(r), err)
}
var transport http.Transport
transport.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
proxy := httputil.NewSingleHostReverseProxy(u)
proxy.Transport = redirPurge{
proxyHost: r.Host,
targetHost: u.Host,
baseTransport: &transport,
}
proxy.ServeHTTP(w, r)
} }
func cors(w http.ResponseWriter) { func cors(w http.ResponseWriter) {
@@ -59,12 +80,12 @@ func cors(w http.ResponseWriter) {
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)
} }
func (c Config) endpoint(r *http.Request) string { func (c Config) key(r *http.Request) string {
return strings.Split(r.Host, ".")[0] return strings.Split(r.Host, ".")[0]
} }
func (c Config) handleAdmin(w http.ResponseWriter, r *http.Request) bool { func (c Config) handleAdmin(w http.ResponseWriter, r *http.Request) bool {
switch c.endpoint(r) { switch c.key(r) {
case "_": case "_":
panic("not impl: list") panic("not impl: list")
case "home": case "home":
@@ -74,7 +95,7 @@ func (c Config) handleAdmin(w http.ResponseWriter, r *http.Request) bool {
} }
func (c Config) basicAuth(w http.ResponseWriter, r *http.Request) bool { func (c Config) basicAuth(w http.ResponseWriter, r *http.Request) bool {
basicAuth := c.Endpoints[c.endpoint(r)].BasicAuth basicAuth := c.endpoint(r).BasicAuth
if noAuth := basicAuth == ""; noAuth { if noAuth := basicAuth == ""; noAuth {
return true return true
} }
@@ -88,3 +109,26 @@ func (c Config) basicAuth(w http.ResponseWriter, r *http.Request) bool {
return true return true
} }
func (c Config) endpoint(r *http.Request) Endpoint {
return c.Endpoints[c.key(r)]
}
type redirPurge struct {
proxyHost string
targetHost string
baseTransport http.RoundTripper
}
func (rp redirPurge) RoundTrip(r *http.Request) (*http.Response, error) {
resp, err := rp.baseTransport.RoundTrip(r)
if err != nil {
return resp, err
}
if loc := resp.Header.Get("Location"); loc != "" {
resp.Header.Set("Location", strings.Replace(loc, rp.targetHost, rp.proxyHost, 1))
}
// google floc https://paramdeo.com/blog/opting-your-website-out-of-googles-floc-network
resp.Header.Set("Permissions-Policy", "interest-cohort=()")
return resp, err
}