Files
ipasso/app/main.go
2023-10-19 07:16:46 +02:00

83 lines
1.7 KiB
Go

package main
import (
"flag"
htemplate "html/template"
"log"
"net"
"net/http"
"net/http/fcgi"
"os"
"strings"
)
var (
domain = flag.String("domain", "thequux.com", "The base domain to enable SSO for")
listen = flag.String("listen", "0.0.0.0:80", "The address to listen on")
)
func main() {
flag.Parse()
l := log.New(os.Stderr, "ipaSSO: ", log.Ldate|log.Ltime|log.Lshortfile)
mux := http.NewServeMux()
mux.Handle("/env", http.HandlerFunc(dumpEnv))
l.Printf("Starting")
listener, err := net.Listen("tcp", *listen)
if err != nil {
log.Fatalln("Failed to listen: ", err)
}
l.Println("Listening on", listener.Addr())
log.Fatal(fcgi.Serve(listener, mux))
}
var envTemplate = htemplate.Must(htemplate.New("envdoc").Parse(`
<!DOCTYPE html>
<html>
<head>
<style>
pre { margin: 0 1ex; }
</style>
</head>
<body>
<h1>Headers</h1>
<table>
{{- range $k,$v := .Headers }}
<tr>
<td><pre>[{{ $k }}]</pre></td>
<td><pre>{{ $v }}</pre></td>
</tr>
{{- end }}
</table>
<h1>Process Environment</h1>
<table>
{{- range $k,$v := .ProcessEnv }}
<tr>
<td><pre>{{ $k }}</pre></td>
<td><pre>{{ $v }}</pre></td>
</tr>
{{- end }}
</table>
</body>
</html>
`))
type envdocArgs struct {
Headers map[string]string
ProcessEnv map[string]string
}
func dumpEnv(w http.ResponseWriter, r *http.Request) {
var headers = map[string]string{}
for k, v := range r.Header {
headers[k] = strings.Join(v, "\n")
}
var args = envdocArgs{ProcessEnv: fcgi.ProcessEnv(r), Headers: headers}
w.Header().Set("Content-Type", "text/html")
w.WriteHeader(http.StatusOK)
if err := envTemplate.Execute(w, args); err != nil {
panic(err)
}
}