From 2d97484be9746c5aa759fe4d536250f0a83fe996 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 8 May 2026 11:05:14 -0700 Subject: [PATCH] fix --- routers/api/packages/composer/api.go | 11 +++--- routers/api/packages/composer/composer.go | 6 +--- .../package/shared/cleanup_rules/preview.tmpl | 8 +++-- .../package/shared/visibility_badge.tmpl | 2 +- .../integration/api_packages_composer_test.go | 35 +++++++++++++++++++ 5 files changed, 47 insertions(+), 15 deletions(-) diff --git a/routers/api/packages/composer/api.go b/routers/api/packages/composer/api.go index 5c3fcb93c5..0d95ab3ed9 100644 --- a/routers/api/packages/composer/api.go +++ b/routers/api/packages/composer/api.go @@ -10,6 +10,7 @@ import ( packages_model "code.gitea.io/gitea/models/packages" access_model "code.gitea.io/gitea/models/perm/access" + "code.gitea.io/gitea/modules/log" composer_module "code.gitea.io/gitea/modules/packages/composer" "code.gitea.io/gitea/services/context" ) @@ -93,7 +94,7 @@ type Source struct { Reference string `json:"reference"` } -func createPackageMetadataResponse(ctx *context.Context, registryURL string, pds []*packages_model.PackageDescriptor) (*PackageMetadataResponse, error) { +func createPackageMetadataResponse(ctx *context.Context, registryURL string, pds []*packages_model.PackageDescriptor) *PackageMetadataResponse { versions := make([]*PackageVersionMetadata, 0, len(pds)) for _, pd := range pds { @@ -120,10 +121,8 @@ func createPackageMetadataResponse(ctx *context.Context, registryURL string, pds if pd.Repository != nil { permission, err := access_model.GetDoerRepoPermission(ctx, pd.Repository, ctx.Doer) if err != nil { - return nil, err - } - - if permission.HasAnyUnitAccess() { + log.Error("GetDoerRepoPermission[%d]: %v", pd.Repository.ID, err) + } else if permission.HasAnyUnitAccessOrPublicAccess() { pkg.Source = Source{ URL: pd.Repository.HTMLURL(), Type: "git", @@ -140,5 +139,5 @@ func createPackageMetadataResponse(ctx *context.Context, registryURL string, pds Packages: map[string][]*PackageVersionMetadata{ pds[0].Package.Name: versions, }, - }, nil + } } diff --git a/routers/api/packages/composer/composer.go b/routers/api/packages/composer/composer.go index 2b124a25a4..b18cdc242c 100644 --- a/routers/api/packages/composer/composer.go +++ b/routers/api/packages/composer/composer.go @@ -145,15 +145,11 @@ func PackageMetadata(ctx *context.Context) { return } - resp, err := createPackageMetadataResponse( + resp := createPackageMetadataResponse( ctx, setting.AppURL+"api/packages/"+ctx.Package.Owner.Name+"/composer", pds, ) - if err != nil { - apiError(ctx, http.StatusInternalServerError, err) - return - } ctx.JSON(http.StatusOK, resp) } diff --git a/templates/package/shared/cleanup_rules/preview.tmpl b/templates/package/shared/cleanup_rules/preview.tmpl index 15ad94debd..a564e37f93 100644 --- a/templates/package/shared/cleanup_rules/preview.tmpl +++ b/templates/package/shared/cleanup_rules/preview.tmpl @@ -20,9 +20,11 @@ {{.Package.Type.Name}} {{.Package.Name}} - - {{template "package/shared/visibility_badge" dict "Package" .Package "Owner" .Owner}} - + {{if .Owner}} + + {{template "package/shared/visibility_badge" dict "Package" .Package "Owner" .Owner}} + + {{end}} {{.Version.Version}} {{.Creator.Name}} diff --git a/templates/package/shared/visibility_badge.tmpl b/templates/package/shared/visibility_badge.tmpl index 75502bd4b0..0677391afc 100644 --- a/templates/package/shared/visibility_badge.tmpl +++ b/templates/package/shared/visibility_badge.tmpl @@ -1,5 +1,5 @@ {{if .Package.IsInternal}} - {{ctx.Locale.Tr "repo.desc.private"}} + {{ctx.Locale.Tr "repo.desc.internal"}} {{else if .Owner.Visibility.IsPrivate}} {{ctx.Locale.Tr "repo.desc.private"}} {{else if .Owner.Visibility.IsLimited}} diff --git a/tests/integration/api_packages_composer_test.go b/tests/integration/api_packages_composer_test.go index 963bdba256..f8af50b070 100644 --- a/tests/integration/api_packages_composer_test.go +++ b/tests/integration/api_packages_composer_test.go @@ -28,6 +28,7 @@ func TestPackageComposer(t *testing.T) { user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) otherUser := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 5}) + privateUser := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 31}) vendorName := "gitea" projectName := "composer-package" @@ -288,5 +289,39 @@ func TestPackageComposer(t *testing.T) { viewResp := MakeRequest(t, viewReq, http.StatusOK) viewDoc := NewHTMLParser(t, bytes.NewReader(viewResp.Body.Bytes())) assert.Equal(t, 0, viewDoc.Find(".issue-title-header .ui.basic.label").Length()) + + privatePackageName := privateUser.Name + "/private-composer-package" + privatePackageVersion := "1.0.0" + privateContent := test.WriteZipArchive(map[string]string{ + "composer.json": `{ + "name": "` + privatePackageName + `", + "description": "Private Package", + "type": "` + packageType + `", + "license": "` + packageLicense + `", + "authors": [ + { + "name": "` + packageAuthor + `" + } + ] + }`, + }).Bytes() + privateUploadURL := fmt.Sprintf("%sapi/packages/%s/composer?version=%s", setting.AppURL, privateUser.Name, privatePackageVersion) + + uploadReq := NewRequestWithBody(t, "PUT", privateUploadURL, bytes.NewReader(privateContent)). + AddBasicAuth(privateUser.Name) + MakeRequest(t, uploadReq, http.StatusCreated) + privateSession := loginUser(t, privateUser.Name) + + privateListReq := NewRequest(t, "GET", fmt.Sprintf("/%s/-/packages", privateUser.Name)) + privateListResp := privateSession.MakeRequest(t, privateListReq, http.StatusOK) + privateListDoc := NewHTMLParser(t, bytes.NewReader(privateListResp.Body.Bytes())) + assert.Equal(t, 1, privateListDoc.Find(".item-title .ui.basic.label").Length()) + assert.Equal(t, "Private", privateListDoc.Find(".item-title .ui.basic.label").First().Text()) + + privateViewReq := NewRequest(t, "GET", fmt.Sprintf("/%s/-/packages/composer/%s/%s", privateUser.Name, neturl.PathEscape(privatePackageName), neturl.PathEscape(privatePackageVersion))) + privateViewResp := privateSession.MakeRequest(t, privateViewReq, http.StatusOK) + privateViewDoc := NewHTMLParser(t, bytes.NewReader(privateViewResp.Body.Bytes())) + assert.Equal(t, 1, privateViewDoc.Find(".issue-title-header .ui.basic.label").Length()) + assert.Equal(t, "Private", privateViewDoc.Find(".issue-title-header .ui.basic.label").First().Text()) }) }