package services import ( "errors" "fmt" "git.secnex.io/secnex/auth-api/config" "git.secnex.io/secnex/auth-api/repositories" "git.secnex.io/secnex/masterlog" "github.com/golang-jwt/jwt/v5" "github.com/google/uuid" ) func SessionInfo(token string) (*repositories.SessionDetails, error) { claims, err := jwt.ParseWithClaims(token, &jwt.MapClaims{}, func(token *jwt.Token) (interface{}, error) { return []byte(config.CONFIG.JwtSecret), nil }) if err != nil { return nil, err } if !claims.Valid { return nil, errors.New("invalid token") } mapClaims := claims.Claims.(*jwt.MapClaims) subValue, ok := (*mapClaims)["sub"] if !ok { return nil, errors.New("sub claim not found") } var sessionID string switch v := subValue.(type) { case string: sessionID = v case uuid.UUID: sessionID = v.String() default: sessionID = fmt.Sprintf("%v", v) } masterlog.Debug("Session ID extracted from token", map[string]interface{}{"session_id": sessionID, "sub_type": fmt.Sprintf("%T", subValue)}) sessionDetails := repositories.GetSessionCache(sessionID) if sessionDetails == nil { masterlog.Debug("Session not found in cache", map[string]interface{}{"session_id": sessionID}) return nil, errors.New("session not found") } masterlog.Debug("Session details retrieved successfully", map[string]interface{}{"session_id": sessionID, "user_id": sessionDetails.UserID}) return sessionDetails, nil }