79 lines
1.7 KiB
Go
79 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"crypto/tls"
|
|
"crypto/x509"
|
|
"io"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
|
|
"go.fixergrid.net/servicedemon/pkg/pubsub"
|
|
"go.fixergrid.net/servicedemon/pkg/registrar"
|
|
)
|
|
|
|
type noopHandler struct {
|
|
http.HandlerFunc
|
|
}
|
|
|
|
func wrapHandlefunc(h http.HandlerFunc) noopHandler {
|
|
return noopHandler{
|
|
HandlerFunc: h,
|
|
}
|
|
}
|
|
|
|
func (h noopHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
|
h.HandlerFunc(w, req)
|
|
}
|
|
func main() {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
logger := log.New(os.Stdout, "main: ", log.LstdFlags|log.Lshortfile)
|
|
logger.Println("Starting .... the >HUB<")
|
|
|
|
pubsub := pubsub.New()
|
|
repo := registrar.NewRepo()
|
|
|
|
r := registrar.NewRegistrar(
|
|
pubsub,
|
|
repo,
|
|
registrar.WithLogger(log.New(os.Stdout, "registrar: ", log.LstdFlags|log.Lshortfile)),
|
|
)
|
|
al := registrar.NewApprovalListener(
|
|
pubsub,
|
|
nil,
|
|
registrar.OptionLog(log.New(os.Stdout, "approvalListener: ", log.LstdFlags|log.Lshortfile)),
|
|
)
|
|
go al.Run(ctx)
|
|
|
|
mux := http.NewServeMux()
|
|
|
|
mux.HandleFunc("/register", r.HandleRegistration)
|
|
mux.Handle("/approvals/", http.StripPrefix("/approvals/", wrapHandlefunc(r.HandleApproval)))
|
|
|
|
certFile, err := os.Open("./certs/ca.pem")
|
|
if err != nil {
|
|
logger.Fatalf("failed to open ca.pem: %v", err)
|
|
}
|
|
|
|
caCert, err := io.ReadAll(certFile)
|
|
if err != nil {
|
|
logger.Fatalf("failed to read in ca: %v", err)
|
|
}
|
|
|
|
pool := x509.NewCertPool()
|
|
pool.AppendCertsFromPEM(caCert)
|
|
|
|
server := &http.Server{
|
|
Addr: ":3001",
|
|
TLSConfig: &tls.Config{
|
|
ClientCAs: pool,
|
|
ClientAuth: tls.RequireAndVerifyClientCert,
|
|
},
|
|
}
|
|
server.Handler = mux
|
|
log.Println(server.ListenAndServeTLS("./certs/combined.pem", "./certs/server-key.pem"))
|
|
}
|