55package models
66
77import (
8+ "code.gitea.io/gitea/modules/log"
89 "fmt"
910)
1011
@@ -23,13 +24,43 @@ func (users UserList) getUserIDs() []int64 {
2324// IsUserOrgOwner returns true if user is in the owner team of given organization.
2425func (users UserList ) IsUserOrgOwner (orgID int64 ) map [int64 ]bool {
2526 results := make (map [int64 ]bool , len (users ))
26- //TODO use directly xorm
27- for _ , u := range users {
28- results [u .ID ] = u .IsUserOrgOwner (orgID )
27+ for _ , user := range users {
28+ results [user .ID ] = false //Set default to false
29+ }
30+ ownerMaps , err := users .loadOrganizationOwners (x , orgID )
31+ if err == nil {
32+ for _ , owner := range ownerMaps {
33+ results [owner .UID ] = true
34+ }
2935 }
3036 return results
3137}
3238
39+ func (users UserList ) loadOrganizationOwners (e Engine , orgID int64 ) (map [int64 ]* TeamUser , error ) {
40+ if len (users ) == 0 {
41+ return nil , nil
42+ }
43+ ownerTeam , err := getOwnerTeam (e , orgID )
44+ if err != nil {
45+ if err == ErrTeamNotExist {
46+ log .Error ("Organization does not have owner team: %d" , orgID )
47+ return nil , nil
48+ }
49+ return nil , err
50+ }
51+
52+ userIDs := users .getUserIDs ()
53+ ownerMaps := make (map [int64 ]* TeamUser )
54+ err = e .In ("uid" , userIDs ).
55+ And ("org_id=?" , orgID ).
56+ And ("team_id=?" , ownerTeam .ID ).
57+ Find (& ownerMaps )
58+ if err != nil {
59+ return nil , fmt .Errorf ("find team users: %v" , err )
60+ }
61+ return ownerMaps , nil
62+ }
63+
3364// GetTwoFaStatus return state of 2FA enrollement
3465func (users UserList ) GetTwoFaStatus () map [int64 ]bool {
3566 results := make (map [int64 ]bool , len (users ))
0 commit comments