Skip to content

Commit 5bc3fbd

Browse files
KN4CK3Rlafrikslunny
authored
Fix package access for admins and inactive users (#21580) (#21592)
Backport of #21580 Co-authored-by: Lauris BH <lauris@nix.lv> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
1 parent b0a057f commit 5bc3fbd

File tree

4 files changed

+34
-3
lines changed

4 files changed

+34
-3
lines changed

Diff for: integrations/api_packages_container_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,10 @@ func TestPackageContainer(t *testing.T) {
433433

434434
assert.Equal(t, fmt.Sprintf("%d", len(blobContent)), resp.Header().Get("Content-Length"))
435435
assert.Equal(t, blobDigest, resp.Header().Get("Docker-Content-Digest"))
436+
437+
req = NewRequest(t, "HEAD", fmt.Sprintf("%s/blobs/%s", url, blobDigest))
438+
addTokenAuthHeader(req, anonymousToken)
439+
MakeRequest(t, req, http.StatusOK)
436440
})
437441

438442
t.Run("GetBlob", func(t *testing.T) {

Diff for: integrations/api_packages_test.go

+22
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424

2525
func TestPackageAPI(t *testing.T) {
2626
defer prepareTestEnv(t)()
27+
2728
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4}).(*user_model.User)
2829
session := loginUser(t, user.Name)
2930
token := getTokenForLoggedInUser(t, session)
@@ -143,6 +144,27 @@ func TestPackageAPI(t *testing.T) {
143144
})
144145
}
145146

147+
func TestPackageAccess(t *testing.T) {
148+
defer prepareTestEnv(t)()
149+
150+
admin := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}).(*user_model.User)
151+
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 5}).(*user_model.User)
152+
inactive := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 9}).(*user_model.User)
153+
154+
uploadPackage := func(doer, owner *user_model.User, expectedStatus int) {
155+
url := fmt.Sprintf("/api/packages/%s/generic/test-package/1.0/file.bin", owner.Name)
156+
req := NewRequestWithBody(t, "PUT", url, bytes.NewReader([]byte{1}))
157+
AddBasicAuthHeader(req, doer.Name)
158+
MakeRequest(t, req, expectedStatus)
159+
}
160+
161+
uploadPackage(user, inactive, http.StatusUnauthorized)
162+
uploadPackage(inactive, inactive, http.StatusUnauthorized)
163+
uploadPackage(inactive, user, http.StatusUnauthorized)
164+
uploadPackage(admin, inactive, http.StatusCreated)
165+
uploadPackage(admin, user, http.StatusCreated)
166+
}
167+
146168
func TestPackageCleanup(t *testing.T) {
147169
defer prepareTestEnv(t)()
148170

Diff for: modules/context/package.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,15 @@ func packageAssignment(ctx *Context, errCb func(int, string, interface{})) {
8383
}
8484

8585
func determineAccessMode(ctx *Context) (perm.AccessMode, error) {
86-
accessMode := perm.AccessModeNone
87-
8886
if setting.Service.RequireSignInView && ctx.Doer == nil {
89-
return accessMode, nil
87+
return perm.AccessModeNone, nil
9088
}
9189

90+
if ctx.Doer != nil && !ctx.Doer.IsGhost() && (!ctx.Doer.IsActive || ctx.Doer.ProhibitLogin) {
91+
return perm.AccessModeNone, nil
92+
}
93+
94+
accessMode := perm.AccessModeNone
9295
if ctx.Package.Owner.IsOrganization() {
9396
org := organization.OrgFromUser(ctx.Package.Owner)
9497

Diff for: routers/api/packages/api.go

+2
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ func Routes() *web.Route {
5555
authGroup := auth.NewGroup(authMethods...)
5656
r.Use(func(ctx *context.Context) {
5757
ctx.Doer = authGroup.Verify(ctx.Req, ctx.Resp, ctx, ctx.Session)
58+
ctx.IsSigned = ctx.Doer != nil
5859
})
5960

6061
r.Group("/{username}", func() {
@@ -256,6 +257,7 @@ func ContainerRoutes() *web.Route {
256257
authGroup := auth.NewGroup(authMethods...)
257258
r.Use(func(ctx *context.Context) {
258259
ctx.Doer = authGroup.Verify(ctx.Req, ctx.Resp, ctx, ctx.Session)
260+
ctx.IsSigned = ctx.Doer != nil
259261
})
260262

261263
r.Get("", container.ReqContainerAccess, container.DetermineSupport)

0 commit comments

Comments
 (0)