feat: logging different levels with slog
This commit is contained in:
@@ -2,7 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/subtle"
|
"crypto/subtle"
|
||||||
"log"
|
"log/slog"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httputil"
|
"net/http/httputil"
|
||||||
"net/url"
|
"net/url"
|
||||||
@@ -11,6 +11,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
|
||||||
|
slog.SetDefault(logger)
|
||||||
|
|
||||||
target := mustEnv("PZ8_RELAY_TARGET_URL")
|
target := mustEnv("PZ8_RELAY_TARGET_URL")
|
||||||
username := mustEnv("PZ8_RELAY_USERNAME")
|
username := mustEnv("PZ8_RELAY_USERNAME")
|
||||||
password := mustEnv("PZ8_RELAY_PASSWORD")
|
password := mustEnv("PZ8_RELAY_PASSWORD")
|
||||||
@@ -22,7 +25,8 @@ func main() {
|
|||||||
|
|
||||||
targetURL, err := url.Parse(target)
|
targetURL, err := url.Parse(target)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("invalid PZ8_RELAY_TARGET_URL: %v", err)
|
slog.Error("invalid PZ8_RELAY_TARGET_URL", "err", err)
|
||||||
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
proxy := &httputil.ReverseProxy{
|
proxy := &httputil.ReverseProxy{
|
||||||
@@ -35,7 +39,7 @@ func main() {
|
|||||||
u, p, ok := r.BasicAuth()
|
u, p, ok := r.BasicAuth()
|
||||||
if !ok || subtle.ConstantTimeCompare([]byte(u), []byte(username)) != 1 ||
|
if !ok || subtle.ConstantTimeCompare([]byte(u), []byte(username)) != 1 ||
|
||||||
subtle.ConstantTimeCompare([]byte(p), []byte(password)) != 1 {
|
subtle.ConstantTimeCompare([]byte(p), []byte(password)) != 1 {
|
||||||
log.Printf("unauthorized request from %s", clientIP(r))
|
slog.Warn("unauthorized request", "client", clientIP(r))
|
||||||
w.Header().Set("WWW-Authenticate", `Basic realm="pz8-relay"`)
|
w.Header().Set("WWW-Authenticate", `Basic realm="pz8-relay"`)
|
||||||
http.Error(w, "unauthorized", http.StatusUnauthorized)
|
http.Error(w, "unauthorized", http.StatusUnauthorized)
|
||||||
return
|
return
|
||||||
@@ -43,8 +47,11 @@ func main() {
|
|||||||
proxy.ServeHTTP(w, r)
|
proxy.ServeHTTP(w, r)
|
||||||
})
|
})
|
||||||
|
|
||||||
log.Printf("pz8-relay listening on %s, proxying to %s", addr, targetURL.Redacted())
|
slog.Info("pz8-relay listening", "addr", addr, "target", targetURL.Redacted())
|
||||||
log.Fatal(http.ListenAndServe(addr, nil))
|
if err := http.ListenAndServe(addr, nil); err != nil {
|
||||||
|
slog.Error("server stopped", "err", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// clientIP returns the original client address, trusting X-Forwarded-For
|
// clientIP returns the original client address, trusting X-Forwarded-For
|
||||||
@@ -62,7 +69,8 @@ func clientIP(r *http.Request) string {
|
|||||||
func mustEnv(key string) string {
|
func mustEnv(key string) string {
|
||||||
v := os.Getenv(key)
|
v := os.Getenv(key)
|
||||||
if v == "" {
|
if v == "" {
|
||||||
log.Fatalf("missing required env var: %s", key)
|
slog.Error("missing required env var", "name", key)
|
||||||
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user