ShortURL: Use the k8s API in the cleanup process (#109938)

This commit is contained in:
Ezequiel Victorero
2025-08-28 17:40:45 -03:00
committed by GitHub
parent eda94a6434
commit 4b43877324
7 changed files with 192 additions and 39 deletions
+56 -25
View File
@@ -61,7 +61,25 @@ func (s *legacyStorage) ConvertToTable(ctx context.Context, object runtime.Objec
}
func (s *legacyStorage) List(ctx context.Context, options *internalversion.ListOptions) (runtime.Object, error) {
return nil, fmt.Errorf("List for shorturl not implemented")
orgID, err := request.OrgIDForList(ctx)
if err != nil {
return nil, err
}
shortURLs, err := s.service.List(ctx, orgID)
if err != nil {
if errors.Is(err, shorturls.ErrShortURLNotFound) {
return shorturl.ShortURLKind().ZeroListValue(), nil // return empty list if no short URLs found
}
return nil, err
}
list := &shorturl.ShortURLList{}
for idx := range shortURLs {
list.Items = append(list.Items, *convertToK8sResource(shortURLs[idx], s.namespacer))
}
return list, nil
}
func (s *legacyStorage) Get(ctx context.Context, name string, options *metav1.GetOptions) (runtime.Object, error) {
@@ -70,14 +88,10 @@ func (s *legacyStorage) Get(ctx context.Context, name string, options *metav1.Ge
return nil, err
}
// Convert identity.Requester to *user.SignedInUser
var signedInUser *user.SignedInUser
if authnIdentity, ok := requester.(*authn.Identity); ok {
signedInUser = authnIdentity.SignedInUser()
} else if userIdentity, ok := requester.(*user.SignedInUser); ok {
signedInUser = userIdentity
} else {
return nil, fmt.Errorf("unsupported identity type")
// Convert any identity.Requester to *user.SignedInUser
signedInUser, err := convertRequesterToSignedInUser(requester)
if err != nil {
return nil, fmt.Errorf("failed to convert requester: %w", err)
}
dto, err := s.service.GetShortURLByUID(ctx, signedInUser, name)
@@ -103,14 +117,11 @@ func (s *legacyStorage) Create(ctx context.Context,
if err != nil {
return nil, err
}
// Convert identity.Requester to *user.SignedInUser
var signedInUser *user.SignedInUser
if authnIdentity, ok := requester.(*authn.Identity); ok {
signedInUser = authnIdentity.SignedInUser()
} else if userIdentity, ok := requester.(*user.SignedInUser); ok {
signedInUser = userIdentity
} else {
return nil, fmt.Errorf("unsupported identity type")
// Convert any identity.Requester to *user.SignedInUser
signedInUser, err := convertRequesterToSignedInUser(requester)
if err != nil {
return nil, fmt.Errorf("failed to convert requester: %w", err)
}
if createValidation != nil {
@@ -147,14 +158,10 @@ func (s *legacyStorage) Update(ctx context.Context,
return nil, false, err
}
// Convert identity.Requester to *user.SignedInUser
var signedInUser *user.SignedInUser
if authnIdentity, ok := requester.(*authn.Identity); ok {
signedInUser = authnIdentity.SignedInUser()
} else if userIdentity, ok := requester.(*user.SignedInUser); ok {
signedInUser = userIdentity
} else {
return nil, false, fmt.Errorf("unsupported identity type")
// Convert any identity.Requester to *user.SignedInUser
signedInUser, err := convertRequesterToSignedInUser(requester)
if err != nil {
return nil, false, fmt.Errorf("failed to convert requester: %w", err)
}
shortURL, err := s.service.GetShortURLByUID(ctx, signedInUser, name)
@@ -199,3 +206,27 @@ func (s *legacyStorage) Delete(ctx context.Context, name string, deleteValidatio
func (s *legacyStorage) DeleteCollection(ctx context.Context, deleteValidation rest.ValidateObjectFunc, options *metav1.DeleteOptions, listOptions *internalversion.ListOptions) (runtime.Object, error) {
return nil, fmt.Errorf("DeleteCollection for shorturl not implemented")
}
// convertRequesterToSignedInUser converts any identity.Requester to *user.SignedInUser
// This is needed because some legacy shorturls service methods still expect SignedInUser
func convertRequesterToSignedInUser(requester identity.Requester) (*user.SignedInUser, error) {
// If it's already a SignedInUser, return it directly
if signedInUser, ok := requester.(*user.SignedInUser); ok {
return signedInUser, nil
}
// If it's a StaticRequester (service identity), convert it
if staticRequester, ok := requester.(*identity.StaticRequester); ok {
return &user.SignedInUser{
UserID: staticRequester.UserID, // Used for CreatedBy field
OrgID: staticRequester.OrgID, // Used in SQL queries
}, nil
}
// If it's an authn.Identity, use its SignedInUser method
if authnIdentity, ok := requester.(*authn.Identity); ok {
return authnIdentity.SignedInUser(), nil
}
return nil, fmt.Errorf("unsupported identity type")
}