Преобразование secret
в http.HandlerFunc , чтобы его можно было использовать как http.Handler
, ожидаемое protect
.Используйте Router.Add , который принимает тип, возвращаемый protect
.
app := pat.New()
app.Get("/", hello) /
app.Add("GET", "/secret", protect(http.HandlerFunc(secret)))
http.Handle("/", app)
Другой подход заключается в изменении protect
для принятия и возврата func(http.ResponseWriter, *http.Request)
:
func protect(h func(http.ResponseWriter, *http.Request)) func(http.ResponseWriter, *http.Request) {
return func(w http.ResponseWriter, r *http.Request) {
user, pass, ok := r.BasicAuth()
match := user == "tobi" && pass == "ferret"
if !ok || !match {
w.Header().Set("WWW-Authenticate", `Basic realm="Ferret Land"`)
http.Error(w, "Not authorized", http.StatusUnauthorized)
return
}
h(w, r)
}
}
Используйте это так:
app := pat.New()
app.Get("/", hello)
app.Get("/secret", protect(secret))
http.Handle("/", app)