MCPcopy Create free account
hub / github.com/rilldata/rill / findUserAuthTokenFuzzy

Method findUserAuthTokenFuzzy

admin/server/users.go:724–786  ·  view source on GitHub ↗

findUserAuthTokenFuzzy attempts to find a user auth token by exact ID, full token string, or unique prefix.

(ctx context.Context, input string)

Source from the content-addressed store, hash-verified

722
723// findUserAuthTokenFuzzy attempts to find a user auth token by exact ID, full token string, or unique prefix.
724func (s *Server) findUserAuthTokenFuzzy(ctx context.Context, input string) (*database.UserAuthToken, error) {
725 claims := auth.GetClaims(ctx)
726 userID := claims.OwnerID()
727
728 // Try exact ID match
729 token, err := s.admin.DB.FindUserAuthToken(ctx, input)
730 if err != nil && !errors.Is(err, database.ErrNotFound) {
731 return nil, err
732 }
733 if err == nil {
734 return token, nil
735 }
736
737 // Try full token string
738 tokenStr, err := authtoken.FromString(input)
739 if err == nil {
740 token, err := s.admin.DB.FindUserAuthToken(ctx, tokenStr.ID.String())
741 if err != nil && !errors.Is(err, database.ErrNotFound) {
742 return nil, err
743 }
744 if err == nil {
745 return token, nil
746 }
747 }
748
749 // Validate input length and prefix
750 if len(input) < 10 || !strings.HasPrefix(input, "rill_usr_") {
751 return nil, status.Error(codes.InvalidArgument, "invalid token ID (must be at least 10 characters and start with 'rill_usr_')")
752 }
753
754 // Find all tokens for the user and match by prefix
755 dbTokens, err := s.admin.DB.FindUserAuthTokens(ctx, userID, "", 1000, nil)
756 if err != nil {
757 return nil, err
758 }
759
760 tokens := make([]*authtoken.Token, len(dbTokens))
761 for i, dbToken := range dbTokens {
762 id, err := uuid.Parse(dbToken.ID)
763 if err != nil {
764 return nil, status.Errorf(codes.Internal, "invalid token ID %q: %v", dbToken.ID, err)
765 }
766 tokens[i] = authtoken.FromID(authtoken.TypeUser, id)
767 }
768
769 matches := authtoken.MatchByPrefix(input, tokens)
770
771 if len(matches) > 1 {
772 return nil, status.Error(codes.InvalidArgument, "multiple tokens match the given prefix (please use the full ID)")
773 }
774 if len(matches) == 1 {
775 for _, dbToken := range dbTokens {
776 id, err := uuid.Parse(dbToken.ID)
777 if err != nil {
778 continue
779 }
780 if id == matches[0].ID {
781 return dbToken, nil

Callers 1

RevokeUserAuthTokenMethod · 0.95

Calls 11

GetClaimsFunction · 0.92
FromStringFunction · 0.92
FromIDFunction · 0.92
MatchByPrefixFunction · 0.92
ParseMethod · 0.80
OwnerIDMethod · 0.65
FindUserAuthTokenMethod · 0.65
StringMethod · 0.65
FindUserAuthTokensMethod · 0.65
ErrorfMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected