From 59b99d22067104dddc3d0713a82a7d4d17083be2 Mon Sep 17 00:00:00 2001 From: Deluan Date: Sun, 13 Jun 2021 19:17:03 -0400 Subject: [PATCH] No need to check for first time when authenticating. One less SQL call per request --- server/auth.go | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/server/auth.go b/server/auth.go index 87a8d4caf..a4569355c 100644 --- a/server/auth.go +++ b/server/auth.go @@ -169,15 +169,6 @@ func validateLogin(userRepo model.UserRepository, userName, password string) (*m return u, nil } -func contextWithUser(ctx context.Context, ds model.DataStore, username string) (context.Context, error) { - user, err := ds.User(ctx).FindByUsername(username) - if err != nil { - log.Error(ctx, "Authenticated username not found in DB", "username", username) - return ctx, err - } - return request.WithUser(ctx, *user), nil -} - // This method maps the custom authorization header to the default 'Authorization', used by the jwtauth library func authHeaderMapper(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -216,14 +207,16 @@ func UsernameFromReverseProxyHeader(r *http.Request) string { return username } -func authenticateRequest(ds model.DataStore, r *http.Request, findUsernameFns ...func(r *http.Request) string) (context.Context, error) { - ctx := r.Context() - c, err := ds.User(ctx).CountAll() - firstTime := c == 0 && err == nil - if firstTime { - return nil, ErrNoUsers +func contextWithUser(ctx context.Context, ds model.DataStore, username string) (context.Context, error) { + user, err := ds.User(ctx).FindByUsername(username) + if err == nil { + return request.WithUser(ctx, *user), nil } + log.Error(ctx, "Authenticated username not found in DB", "username", username) + return ctx, err +} +func authenticateRequest(ds model.DataStore, r *http.Request, findUsernameFns ...func(r *http.Request) string) (context.Context, error) { var username string for _, fn := range findUsernameFns { username = fn(r) @@ -242,10 +235,6 @@ func Authenticator(ds model.DataStore) func(next http.Handler) http.Handler { return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ctx, err := authenticateRequest(ds, r, UsernameFromToken, UsernameFromReverseProxyHeader) - if err == ErrNoUsers { - _ = rest.RespondWithJSON(w, http.StatusUnauthorized, map[string]string{"message": ErrNoUsers.Error()}) - return - } if err != nil { _ = rest.RespondWithError(w, http.StatusUnauthorized, "Not authenticated") return