From fdac98cdda8ab8ee4f2dfa14243de3b15b88af8f Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Tue, 2 Sep 2025 20:01:20 +0300 Subject: [PATCH] ShortURL: Avoid teris-io/shortid (#110456) --- apps/advisor/go.sum | 2 -- apps/iam/go.sum | 2 -- go.mod | 1 - go.sum | 2 -- pkg/api/short_url.go | 10 +--------- pkg/registry/apps/shorturl/conversions.go | 2 -- pkg/registry/apps/shorturl/register.go | 1 - pkg/services/shorturls/shorturlimpl/shorturl.go | 7 +------ pkg/util/shortid_generator_test.go | 6 +----- 9 files changed, 3 insertions(+), 30 deletions(-) diff --git a/apps/advisor/go.sum b/apps/advisor/go.sum index 84b82dd6b94..df7c079c68a 100644 --- a/apps/advisor/go.sum +++ b/apps/advisor/go.sum @@ -1135,8 +1135,6 @@ github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8 github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf h1:Z2X3Os7oRzpdJ75iPqWZc0HeJWFYNCvKsfpQwFpRNTA= -github.com/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= github.com/tetratelabs/wazero v1.8.2 h1:yIgLR/b2bN31bjxwXHD8a3d+BogigR952csSDdLYEv4= github.com/tetratelabs/wazero v1.8.2/go.mod h1:yAI0XTsMBhREkM/YDAK/zNou3GoiAce1P6+rp/wQhjs= github.com/thejerf/slogassert v0.3.4 h1:VoTsXixRbXMrRSSxDjYTiEDCM4VWbsYPW5rB/hX24kM= diff --git a/apps/iam/go.sum b/apps/iam/go.sum index dbec9ed4b1a..3315899329c 100644 --- a/apps/iam/go.sum +++ b/apps/iam/go.sum @@ -1287,8 +1287,6 @@ github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -github.com/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf h1:Z2X3Os7oRzpdJ75iPqWZc0HeJWFYNCvKsfpQwFpRNTA= -github.com/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= github.com/tetratelabs/wazero v1.8.2 h1:yIgLR/b2bN31bjxwXHD8a3d+BogigR952csSDdLYEv4= github.com/tetratelabs/wazero v1.8.2/go.mod h1:yAI0XTsMBhREkM/YDAK/zNou3GoiAce1P6+rp/wQhjs= github.com/thejerf/slogassert v0.3.4 h1:VoTsXixRbXMrRSSxDjYTiEDCM4VWbsYPW5rB/hX24kM= diff --git a/go.mod b/go.mod index e19d19dcb85..12bd5ec1559 100644 --- a/go.mod +++ b/go.mod @@ -168,7 +168,6 @@ require ( github.com/spf13/pflag v1.0.7 // @grafana-app-platform-squad github.com/spyzhov/ajson v0.9.6 // @grafana/grafana-sharing-squad github.com/stretchr/testify v1.10.0 // @grafana/grafana-backend-group - github.com/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf // @grafana/grafana-backend-group github.com/thomaspoignant/go-feature-flag v1.42.0 // @grafana/grafana-backend-group github.com/tjhop/slog-gokit v0.1.3 // @grafana/grafana-app-platform-squad github.com/ua-parser/uap-go v0.0.0-20250213224047-9c035f085b90 // @grafana/grafana-backend-group diff --git a/go.sum b/go.sum index d5cd9b38420..83c9849dea4 100644 --- a/go.sum +++ b/go.sum @@ -2419,8 +2419,6 @@ github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -github.com/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf h1:Z2X3Os7oRzpdJ75iPqWZc0HeJWFYNCvKsfpQwFpRNTA= -github.com/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= github.com/tetratelabs/wazero v1.8.2 h1:yIgLR/b2bN31bjxwXHD8a3d+BogigR952csSDdLYEv4= github.com/tetratelabs/wazero v1.8.2/go.mod h1:yAI0XTsMBhREkM/YDAK/zNou3GoiAce1P6+rp/wQhjs= github.com/thanos-io/objstore v0.0.0-20240818203309-0363dadfdfb1 h1:z0v9BB/p7s4J6R//+0a5M3wCld8KzNjrGRLIwXfrAZk= diff --git a/pkg/api/short_url.go b/pkg/api/short_url.go index 1731fd52673..76e3d567a4e 100644 --- a/pkg/api/short_url.go +++ b/pkg/api/short_url.go @@ -5,8 +5,6 @@ import ( "net/http" "time" - "github.com/teris-io/shortid" - "k8s.io/apimachinery/pkg/api/errors" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" @@ -212,13 +210,7 @@ func (sk8s *shortURLK8sHandler) createKubernetesShortURLsHandler(c *contextmodel c.Logger.Debug("Creating short URL", "path", cmd.Path) obj := shorturl.LegacyCreateCommandToUnstructured(cmd) - - uid, err := shortid.Generate() - if err != nil { - c.JsonApiErr(http.StatusInternalServerError, "failed to generate uid", err) - return - } - obj.SetGenerateName(uid) + obj.SetGenerateName("u") // becomes a prefix out, err := client.Create(c.Req.Context(), &obj, v1.CreateOptions{}) if err != nil { diff --git a/pkg/registry/apps/shorturl/conversions.go b/pkg/registry/apps/shorturl/conversions.go index 76025dfd966..979106d3bda 100644 --- a/pkg/registry/apps/shorturl/conversions.go +++ b/pkg/registry/apps/shorturl/conversions.go @@ -7,7 +7,6 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/types" shorturl "github.com/grafana/grafana/apps/shorturl/pkg/apis/shorturl/v1alpha1" "github.com/grafana/grafana/pkg/api/dtos" @@ -25,7 +24,6 @@ func convertToK8sResource(v *shorturls.ShortUrl, namespacer request.NamespaceMap p := &shorturl.ShortURL{ ObjectMeta: metav1.ObjectMeta{ Name: v.Uid, - UID: types.UID(v.Uid), ResourceVersion: fmt.Sprintf("%d", v.LastSeenAt), CreationTimestamp: metav1.NewTime(time.UnixMilli(v.CreatedAt)), Namespace: namespacer(v.OrgId), diff --git a/pkg/registry/apps/shorturl/register.go b/pkg/registry/apps/shorturl/register.go index e280cd86a9e..3aa7472748d 100644 --- a/pkg/registry/apps/shorturl/register.go +++ b/pkg/registry/apps/shorturl/register.go @@ -10,7 +10,6 @@ import ( "github.com/grafana/grafana-app-sdk/app" appsdkapiserver "github.com/grafana/grafana-app-sdk/k8s/apiserver" "github.com/grafana/grafana-app-sdk/simple" - "github.com/grafana/grafana/apps/shorturl/pkg/apis" shorturl "github.com/grafana/grafana/apps/shorturl/pkg/apis/shorturl/v1alpha1" shorturlapp "github.com/grafana/grafana/apps/shorturl/pkg/app" diff --git a/pkg/services/shorturls/shorturlimpl/shorturl.go b/pkg/services/shorturls/shorturlimpl/shorturl.go index 60d4496e979..51753b74c6e 100644 --- a/pkg/services/shorturls/shorturlimpl/shorturl.go +++ b/pkg/services/shorturls/shorturlimpl/shorturl.go @@ -12,7 +12,6 @@ import ( "github.com/grafana/grafana/pkg/services/shorturls" "github.com/grafana/grafana/pkg/services/user" "github.com/grafana/grafana/pkg/util" - "github.com/teris-io/shortid" ) var getTime = time.Now @@ -53,11 +52,7 @@ func (s ShortURLService) CreateShortURL(ctx context.Context, user *user.SignedIn uid := cmd.UID if uid == "" { - var err error - uid, err = shortid.Generate() - if err != nil { - return nil, shorturls.ErrShortURLInternal.Errorf("failed to generate uid: %w", err) - } + uid = util.GenerateShortUID() } else { // Ensure the UID is valid if !util.IsValidShortUID(uid) { diff --git a/pkg/util/shortid_generator_test.go b/pkg/util/shortid_generator_test.go index 8acb4943a75..333a781c12e 100644 --- a/pkg/util/shortid_generator_test.go +++ b/pkg/util/shortid_generator_test.go @@ -6,7 +6,6 @@ import ( "testing" "github.com/stretchr/testify/require" - "github.com/teris-io/shortid" "k8s.io/apimachinery/pkg/util/validation" ) @@ -33,11 +32,8 @@ func TestRandomUIDs(t *testing.T) { func TestCaseInsensitiveCollisionsUIDs(t *testing.T) { history := make(map[string]bool, 0) - for i := 0; i < 100000; i++ { + for i := range 100000 { v := GenerateShortUID() - if false { - v, _ = shortid.Generate() // collides in less then 500 iterations - } lower := strings.ToLower(v) _, exists := history[lower]