Skip to content

Commit 4beb48e

Browse files
committed
Fix package access.
1 parent 191a74d commit 4beb48e

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

Diff for: modules/context/package.go

+4
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ func determineAccessMode(ctx *Context) (perm.AccessMode, error) {
9191
return accessMode, nil
9292
}
9393

94+
if ctx.Doer != nil && (!ctx.Doer.IsActive || ctx.Doer.ProhibitLogin) {
95+
return accessMode, nil
96+
}
97+
9498
if ctx.Package.Owner.IsOrganization() {
9599
org := organization.OrgFromUser(ctx.Package.Owner)
96100

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

+2
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ func Routes(ctx gocontext.Context) *web.Route {
5858
authGroup := auth.NewGroup(authMethods...)
5959
r.Use(func(ctx *context.Context) {
6060
ctx.Doer = authGroup.Verify(ctx.Req, ctx.Resp, ctx, ctx.Session)
61+
ctx.IsSigned = ctx.Doer != nil
6162
})
6263

6364
r.Group("/{username}", func() {
@@ -314,6 +315,7 @@ func ContainerRoutes(ctx gocontext.Context) *web.Route {
314315
authGroup := auth.NewGroup(authMethods...)
315316
r.Use(func(ctx *context.Context) {
316317
ctx.Doer = authGroup.Verify(ctx.Req, ctx.Resp, ctx, ctx.Session)
318+
ctx.IsSigned = ctx.Doer != nil
317319
})
318320

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

Diff for: tests/integration/api_packages_test.go

+22
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525

2626
func TestPackageAPI(t *testing.T) {
2727
defer tests.PrepareTestEnv(t)()
28+
2829
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
2930
session := loginUser(t, user.Name)
3031
token := getTokenForLoggedInUser(t, session)
@@ -144,6 +145,27 @@ func TestPackageAPI(t *testing.T) {
144145
})
145146
}
146147

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

0 commit comments

Comments
 (0)