Semaphore/util/util.go
2019-07-09 18:55:42 +03:00

60 lines
1.4 KiB
Go

package util
import (
"net/http"
"strconv"
"strings"
log "github.com/Sirupsen/logrus"
"github.com/gorilla/mux"
)
func isXHR(w http.ResponseWriter, r *http.Request) bool {
accept := r.Header.Get("Accept")
return !strings.Contains(accept, "text/html")
}
// AuthFailed write a status unauthorized header unless it is an XHR request
// TODO - never called!
func AuthFailed(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if !isXHR(w, r) {
http.Redirect(w, r, "/?hai", http.StatusFound)
return
}
w.WriteHeader(http.StatusUnauthorized)
if (next != nil) {
next.ServeHTTP(w, r)
}
})
}
// GetIntParam fetches a parameter from the route variables as an integer
// redirects to a 404 or writes bad request state depending on error state
func GetIntParam(name string, w http.ResponseWriter, r *http.Request) (int, error) {
intParam, err := strconv.Atoi(mux.Vars(r)[name])
if err != nil {
if !isXHR(w, r) {
http.Redirect(w, r, "/404", http.StatusFound)
} else {
w.WriteHeader(http.StatusBadRequest)
}
return 0, err
}
return intParam, nil
}
// ScanErrorChecker deals with errors encountered while scanning lines
// since we do not fail on these errors currently we can simply note them
// and move on
func ScanErrorChecker(n int, err error) {
if err != nil {
log.Warn("An input error occured:" + err.Error())
}
}