@@ -17,6 +17,7 @@ func NewOktaClient(oktaOrgURL, oktaAPIToken string) (*Client, error) {
17
17
config , err := okta .NewConfiguration (
18
18
okta .WithOrgUrl (oktaOrgURL ),
19
19
okta .WithToken (oktaAPIToken ),
20
+ okta .WithRateLimitPrevent (true ),
20
21
)
21
22
if err != nil {
22
23
return nil , err
@@ -45,18 +46,17 @@ func (o *Client) Verify() error {
45
46
46
47
func (o * Client ) GetUsers (filters []string ) ([]idp.User , error ) {
47
48
var retval []idp.User
48
- var allUsersFetched bool
49
-
50
- for ! allUsersFetched {
51
- users , resp , err := o .client .UserAPI .ListUsers (context .TODO ()).
52
- Search (buildPrefixFilter ("profile.login" , filters )).
53
- Execute ()
54
- if err != nil {
55
- return nil , err
56
- }
57
49
58
- allUsersFetched = ! resp .HasNextPage ()
50
+ users , resp , err := o .client .UserAPI .ListUsers (context .TODO ()).
51
+ Search (buildPrefixFilter ("profile.login" , filters )).
52
+ Execute ()
53
+ if err != nil {
54
+ return nil , err
55
+ }
59
56
57
+ usersProcessingPending := len (users ) > 0 || resp .HasNextPage ()
58
+
59
+ for usersProcessingPending {
60
60
for _ , user := range users {
61
61
id := * user .Id
62
62
username := * user .Profile .Login
@@ -79,42 +79,66 @@ func (o *Client) GetUsers(filters []string) ([]idp.User, error) {
79
79
AccountArchived : false ,
80
80
})
81
81
}
82
+
83
+ if resp .HasNextPage () {
84
+ users = make ([]okta.User , 0 )
85
+
86
+ resp , err = resp .Next (& users )
87
+ if err != nil {
88
+ return nil , err
89
+ }
90
+
91
+ usersProcessingPending = len (users ) > 0 || resp .HasNextPage ()
92
+ } else {
93
+ usersProcessingPending = false
94
+ }
82
95
}
83
96
84
97
return retval , nil
85
98
}
86
99
87
100
func (o * Client ) GetGroups (filters []string ) ([]idp.Group , error ) {
88
101
var retval []idp.Group
89
- var allGroupsFetched bool
90
-
91
- for ! allGroupsFetched {
92
- groups , resp , err := o .client .GroupAPI .ListGroups (context .TODO ()).
93
- Search (buildPrefixFilter ("profile.name" , filters )).
94
- Execute ()
95
- if err != nil {
96
- return nil , err
97
- }
98
102
99
- allGroupsFetched = ! resp .HasNextPage ()
103
+ groups , resp , err := o .client .GroupAPI .ListGroups (context .TODO ()).
104
+ Search (buildPrefixFilter ("profile.name" , filters )).
105
+ Execute ()
106
+ if err != nil {
107
+ return nil , err
108
+ }
109
+
110
+ groupsProcessingPending := len (groups ) > 0 || resp .HasNextPage ()
100
111
112
+ for groupsProcessingPending {
101
113
for _ , group := range groups {
102
- var allMembersFetched bool
103
114
id := * group .Id
104
115
name := * group .Profile .Name
105
116
106
117
var members []string
107
- for ! allMembersFetched {
108
- groupUsers , resp , err := o .client .GroupAPI .ListGroupUsers (context .TODO (), id ).Execute ()
109
- if err != nil {
110
- return nil , err
111
- }
118
+ groupUsers , groupUsersResp , err := o .client .GroupAPI .ListGroupUsers (context .TODO (), id ).Execute ()
119
+ if err != nil {
120
+ return nil , err
121
+ }
112
122
113
- allMembersFetched = ! resp .HasNextPage ()
123
+ groupUsersProcessingPending := len ( groupUsers ) > 0 || groupUsersResp .HasNextPage ()
114
124
125
+ for groupUsersProcessingPending {
115
126
for _ , groupUser := range groupUsers {
116
127
members = append (members , * groupUser .Id )
117
128
}
129
+
130
+ if groupUsersResp .HasNextPage () {
131
+ groupUsers = make ([]okta.GroupMember , 0 )
132
+
133
+ groupUsersResp , err = groupUsersResp .Next (& groupUsers )
134
+ if err != nil {
135
+ return nil , err
136
+ }
137
+
138
+ groupUsersProcessingPending = len (groupUsers ) > 0 || groupUsersResp .HasNextPage ()
139
+ } else {
140
+ groupUsersProcessingPending = false
141
+ }
118
142
}
119
143
120
144
retval = append (retval , idp.Group {
@@ -123,6 +147,19 @@ func (o *Client) GetGroups(filters []string) ([]idp.Group, error) {
123
147
Members : members ,
124
148
})
125
149
}
150
+
151
+ if resp .HasNextPage () {
152
+ groups = make ([]okta.Group , 0 )
153
+
154
+ resp , err = resp .Next (& groups )
155
+ if err != nil {
156
+ return nil , err
157
+ }
158
+
159
+ groupsProcessingPending = len (groups ) > 0 || resp .HasNextPage ()
160
+ } else {
161
+ groupsProcessingPending = false
162
+ }
126
163
}
127
164
128
165
return retval , nil
0 commit comments