From 8ca3b4ad592db46b3eb7b24a80d1326cb576279c Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Tue, 19 Jul 2022 20:59:28 +0200 Subject: [PATCH 1/6] packages/generic: Do not restrict package versions to SemVer There are existing packages out there whose version do not conform to SemVer, yet, one would like to have them available in a generic package repository. To this end, remove the SemVer restriction on package versions when using the Generic package registry, and replace it with a check that simply makes sure the version isn't empty. Signed-off-by: Gergely Nagy --- docs/content/doc/packages/generic.en-us.md | 2 +- integrations/api_packages_generic_test.go | 1 - routers/api/packages/generic/generic.go | 12 +++++------- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/docs/content/doc/packages/generic.en-us.md b/docs/content/doc/packages/generic.en-us.md index afef323938d4..9d4a2dd82d8a 100644 --- a/docs/content/doc/packages/generic.en-us.md +++ b/docs/content/doc/packages/generic.en-us.md @@ -37,7 +37,7 @@ PUT https://gitea.example.com/api/packages/{owner}/generic/{package_name}/{packa | ----------------- | ----------- | | `owner` | The owner of the package. | | `package_name` | The package name. It can contain only lowercase letters (`a-z`), uppercase letter (`A-Z`), numbers (`0-9`), dots (`.`), hyphens (`-`), or underscores (`_`). | -| `package_version` | The package version as described in the [SemVer](https://semver.org/) spec. | +| `package_version` | The package version, a non-empty string. | | `file_name` | The filename. It can contain only lowercase letters (`a-z`), uppercase letter (`A-Z`), numbers (`0-9`), dots (`.`), hyphens (`-`), or underscores (`_`). | Example request using HTTP Basic authentication: diff --git a/integrations/api_packages_generic_test.go b/integrations/api_packages_generic_test.go index c507702eaafd..adaf99e981ae 100644 --- a/integrations/api_packages_generic_test.go +++ b/integrations/api_packages_generic_test.go @@ -42,7 +42,6 @@ func TestPackageGeneric(t *testing.T) { pd, err := packages.GetPackageDescriptor(db.DefaultContext, pvs[0]) assert.NoError(t, err) - assert.NotNil(t, pd.SemVer) assert.Nil(t, pd.Metadata) assert.Equal(t, packageName, pd.Package.Name) assert.Equal(t, packageVersion, pd.Version.Version) diff --git a/routers/api/packages/generic/generic.go b/routers/api/packages/generic/generic.go index d862f77259ac..089b2dcf8391 100644 --- a/routers/api/packages/generic/generic.go +++ b/routers/api/packages/generic/generic.go @@ -15,8 +15,6 @@ import ( packages_module "code.gitea.io/gitea/modules/packages" "code.gitea.io/gitea/routers/api/packages/helper" packages_service "code.gitea.io/gitea/services/packages" - - "github.com/hashicorp/go-version" ) var ( @@ -97,7 +95,7 @@ func UploadPackage(ctx *context.Context) { Name: packageName, Version: packageVersion, }, - SemverCompatible: true, + SemverCompatible: false, Creator: ctx.Doer, }, &packages_service.PackageFileCreationInfo{ @@ -152,15 +150,15 @@ func DeletePackage(ctx *context.Context) { func sanitizeParameters(ctx *context.Context) (string, string, string, error) { packageName := ctx.Params("packagename") filename := ctx.Params("filename") + packageVersion := ctx.Params("packageversion") if !packageNameRegex.MatchString(packageName) || !filenameRegex.MatchString(filename) { return "", "", "", errors.New("Invalid package name or filename") } - v, err := version.NewSemver(ctx.Params("packageversion")) - if err != nil { - return "", "", "", err + if packageVersion == "" { + return "", "", "", errors.New("Invalid package version") } - return packageName, v.String(), filename, nil + return packageName, packageVersion, filename, nil } From 09c9c4d83ec0994898cdab151b7324837ff590f3 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 20 Jul 2022 18:22:09 +0200 Subject: [PATCH 2/6] Update routers/api/packages/generic/generic.go Co-authored-by: KN4CK3R --- routers/api/packages/generic/generic.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/api/packages/generic/generic.go b/routers/api/packages/generic/generic.go index 089b2dcf8391..c2623563e4cb 100644 --- a/routers/api/packages/generic/generic.go +++ b/routers/api/packages/generic/generic.go @@ -156,7 +156,7 @@ func sanitizeParameters(ctx *context.Context) (string, string, string, error) { return "", "", "", errors.New("Invalid package name or filename") } - if packageVersion == "" { + if strings.TrimSpace(packageVersion) == "" { return "", "", "", errors.New("Invalid package version") } From 11ea741b8d8cc573db40c37a150ca019baa49038 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 20 Jul 2022 18:22:29 +0200 Subject: [PATCH 3/6] Update routers/api/packages/generic/generic.go Co-authored-by: KN4CK3R --- routers/api/packages/generic/generic.go | 1 - 1 file changed, 1 deletion(-) diff --git a/routers/api/packages/generic/generic.go b/routers/api/packages/generic/generic.go index c2623563e4cb..17ba47a550f7 100644 --- a/routers/api/packages/generic/generic.go +++ b/routers/api/packages/generic/generic.go @@ -95,7 +95,6 @@ func UploadPackage(ctx *context.Context) { Name: packageName, Version: packageVersion, }, - SemverCompatible: false, Creator: ctx.Doer, }, &packages_service.PackageFileCreationInfo{ From f7b38acb8e1b48c75b2c678f47d9bb69edab49a0 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Thu, 21 Jul 2022 19:22:03 +0200 Subject: [PATCH 4/6] packages/generic: Use the space-trimmed version string Instead of just checking against the space-trimmed version string, return the same trimmed version too, so it gets used in that form down the line. Also add `strings` to the list of imports, because of our use of TrimSpace. Signed-off-by: Gergely Nagy --- routers/api/packages/generic/generic.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/routers/api/packages/generic/generic.go b/routers/api/packages/generic/generic.go index 17ba47a550f7..c4e9f4b670e2 100644 --- a/routers/api/packages/generic/generic.go +++ b/routers/api/packages/generic/generic.go @@ -8,6 +8,7 @@ import ( "errors" "net/http" "regexp" + "strings" packages_model "code.gitea.io/gitea/models/packages" "code.gitea.io/gitea/modules/context" @@ -155,9 +156,10 @@ func sanitizeParameters(ctx *context.Context) (string, string, string, error) { return "", "", "", errors.New("Invalid package name or filename") } - if strings.TrimSpace(packageVersion) == "" { + v := strings.TrimSpace(packageVersion) + if v == "" { return "", "", "", errors.New("Invalid package version") } - return packageName, packageVersion, filename, nil + return packageName, v, filename, nil } From 89067ba428661b76f4a35bdc3e9d4344e148aaea Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 24 Jul 2022 20:49:11 +0200 Subject: [PATCH 5/6] Apply suggestions from code review Co-authored-by: KN4CK3R --- routers/api/packages/generic/generic.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/routers/api/packages/generic/generic.go b/routers/api/packages/generic/generic.go index c4e9f4b670e2..501fe7e4612f 100644 --- a/routers/api/packages/generic/generic.go +++ b/routers/api/packages/generic/generic.go @@ -150,16 +150,15 @@ func DeletePackage(ctx *context.Context) { func sanitizeParameters(ctx *context.Context) (string, string, string, error) { packageName := ctx.Params("packagename") filename := ctx.Params("filename") - packageVersion := ctx.Params("packageversion") if !packageNameRegex.MatchString(packageName) || !filenameRegex.MatchString(filename) { return "", "", "", errors.New("Invalid package name or filename") } - v := strings.TrimSpace(packageVersion) - if v == "" { + packageVersion := strings.TrimSpace(ctx.Params("packageversion")) + if packageVersion == "" { return "", "", "", errors.New("Invalid package version") } - return packageName, v, filename, nil + return packageName, packageVersion, filename, nil } From 451d2a554ad8641dc7d2ca7a055c53c179125603 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Tue, 26 Jul 2022 00:56:03 +0200 Subject: [PATCH 6/6] Make gofmt happy Signed-off-by: Gergely Nagy --- routers/api/packages/generic/generic.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/api/packages/generic/generic.go b/routers/api/packages/generic/generic.go index 501fe7e4612f..9a3a185d9da5 100644 --- a/routers/api/packages/generic/generic.go +++ b/routers/api/packages/generic/generic.go @@ -96,7 +96,7 @@ func UploadPackage(ctx *context.Context) { Name: packageName, Version: packageVersion, }, - Creator: ctx.Doer, + Creator: ctx.Doer, }, &packages_service.PackageFileCreationInfo{ PackageFileInfo: packages_service.PackageFileInfo{