diff options
author | Mai-Lapyst <67418776+Mai-Lapyst@users.noreply.github.com> | 2023-03-28 19:55:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-28 13:55:03 -0400 |
commit | 5cd1d6c93ba9b8399f826e671b8940eb5294b872 (patch) | |
tree | 0957a99a13da7a7c1ab3e8bcffac14e6a1f14ad5 /routers | |
parent | 3cab9c6b0c050bfcb9f2f067e7dc1b0242875254 (diff) | |
download | gitea-5cd1d6c93ba9b8399f826e671b8940eb5294b872.tar.gz gitea-5cd1d6c93ba9b8399f826e671b8940eb5294b872.zip |
Set repository link based on the url in package.json for npm packages (#20379)
automatically set repository link for package based on the repository
url present inside package.json
closes #20146
Diffstat (limited to 'routers')
-rw-r--r-- | routers/api/packages/npm/npm.go | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/routers/api/packages/npm/npm.go b/routers/api/packages/npm/npm.go index 0d25f173e9..51b34d3e27 100644 --- a/routers/api/packages/npm/npm.go +++ b/routers/api/packages/npm/npm.go @@ -13,6 +13,9 @@ import ( "code.gitea.io/gitea/models/db" packages_model "code.gitea.io/gitea/models/packages" + access_model "code.gitea.io/gitea/models/perm/access" + repo_model "code.gitea.io/gitea/models/repo" + "code.gitea.io/gitea/models/unit" "code.gitea.io/gitea/modules/context" packages_module "code.gitea.io/gitea/modules/packages" npm_module "code.gitea.io/gitea/modules/packages/npm" @@ -166,6 +169,26 @@ func UploadPackage(ctx *context.Context) { return } + repo, err := repo_model.GetRepositoryByURL(ctx, npmPackage.Metadata.Repository.URL) + if err == nil { + canWrite := repo.OwnerID == ctx.Doer.ID + + if !canWrite { + perms, err := access_model.GetUserRepoPermission(ctx, repo, ctx.Doer) + if err != nil { + apiError(ctx, http.StatusInternalServerError, err) + return + } + + canWrite = perms.CanWrite(unit.TypePackages) + } + + if !canWrite { + apiError(ctx, http.StatusForbidden, "no permission to upload this package") + return + } + } + buf, err := packages_module.CreateHashedBufferFromReader(bytes.NewReader(npmPackage.Data), 32*1024*1024) if err != nil { apiError(ctx, http.StatusInternalServerError, err) @@ -217,6 +240,13 @@ func UploadPackage(ctx *context.Context) { } } + if repo != nil { + if err := packages_model.SetRepositoryLink(ctx, pv.PackageID, repo.ID); err != nil { + apiError(ctx, http.StatusInternalServerError, err) + return + } + } + ctx.Status(http.StatusCreated) } |