1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 16:06:56 +00:00
kyverno/server/server.go

60 lines
1.3 KiB
Go

package server
import (
"context"
"crypto/tls"
"fmt"
"log"
"net/http"
"net/http/httputil"
"time"
)
type WebhookServer struct {
server http.Server
}
func (ws *WebhookServer) serve(w http.ResponseWriter, r *http.Request) {
fmt.Println("/mutate is called!")
httputil.DumpRequest(r, true)
}
func (ws *WebhookServer) RunAsync() {
go func(server http.Server) {
err := server.ListenAndServeTLS("", "")
if err != nil {
log.Fatal(err)
}
}(ws.server)
}
func (ws *WebhookServer) Stop() {
err := ws.server.Shutdown(context.Background())
if err != nil {
// Error from closing listeners, or context timeout:
log.Printf("Server Shutdown error: %v", err)
ws.server.Close()
}
}
func NewWebhookServer(certFile string, keyFile string, logger *log.Logger) WebhookServer {
var ws WebhookServer
mux := http.NewServeMux()
mux.HandleFunc("/mutate", ws.serve)
var config tls.Config
pair, err := tls.LoadX509KeyPair(certFile, keyFile)
if err != nil {
log.Fatal("Unable to load certificate and key: ", err)
}
config.Certificates = []tls.Certificate{pair}
ws.server = http.Server{
Addr: ":443", // Listen on port for HTTPS requests
TLSConfig: &config,
Handler: mux,
ErrorLog: logger,
ReadTimeout: 5 * time.Second,
WriteTimeout: 5 * time.Second}
return ws
}