Skip to content

Commit b366282

Browse files
authored
Merge pull request #3623 from gravitl/NM-102
NM-102: IDP Filtering Improvements
2 parents f8f4dee + 5be1fb4 commit b366282

File tree

3 files changed

+50
-3
lines changed

3 files changed

+50
-3
lines changed

pro/idp/azure/azure.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ func buildPrefixFilter(field string, prefixes []string) string {
168168
return fmt.Sprintf("$filter=startswith(%s,'%s')", field, prefixes[0])
169169
}
170170

171-
return buildPrefixFilter(field, prefixes[1:]) + fmt.Sprintf("%%20or%%20startswith(%s,'%s')", field, prefixes[0])
171+
return buildPrefixFilter(field, prefixes[:1]) + "%20or%20" + buildPrefixFilter(field, prefixes[1:])
172172
}
173173

174174
type getUsersResponse struct {

pro/idp/google/google.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"encoding/base64"
66
"encoding/json"
7+
"strings"
78

89
"github.com/gravitl/netmaker/logic"
910
"github.com/gravitl/netmaker/pro/idp"
@@ -67,6 +68,21 @@ func (g *Client) GetUsers(filters []string) ([]idp.User, error) {
6768
Fields("users(id,primaryEmail,name,suspended,archived)", "nextPageToken").
6869
Pages(context.TODO(), func(users *admindir.Users) error {
6970
for _, user := range users.Users {
71+
var keep bool
72+
if len(filters) > 0 {
73+
for _, filter := range filters {
74+
if strings.HasPrefix(user.PrimaryEmail, filter) {
75+
keep = true
76+
}
77+
}
78+
} else {
79+
keep = true
80+
}
81+
82+
if !keep {
83+
continue
84+
}
85+
7086
retval = append(retval, idp.User{
7187
ID: user.Id,
7288
Username: user.PrimaryEmail,
@@ -89,6 +105,21 @@ func (g *Client) GetGroups(filters []string) ([]idp.Group, error) {
89105
Fields("groups(id,name)", "nextPageToken").
90106
Pages(context.TODO(), func(groups *admindir.Groups) error {
91107
for _, group := range groups.Groups {
108+
var keep bool
109+
if len(filters) > 0 {
110+
for _, filter := range filters {
111+
if strings.HasPrefix(group.Name, filter) {
112+
keep = true
113+
}
114+
}
115+
} else {
116+
keep = true
117+
}
118+
119+
if !keep {
120+
continue
121+
}
122+
92123
var retvalMembers []string
93124
err := g.service.Members.List(group.Id).
94125
Fields("members(id)", "nextPageToken").

pro/idp/okta/okta.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ func (o *Client) GetUsers(filters []string) ([]idp.User, error) {
4848
var allUsersFetched bool
4949

5050
for !allUsersFetched {
51-
users, resp, err := o.client.UserAPI.ListUsers(context.TODO()).Execute()
51+
users, resp, err := o.client.UserAPI.ListUsers(context.TODO()).
52+
Search(buildPrefixFilter("profile.login", filters)).
53+
Execute()
5254
if err != nil {
5355
return nil, err
5456
}
@@ -87,7 +89,9 @@ func (o *Client) GetGroups(filters []string) ([]idp.Group, error) {
8789
var allGroupsFetched bool
8890

8991
for !allGroupsFetched {
90-
groups, resp, err := o.client.GroupAPI.ListGroups(context.TODO()).Execute()
92+
groups, resp, err := o.client.GroupAPI.ListGroups(context.TODO()).
93+
Search(buildPrefixFilter("profile.name", filters)).
94+
Execute()
9195
if err != nil {
9296
return nil, err
9397
}
@@ -123,3 +127,15 @@ func (o *Client) GetGroups(filters []string) ([]idp.Group, error) {
123127

124128
return retval, nil
125129
}
130+
131+
func buildPrefixFilter(field string, prefixes []string) string {
132+
if len(prefixes) == 0 {
133+
return ""
134+
}
135+
136+
if len(prefixes) == 1 {
137+
return fmt.Sprintf("%s sw \"%s\"", field, prefixes[0])
138+
}
139+
140+
return buildPrefixFilter(field, prefixes[:1]) + " or " + buildPrefixFilter(field, prefixes[1:])
141+
}

0 commit comments

Comments
 (0)