Skip to content

Commit b06b9a0

Browse files
lunnyKN4CK3Rwxiaoguang
authored
Move organization related structs into sub package (#18518)
* Move organization related structs into sub package * Fix test * Fix lint * Move more functions into sub packages * Fix bug * Fix test * Update models/organization/team_repo.go Co-authored-by: KN4CK3R <[email protected]> * Apply suggestions from code review Co-authored-by: KN4CK3R <[email protected]> * Fix fmt * Follow suggestion from @Gusted * Fix test * Fix test * Fix bug * Use ctx but db.DefaultContext on routers * Fix bug * Fix bug * fix bug * Update models/organization/team_user.go * Fix bug Co-authored-by: KN4CK3R <[email protected]> Co-authored-by: wxiaoguang <[email protected]>
1 parent d4c789d commit b06b9a0

Some content is hidden

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

94 files changed

+3107
-2995
lines changed

integrations/api_repo_teams_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func TestAPIRepoTeams(t *testing.T) {
3737
DecodeJSON(t, res, &teams)
3838
if assert.Len(t, teams, 2) {
3939
assert.EqualValues(t, "Owners", teams[0].Name)
40-
assert.False(t, teams[0].CanCreateOrgRepo)
40+
assert.True(t, teams[0].CanCreateOrgRepo)
4141
assert.True(t, util.IsEqualSlice(unit.AllUnitKeyNames(), teams[0].Units), fmt.Sprintf("%v == %v", unit.AllUnitKeyNames(), teams[0].Units))
4242
assert.EqualValues(t, "owner", teams[0].Permission)
4343

integrations/api_team_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"sort"
1111
"testing"
1212

13-
"code.gitea.io/gitea/models"
13+
"code.gitea.io/gitea/models/organization"
1414
"code.gitea.io/gitea/models/unit"
1515
"code.gitea.io/gitea/models/unittest"
1616
user_model "code.gitea.io/gitea/models/user"
@@ -23,8 +23,8 @@ import (
2323
func TestAPITeam(t *testing.T) {
2424
defer prepareTestEnv(t)()
2525

26-
teamUser := unittest.AssertExistsAndLoadBean(t, &models.TeamUser{}).(*models.TeamUser)
27-
team := unittest.AssertExistsAndLoadBean(t, &models.Team{ID: teamUser.TeamID}).(*models.Team)
26+
teamUser := unittest.AssertExistsAndLoadBean(t, &organization.TeamUser{}).(*organization.TeamUser)
27+
team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamUser.TeamID}).(*organization.Team)
2828
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: teamUser.UID}).(*user_model.User)
2929

3030
session := loginUser(t, user.Name)
@@ -38,7 +38,7 @@ func TestAPITeam(t *testing.T) {
3838
assert.Equal(t, team.Name, apiTeam.Name)
3939

4040
// non team member user will not access the teams details
41-
teamUser2 := unittest.AssertExistsAndLoadBean(t, &models.TeamUser{ID: 3}).(*models.TeamUser)
41+
teamUser2 := unittest.AssertExistsAndLoadBean(t, &organization.TeamUser{ID: 3}).(*organization.TeamUser)
4242
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: teamUser2.UID}).(*user_model.User)
4343

4444
session = loginUser(t, user2.Name)
@@ -107,7 +107,7 @@ func TestAPITeam(t *testing.T) {
107107
teamToEdit.Permission, unit.AllUnitKeyNames(), nil)
108108

109109
// Read team.
110-
teamRead := unittest.AssertExistsAndLoadBean(t, &models.Team{ID: teamID}).(*models.Team)
110+
teamRead := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID}).(*organization.Team)
111111
assert.NoError(t, teamRead.GetUnits())
112112
req = NewRequestf(t, "GET", "/api/v1/teams/%d?token="+token, teamID)
113113
resp = session.MakeRequest(t, req, http.StatusOK)
@@ -119,7 +119,7 @@ func TestAPITeam(t *testing.T) {
119119
// Delete team.
120120
req = NewRequestf(t, "DELETE", "/api/v1/teams/%d?token="+token, teamID)
121121
session.MakeRequest(t, req, http.StatusNoContent)
122-
unittest.AssertNotExistsBean(t, &models.Team{ID: teamID})
122+
unittest.AssertNotExistsBean(t, &organization.Team{ID: teamID})
123123

124124
// create team again via UnitsMap
125125
// Create team.
@@ -173,7 +173,7 @@ func TestAPITeam(t *testing.T) {
173173
"read", nil, teamToEdit.UnitsMap)
174174

175175
// Read team.
176-
teamRead = unittest.AssertExistsAndLoadBean(t, &models.Team{ID: teamID}).(*models.Team)
176+
teamRead = unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID}).(*organization.Team)
177177
req = NewRequestf(t, "GET", "/api/v1/teams/%d?token="+token, teamID)
178178
resp = session.MakeRequest(t, req, http.StatusOK)
179179
apiTeam = api.Team{}
@@ -185,7 +185,7 @@ func TestAPITeam(t *testing.T) {
185185
// Delete team.
186186
req = NewRequestf(t, "DELETE", "/api/v1/teams/%d?token="+token, teamID)
187187
session.MakeRequest(t, req, http.StatusNoContent)
188-
unittest.AssertNotExistsBean(t, &models.Team{ID: teamID})
188+
unittest.AssertNotExistsBean(t, &organization.Team{ID: teamID})
189189
}
190190

191191
func checkTeamResponse(t *testing.T, apiTeam *api.Team, name, description string, includesAllRepositories bool, permission string, units []string, unitsMap map[string]string) {
@@ -206,7 +206,7 @@ func checkTeamResponse(t *testing.T, apiTeam *api.Team, name, description string
206206
}
207207

208208
func checkTeamBean(t *testing.T, id int64, name, description string, includesAllRepositories bool, permission string, units []string, unitsMap map[string]string) {
209-
team := unittest.AssertExistsAndLoadBean(t, &models.Team{ID: id}).(*models.Team)
209+
team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: id}).(*organization.Team)
210210
assert.NoError(t, team.GetUnits(), "GetUnits")
211211
checkTeamResponse(t, convert.ToTeam(team), name, description, includesAllRepositories, permission, units, unitsMap)
212212
}

integrations/auth_ldap_test.go

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import (
1212
"testing"
1313

1414
"code.gitea.io/gitea/models"
15+
"code.gitea.io/gitea/models/db"
16+
"code.gitea.io/gitea/models/organization"
1517
"code.gitea.io/gitea/models/unittest"
1618
user_model "code.gitea.io/gitea/models/user"
1719
"code.gitea.io/gitea/services/auth"
@@ -317,37 +319,37 @@ func TestLDAPGroupTeamSyncAddMember(t *testing.T) {
317319
}
318320
defer prepareTestEnv(t)()
319321
addAuthSourceLDAP(t, "", "on", `{"cn=ship_crew,ou=people,dc=planetexpress,dc=com":{"org26": ["team11"]},"cn=admin_staff,ou=people,dc=planetexpress,dc=com": {"non-existent": ["non-existent"]}}`)
320-
org, err := models.GetOrgByName("org26")
322+
org, err := organization.GetOrgByName("org26")
321323
assert.NoError(t, err)
322-
team, err := models.GetTeam(org.ID, "team11")
324+
team, err := organization.GetTeam(org.ID, "team11")
323325
assert.NoError(t, err)
324326
auth.SyncExternalUsers(context.Background(), true)
325327
for _, gitLDAPUser := range gitLDAPUsers {
326328
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{
327329
Name: gitLDAPUser.UserName,
328330
}).(*user_model.User)
329-
usersOrgs, err := models.FindOrgs(models.FindOrgOptions{
331+
usersOrgs, err := organization.FindOrgs(organization.FindOrgOptions{
330332
UserID: user.ID,
331333
IncludePrivate: true,
332334
})
333335
assert.NoError(t, err)
334-
allOrgTeams, err := models.GetUserOrgTeams(org.ID, user.ID)
336+
allOrgTeams, err := organization.GetUserOrgTeams(db.DefaultContext, org.ID, user.ID)
335337
assert.NoError(t, err)
336338
if user.Name == "fry" || user.Name == "leela" || user.Name == "bender" {
337339
// assert members of LDAP group "cn=ship_crew" are added to mapped teams
338340
assert.Equal(t, len(usersOrgs), 1, "User [%s] should be member of one organization", user.Name)
339341
assert.Equal(t, usersOrgs[0].Name, "org26", "Membership should be added to the right organization")
340-
isMember, err := models.IsTeamMember(usersOrgs[0].ID, team.ID, user.ID)
342+
isMember, err := organization.IsTeamMember(db.DefaultContext, usersOrgs[0].ID, team.ID, user.ID)
341343
assert.NoError(t, err)
342344
assert.True(t, isMember, "Membership should be added to the right team")
343-
err = team.RemoveMember(user.ID)
345+
err = models.RemoveTeamMember(team, user.ID)
344346
assert.NoError(t, err)
345-
err = usersOrgs[0].RemoveMember(user.ID)
347+
err = models.RemoveOrgUser(usersOrgs[0].ID, user.ID)
346348
assert.NoError(t, err)
347349
} else {
348350
// assert members of LDAP group "cn=admin_staff" keep initial team membership since mapped team does not exist
349351
assert.Empty(t, usersOrgs, "User should be member of no organization")
350-
isMember, err := models.IsTeamMember(org.ID, team.ID, user.ID)
352+
isMember, err := organization.IsTeamMember(db.DefaultContext, org.ID, team.ID, user.ID)
351353
assert.NoError(t, err)
352354
assert.False(t, isMember, "User should no be added to this team")
353355
assert.Empty(t, allOrgTeams, "User should not be added to any team")
@@ -362,30 +364,30 @@ func TestLDAPGroupTeamSyncRemoveMember(t *testing.T) {
362364
}
363365
defer prepareTestEnv(t)()
364366
addAuthSourceLDAP(t, "", "on", `{"cn=dispatch,ou=people,dc=planetexpress,dc=com": {"org26": ["team11"]}}`)
365-
org, err := models.GetOrgByName("org26")
367+
org, err := organization.GetOrgByName("org26")
366368
assert.NoError(t, err)
367-
team, err := models.GetTeam(org.ID, "team11")
369+
team, err := organization.GetTeam(org.ID, "team11")
368370
assert.NoError(t, err)
369371
loginUserWithPassword(t, gitLDAPUsers[0].UserName, gitLDAPUsers[0].Password)
370372
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{
371373
Name: gitLDAPUsers[0].UserName,
372374
}).(*user_model.User)
373-
err = org.AddMember(user.ID)
375+
err = organization.AddOrgUser(org.ID, user.ID)
374376
assert.NoError(t, err)
375-
err = team.AddMember(user.ID)
377+
err = models.AddTeamMember(team, user.ID)
376378
assert.NoError(t, err)
377-
isMember, err := models.IsOrganizationMember(org.ID, user.ID)
379+
isMember, err := organization.IsOrganizationMember(db.DefaultContext, org.ID, user.ID)
378380
assert.NoError(t, err)
379381
assert.True(t, isMember, "User should be member of this organization")
380-
isMember, err = models.IsTeamMember(org.ID, team.ID, user.ID)
382+
isMember, err = organization.IsTeamMember(db.DefaultContext, org.ID, team.ID, user.ID)
381383
assert.NoError(t, err)
382384
assert.True(t, isMember, "User should be member of this team")
383385
// assert team member "professor" gets removed from org26 team11
384386
loginUserWithPassword(t, gitLDAPUsers[0].UserName, gitLDAPUsers[0].Password)
385-
isMember, err = models.IsOrganizationMember(org.ID, user.ID)
387+
isMember, err = organization.IsOrganizationMember(db.DefaultContext, org.ID, user.ID)
386388
assert.NoError(t, err)
387389
assert.False(t, isMember, "User membership should have been removed from organization")
388-
isMember, err = models.IsTeamMember(org.ID, team.ID, user.ID)
390+
isMember, err = organization.IsTeamMember(db.DefaultContext, org.ID, team.ID, user.ID)
389391
assert.NoError(t, err)
390392
assert.False(t, isMember, "User membership should have been removed from team")
391393
}

integrations/delete_user_test.go

Lines changed: 3 additions & 2 deletions
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/organization"
1314
repo_model "code.gitea.io/gitea/models/repo"
1415
"code.gitea.io/gitea/models/unittest"
1516
user_model "code.gitea.io/gitea/models/user"
@@ -21,9 +22,9 @@ func assertUserDeleted(t *testing.T, userID int64) {
2122
unittest.AssertNotExistsBean(t, &user_model.Follow{FollowID: userID})
2223
unittest.AssertNotExistsBean(t, &repo_model.Repository{OwnerID: userID})
2324
unittest.AssertNotExistsBean(t, &models.Access{UserID: userID})
24-
unittest.AssertNotExistsBean(t, &models.OrgUser{UID: userID})
25+
unittest.AssertNotExistsBean(t, &organization.OrgUser{UID: userID})
2526
unittest.AssertNotExistsBean(t, &models.IssueUser{UID: userID})
26-
unittest.AssertNotExistsBean(t, &models.TeamUser{UID: userID})
27+
unittest.AssertNotExistsBean(t, &organization.TeamUser{UID: userID})
2728
unittest.AssertNotExistsBean(t, &repo_model.Star{UID: userID})
2829
}
2930

integrations/org_count_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"strings"
1010
"testing"
1111

12-
"code.gitea.io/gitea/models"
12+
"code.gitea.io/gitea/models/organization"
1313
"code.gitea.io/gitea/models/unittest"
1414
user_model "code.gitea.io/gitea/models/user"
1515
api "code.gitea.io/gitea/modules/structs"
@@ -117,7 +117,7 @@ func doCheckOrgCounts(username string, orgCounts map[string]int, strict bool, ca
117117
Name: username,
118118
}).(*user_model.User)
119119

120-
orgs, err := models.FindOrgs(models.FindOrgOptions{
120+
orgs, err := organization.FindOrgs(organization.FindOrgOptions{
121121
UserID: user.ID,
122122
IncludePrivate: true,
123123
})

models/access.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"fmt"
1111

1212
"code.gitea.io/gitea/models/db"
13+
"code.gitea.io/gitea/models/organization"
1314
"code.gitea.io/gitea/models/perm"
1415
repo_model "code.gitea.io/gitea/models/repo"
1516
user_model "code.gitea.io/gitea/models/user"
@@ -149,7 +150,7 @@ func recalculateTeamAccesses(ctx context.Context, repo *repo_model.Repository, i
149150
return fmt.Errorf("refreshCollaboratorAccesses: %v", err)
150151
}
151152

152-
teams, err := OrgFromUser(repo.Owner).loadTeams(e)
153+
teams, err := organization.FindOrgTeams(ctx, repo.Owner.ID)
153154
if err != nil {
154155
return err
155156
}
@@ -163,11 +164,11 @@ func recalculateTeamAccesses(ctx context.Context, repo *repo_model.Repository, i
163164
// have relations with repository.
164165
if t.IsOwnerTeam() {
165166
t.AccessMode = perm.AccessModeOwner
166-
} else if !t.hasRepository(e, repo.ID) {
167+
} else if !hasRepository(ctx, t, repo.ID) {
167168
continue
168169
}
169170

170-
if err = t.getMembers(e); err != nil {
171+
if err = t.GetMembersCtx(ctx); err != nil {
171172
return fmt.Errorf("getMembers '%d': %v", t.ID, err)
172173
}
173174
for _, m := range t.Members {
@@ -198,7 +199,7 @@ func recalculateUserAccess(ctx context.Context, repo *repo_model.Repository, uid
198199
if err = repo.GetOwner(ctx); err != nil {
199200
return err
200201
} else if repo.Owner.IsOrganization() {
201-
var teams []Team
202+
var teams []organization.Team
202203
if err := e.Join("INNER", "team_repo", "team_repo.team_id = team.id").
203204
Join("INNER", "team_user", "team_user.team_id = team.id").
204205
Where("team.org_id = ?", repo.OwnerID).

models/access_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"testing"
99

1010
"code.gitea.io/gitea/models/db"
11+
"code.gitea.io/gitea/models/organization"
1112
"code.gitea.io/gitea/models/perm"
1213
repo_model "code.gitea.io/gitea/models/repo"
1314
"code.gitea.io/gitea/models/unittest"
@@ -127,7 +128,7 @@ func TestRepository_RecalculateAccesses2(t *testing.T) {
127128

128129
func TestRepository_RecalculateAccesses3(t *testing.T) {
129130
assert.NoError(t, unittest.PrepareTestDatabase())
130-
team5 := unittest.AssertExistsAndLoadBean(t, &Team{ID: 5}).(*Team)
131+
team5 := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 5}).(*organization.Team)
131132
user29 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 29}).(*user_model.User)
132133

133134
has, err := db.GetEngine(db.DefaultContext).Get(&Access{UserID: 29, RepoID: 23})

models/action.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"time"
1616

1717
"code.gitea.io/gitea/models/db"
18+
"code.gitea.io/gitea/models/organization"
1819
repo_model "code.gitea.io/gitea/models/repo"
1920
"code.gitea.io/gitea/models/unit"
2021
user_model "code.gitea.io/gitea/models/user"
@@ -318,7 +319,7 @@ func (a *Action) GetIssueContent() string {
318319
type GetFeedsOptions struct {
319320
db.ListOptions
320321
RequestedUser *user_model.User // the user we want activity for
321-
RequestedTeam *Team // the team we want activity for
322+
RequestedTeam *organization.Team // the team we want activity for
322323
RequestedRepo *repo_model.Repository // the repo we want activity for
323324
Actor *user_model.User // the user viewing the activity
324325
IncludePrivate bool // include private actions
@@ -399,7 +400,7 @@ func activityQueryCondition(opts GetFeedsOptions) (builder.Cond, error) {
399400
}
400401

401402
if opts.RequestedTeam != nil {
402-
env := OrgFromUser(opts.RequestedUser).AccessibleTeamReposEnv(opts.RequestedTeam)
403+
env := organization.OrgFromUser(opts.RequestedUser).AccessibleTeamReposEnv(opts.RequestedTeam)
403404
teamRepoIDs, err := env.RepoIDs(1, opts.RequestedUser.NumRepos)
404405
if err != nil {
405406
return nil, fmt.Errorf("GetTeamRepositories: %v", err)

models/branches.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"time"
1212

1313
"code.gitea.io/gitea/models/db"
14+
"code.gitea.io/gitea/models/organization"
1415
"code.gitea.io/gitea/models/perm"
1516
repo_model "code.gitea.io/gitea/models/repo"
1617
"code.gitea.io/gitea/models/unit"
@@ -94,7 +95,7 @@ func (protectBranch *ProtectedBranch) CanUserPush(userID int64) bool {
9495
return false
9596
}
9697

97-
in, err := IsUserInTeams(userID, protectBranch.WhitelistTeamIDs)
98+
in, err := organization.IsUserInTeams(db.DefaultContext, userID, protectBranch.WhitelistTeamIDs)
9899
if err != nil {
99100
log.Error("IsUserInTeams: %v", err)
100101
return false
@@ -117,7 +118,7 @@ func IsUserMergeWhitelisted(protectBranch *ProtectedBranch, userID int64, permis
117118
return false
118119
}
119120

120-
in, err := IsUserInTeams(userID, protectBranch.MergeWhitelistTeamIDs)
121+
in, err := organization.IsUserInTeams(db.DefaultContext, userID, protectBranch.MergeWhitelistTeamIDs)
121122
if err != nil {
122123
log.Error("IsUserInTeams: %v", err)
123124
return false
@@ -149,7 +150,7 @@ func isUserOfficialReviewer(ctx context.Context, protectBranch *ProtectedBranch,
149150
return true, nil
150151
}
151152

152-
inTeam, err := isUserInTeams(db.GetEngine(ctx), user.ID, protectBranch.ApprovalsWhitelistTeamIDs)
153+
inTeam, err := organization.IsUserInTeams(ctx, user.ID, protectBranch.ApprovalsWhitelistTeamIDs)
153154
if err != nil {
154155
return false, err
155156
}
@@ -471,7 +472,7 @@ func updateTeamWhitelist(repo *repo_model.Repository, currentWhitelist, newWhite
471472
return currentWhitelist, nil
472473
}
473474

474-
teams, err := GetTeamsWithAccessToRepo(repo.OwnerID, repo.ID, perm.AccessModeRead)
475+
teams, err := organization.GetTeamsWithAccessToRepo(repo.OwnerID, repo.ID, perm.AccessModeRead)
475476
if err != nil {
476477
return nil, fmt.Errorf("GetTeamsWithAccessToRepo [org_id: %d, repo_id: %d]: %v", repo.OwnerID, repo.ID, err)
477478
}

0 commit comments

Comments
 (0)