@ -176,6 +176,7 @@ func isTeamNameTaken(orgId int64, name string, existingId int64, sess *DBSession
}
}
func ( ss * SQLStore ) SearchTeams ( ctx context . Context , query * models . SearchTeamsQuery ) error {
func ( ss * SQLStore ) SearchTeams ( ctx context . Context , query * models . SearchTeamsQuery ) error {
return ss . WithDbSession ( ctx , func ( sess * DBSession ) error {
query . Result = models . SearchTeamQueryResult {
query . Result = models . SearchTeamQueryResult {
Teams : make ( [ ] * models . TeamDTO , 0 ) ,
Teams : make ( [ ] * models . TeamDTO , 0 ) ,
}
}
@ -200,7 +201,7 @@ func (ss *SQLStore) SearchTeams(ctx context.Context, query *models.SearchTeamsQu
params = append ( params , query . OrgId )
params = append ( params , query . OrgId )
if query . Query != "" {
if query . Query != "" {
sql . WriteString ( ` and team.name ` + d ialect. LikeStr ( ) + ` ? ` )
sql . WriteString ( ` and team.name ` + ss . D ialect. LikeStr ( ) + ` ? ` )
params = append ( params , queryWithWildcards )
params = append ( params , queryWithWildcards )
}
}
@ -226,15 +227,15 @@ func (ss *SQLStore) SearchTeams(ctx context.Context, query *models.SearchTeamsQu
if query . Limit != 0 {
if query . Limit != 0 {
offset := query . Limit * ( query . Page - 1 )
offset := query . Limit * ( query . Page - 1 )
sql . WriteString ( d ialect. LimitOffset ( int64 ( query . Limit ) , int64 ( offset ) ) )
sql . WriteString ( ss . D ialect. LimitOffset ( int64 ( query . Limit ) , int64 ( offset ) ) )
}
}
if err := x . SQL ( sql . String ( ) , params ... ) . Find ( & query . Result . Teams ) ; err != nil {
if err := sess . SQL ( sql . String ( ) , params ... ) . Find ( & query . Result . Teams ) ; err != nil {
return err
return err
}
}
team := models . Team { }
team := models . Team { }
countSess := x . Table ( "team" )
countSess := sess . Table ( "team" )
countSess . Where ( "team.org_id=?" , query . OrgId )
countSess . Where ( "team.org_id=?" , query . OrgId )
if query . Query != "" {
if query . Query != "" {
@ -266,9 +267,11 @@ func (ss *SQLStore) SearchTeams(ctx context.Context, query *models.SearchTeamsQu
query . Result . TotalCount = count
query . Result . TotalCount = count
return err
return err
} )
}
}
func ( ss * SQLStore ) GetTeamById ( ctx context . Context , query * models . GetTeamByIdQuery ) error {
func ( ss * SQLStore ) GetTeamById ( ctx context . Context , query * models . GetTeamByIdQuery ) error {
return ss . WithDbSession ( ctx , func ( sess * DBSession ) error {
var sql bytes . Buffer
var sql bytes . Buffer
params := make ( [ ] interface { } , 0 )
params := make ( [ ] interface { } , 0 )
@ -287,7 +290,7 @@ func (ss *SQLStore) GetTeamById(ctx context.Context, query *models.GetTeamByIdQu
params = append ( params , query . OrgId , query . Id )
params = append ( params , query . OrgId , query . Id )
var team models . TeamDTO
var team models . TeamDTO
exists , err := x . SQL ( sql . String ( ) , params ... ) . Get ( & team )
exists , err := sess . SQL ( sql . String ( ) , params ... ) . Get ( & team )
if err != nil {
if err != nil {
return err
return err
@ -299,6 +302,7 @@ func (ss *SQLStore) GetTeamById(ctx context.Context, query *models.GetTeamByIdQu
query . Result = & team
query . Result = & team
return nil
return nil
} )
}
}
// GetTeamsByUser is used by the Guardian when checking a users' permissions
// GetTeamsByUser is used by the Guardian when checking a users' permissions
@ -513,7 +517,7 @@ func (ss *SQLStore) GetTeamMembers(ctx context.Context, query *models.GetTeamMem
// Note we assume that checking SignedInUser is allowed to see team members for this team has already been performed
// Note we assume that checking SignedInUser is allowed to see team members for this team has already been performed
// If the signed in user is not set no member will be returned
// If the signed in user is not set no member will be returned
if ss . Cfg . IsFeatureToggleEnabled ( featuremgmt . FlagAccesscontrol ) {
if ss . Cfg . IsFeatureToggleEnabled ( featuremgmt . FlagAccesscontrol ) {
sqlID := fmt . Sprintf ( "%s.%s" , x . Dialect ( ) . Quote ( "user" ) , x . Dialect ( ) . Quote ( "id" ) )
sqlID := fmt . Sprintf ( "%s.%s" , ss . engine . Dialect ( ) . Quote ( "user" ) , ss . engine . Dialect ( ) . Quote ( "id" ) )
* acFilter , err = ac . Filter ( query . SignedInUser , sqlID , "users:id:" , ac . ActionOrgUsersRead )
* acFilter , err = ac . Filter ( query . SignedInUser , sqlID , "users:id:" , ac . ActionOrgUsersRead )
if err != nil {
if err != nil {
return err
return err
@ -525,10 +529,11 @@ func (ss *SQLStore) GetTeamMembers(ctx context.Context, query *models.GetTeamMem
// getTeamMembers return a list of members for the specified team
// getTeamMembers return a list of members for the specified team
func ( ss * SQLStore ) getTeamMembers ( ctx context . Context , query * models . GetTeamMembersQuery , acUserFilter * ac . SQLFilter ) error {
func ( ss * SQLStore ) getTeamMembers ( ctx context . Context , query * models . GetTeamMembersQuery , acUserFilter * ac . SQLFilter ) error {
return ss . WithDbSession ( ctx , func ( dbSess * DBSession ) error {
query . Result = make ( [ ] * models . TeamMemberDTO , 0 )
query . Result = make ( [ ] * models . TeamMemberDTO , 0 )
sess := x . Table ( "team_member" )
sess := dbSess . Table ( "team_member" )
sess . Join ( "INNER" , x . Dialect ( ) . Quote ( "user" ) ,
sess . Join ( "INNER" , ss . Dialect . Quote ( "user" ) ,
fmt . Sprintf ( "team_member.user_id=%s.%s" , x . Dialect ( ) . Quote ( "user" ) , x . Dialect ( ) . Quote ( "id" ) ) ,
fmt . Sprintf ( "team_member.user_id=%s.%s" , ss . Dialect . Quote ( "user" ) , ss . Dialect . Quote ( "id" ) ) ,
)
)
if acUserFilter != nil {
if acUserFilter != nil {
@ -540,7 +545,7 @@ func (ss *SQLStore) getTeamMembers(ctx context.Context, query *models.GetTeamMem
SELECT id from user_auth
SELECT id from user_auth
WHERE user_auth . user_id = team_member . user_id
WHERE user_auth . user_id = team_member . user_id
ORDER BY user_auth . created DESC `
ORDER BY user_auth . created DESC `
authJoinCondition = "user_auth.id=" + authJoinCondition + d ialect. Limit ( 1 ) + ")"
authJoinCondition = "user_auth.id=" + authJoinCondition + ss . D ialect. Limit ( 1 ) + ")"
sess . Join ( "LEFT" , "user_auth" , authJoinCondition )
sess . Join ( "LEFT" , "user_auth" , authJoinCondition )
if query . OrgId != 0 {
if query . OrgId != 0 {
@ -553,7 +558,7 @@ func (ss *SQLStore) getTeamMembers(ctx context.Context, query *models.GetTeamMem
sess . Where ( "team_member.user_id=?" , query . UserId )
sess . Where ( "team_member.user_id=?" , query . UserId )
}
}
if query . External {
if query . External {
sess . Where ( "team_member.external=?" , d ialect. BooleanStr ( true ) )
sess . Where ( "team_member.external=?" , ss . D ialect. BooleanStr ( true ) )
}
}
sess . Cols (
sess . Cols (
"team_member.org_id" ,
"team_member.org_id" ,
@ -570,9 +575,11 @@ func (ss *SQLStore) getTeamMembers(ctx context.Context, query *models.GetTeamMem
err := sess . Find ( & query . Result )
err := sess . Find ( & query . Result )
return err
return err
} )
}
}
func IsAdminOfTeams ( ctx context . Context , query * models . IsAdminOfTeamsQuery ) error {
func ( ss * SQLStore ) IsAdminOfTeams ( ctx context . Context , query * models . IsAdminOfTeamsQuery ) error {
return ss . WithDbSession ( ctx , func ( sess * DBSession ) error {
builder := & SQLBuilder { }
builder := & SQLBuilder { }
builder . Write ( "SELECT COUNT(team.id) AS count FROM team INNER JOIN team_member ON team_member.team_id = team.id WHERE team.org_id = ? AND team_member.user_id = ? AND team_member.permission = ?" , query . SignedInUser . OrgId , query . SignedInUser . UserId , models . PERMISSION_ADMIN )
builder . Write ( "SELECT COUNT(team.id) AS count FROM team INNER JOIN team_member ON team_member.team_id = team.id WHERE team.org_id = ? AND team_member.user_id = ? AND team_member.permission = ?" , query . SignedInUser . OrgId , query . SignedInUser . UserId , models . PERMISSION_ADMIN )
@ -581,11 +588,12 @@ func IsAdminOfTeams(ctx context.Context, query *models.IsAdminOfTeamsQuery) erro
}
}
resp := make ( [ ] * teamCount , 0 )
resp := make ( [ ] * teamCount , 0 )
if err := x . SQL ( builder . GetSQLString ( ) , builder . params ... ) . Find ( & resp ) ; err != nil {
if err := sess . SQL ( builder . GetSQLString ( ) , builder . params ... ) . Find ( & resp ) ; err != nil {
return err
return err
}
}
query . Result = len ( resp ) > 0 && resp [ 0 ] . Count > 0
query . Result = len ( resp ) > 0 && resp [ 0 ] . Count > 0
return nil
return nil
} )
}
}