func authenticationMW(h http.Handler, endpoint string, globals *config.Globals) http.Handler { conf := globals.GetEndpoint(endpoint) var networks []*net.IPNet if conf.AcceptAddr != "" { networks = prepareNetworks(conf.AcceptAddr) } return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if networks != nil { if !acceptAddress(networks, r.RemoteAddr) { log.Info("authenticationMW 403 Forbidden - addr", "endpoint", endpoint, "addr", r.RemoteAddr) http.Error(w, http.StatusText(http.StatusForbidden), http.StatusForbidden) counters.Add(endpoint+"|403", 1) return } } if len(conf.Users) == 0 { h.ServeHTTP(w, r) return } usr, pass, _ := r.BasicAuth() if usr == "" && r.URL != nil && r.URL.User != nil { usr = r.URL.User.Username() pass, _ = r.URL.User.Password() } if usr == "" { w.Header().Set("WWW-Authenticate", "Basic realm=\"REALM\"") logging.LogForRequest(log, r).Info("authenticationMW 401 Unauthorized", "endpoint", endpoint, "status", 401) http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized) counters.Add(endpoint+"|401", 1) return } user := globals.GetUser(usr) if user.Active && conf.AcceptUser(user.Login) && user.CheckPassword(pass) { r.Header.Set("X-Authenticated-User", usr) counters.Add(endpoint+"|pass", 1) h.ServeHTTP(w, r) return } //log.Info("authenticationMW ", endpoint, " 403 Forbidden") //http.Error(w, http.StatusText(http.StatusForbidden), http.StatusForbidden) counters.Add(endpoint+"|403", 1) w.Header().Set("WWW-Authenticate", "Basic realm=\"REALM\"") logging.LogForRequest(log, r).Info("authenticationMW 401 Unauthorized", "endpoint", endpoint, "status", 401, "user", user.Login, "user_active", user.Active) http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized) }) }
func (f userForm) Validate(globals *config.Globals, newUser bool) (errors map[string]string) { errors = f.User.Validate() if len(errors) == 0 && newUser { // check login uniquess if u := globals.GetUser(f.Login); u != nil { errors["Login"] = "******" } } if f.NewPassword != "" && f.NewPasswordC != f.NewPassword { errors["NewPassword"] = "******" } return errors }