Skip to content

Commit d81e31a

Browse files
authored
Move org functions (#19753)
* Move org functions * Fix comment
1 parent 63f6e6c commit d81e31a

File tree

5 files changed

+96
-125
lines changed

5 files changed

+96
-125
lines changed

models/organization/org_user.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package organization
66

77
import (
88
"context"
9+
"fmt"
910

1011
"code.gitea.io/gitea/models/db"
1112
user_model "code.gitea.io/gitea/models/user"
@@ -81,3 +82,43 @@ func CanCreateOrgRepo(orgID, uid int64) (bool, error) {
8182
And("team_user.org_id = ?", orgID).
8283
Exist(new(Team))
8384
}
85+
86+
// IsUserOrgOwner returns true if user is in the owner team of given organization.
87+
func IsUserOrgOwner(users user_model.UserList, orgID int64) map[int64]bool {
88+
results := make(map[int64]bool, len(users))
89+
for _, user := range users {
90+
results[user.ID] = false // Set default to false
91+
}
92+
ownerMaps, err := loadOrganizationOwners(db.DefaultContext, users, orgID)
93+
if err == nil {
94+
for _, owner := range ownerMaps {
95+
results[owner.UID] = true
96+
}
97+
}
98+
return results
99+
}
100+
101+
func loadOrganizationOwners(ctx context.Context, users user_model.UserList, orgID int64) (map[int64]*TeamUser, error) {
102+
if len(users) == 0 {
103+
return nil, nil
104+
}
105+
ownerTeam, err := GetOwnerTeam(ctx, orgID)
106+
if err != nil {
107+
if IsErrTeamNotExist(err) {
108+
log.Error("Organization does not have owner team: %d", orgID)
109+
return nil, nil
110+
}
111+
return nil, err
112+
}
113+
114+
userIDs := users.GetUserIDs()
115+
ownerMaps := make(map[int64]*TeamUser)
116+
err = db.GetEngine(ctx).In("uid", userIDs).
117+
And("org_id=?", orgID).
118+
And("team_id=?", ownerTeam.ID).
119+
Find(&ownerMaps)
120+
if err != nil {
121+
return nil, fmt.Errorf("find team users: %v", err)
122+
}
123+
return ownerMaps, nil
124+
}

models/organization/org_user_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,57 @@ func testIsUserOrgOwner(t *testing.T, uid, orgID int64, expected bool) {
7070
assert.NoError(t, err)
7171
assert.Equal(t, expected, is)
7272
}
73+
74+
func TestUserListIsPublicMember(t *testing.T) {
75+
assert.NoError(t, unittest.PrepareTestDatabase())
76+
tt := []struct {
77+
orgid int64
78+
expected map[int64]bool
79+
}{
80+
{3, map[int64]bool{2: true, 4: false, 28: true}},
81+
{6, map[int64]bool{5: true, 28: true}},
82+
{7, map[int64]bool{5: false}},
83+
{25, map[int64]bool{24: true}},
84+
{22, map[int64]bool{}},
85+
}
86+
for _, v := range tt {
87+
t.Run(fmt.Sprintf("IsPublicMemberOfOrdIg%d", v.orgid), func(t *testing.T) {
88+
testUserListIsPublicMember(t, v.orgid, v.expected)
89+
})
90+
}
91+
}
92+
93+
func testUserListIsPublicMember(t *testing.T, orgID int64, expected map[int64]bool) {
94+
org, err := GetOrgByID(orgID)
95+
assert.NoError(t, err)
96+
_, membersIsPublic, err := org.GetMembers()
97+
assert.NoError(t, err)
98+
assert.Equal(t, expected, membersIsPublic)
99+
}
100+
101+
func TestUserListIsUserOrgOwner(t *testing.T) {
102+
assert.NoError(t, unittest.PrepareTestDatabase())
103+
tt := []struct {
104+
orgid int64
105+
expected map[int64]bool
106+
}{
107+
{3, map[int64]bool{2: true, 4: false, 28: false}},
108+
{6, map[int64]bool{5: true, 28: false}},
109+
{7, map[int64]bool{5: true}},
110+
{25, map[int64]bool{24: false}}, // ErrTeamNotExist
111+
{22, map[int64]bool{}}, // No member
112+
}
113+
for _, v := range tt {
114+
t.Run(fmt.Sprintf("IsUserOrgOwnerOfOrdIg%d", v.orgid), func(t *testing.T) {
115+
testUserListIsUserOrgOwner(t, v.orgid, v.expected)
116+
})
117+
}
118+
}
119+
120+
func testUserListIsUserOrgOwner(t *testing.T, orgID int64, expected map[int64]bool) {
121+
org, err := GetOrgByID(orgID)
122+
assert.NoError(t, err)
123+
members, _, err := org.GetMembers()
124+
assert.NoError(t, err)
125+
assert.Equal(t, expected, IsUserOrgOwner(members, orgID))
126+
}

models/userlist.go

Lines changed: 0 additions & 55 deletions
This file was deleted.

models/userlist_test.go

Lines changed: 0 additions & 69 deletions
This file was deleted.

routers/web/org/members.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func Members(ctx *context.Context) {
6363
ctx.Data["Page"] = pager
6464
ctx.Data["Members"] = members
6565
ctx.Data["MembersIsPublicMember"] = membersIsPublic
66-
ctx.Data["MembersIsUserOrgOwner"] = models.IsUserOrgOwner(members, org.ID)
66+
ctx.Data["MembersIsUserOrgOwner"] = organization.IsUserOrgOwner(members, org.ID)
6767
ctx.Data["MembersTwoFaStatus"] = members.GetTwoFaStatus()
6868

6969
ctx.HTML(http.StatusOK, tplMembers)

0 commit comments

Comments
 (0)