package api import ( "fmt" "net/http" "wkla.no-ip.biz/gogs/Willie/MsgService/MessageService/dao" ) // BasicAuth implements a simple middleware handler for adding basic http auth to a route. func BasicAuth(realm string) func(next http.Handler) http.Handler { return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { user, pass, ok := r.BasicAuth() if !ok { basicAuthFailed(w, realm) return } idm := dao.GetIDM() salt, ok := idm.GetSalt(user) if !ok { basicAuthFailed(w, realm) return } pass = dao.BuildPasswordHash(pass, salt) if !idm.CheckUser(user, pass) { basicAuthFailed(w, realm) return } next.ServeHTTP(w, r) }) } } func basicAuthFailed(w http.ResponseWriter, realm string) { w.Header().Add("WWW-Authenticate", fmt.Sprintf(`Basic realm="%s"`, realm)) w.WriteHeader(http.StatusUnauthorized) }