package middleware import ( "crypto/subtle" "net/http" ) // DashboardAuth returns middleware that protects dashboard/data routes with // HTTP Basic Auth. If password is empty, the middleware is a no-op (disabled). // The username is always "admin". func DashboardAuth(password string) func(http.Handler) http.Handler { return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if password == "" { next.ServeHTTP(w, r) return } user, pass, ok := r.BasicAuth() if !ok || subtle.ConstantTimeCompare([]byte(user), []byte("admin")) != 1 || subtle.ConstantTimeCompare([]byte(pass), []byte(password)) != 1 { w.Header().Set("WWW-Authenticate", `Basic realm="Claude Code Proxy"`) writeJSON(w, http.StatusUnauthorized, map[string]string{ "error": "unauthorized", }) return } next.ServeHTTP(w, r) }) } }