extract checkXsrf to simplify Auth middleware

This commit is contained in:
Umputun
2018-05-18 12:19:24 -05:00
parent ebda2514ec
commit e15c276124
+14 -14
View File
@@ -61,20 +61,7 @@ func (a *Authenticator) Auth(reqAuth bool) func(http.Handler) http.Handler {
return
}
xsrfError := func() error {
xsrfToken := r.Header.Get("X-XSRF-TOKEN")
sessionToken, headerOk := session.Values["xsrf_token"]
if !headerOk || xsrfToken == "" || sessionToken == nil {
return errors.New(" no xsrf_token in session")
}
if xsrfToken != sessionToken {
return errors.Errorf("xsrf header not matched session token, %q != %q", xsrfToken, sessionToken)
}
return nil
}()
if xsrfError != nil {
if xsrfError := a.checkXsrf(r, session); xsrfError != nil {
if reqAuth {
log.Printf("[WARN] %s", xsrfError.Error())
http.Error(w, "Unauthorized", http.StatusUnauthorized)
@@ -102,6 +89,19 @@ func (a *Authenticator) Auth(reqAuth bool) func(http.Handler) http.Handler {
return f
}
func (a *Authenticator) checkXsrf(r *http.Request, session *sessions.Session) error {
xsrfToken := r.Header.Get("X-XSRF-TOKEN")
sessionToken, headerOk := session.Values["xsrf_token"]
if !headerOk || xsrfToken == "" || sessionToken == nil {
return errors.New(" no xsrf_token in session")
}
if xsrfToken != sessionToken {
return errors.Errorf("xsrf header not matched session token, %q != %q", xsrfToken, sessionToken)
}
return nil
}
// AdminOnly allows access to admins
func (a *Authenticator) AdminOnly(next http.Handler) http.Handler {
fn := func(w http.ResponseWriter, r *http.Request) {