Skip to content

Commit eeb4d8f

Browse files
GiteaBotcyphercodeswxiaoguang
authored
fix(packages): use file names for generic web downloads (#37514) (#37520)
Backport #37514 Fixes #37511. Signed-off-by: cyphercodes <cyphercodes@users.noreply.github.com> Co-authored-by: Rayan Salhab <r.salhab@aiyexpertsolutions.com> Co-authored-by: cyphercodes <cyphercodes@users.noreply.github.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
1 parent dd78d87 commit eeb4d8f

3 files changed

Lines changed: 29 additions & 2 deletions

File tree

models/packages/package_file.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func TryInsertFile(ctx context.Context, pf *PackageFile) (*PackageFile, error) {
6868
// GetFilesByVersionID gets all files of a version
6969
func GetFilesByVersionID(ctx context.Context, versionID int64) ([]*PackageFile, error) {
7070
pfs := make([]*PackageFile, 0, 10)
71-
return pfs, db.GetEngine(ctx).Where("version_id = ?", versionID).Find(&pfs)
71+
return pfs, db.GetEngine(ctx).Where("version_id = ?", versionID).OrderBy("lower_name, created_unix, id").Find(&pfs)
7272
}
7373

7474
// GetFileForVersionByID gets a file of a version by id

routers/web/user/package.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,11 @@ func DownloadPackageFile(ctx *context.Context) {
566566
return
567567
}
568568

569-
packages_helper.ServePackageFile(ctx, s, u, pf)
569+
packages_helper.ServePackageFile(ctx, s, u, pf, httplib.ServeHeaderOptions{
570+
Filename: pf.Name,
571+
LastModified: pf.CreatedUnix.AsLocalTime(),
572+
ContentDisposition: httplib.ContentDispositionAttachment,
573+
})
570574
}
571575

572576
// ActionPackageTerraformLock locks a terraform state

tests/integration/api_packages_generic_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import (
77
"bytes"
88
"fmt"
99
"io"
10+
"mime"
1011
"net/http"
12+
neturl "net/url"
1113
"testing"
1214

1315
"code.gitea.io/gitea/models/packages"
@@ -173,6 +175,27 @@ func TestPackageGeneric(t *testing.T) {
173175

174176
checkDownloadCount(3)
175177
})
178+
179+
t.Run("WebAssetUsesFilename", func(t *testing.T) {
180+
defer tests.PrintCurrentTest(t)()
181+
182+
pvs, err := packages.GetVersionsByPackageType(t.Context(), user.ID, packages.TypeGeneric)
183+
assert.NoError(t, err)
184+
assert.Len(t, pvs, 1)
185+
186+
pfs, err := packages.GetFilesByVersionID(t.Context(), pvs[0].ID)
187+
assert.NoError(t, err)
188+
assert.NotEmpty(t, pfs)
189+
190+
req = NewRequest(t, "GET", fmt.Sprintf("/%s/-/packages/generic/%s/%s/files/%d", user.Name, neturl.PathEscape(packageName), neturl.PathEscape(packageVersion), pfs[0].ID))
191+
resp = MakeRequest(t, req, http.StatusOK)
192+
assert.Equal(t, content, resp.Body.Bytes())
193+
194+
disposition, params, err := mime.ParseMediaType(resp.Header().Get("Content-Disposition"))
195+
assert.NoError(t, err)
196+
assert.Equal(t, "attachment", disposition)
197+
assert.Equal(t, pfs[0].Name, params["filename"])
198+
})
176199
})
177200

178201
t.Run("Delete", func(t *testing.T) {

0 commit comments

Comments
 (0)