@@ -12,7 +12,6 @@ import (
12
12
"strings"
13
13
14
14
"github.com/Unknwon/com"
15
- "github.com/go-xorm/xorm"
16
15
17
16
"github.com/gogits/gogs/modules/base"
18
17
)
@@ -391,7 +390,7 @@ func RemoveOrgUser(orgId, uid int64) error {
391
390
return err
392
391
}
393
392
for _ , t := range ts {
394
- if err = removeTeamMemberWithSess ( org .Id , t .Id , u .Id , sess ); err != nil {
393
+ if err = removeTeamMember ( sess , org .Id , t .Id , u .Id ); err != nil {
395
394
return err
396
395
}
397
396
}
@@ -486,18 +485,18 @@ func (t *Team) RemoveMember(uid int64) error {
486
485
}
487
486
488
487
// addAccessWithAuthorize inserts or updates access with given mode.
489
- func addAccessWithAuthorize (sess * xorm. Session , access * Access , mode AccessType ) error {
490
- has , err := x .Get (access )
488
+ func addAccessWithAuthorize (e Engine , access * Access , mode AccessType ) error {
489
+ has , err := e .Get (access )
491
490
if err != nil {
492
491
return fmt .Errorf ("fail to get access: %v" , err )
493
492
}
494
493
access .Mode = mode
495
494
if has {
496
- if _ , err = sess .Id (access .Id ).Update (access ); err != nil {
495
+ if _ , err = e .Id (access .Id ).Update (access ); err != nil {
497
496
return fmt .Errorf ("fail to update access: %v" , err )
498
497
}
499
498
} else {
500
- if _ , err = sess .Insert (access ); err != nil {
499
+ if _ , err = e .Insert (access ); err != nil {
501
500
return fmt .Errorf ("fail to insert access: %v" , err )
502
501
}
503
502
}
@@ -536,7 +535,7 @@ func (t *Team) AddRepository(repo *Repository) (err error) {
536
535
mode := AuthorizeToAccessType (t .Authorize )
537
536
538
537
for _ , u := range t .Members {
539
- auth , err := GetHighestAuthorize ( t .OrgId , u .Id , repo .Id , t .Id )
538
+ auth , err := getHighestAuthorize ( sess , t .OrgId , u .Id , repo .Id , t .Id )
540
539
if err != nil {
541
540
sess .Rollback ()
542
541
return err
@@ -552,7 +551,7 @@ func (t *Team) AddRepository(repo *Repository) (err error) {
552
551
return err
553
552
}
554
553
}
555
- if err = WatchRepo ( u .Id , repo .Id , true ); err != nil {
554
+ if err = watchRepo ( sess , u .Id , repo .Id , true ); err != nil {
556
555
sess .Rollback ()
557
556
return err
558
557
}
@@ -593,7 +592,7 @@ func (t *Team) RemoveRepository(repoId int64) error {
593
592
594
593
// Remove access to team members.
595
594
for _ , u := range t .Members {
596
- auth , err := GetHighestAuthorize ( t .OrgId , u .Id , repo .Id , t .Id )
595
+ auth , err := getHighestAuthorize ( sess , t .OrgId , u .Id , repo .Id , t .Id )
597
596
if err != nil {
598
597
sess .Rollback ()
599
598
return err
@@ -607,7 +606,7 @@ func (t *Team) RemoveRepository(repoId int64) error {
607
606
if _ , err = sess .Delete (access ); err != nil {
608
607
sess .Rollback ()
609
608
return fmt .Errorf ("fail to delete access: %v" , err )
610
- } else if err = WatchRepo ( u .Id , repo .Id , false ); err != nil {
609
+ } else if err = watchRepo ( sess , u .Id , repo .Id , false ); err != nil {
611
610
sess .Rollback ()
612
611
return err
613
612
}
@@ -678,10 +677,9 @@ func GetTeam(orgId int64, name string) (*Team, error) {
678
677
return t , nil
679
678
}
680
679
681
- // GetTeamById returns team by given ID.
682
- func GetTeamById (teamId int64 ) (* Team , error ) {
680
+ func getTeamById (e Engine , teamId int64 ) (* Team , error ) {
683
681
t := new (Team )
684
- has , err := x .Id (teamId ).Get (t )
682
+ has , err := e .Id (teamId ).Get (t )
685
683
if err != nil {
686
684
return nil , err
687
685
} else if ! has {
@@ -690,9 +688,13 @@ func GetTeamById(teamId int64) (*Team, error) {
690
688
return t , nil
691
689
}
692
690
693
- // GetHighestAuthorize returns highest repository authorize level for given user and team.
694
- func GetHighestAuthorize (orgId , uid , repoId , teamId int64 ) (AuthorizeType , error ) {
695
- ts , err := GetUserTeams (orgId , uid )
691
+ // GetTeamById returns team by given ID.
692
+ func GetTeamById (teamId int64 ) (* Team , error ) {
693
+ return getTeamById (x , teamId )
694
+ }
695
+
696
+ func getHighestAuthorize (e Engine , orgId , uid , repoId , teamId int64 ) (AuthorizeType , error ) {
697
+ ts , err := getUserTeams (e , orgId , uid )
696
698
if err != nil {
697
699
return 0 , err
698
700
}
@@ -714,6 +716,11 @@ func GetHighestAuthorize(orgId, uid, repoId, teamId int64) (AuthorizeType, error
714
716
return auth , nil
715
717
}
716
718
719
+ // GetHighestAuthorize returns highest repository authorize level for given user and team.
720
+ func GetHighestAuthorize (orgId , uid , repoId , teamId int64 ) (AuthorizeType , error ) {
721
+ return getHighestAuthorize (x , orgId , uid , repoId , teamId )
722
+ }
723
+
717
724
// UpdateTeam updates information of team.
718
725
func UpdateTeam (t * Team , authChanged bool ) (err error ) {
719
726
if ! IsLegalName (t .Name ) {
@@ -866,10 +873,14 @@ type TeamUser struct {
866
873
TeamId int64
867
874
}
868
875
876
+ func isTeamMember (e Engine , orgId , teamId , uid int64 ) bool {
877
+ has , _ := e .Where ("uid=?" , uid ).And ("org_id=?" , orgId ).And ("team_id=?" , teamId ).Get (new (TeamUser ))
878
+ return has
879
+ }
880
+
869
881
// IsTeamMember returns true if given user is a member of team.
870
882
func IsTeamMember (orgId , teamId , uid int64 ) bool {
871
- has , _ := x .Where ("uid=?" , uid ).And ("org_id=?" , orgId ).And ("team_id=?" , teamId ).Get (new (TeamUser ))
872
- return has
883
+ return isTeamMember (x , orgId , teamId , uid )
873
884
}
874
885
875
886
// GetTeamMembers returns all members in given team of organization.
@@ -879,17 +890,16 @@ func GetTeamMembers(orgId, teamId int64) ([]*User, error) {
879
890
return us , err
880
891
}
881
892
882
- // GetUserTeams returns all teams that user belongs to in given organization.
883
- func GetUserTeams (orgId , uid int64 ) ([]* Team , error ) {
893
+ func getUserTeams (e Engine , orgId , uid int64 ) ([]* Team , error ) {
884
894
tus := make ([]* TeamUser , 0 , 5 )
885
- if err := x .Where ("uid=?" , uid ).And ("org_id=?" , orgId ).Find (& tus ); err != nil {
895
+ if err := e .Where ("uid=?" , uid ).And ("org_id=?" , orgId ).Find (& tus ); err != nil {
886
896
return nil , err
887
897
}
888
898
889
899
ts := make ([]* Team , len (tus ))
890
900
for i , tu := range tus {
891
901
t := new (Team )
892
- has , err := x .Id (tu .TeamId ).Get (t )
902
+ has , err := e .Id (tu .TeamId ).Get (t )
893
903
if err != nil {
894
904
return nil , err
895
905
} else if ! has {
@@ -900,6 +910,11 @@ func GetUserTeams(orgId, uid int64) ([]*Team, error) {
900
910
return ts , nil
901
911
}
902
912
913
+ // GetUserTeams returns all teams that user belongs to in given organization.
914
+ func GetUserTeams (orgId , uid int64 ) ([]* Team , error ) {
915
+ return getUserTeams (x , orgId , uid )
916
+ }
917
+
903
918
// AddTeamMember adds new member to given team of given organization.
904
919
func AddTeamMember (orgId , teamId , uid int64 ) error {
905
920
if IsTeamMember (orgId , teamId , uid ) {
@@ -956,7 +971,7 @@ func AddTeamMember(orgId, teamId, uid int64) error {
956
971
// Give access to team repositories.
957
972
mode := AuthorizeToAccessType (t .Authorize )
958
973
for _ , repo := range t .Repos {
959
- auth , err := GetHighestAuthorize ( t .OrgId , u .Id , repo .Id , teamId )
974
+ auth , err := getHighestAuthorize ( sess , t .OrgId , u .Id , repo .Id , teamId )
960
975
if err != nil {
961
976
sess .Rollback ()
962
977
return err
@@ -993,13 +1008,13 @@ func AddTeamMember(orgId, teamId, uid int64) error {
993
1008
return sess .Commit ()
994
1009
}
995
1010
996
- func removeTeamMemberWithSess ( orgId , teamId , uid int64 , sess * xorm. Session ) error {
997
- if ! IsTeamMember ( orgId , teamId , uid ) {
1011
+ func removeTeamMember ( e Engine , orgId , teamId , uid int64 ) error {
1012
+ if ! isTeamMember ( e , orgId , teamId , uid ) {
998
1013
return nil
999
1014
}
1000
1015
1001
1016
// Get team and its repositories.
1002
- t , err := GetTeamById ( teamId )
1017
+ t , err := getTeamById ( e , teamId )
1003
1018
if err != nil {
1004
1019
return err
1005
1020
}
@@ -1033,19 +1048,16 @@ func removeTeamMemberWithSess(orgId, teamId, uid int64, sess *xorm.Session) erro
1033
1048
TeamId : teamId ,
1034
1049
}
1035
1050
1036
- if _ , err := sess .Delete (tu ); err != nil {
1037
- sess .Rollback ()
1051
+ if _ , err := e .Delete (tu ); err != nil {
1038
1052
return err
1039
- } else if _ , err = sess .Id (t .Id ).AllCols ().Update (t ); err != nil {
1040
- sess .Rollback ()
1053
+ } else if _ , err = e .Id (t .Id ).AllCols ().Update (t ); err != nil {
1041
1054
return err
1042
1055
}
1043
1056
1044
1057
// Delete access to team repositories.
1045
1058
for _ , repo := range t .Repos {
1046
- auth , err := GetHighestAuthorize ( t .OrgId , u .Id , repo .Id , teamId )
1059
+ auth , err := getHighestAuthorize ( e , t .OrgId , u .Id , repo .Id , teamId )
1047
1060
if err != nil {
1048
- sess .Rollback ()
1049
1061
return err
1050
1062
}
1051
1063
@@ -1055,35 +1067,30 @@ func removeTeamMemberWithSess(orgId, teamId, uid int64, sess *xorm.Session) erro
1055
1067
}
1056
1068
// Delete access if this is the last team user belongs to.
1057
1069
if auth == 0 {
1058
- if _ , err = sess .Delete (access ); err != nil {
1059
- sess .Rollback ()
1070
+ if _ , err = e .Delete (access ); err != nil {
1060
1071
return fmt .Errorf ("fail to delete access: %v" , err )
1061
- } else if err = WatchRepo (u .Id , repo .Id , false ); err != nil {
1062
- sess .Rollback ()
1072
+ } else if err = watchRepo (e , u .Id , repo .Id , false ); err != nil {
1063
1073
return err
1064
1074
}
1065
1075
} else if auth < t .Authorize {
1066
1076
// Downgrade authorize level.
1067
- if err = addAccessWithAuthorize (sess , access , AuthorizeToAccessType (auth )); err != nil {
1068
- sess .Rollback ()
1077
+ if err = addAccessWithAuthorize (e , access , AuthorizeToAccessType (auth )); err != nil {
1069
1078
return err
1070
1079
}
1071
1080
}
1072
1081
}
1073
1082
1074
1083
// This must exist.
1075
1084
ou := new (OrgUser )
1076
- _ , err = sess .Where ("uid=?" , uid ).And ("org_id=?" , org .Id ).Get (ou )
1085
+ _ , err = e .Where ("uid=?" , uid ).And ("org_id=?" , org .Id ).Get (ou )
1077
1086
if err != nil {
1078
- sess .Rollback ()
1079
1087
return err
1080
1088
}
1081
1089
ou .NumTeams --
1082
1090
if t .IsOwnerTeam () {
1083
1091
ou .IsOwner = false
1084
1092
}
1085
- if _ , err = sess .Id (ou .Id ).AllCols ().Update (ou ); err != nil {
1086
- sess .Rollback ()
1093
+ if _ , err = e .Id (ou .Id ).AllCols ().Update (ou ); err != nil {
1087
1094
return err
1088
1095
}
1089
1096
return nil
@@ -1096,7 +1103,8 @@ func RemoveTeamMember(orgId, teamId, uid int64) error {
1096
1103
if err := sess .Begin (); err != nil {
1097
1104
return err
1098
1105
}
1099
- if err := removeTeamMemberWithSess (orgId , teamId , uid , sess ); err != nil {
1106
+ if err := removeTeamMember (sess , orgId , teamId , uid ); err != nil {
1107
+ sess .Rollback ()
1100
1108
return err
1101
1109
}
1102
1110
return sess .Commit ()
0 commit comments