Skip to content

Commit 5295ad2

Browse files
committed
Move accessmode into models/perm
1 parent fbadc1a commit 5295ad2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+359
-295
lines changed

cmd/serv.go

+8-7
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"time"
1818

1919
"code.gitea.io/gitea/models"
20+
"code.gitea.io/gitea/models/perm"
2021
"code.gitea.io/gitea/modules/git"
2122
"code.gitea.io/gitea/modules/json"
2223
"code.gitea.io/gitea/modules/log"
@@ -64,11 +65,11 @@ func setup(logPath string, debug bool) {
6465
}
6566

6667
var (
67-
allowedCommands = map[string]models.AccessMode{
68-
"git-upload-pack": models.AccessModeRead,
69-
"git-upload-archive": models.AccessModeRead,
70-
"git-receive-pack": models.AccessModeWrite,
71-
lfsAuthenticateVerb: models.AccessModeNone,
68+
allowedCommands = map[string]perm.AccessMode{
69+
"git-upload-pack": perm.AccessModeRead,
70+
"git-upload-archive": perm.AccessModeRead,
71+
"git-receive-pack": perm.AccessModeWrite,
72+
lfsAuthenticateVerb: perm.AccessModeNone,
7273
}
7374
alphaDashDotPattern = regexp.MustCompile(`[^\w-\.]`)
7475
)
@@ -214,9 +215,9 @@ func runServ(c *cli.Context) error {
214215

215216
if verb == lfsAuthenticateVerb {
216217
if lfsVerb == "upload" {
217-
requestedMode = models.AccessModeWrite
218+
requestedMode = perm.AccessModeWrite
218219
} else if lfsVerb == "download" {
219-
requestedMode = models.AccessModeRead
220+
requestedMode = perm.AccessModeRead
220221
} else {
221222
return fail("Unknown LFS verb", "Unknown lfs verb %s", lfsVerb)
222223
}

integrations/api_helper_for_declarative_test.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"time"
1515

1616
"code.gitea.io/gitea/models"
17+
"code.gitea.io/gitea/models/perm"
1718
"code.gitea.io/gitea/modules/json"
1819
"code.gitea.io/gitea/modules/queue"
1920
api "code.gitea.io/gitea/modules/structs"
@@ -89,13 +90,13 @@ func doAPIEditRepository(ctx APITestContext, editRepoOption *api.EditRepoOption,
8990
}
9091
}
9192

92-
func doAPIAddCollaborator(ctx APITestContext, username string, mode models.AccessMode) func(*testing.T) {
93+
func doAPIAddCollaborator(ctx APITestContext, username string, mode perm.AccessMode) func(*testing.T) {
9394
return func(t *testing.T) {
9495
permission := "read"
9596

96-
if mode == models.AccessModeAdmin {
97+
if mode == perm.AccessModeAdmin {
9798
permission = "admin"
98-
} else if mode > models.AccessModeRead {
99+
} else if mode > perm.AccessModeRead {
99100
permission = "write"
100101
}
101102
addCollaboratorOption := &api.AddCollaboratorOption{

integrations/api_keys_test.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"testing"
1212

1313
"code.gitea.io/gitea/models"
14+
"code.gitea.io/gitea/models/perm"
1415
"code.gitea.io/gitea/models/unittest"
1516
user_model "code.gitea.io/gitea/models/user"
1617
api "code.gitea.io/gitea/modules/structs"
@@ -67,7 +68,7 @@ func TestCreateReadOnlyDeployKey(t *testing.T) {
6768
ID: newDeployKey.ID,
6869
Name: rawKeyBody.Title,
6970
Content: rawKeyBody.Key,
70-
Mode: models.AccessModeRead,
71+
Mode: perm.AccessModeRead,
7172
})
7273
}
7374

@@ -92,7 +93,7 @@ func TestCreateReadWriteDeployKey(t *testing.T) {
9293
ID: newDeployKey.ID,
9394
Name: rawKeyBody.Title,
9495
Content: rawKeyBody.Key,
95-
Mode: models.AccessModeWrite,
96+
Mode: perm.AccessModeWrite,
9697
})
9798
}
9899

@@ -119,7 +120,7 @@ func TestCreateUserKey(t *testing.T) {
119120
OwnerID: user.ID,
120121
Name: rawKeyBody.Title,
121122
Content: rawKeyBody.Key,
122-
Mode: models.AccessModeWrite,
123+
Mode: perm.AccessModeWrite,
123124
})
124125

125126
// Search by fingerprint

integrations/api_private_serv_test.go

+13-12
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"testing"
1111

1212
"code.gitea.io/gitea/models"
13+
"code.gitea.io/gitea/models/perm"
1314
"code.gitea.io/gitea/modules/private"
1415

1516
"github.com/stretchr/testify/assert"
@@ -43,7 +44,7 @@ func TestAPIPrivateServ(t *testing.T) {
4344
defer cancel()
4445

4546
// Can push to a repo we own
46-
results, err := private.ServCommand(ctx, 1, "user2", "repo1", models.AccessModeWrite, "git-upload-pack", "")
47+
results, err := private.ServCommand(ctx, 1, "user2", "repo1", perm.AccessModeWrite, "git-upload-pack", "")
4748
assert.NoError(t, err)
4849
assert.False(t, results.IsWiki)
4950
assert.False(t, results.IsDeployKey)
@@ -56,17 +57,17 @@ func TestAPIPrivateServ(t *testing.T) {
5657
assert.Equal(t, int64(1), results.RepoID)
5758

5859
// Cannot push to a private repo we're not associated with
59-
results, err = private.ServCommand(ctx, 1, "user15", "big_test_private_1", models.AccessModeWrite, "git-upload-pack", "")
60+
results, err = private.ServCommand(ctx, 1, "user15", "big_test_private_1", perm.AccessModeWrite, "git-upload-pack", "")
6061
assert.Error(t, err)
6162
assert.Empty(t, results)
6263

6364
// Cannot pull from a private repo we're not associated with
64-
results, err = private.ServCommand(ctx, 1, "user15", "big_test_private_1", models.AccessModeRead, "git-upload-pack", "")
65+
results, err = private.ServCommand(ctx, 1, "user15", "big_test_private_1", perm.AccessModeRead, "git-upload-pack", "")
6566
assert.Error(t, err)
6667
assert.Empty(t, results)
6768

6869
// Can pull from a public repo we're not associated with
69-
results, err = private.ServCommand(ctx, 1, "user15", "big_test_public_1", models.AccessModeRead, "git-upload-pack", "")
70+
results, err = private.ServCommand(ctx, 1, "user15", "big_test_public_1", perm.AccessModeRead, "git-upload-pack", "")
7071
assert.NoError(t, err)
7172
assert.False(t, results.IsWiki)
7273
assert.False(t, results.IsDeployKey)
@@ -79,7 +80,7 @@ func TestAPIPrivateServ(t *testing.T) {
7980
assert.Equal(t, int64(17), results.RepoID)
8081

8182
// Cannot push to a public repo we're not associated with
82-
results, err = private.ServCommand(ctx, 1, "user15", "big_test_public_1", models.AccessModeWrite, "git-upload-pack", "")
83+
results, err = private.ServCommand(ctx, 1, "user15", "big_test_public_1", perm.AccessModeWrite, "git-upload-pack", "")
8384
assert.Error(t, err)
8485
assert.Empty(t, results)
8586

@@ -88,7 +89,7 @@ func TestAPIPrivateServ(t *testing.T) {
8889
assert.NoError(t, err)
8990

9091
// Can pull from repo we're a deploy key for
91-
results, err = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_1", models.AccessModeRead, "git-upload-pack", "")
92+
results, err = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_1", perm.AccessModeRead, "git-upload-pack", "")
9293
assert.NoError(t, err)
9394
assert.False(t, results.IsWiki)
9495
assert.True(t, results.IsDeployKey)
@@ -101,17 +102,17 @@ func TestAPIPrivateServ(t *testing.T) {
101102
assert.Equal(t, int64(19), results.RepoID)
102103

103104
// Cannot push to a private repo with reading key
104-
results, err = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_1", models.AccessModeWrite, "git-upload-pack", "")
105+
results, err = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_1", perm.AccessModeWrite, "git-upload-pack", "")
105106
assert.Error(t, err)
106107
assert.Empty(t, results)
107108

108109
// Cannot pull from a private repo we're not associated with
109-
results, err = private.ServCommand(ctx, deployKey.ID, "user15", "big_test_private_2", models.AccessModeRead, "git-upload-pack", "")
110+
results, err = private.ServCommand(ctx, deployKey.ID, "user15", "big_test_private_2", perm.AccessModeRead, "git-upload-pack", "")
110111
assert.Error(t, err)
111112
assert.Empty(t, results)
112113

113114
// Cannot pull from a public repo we're not associated with
114-
results, err = private.ServCommand(ctx, deployKey.ID, "user15", "big_test_public_1", models.AccessModeRead, "git-upload-pack", "")
115+
results, err = private.ServCommand(ctx, deployKey.ID, "user15", "big_test_public_1", perm.AccessModeRead, "git-upload-pack", "")
115116
assert.Error(t, err)
116117
assert.Empty(t, results)
117118

@@ -120,12 +121,12 @@ func TestAPIPrivateServ(t *testing.T) {
120121
assert.NoError(t, err)
121122

122123
// Cannot push to a private repo with reading key
123-
results, err = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_1", models.AccessModeWrite, "git-upload-pack", "")
124+
results, err = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_1", perm.AccessModeWrite, "git-upload-pack", "")
124125
assert.Error(t, err)
125126
assert.Empty(t, results)
126127

127128
// Can pull from repo we're a writing deploy key for
128-
results, err = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_2", models.AccessModeRead, "git-upload-pack", "")
129+
results, err = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_2", perm.AccessModeRead, "git-upload-pack", "")
129130
assert.NoError(t, err)
130131
assert.False(t, results.IsWiki)
131132
assert.True(t, results.IsDeployKey)
@@ -138,7 +139,7 @@ func TestAPIPrivateServ(t *testing.T) {
138139
assert.Equal(t, int64(20), results.RepoID)
139140

140141
// Can push to repo we're a writing deploy key for
141-
results, err = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_2", models.AccessModeWrite, "git-upload-pack", "")
142+
results, err = private.ServCommand(ctx, deployKey.KeyID, "user15", "big_test_private_2", perm.AccessModeWrite, "git-upload-pack", "")
142143
assert.NoError(t, err)
143144
assert.False(t, results.IsWiki)
144145
assert.True(t, results.IsDeployKey)

integrations/git_test.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"time"
1919

2020
"code.gitea.io/gitea/models"
21+
"code.gitea.io/gitea/models/perm"
2122
"code.gitea.io/gitea/models/unittest"
2223
user_model "code.gitea.io/gitea/models/user"
2324
"code.gitea.io/gitea/modules/git"
@@ -58,7 +59,7 @@ func testGit(t *testing.T, u *url.URL) {
5859
defer util.RemoveAll(dstPath)
5960

6061
t.Run("CreateRepoInDifferentUser", doAPICreateRepository(forkedUserCtx, false))
61-
t.Run("AddUserAsCollaborator", doAPIAddCollaborator(forkedUserCtx, httpContext.Username, models.AccessModeRead))
62+
t.Run("AddUserAsCollaborator", doAPIAddCollaborator(forkedUserCtx, httpContext.Username, perm.AccessModeRead))
6263

6364
t.Run("ForkFromDifferentUser", doAPIForkRepository(httpContext, forkedUserCtx.Username))
6465

@@ -91,7 +92,7 @@ func testGit(t *testing.T, u *url.URL) {
9192
keyname := "my-testing-key"
9293
forkedUserCtx.Reponame = sshContext.Reponame
9394
t.Run("CreateRepoInDifferentUser", doAPICreateRepository(forkedUserCtx, false))
94-
t.Run("AddUserAsCollaborator", doAPIAddCollaborator(forkedUserCtx, sshContext.Username, models.AccessModeRead))
95+
t.Run("AddUserAsCollaborator", doAPIAddCollaborator(forkedUserCtx, sshContext.Username, perm.AccessModeRead))
9596
t.Run("ForkFromDifferentUser", doAPIForkRepository(sshContext, forkedUserCtx.Username))
9697

9798
//Setup key the user ssh key

models/access.go

+17-67
Original file line numberDiff line numberDiff line change
@@ -9,76 +9,26 @@ import (
99
"fmt"
1010

1111
"code.gitea.io/gitea/models/db"
12+
"code.gitea.io/gitea/models/perm"
1213
user_model "code.gitea.io/gitea/models/user"
13-
"code.gitea.io/gitea/modules/log"
1414
)
1515

16-
// AccessMode specifies the users access mode
17-
type AccessMode int
18-
19-
const (
20-
// AccessModeNone no access
21-
AccessModeNone AccessMode = iota // 0
22-
// AccessModeRead read access
23-
AccessModeRead // 1
24-
// AccessModeWrite write access
25-
AccessModeWrite // 2
26-
// AccessModeAdmin admin access
27-
AccessModeAdmin // 3
28-
// AccessModeOwner owner access
29-
AccessModeOwner // 4
30-
)
31-
32-
func (mode AccessMode) String() string {
33-
switch mode {
34-
case AccessModeRead:
35-
return "read"
36-
case AccessModeWrite:
37-
return "write"
38-
case AccessModeAdmin:
39-
return "admin"
40-
case AccessModeOwner:
41-
return "owner"
42-
default:
43-
return "none"
44-
}
45-
}
46-
47-
// ColorFormat provides a ColorFormatted version of this AccessMode
48-
func (mode AccessMode) ColorFormat(s fmt.State) {
49-
log.ColorFprintf(s, "%d:%s",
50-
log.NewColoredIDValue(mode),
51-
mode)
52-
}
53-
54-
// ParseAccessMode returns corresponding access mode to given permission string.
55-
func ParseAccessMode(permission string) AccessMode {
56-
switch permission {
57-
case "write":
58-
return AccessModeWrite
59-
case "admin":
60-
return AccessModeAdmin
61-
default:
62-
return AccessModeRead
63-
}
64-
}
65-
6616
// Access represents the highest access level of a user to the repository. The only access type
6717
// that is not in this table is the real owner of a repository. In case of an organization
6818
// repository, the members of the owners team are in this table.
6919
type Access struct {
7020
ID int64 `xorm:"pk autoincr"`
7121
UserID int64 `xorm:"UNIQUE(s)"`
7222
RepoID int64 `xorm:"UNIQUE(s)"`
73-
Mode AccessMode
23+
Mode perm.AccessMode
7424
}
7525

7626
func init() {
7727
db.RegisterModel(new(Access))
7828
}
7929

80-
func accessLevel(e db.Engine, user *user_model.User, repo *Repository) (AccessMode, error) {
81-
mode := AccessModeNone
30+
func accessLevel(e db.Engine, user *user_model.User, repo *Repository) (perm.AccessMode, error) {
31+
mode := perm.AccessModeNone
8232
var userID int64
8333
restricted := false
8434

@@ -88,15 +38,15 @@ func accessLevel(e db.Engine, user *user_model.User, repo *Repository) (AccessMo
8838
}
8939

9040
if !restricted && !repo.IsPrivate {
91-
mode = AccessModeRead
41+
mode = perm.AccessModeRead
9242
}
9343

9444
if userID == 0 {
9545
return mode, nil
9646
}
9747

9848
if userID == repo.OwnerID {
99-
return AccessModeOwner, nil
49+
return perm.AccessModeOwner, nil
10050
}
10151

10252
a := &Access{UserID: userID, RepoID: repo.ID}
@@ -106,8 +56,8 @@ func accessLevel(e db.Engine, user *user_model.User, repo *Repository) (AccessMo
10656
return a.Mode, nil
10757
}
10858

109-
func maxAccessMode(modes ...AccessMode) AccessMode {
110-
max := AccessModeNone
59+
func maxAccessMode(modes ...perm.AccessMode) perm.AccessMode {
60+
max := perm.AccessModeNone
11161
for _, mode := range modes {
11262
if mode > max {
11363
max = mode
@@ -118,11 +68,11 @@ func maxAccessMode(modes ...AccessMode) AccessMode {
11868

11969
type userAccess struct {
12070
User *user_model.User
121-
Mode AccessMode
71+
Mode perm.AccessMode
12272
}
12373

12474
// updateUserAccess updates an access map so that user has at least mode
125-
func updateUserAccess(accessMap map[int64]*userAccess, user *user_model.User, mode AccessMode) {
75+
func updateUserAccess(accessMap map[int64]*userAccess, user *user_model.User, mode perm.AccessMode) {
12676
if ua, ok := accessMap[user.ID]; ok {
12777
ua.Mode = maxAccessMode(ua.Mode, mode)
12878
} else {
@@ -132,9 +82,9 @@ func updateUserAccess(accessMap map[int64]*userAccess, user *user_model.User, mo
13282

13383
// FIXME: do cross-comparison so reduce deletions and additions to the minimum?
13484
func (repo *Repository) refreshAccesses(e db.Engine, accessMap map[int64]*userAccess) (err error) {
135-
minMode := AccessModeRead
85+
minMode := perm.AccessModeRead
13686
if !repo.IsPrivate {
137-
minMode = AccessModeWrite
87+
minMode = perm.AccessModeWrite
13888
}
13989

14090
newAccesses := make([]Access, 0, len(accessMap))
@@ -208,7 +158,7 @@ func (repo *Repository) recalculateTeamAccesses(e db.Engine, ignTeamID int64) (e
208158
// Owner team gets owner access, and skip for teams that do not
209159
// have relations with repository.
210160
if t.IsOwnerTeam() {
211-
t.Authorize = AccessModeOwner
161+
t.Authorize = perm.AccessModeOwner
212162
} else if !t.hasRepository(e, repo.ID) {
213163
continue
214164
}
@@ -227,12 +177,12 @@ func (repo *Repository) recalculateTeamAccesses(e db.Engine, ignTeamID int64) (e
227177
// recalculateUserAccess recalculates new access for a single user
228178
// Usable if we know access only affected one user
229179
func (repo *Repository) recalculateUserAccess(e db.Engine, uid int64) (err error) {
230-
minMode := AccessModeRead
180+
minMode := perm.AccessModeRead
231181
if !repo.IsPrivate {
232-
minMode = AccessModeWrite
182+
minMode = perm.AccessModeWrite
233183
}
234184

235-
accessMode := AccessModeNone
185+
accessMode := perm.AccessModeNone
236186
collaborator, err := repo.getCollaboration(e, uid)
237187
if err != nil {
238188
return err
@@ -255,7 +205,7 @@ func (repo *Repository) recalculateUserAccess(e db.Engine, uid int64) (err error
255205

256206
for _, t := range teams {
257207
if t.IsOwnerTeam() {
258-
t.Authorize = AccessModeOwner
208+
t.Authorize = perm.AccessModeOwner
259209
}
260210

261211
accessMode = maxAccessMode(accessMode, t.Authorize)

0 commit comments

Comments
 (0)