diff --git a/api/user/UserAuthHandler.go b/api/user/UserAuthHandler.go index 2a3559fbe4..37fe0f8d7f 100644 --- a/api/user/UserAuthHandler.go +++ b/api/user/UserAuthHandler.go @@ -75,7 +75,7 @@ func (handler UserAuthHandlerImpl) LoginHandler(w http.ResponseWriter, r *http.R } //token, err := handler.loginService.CreateLoginSession(up.Username, up.Password) clientIp := util.GetClientIP(r) - token, err := handler.userAuthService.HandleLoginWithClientIp(up.Username, up.Password, clientIp) + token, err := handler.userAuthService.HandleLoginWithClientIp(r.Context(),up.Username, up.Password, clientIp) if err != nil { common.WriteJsonResp(w, fmt.Errorf("invalid username or password"), nil, http.StatusForbidden) return diff --git a/pkg/user/UserAuthService.go b/pkg/user/UserAuthService.go index c8ff66a96a..6246bebf25 100644 --- a/pkg/user/UserAuthService.go +++ b/pkg/user/UserAuthService.go @@ -46,7 +46,7 @@ import ( ) type UserAuthService interface { - HandleLoginWithClientIp(username, password, clientIp string) (string, error) + HandleLoginWithClientIp(ctx context.Context, username, password, clientIp string) (string, error) HandleLogin(username string, password string) (string, error) HandleDexCallback(w http.ResponseWriter, r *http.Request) HandleRefresh(w http.ResponseWriter, r *http.Request) @@ -255,10 +255,10 @@ func (impl UserAuthServiceImpl) HandleRefresh(w http.ResponseWriter, r *http.Req } } -func (impl UserAuthServiceImpl) HandleLoginWithClientIp(username, password, clientIp string) (string, error) { +func (impl UserAuthServiceImpl) HandleLoginWithClientIp(ctx context.Context, username, password, clientIp string) (string, error) { token, err := impl.HandleLogin(username, password) if err == nil { - id, _, err := impl.userService.GetUserByToken(token) + id, _, err := impl.userService.GetUserByToken(ctx, token) if err != nil { impl.logger.Infow("error occured while getting user by token", "err", err) } else { diff --git a/pkg/user/UserService.go b/pkg/user/UserService.go index 86ab196bd0..1198ae7250 100644 --- a/pkg/user/UserService.go +++ b/pkg/user/UserService.go @@ -18,6 +18,7 @@ package user import ( + "context" "fmt" "github.com/devtron-labs/authenticator/jwt" "github.com/devtron-labs/authenticator/middleware" @@ -30,6 +31,7 @@ import ( util2 "github.com/devtron-labs/devtron/util" "github.com/go-pg/pg" "github.com/gorilla/sessions" + "go.opentelemetry.io/otel" "go.uber.org/zap" "net/http" "strings" @@ -49,7 +51,7 @@ type UserService interface { DeleteUser(userInfo *bean.UserInfo) (bool, error) CheckUserRoles(id int32) ([]string, error) SyncOrchestratorToCasbin() (bool, error) - GetUserByToken(token string) (int32, string, error) + GetUserByToken(context context.Context, token string) (int32, string, error) IsSuperAdmin(userId int) (bool, error) GetByIdIncludeDeleted(id int32) (*bean.UserInfo, error) UserExists(emailId string) bool @@ -1160,13 +1162,15 @@ func (impl UserServiceImpl) GetUserByEmail(emailId string) (*bean.UserInfo, erro return response, nil } func (impl UserServiceImpl) GetLoggedInUser(r *http.Request) (int32, error) { + _, span := otel.Tracer("userService").Start(r.Context(), "GetLoggedInUser") + defer span.End() token := "" if strings.Contains(r.URL.Path, "/orchestrator/webhook/ext-ci/") { token = r.Header.Get("api-token") } else { token = r.Header.Get("token") } - userId, userType, err := impl.GetUserByToken(token) + userId, userType, err := impl.GetUserByToken(r.Context(), token) // if user is of api-token type, then update lastUsedBy and lastUsedAt if err == nil && userType == bean.USER_TYPE_API_TOKEN { go impl.saveUserAudit(r, userId) @@ -1174,12 +1178,13 @@ func (impl UserServiceImpl) GetLoggedInUser(r *http.Request) (int32, error) { return userId, err } -func (impl UserServiceImpl) GetUserByToken(token string) (int32, string, error) { +func (impl UserServiceImpl) GetUserByToken(context context.Context, token string) (int32, string, error) { + _, span := otel.Tracer("userService").Start(context, "GetUserByToken") email, err := impl.GetEmailFromToken(token) + span.End() if err != nil { return http.StatusUnauthorized, "", err } - userInfo, err := impl.GetUserByEmail(email) if err != nil { impl.logger.Errorw("unable to fetch user from db", "error", err) diff --git a/wire_gen.go b/wire_gen.go index d62be13a1d..6072c0ac81 100644 --- a/wire_gen.go +++ b/wire_gen.go @@ -1,8 +1,7 @@ // Code generated by Wire. DO NOT EDIT. -//go:generate go run github.com/google/wire/cmd/wire -//go:build !wireinject -// +build !wireinject +//go:generate wire +//+build !wireinject package main