idnio 2.3.3b → 2.3.4b

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,14 +13,22 @@ module CampaignFilters
13
13
 
14
14
  response = IDNAPI.get( "#{$url}/cc/api/campaignFilter/list?includeSystemFilters=false", $token )
15
15
 
16
- filters = JSON.parse( response.body )
16
+ case response
17
+ when Net::HTTPSuccess
17
18
 
18
- $log.info "\tDetected #{filters['count']} campaign filters."
19
+ filters = JSON.parse( response.body )
20
+
21
+ $log.info "\tRetrieved #{filters['count']} campaign filters."
22
+
23
+ filters['items'].each do |filter|
24
+ $log.info "\tCampaign Filter: #{filter["name"]}"
25
+ Program.write_file( "#{directory}/campaign-filters/", "Campaign Filter - #{filter["name"]}.json", JSON.pretty_generate( filter ) )
26
+ end
27
+
28
+ else
29
+ $log.error "\tError: Unable to retrieve campaign filters."
30
+ end # case response
19
31
 
20
- filters['items'].each do |filter|
21
- $log.info "\tCampaign Filter: #{filter["name"]}"
22
- Program.write_file( "#{directory}/campaign-filters/", "Campaign Filter - #{filter["name"]}.json", JSON.pretty_generate( filter ) )
23
- end
24
32
  end
25
33
 
26
34
  #
@@ -35,25 +43,31 @@ module CampaignFilters
35
43
  #
36
44
  def self.doc
37
45
 
38
- Markdown.h2( "Campaign Filters" )
39
-
40
46
  response = IDNAPI.get( "#{$url}/cc/api/campaignFilter/list?includeSystemFilters=false", $token )
41
- unless response.nil?
42
- filters = JSON.parse( response.body )
43
-
44
- $log.info "\tDetected #{filters['count']} campaign filters."
45
-
46
- filters['items'].each do |filter|
47
- $log.info "\tCampaign Filter: #{filter["name"]}"
48
- Markdown.h3( "#{filter["name"]}" )
49
- Markdown.text( "- **Name** - #{filter["name"]}\n" )
50
- Markdown.text( "- **Description** - #{filter["description"]}\n" )
51
- Markdown.text( "- **Owner** - #{filter["owner"]}\n" )
52
- Markdown.text( "- **Mode** - #{filter["mode"]}\n\n" )
53
- Markdown.text( "- **Criteria**\n" )
54
- Markdown.code( filter["criteriaList"] )
55
- end
56
- end
47
+
48
+ case response
49
+ when Net::HTTPSuccess
50
+
51
+ filters = JSON.parse( response.body )
52
+
53
+ $log.info "\tRetrieved #{filters['count']} campaign filters."
54
+
55
+ Markdown.h2 "Campaign Filters"
56
+
57
+ filters['items'].each do |filter|
58
+ $log.info "\tCampaign Filter: #{filter["name"]}"
59
+ Markdown.h3( "#{filter["name"]}" )
60
+ Markdown.text( "- **Name** - #{filter["name"]}\n" )
61
+ Markdown.text( "- **Description** - #{filter["description"]}\n" )
62
+ Markdown.text( "- **Owner** - #{filter["owner"]}\n" )
63
+ Markdown.text( "- **Mode** - #{filter["mode"]}\n\n" )
64
+ Markdown.text( "- **Criteria**\n" )
65
+ Markdown.code( filter["criteriaList"] )
66
+ end
67
+
68
+ else
69
+ $log.error "\tError: Unable to retrieve campaign filters."
70
+ end # case response
57
71
 
58
72
  Markdown.write
59
73
  end
@@ -184,7 +184,7 @@ module Connectors
184
184
 
185
185
  connectors = JSON.parse( response.body )
186
186
 
187
- $log.info "\tDetected #{connectors['total']} connectors."
187
+ $log.info "\tRetrieved connectors."
188
188
 
189
189
  connectors['items'].each do |connector|
190
190
 
@@ -192,13 +192,13 @@ module Connectors
192
192
  $log.info "\tConnector: #{connector["name"]}"
193
193
  Program.write_file( "#{directory}/connectors/", "Connector - #{connector["name"]}.json", JSON.pretty_generate( connector ) )
194
194
  else
195
- $log.info "\tSkipping Default Connector: #{connector["name"]}"
195
+ $log.debug "\tSkipping Default Connector: #{connector["name"]}"
196
196
  end
197
197
 
198
198
  end
199
199
 
200
200
  else
201
- $log.error "\tError: Unable to fetch connectors."
201
+ $log.error "\tError: Unable to retrieve connectors."
202
202
  end
203
203
  end
204
204
 
@@ -262,9 +262,9 @@ module Connectors
262
262
 
263
263
  connectors = JSON.parse( response.body )
264
264
 
265
- Markdown.h2 "Connectors"
266
- $log.info "\tDetected #{connectors['total']} connectors."
265
+ $log.info "\tRetrieved connectors."
267
266
 
267
+ Markdown.h2 "Connectors"
268
268
  Markdown.text "| Connector Name | Connector Class | Direct Connect | Status |\n"
269
269
  Markdown.text "|----------------|-----------------|----------------|--------|\n"
270
270
 
@@ -276,13 +276,13 @@ module Connectors
276
276
  Markdown.text "| #{connector["name"]} | #{connector["className"]} | #{Program.humanize(connector["directConnect"])} | #{connector["status"]} |\n"
277
277
 
278
278
  else
279
- $log.info "\tSkipping Default Connector: #{connector["name"]}"
279
+ $log.debug "\tSkipping Default Connector: #{connector["name"]}"
280
280
  end
281
281
 
282
282
  end
283
283
 
284
284
  else
285
- $log.error "\tError: Unable to fetch connectors."
285
+ $log.error "\tError: Unable to retrieve connectors."
286
286
  end
287
287
 
288
288
  end
@@ -94,7 +94,7 @@ module EmailTemplates
94
94
 
95
95
  email_templates = JSON.parse( response.body )
96
96
 
97
- $log.info "\tDetected #{email_templates['count']} email templates."
97
+ $log.info "\tRetrieved email templates."
98
98
 
99
99
  email_templates['items'].each do |email_template|
100
100
 
@@ -112,7 +112,7 @@ module EmailTemplates
112
112
  end # email_templates['items'].each do |email_template|
113
113
 
114
114
  else
115
- $log.error "\tError: Unable to fetch email templates."
115
+ $log.error "\tError: Unable to retrieve email templates."
116
116
  end # case response
117
117
 
118
118
  end
@@ -155,7 +155,13 @@ module EmailTemplates
155
155
 
156
156
  $log.debug "\t\tUpdating email template..."
157
157
  response = IDNAPI.post_form( "#{$url}/cc/api/emailTemplate/update", $token, update_params )
158
- $log.debug "\t\tEmail template updated."
158
+
159
+ case response
160
+ when Net::HTTPSuccess
161
+ $log.debug "\t\tEmail template updated."
162
+ else
163
+ $log.error "\tError: Unable to update email template."
164
+ end # case response
159
165
 
160
166
  else
161
167
  $log.debug "\tSkipping Email Template: #{email_template["name"]}"
@@ -181,7 +187,7 @@ module EmailTemplates
181
187
 
182
188
  email_templates = JSON.parse( response.body )
183
189
 
184
- $log.info "\tDetected #{email_templates['count']} email templates."
190
+ $log.info "\tRetrieved email templates."
185
191
 
186
192
  # Give up if we don't have any email templates to doc
187
193
  # if email_templates.nil? || email_templates.empty? || email_templates['count'] == 0 )
@@ -217,7 +223,7 @@ module EmailTemplates
217
223
  end # email_templates['items'].each do |email_template|
218
224
 
219
225
  else
220
- $log.error "\tError: Unable to fetch email templates."
226
+ $log.error "\tError: Unable to retrieve email templates."
221
227
  end # case response
222
228
 
223
229
  Markdown.write
@@ -90,7 +90,7 @@ module IdentityAttributes
90
90
  Program.write_file( File.join( directory, "identity-attributes"), "identity-attributes.json", JSON.pretty_generate( identity_attributes ) )
91
91
 
92
92
  else
93
- $log.error "\tError: Unable to fetch identity attributes."
93
+ $log.error "\tError: Unable to retrieve identity attributes."
94
94
  end # case response
95
95
 
96
96
  end
@@ -167,7 +167,7 @@ module IdentityAttributes
167
167
  end # unless identity_attributes.nil? || identity_attributes.empty?
168
168
 
169
169
  else
170
- $log.error "\tError: Unable to fetch identity attributes."
170
+ $log.error "\tError: Unable to retrieve identity attributes."
171
171
  end # case response
172
172
 
173
173
  end
@@ -80,7 +80,7 @@ module IdentityProfiles
80
80
 
81
81
  identity_profiles = JSON.parse( response.body )
82
82
 
83
- $log.info "\tDetected #{identity_profiles.count} identity profiles."
83
+ $log.info "\tRetrieved #{identity_profiles.count} identity profiles."
84
84
 
85
85
  identity_profiles.each do |identity_profile|
86
86
 
@@ -96,13 +96,13 @@ module IdentityProfiles
96
96
  Program.write_file( "#{directory}/identity-profiles/", "Identity Profile - #{idp_details["name"]}.json", JSON.pretty_generate( idp_details ) )
97
97
 
98
98
  else
99
- $log.error "\tError: Unable to fetch identity profile details."
99
+ $log.error "\tError: Unable to retrieve identity profile details."
100
100
  end # case response
101
101
 
102
102
  end # identity_profiles.each do |identity_profile|
103
103
 
104
104
  else
105
- $log.error "\tError: Unable to fetch identity profiles."
105
+ $log.error "\tError: Unable to retrieve identity profiles."
106
106
  end # case response
107
107
 
108
108
  end
@@ -114,7 +114,7 @@ module IdentityProfiles
114
114
 
115
115
  # Read from the file system to determine how many identity profile configurations we have.
116
116
  identity_profiles = Program.read_directory("#{directory}/identity-profiles")
117
- $log.info "\tDetected #{identity_profiles.length} identity profiles."
117
+ $log.info "\tRetrieved #{identity_profiles.length} identity profiles."
118
118
 
119
119
  #
120
120
  # Iterate through each identity profile.
@@ -203,7 +203,7 @@ module IdentityProfiles
203
203
  identity_profiles = JSON.parse( response.body )
204
204
 
205
205
  Markdown.h2 "Identity Profiles"
206
- $log.info "\tDetected #{identity_profiles.count} identity profiles."
206
+ $log.info "\tRetrieved #{identity_profiles.count} identity profiles."
207
207
 
208
208
  identity_profiles.each do |identity_profile|
209
209
 
@@ -311,13 +311,13 @@ module IdentityProfiles
311
311
 
312
312
 
313
313
  else
314
- $log.error "\tError: Unable to fetch identity profile details."
314
+ $log.error "\tError: Unable to retrieve identity profile details."
315
315
  end # case response
316
316
 
317
317
  end # identity_profiles.each do |identity_profile|
318
318
 
319
319
  else
320
- $log.error "\tError: Unable to fetch identity profiles."
320
+ $log.error "\tError: Unable to retrieve identity profiles."
321
321
  end # case response
322
322
 
323
323
  Markdown.write
@@ -18,7 +18,7 @@ module Integrations
18
18
 
19
19
  integrations = JSON.parse( response.body )
20
20
 
21
- $log.info "\tDetected #{integrations.count} integrations."
21
+ $log.info "\tRetrieved #{integrations.count} integrations."
22
22
 
23
23
  integrations.each do |integration|
24
24
 
@@ -28,16 +28,19 @@ module Integrations
28
28
  end
29
29
 
30
30
  else
31
- $log.error "\tError: Unable to fetch integrations."
31
+ $log.error "\tError: Unable to retrieve integrations."
32
32
  end # case response
33
33
 
34
34
  end
35
35
 
36
+ #
37
+ # Imports Integration configurations.
38
+ #
36
39
  def self.import( directory )
37
40
 
38
41
  # Read from the file system to determine how many integrations we have.
39
42
  integrations = Program.read_directory( "#{directory}/integrations" )
40
- $log.info "\tDetected #{integrations.length} integrations."
43
+ $log.info "\tRetrieved #{integrations.length} integrations."
41
44
 
42
45
  # Iterate through each transform.
43
46
  integrations.each do |integration|
@@ -99,7 +102,7 @@ module Integrations
99
102
 
100
103
  Markdown.h2 "Integrations"
101
104
 
102
- $log.info "\tDetected #{integrations.count} integrations."
105
+ $log.info "\tRetrieved #{integrations.count} integrations."
103
106
 
104
107
  integrations.each do |integration|
105
108
 
@@ -140,7 +143,7 @@ module Integrations
140
143
  end
141
144
 
142
145
  else
143
- $log.error "\tError: Unable to fetch integrations."
146
+ $log.error "\tError: Unable to retrieve integrations."
144
147
  end # case response
145
148
 
146
149
  Markdown.write
@@ -13,30 +13,42 @@ module LifecycleStates
13
13
 
14
14
  response = IDNAPI.get( "#{$url}/cc/api/profile/list", $token )
15
15
 
16
- unless response.nil?
16
+ case response
17
+ when Net::HTTPSuccess
17
18
 
18
- identityProfiles = JSON.parse( response.body )
19
+ identity_profiles = JSON.parse( response.body )
19
20
 
20
- identityProfiles.each do |identityProfile|
21
+ $log.info "\tRetrieved lifecycle states, across #{identity_profiles.count} identity profiles."
21
22
 
22
- response = IDNAPI.get( "#{$url}/cc/api/profile/get/#{identityProfile["id"]}", $token )
23
+ identity_profiles.each do |identity_profile|
23
24
 
24
- unless response.nil?
25
+ response = IDNAPI.get( "#{$url}/cc/api/profile/get/#{identity_profile["id"]}", $token )
25
26
 
26
- JSON.parse( response.body )["configuredStates"].each do |lifecycleState|
27
+ case response
28
+ when Net::HTTPSuccess
27
29
 
28
- response = IDNAPI.get( "#{$url}/cc/api/lifecycleState/get/#{lifecycleState["externalId"]}", $token )
30
+ JSON.parse( response.body )["configuredStates"].each do |lcs|
29
31
 
30
- lifecycleState = JSON.parse( response.body )
32
+ response = IDNAPI.get( "#{$url}/cc/api/lifecycleState/get/#{lcs["externalId"]}", $token )
31
33
 
32
- $log.info "\tLifecycle State: #{identityProfile["name"]} - #{lifecycleState["name"]}"
34
+ lcs = JSON.parse( response.body )
33
35
 
34
- Program.write_file( "#{directory}/lifecycle-states/", "Lifecycle States - #{identityProfile["name"]} - #{lifecycleState["name"]}.json", JSON.pretty_generate( lifecycleState ) )
36
+ $log.info "\tLifecycle State: #{identity_profile["name"]} - #{lcs["name"]}"
37
+
38
+ Program.write_file( "#{directory}/lifecycle-states/", "Lifecycle States - #{identity_profile["name"]} - #{lcs["name"]}.json", JSON.pretty_generate( lcs ) )
35
39
 
36
40
  end
37
- end
38
- end
39
- end
41
+
42
+ else
43
+ $log.error "\tError: Unable to retrieve identity profile details."
44
+ end # case response
45
+
46
+ end # identityProfiles.each do |identityProfile|
47
+
48
+ else
49
+ $log.error "\tError: Unable to retrieve identity profiles."
50
+ end # case response
51
+
40
52
  end
41
53
 
42
54
  #
@@ -58,6 +70,8 @@ module LifecycleStates
58
70
 
59
71
  identity_profiles = JSON.parse( response.body )
60
72
 
73
+ $log.info "\tRetrieved lifecycle states, across #{identity_profiles.count} identity profiles."
74
+
61
75
  Markdown.h2 "Lifecycle States"
62
76
 
63
77
  identity_profiles.each do |identity_profile|
@@ -85,13 +99,13 @@ module LifecycleStates
85
99
  end # unless idp_details["configuredStates"].nil? || idp_details["configuredStates"].empty?
86
100
 
87
101
  else
88
- $log.error "\tError: Unable to fetch identity profile details."
102
+ $log.error "\tError: Unable to retrieve identity profile details."
89
103
  end # case response
90
104
 
91
105
  end # identity_profiles.each do |identity_profile|
92
106
 
93
107
  else
94
- $log.error "\tError: Unable to fetch identity profile details."
108
+ $log.error "\tError: Unable to retrieve identity profiles."
95
109
  end # case response
96
110
 
97
111
  Markdown.write
@@ -82,7 +82,7 @@ module PasswordPolicies
82
82
  response = IDNAPI.get( "#{$url}/cc/api/passwordPolicy/list", $token )
83
83
  unless response.nil?
84
84
  policies = JSON.parse( response.body )
85
- $log.info "\tDetected #{policies.count} policies."
85
+ $log.info "\tRetrieved #{policies.count} policies."
86
86
  policies.each do |policy|
87
87
  $log.debug "\tPolicy: #{policy["name"]}"
88
88
  Program.write_file( "#{directory}/password-policies/", "Password Policy - #{policy["name"]}.json", JSON.pretty_generate( policy ) )
@@ -73,7 +73,7 @@ module PasswordSyncGroups
73
73
  response = IDNAPI.get( "#{$url}/cc/api/passwordSyncGroup/list", $token )
74
74
  unless response.nil?
75
75
  groups = JSON.parse( response.body )
76
- $log.info "\tDetected #{groups.count} sync groups."
76
+ $log.info "\tRetrieved #{groups.count} sync groups."
77
77
  groups.each do |group|
78
78
  $log.debug "\tSync Group: #{group["name"]}"
79
79
  policyName = PasswordSyncGroups.getPolicyName( group["passwordPolicyId"] )
@@ -18,44 +18,25 @@ module ReferenceResolver
18
18
 
19
19
  def self.get_identity_ref( name )
20
20
 
21
- query = {
22
- "queryType": "SAILPOINT",
23
- "query": {
24
- "query": "name:#{name}"
25
- }
26
- }
27
- response = IDNAPI.post_json( "#{$url}/beta/search/identities?count=true&offset=0&limit=1", $token, query )
28
-
29
- unless response['X-Total-Count'].nil?
30
- count = response['X-Total-Count'].to_i
31
-
32
- if count == 1 # Make sure we have a unique result.
33
-
34
- identities = JSON.parse( response.body )
35
-
36
- identity = identities.first
37
-
38
- identity_ref = {
39
- "type": "IDENTITY",
40
- "id": identity['id'],
41
- "name": identity['name']
42
- }
43
-
44
- return identity_ref
21
+ result = ReferenceResolver.search_for_single_object( "identities", "name:#{name}" )
45
22
 
46
- elsif name != "slpt.services" # We don't have a unique result, and we're not looking up slpt.services, so we'll look that up instead.
23
+ if !result.nil?
47
24
 
48
- $log.debug "\t\tCannot resolve unique identity '#{name}'. Resolving identity 'slpt.services' instead."
49
- return ReferenceResolver.get_default_identity_ref
25
+ return {
26
+ "type": "IDENTITY",
27
+ "id": result['id'],
28
+ "name": result['name']
29
+ }
50
30
 
51
- else # We don't have a unique result, and we couldn't resolve anything else. Punt. Hopefully we never see this message.
31
+ elsif name != "slpt.services" # We don't have a unique result, and we're not looking up slpt.services, so we'll look that up instead.
52
32
 
53
- $log.debug "\t\tCannot resolve identity '#{name}' . Giving up with no identity."
54
- return nil
33
+ $log.debug "\t\tCannot resolve unique identity '#{name}'. Resolving identity 'slpt.services' instead."
34
+ return ReferenceResolver.get_default_identity_ref
55
35
 
56
- end
36
+ end
57
37
 
58
- end # if response['X-Total-Count'].nil?
38
+ # We don't have a unique result, and we couldn't resolve anything else. Punt. Hopefully we never see this message.
39
+ $log.debug "\t\tCannot resolve identity '#{name}' . Giving up with no identity."
59
40
 
60
41
  return nil # catch all.
61
42
 
@@ -134,4 +115,63 @@ module ReferenceResolver
134
115
  return nil
135
116
 
136
117
  end # def self.get_cluster_ref( name )
118
+
119
+ def self.get_entitlement_ref_by_name( name )
120
+
121
+ result = ReferenceResolver.search_for_single_object( "entitlements", "name:#{name}" )
122
+
123
+ if !result.nil?
124
+
125
+ return {
126
+ "type": "ENTITLEMENT",
127
+ "id": result['id'],
128
+ "name": result['name']
129
+ }
130
+
131
+ end
132
+
133
+ # We don't have a unique result, and we couldn't resolve anything else. Punt. Hopefully we never see this message.
134
+ $log.debug "\t\tCannot resolve entitlement '#{name}' . Giving up with no entitlement reference."
135
+
136
+ return nil # catch all.
137
+
138
+ end
139
+
140
+ def self.get_entitlement_ref_by_id( id )
141
+
142
+ result = ReferenceResolver.search_for_single_object( "entitlements", "id:#{id}" )
143
+
144
+ unless result.nil?
145
+ return {
146
+ "type": "ENTITLEMENT",
147
+ "id": result['id'],
148
+ "name": result['name']
149
+ }
150
+ end
151
+ return nil
152
+ end
153
+
154
+ def self.search_for_single_object( object, query )
155
+
156
+ query = {
157
+ "queryType": "SAILPOINT",
158
+ "query": {
159
+ "query": "#{query}"
160
+ }
161
+ }
162
+ response = IDNAPI.post_json( "#{$url}/beta/search/#{object}?count=true&offset=0&limit=1", $token, query )
163
+ case response
164
+ when Net::HTTPSuccess
165
+ unless response['X-Total-Count'].nil?
166
+ count = response['X-Total-Count'].to_i
167
+ if count == 1 # Make sure we have a unique result.
168
+ result = JSON.parse( response.body )
169
+ return result.first
170
+ end # if count == 1
171
+ end # unless response['X-Total-Count'].nil?
172
+ end # case response
173
+ return nil
174
+
175
+ end
176
+
137
177
  end