idnio 2.3.2b
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/idnio.rb +295 -0
- data/lib/idnio/crypto.rb +34 -0
- data/lib/idnio/idnapi.rb +158 -0
- data/lib/idnio/markdown.rb +345 -0
- data/lib/idnio/program.rb +153 -0
- data/lib/idnio/timer.rb +57 -0
- data/lib/idnio/version.rb +4 -0
- data/lib/objects/access-profiles.rb +107 -0
- data/lib/objects/access-request-config.rb +90 -0
- data/lib/objects/account-profiles.rb +167 -0
- data/lib/objects/account-schemas.rb +341 -0
- data/lib/objects/applications.rb +145 -0
- data/lib/objects/attribute-sync-config.rb +122 -0
- data/lib/objects/branding.rb +49 -0
- data/lib/objects/campaign-filters.rb +61 -0
- data/lib/objects/connectors.rb +291 -0
- data/lib/objects/email-templates.rb +226 -0
- data/lib/objects/identity-attributes.rb +136 -0
- data/lib/objects/identity-profiles.rb +206 -0
- data/lib/objects/integrations.rb +149 -0
- data/lib/objects/lifecycle-states.rb +86 -0
- data/lib/objects/password-policies.rb +107 -0
- data/lib/objects/password-sync-groups.rb +100 -0
- data/lib/objects/public-identities-config.rb +78 -0
- data/lib/objects/reference-resolver.rb +137 -0
- data/lib/objects/roles.rb +117 -0
- data/lib/objects/rules.rb +198 -0
- data/lib/objects/sources.rb +217 -0
- data/lib/objects/system-settings.rb +185 -0
- data/lib/objects/transforms.rb +157 -0
- metadata +124 -0
- metadata.gz.sig +0 -0
@@ -0,0 +1,226 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "json"
|
3
|
+
require "idnio/idnapi"
|
4
|
+
require "idnio/program"
|
5
|
+
require "idnio/markdown"
|
6
|
+
|
7
|
+
module EmailTemplates
|
8
|
+
|
9
|
+
@@email_template_cache = nil
|
10
|
+
|
11
|
+
@@exclude_email_templates = [
|
12
|
+
"Account Group Challenge Creation Notification",
|
13
|
+
"Account Selection Notification",
|
14
|
+
"Batch Approval",
|
15
|
+
"Certification Decision Challenged Notification",
|
16
|
+
"Certification Reminder",
|
17
|
+
"Certification Sign Off Approval",
|
18
|
+
"Challenge Accepted",
|
19
|
+
"Challenge Creation Notification",
|
20
|
+
"Challenge Decision Expiration",
|
21
|
+
"Challenge Expiration",
|
22
|
+
"Challenge Period End",
|
23
|
+
"Challenge Period Start",
|
24
|
+
"Challenge Rejected",
|
25
|
+
"Continuous Certification Escalation",
|
26
|
+
"Continuous Certification Reminder",
|
27
|
+
"Default Report Template",
|
28
|
+
"Delegation Finished",
|
29
|
+
"Delegation Revocation",
|
30
|
+
"Delegation",
|
31
|
+
"LCM Identity Update Approval",
|
32
|
+
"LCM Manager Notification",
|
33
|
+
"LCM Password Change Notification",
|
34
|
+
"LCM Registration Approval",
|
35
|
+
"LCM Registration Manager Notification",
|
36
|
+
"LCM Registration Security Officer Notification",
|
37
|
+
"LCM Registration User Notification",
|
38
|
+
"LCM Requester Notification",
|
39
|
+
"LCM User Notification",
|
40
|
+
"Mitigation Expiration",
|
41
|
+
"Native Account Change Manager Notification",
|
42
|
+
"Open Certifications",
|
43
|
+
"Pending Manual Changes",
|
44
|
+
"Policy Violation Delegation",
|
45
|
+
"Policy Violation",
|
46
|
+
"Provisioning Form Notification",
|
47
|
+
"Remediation Item Assignment Removal",
|
48
|
+
"Remediation Item Assignment",
|
49
|
+
"Remediation Notification",
|
50
|
+
"Remediation Work Item",
|
51
|
+
"Report Completion",
|
52
|
+
"Role Modeler - Approval",
|
53
|
+
"Role Modeler - Impact Analysis Review",
|
54
|
+
"Task Result Signoff",
|
55
|
+
"Task Status",
|
56
|
+
"Work Item Assignment Removal",
|
57
|
+
"Work Item Assignment",
|
58
|
+
"Work Item Comment",
|
59
|
+
"Work Item Escalation",
|
60
|
+
"Work Item Forward",
|
61
|
+
"Work Item Reminder"
|
62
|
+
]
|
63
|
+
|
64
|
+
#
|
65
|
+
# Gets Email Template configuration by name.
|
66
|
+
#
|
67
|
+
def self.get_by_name( name )
|
68
|
+
|
69
|
+
if (@@email_template_cache == nil)
|
70
|
+
response = IDNAPI.get( "#{$url}/cc/api/emailTemplate/list", $token )
|
71
|
+
@@email_template_cache = JSON.parse( response.body )
|
72
|
+
end # if (@@email_template_cache == nil)
|
73
|
+
|
74
|
+
unless @@email_template_cache.nil?
|
75
|
+
@@email_template_cache['items'].each do |email_template|
|
76
|
+
if( email_template["name"] == name )
|
77
|
+
return email_template
|
78
|
+
end # if( email_template["name"] == name )
|
79
|
+
end # @@email_template_cache['items'].each do |email_template|
|
80
|
+
end # unless @@email_template_cache.nil?
|
81
|
+
|
82
|
+
return nil
|
83
|
+
end
|
84
|
+
|
85
|
+
#
|
86
|
+
# Exports Email Template configurations.
|
87
|
+
#
|
88
|
+
def self.export( directory )
|
89
|
+
|
90
|
+
response = IDNAPI.get( "#{$url}/cc/api/emailTemplate/list", $token )
|
91
|
+
|
92
|
+
case response
|
93
|
+
when Net::HTTPSuccess
|
94
|
+
|
95
|
+
email_templates = JSON.parse( response.body )
|
96
|
+
|
97
|
+
$log.info "\tDetected #{email_templates['count']} email templates."
|
98
|
+
|
99
|
+
email_templates['items'].each do |email_template|
|
100
|
+
|
101
|
+
if (!@@exclude_email_templates.include? email_template["name"])
|
102
|
+
|
103
|
+
$log.info "\tEmail Template: #{email_template["name"]}"
|
104
|
+
Program.write_file( "#{directory}/email-templates/", "Email Template - #{email_template["name"]}.json", JSON.pretty_generate( email_template ) )
|
105
|
+
|
106
|
+
else
|
107
|
+
|
108
|
+
$log.debug "\tSkipping Email Template: #{email_template["name"]}"
|
109
|
+
|
110
|
+
end # if (!@@default_email_templates.include? email_template["name"])...
|
111
|
+
|
112
|
+
end # email_templates['items'].each do |email_template|
|
113
|
+
|
114
|
+
else
|
115
|
+
$log.error "\tError: Unable to fetch email templates."
|
116
|
+
end # case response
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
#
|
121
|
+
# Imports Email Template configurations.
|
122
|
+
#
|
123
|
+
def self.import( directory )
|
124
|
+
|
125
|
+
# Read from the file system to determine how many identity profile configurations we have.
|
126
|
+
email_templates = Program.read_directory("#{directory}/email-templates")
|
127
|
+
|
128
|
+
$log.info "\tDetected #{email_templates.length} email templates."
|
129
|
+
|
130
|
+
# Iterate through each email template.
|
131
|
+
email_templates.each do |raw_email_template|
|
132
|
+
|
133
|
+
# Get the email template JSON.
|
134
|
+
email_template = JSON.parse( raw_email_template )
|
135
|
+
|
136
|
+
$log.info "\tEmail Template: #{email_template["name"]}"
|
137
|
+
|
138
|
+
# Get the existing email template.
|
139
|
+
existing_email_template = EmailTemplates.get_by_name( email_template["name"] )
|
140
|
+
|
141
|
+
# Make sure the email template referenced, actually exists.
|
142
|
+
unless existing_email_template.nil?
|
143
|
+
|
144
|
+
if (!@@exclude_email_templates.include? email_template["name"])
|
145
|
+
|
146
|
+
update_params = {
|
147
|
+
"id": existing_email_template["id"],
|
148
|
+
"name": email_template["name"],
|
149
|
+
"description": email_template["description"],
|
150
|
+
"subject": email_template["subject"],
|
151
|
+
"body": email_template["body"],
|
152
|
+
"state": email_template["state"],
|
153
|
+
"cc": email_template["cc"]
|
154
|
+
}
|
155
|
+
|
156
|
+
$log.debug "\t\tUpdating email template..."
|
157
|
+
response = IDNAPI.post_form( "#{$url}/cc/api/emailTemplate/update", $token, update_params )
|
158
|
+
$log.debug "\t\tEmail template updated."
|
159
|
+
|
160
|
+
else
|
161
|
+
$log.debug "\tSkipping Email Template: #{email_template["name"]}"
|
162
|
+
end # if (!@@default_transforms.include? transform["id"]...
|
163
|
+
|
164
|
+
else
|
165
|
+
$log.warn "\t\tSkipping unknown email template. \n"
|
166
|
+
end # unless existing_email_template.nil?
|
167
|
+
|
168
|
+
end # email_templates.each do |raw_email_template|
|
169
|
+
|
170
|
+
end
|
171
|
+
|
172
|
+
#
|
173
|
+
# Documents Email Template configurations.
|
174
|
+
#
|
175
|
+
def self.doc
|
176
|
+
|
177
|
+
response = IDNAPI.get( "#{$url}/cc/api/emailTemplate/list", $token )
|
178
|
+
|
179
|
+
case response
|
180
|
+
when Net::HTTPSuccess
|
181
|
+
|
182
|
+
email_templates = JSON.parse( response.body )
|
183
|
+
|
184
|
+
$log.info "\tDetected #{email_templates['count']} email templates."
|
185
|
+
|
186
|
+
# Give up if we don't have any email templates to doc
|
187
|
+
# if email_templates.nil? || email_templates.empty? || email_templates['count'] == 0 )
|
188
|
+
# break
|
189
|
+
# end
|
190
|
+
|
191
|
+
Markdown.h2( "Email Templates" )
|
192
|
+
|
193
|
+
email_templates['items'].each do |email_template|
|
194
|
+
|
195
|
+
if (!@@exclude_email_templates.include? email_template["name"])
|
196
|
+
|
197
|
+
$log.info "\tEmail Template: #{email_template["name"]}"
|
198
|
+
|
199
|
+
Markdown.h3( email_template["name"] )
|
200
|
+
|
201
|
+
unless email_template["subject"].nil?
|
202
|
+
Markdown.text( "Subject:\n")
|
203
|
+
Markdown.xml( email_template["subject"] )
|
204
|
+
end
|
205
|
+
|
206
|
+
unless email_template["body"].nil?
|
207
|
+
Markdown.text( "Body:\n")
|
208
|
+
Markdown.xml( email_template["body"] )
|
209
|
+
end
|
210
|
+
|
211
|
+
else
|
212
|
+
|
213
|
+
$log.debug "\tSkipping Email Template: #{email_template["name"]}"
|
214
|
+
|
215
|
+
end # if (!@@default_email_templates.include? email_template["name"])...
|
216
|
+
|
217
|
+
end # email_templates['items'].each do |email_template|
|
218
|
+
|
219
|
+
else
|
220
|
+
$log.error "\tError: Unable to fetch email templates."
|
221
|
+
end # case response
|
222
|
+
|
223
|
+
Markdown.write
|
224
|
+
end
|
225
|
+
|
226
|
+
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "json"
|
3
|
+
require "idnio/idnapi"
|
4
|
+
require "idnio/program"
|
5
|
+
require "idnio/markdown"
|
6
|
+
|
7
|
+
module IdentityAttributes
|
8
|
+
|
9
|
+
@@disallowed_identity_attributes = [
|
10
|
+
"country",
|
11
|
+
"displayName",
|
12
|
+
"email",
|
13
|
+
"endDate",
|
14
|
+
"firstname",
|
15
|
+
"identificationNumber",
|
16
|
+
"lastname",
|
17
|
+
"licenseStatus",
|
18
|
+
"manager",
|
19
|
+
"personalEmail",
|
20
|
+
"phone",
|
21
|
+
"startDate",
|
22
|
+
"uid",
|
23
|
+
"workPhone",
|
24
|
+
"cloudLifecycleState",
|
25
|
+
"department",
|
26
|
+
"title"
|
27
|
+
]
|
28
|
+
|
29
|
+
#
|
30
|
+
# Gets an identity attribute by name
|
31
|
+
#
|
32
|
+
def self.get_by_name( name )
|
33
|
+
response = IDNAPI.get( URI.escape("#{$url}/cc/api/identityAttribute/get?name=#{name}"), $token )
|
34
|
+
case response
|
35
|
+
when Net::HTTPSuccess
|
36
|
+
return JSON.parse( response.body )
|
37
|
+
else
|
38
|
+
return nil
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# Creates an identity attribute
|
44
|
+
#
|
45
|
+
def self.create( identity_attribute )
|
46
|
+
create_json = {
|
47
|
+
'displayName' => identity_attribute['displayName'],
|
48
|
+
'name' => identity_attribute['name'],
|
49
|
+
'multiValued' => identity_attribute['multiValued'],
|
50
|
+
'namedColumn' => identity_attribute['namedColumn'],
|
51
|
+
'searchable' => identity_attribute['searchable'],
|
52
|
+
'standard' => identity_attribute['standard'],
|
53
|
+
'system' => identity_attribute['system'],
|
54
|
+
'type' => identity_attribute['type']
|
55
|
+
}
|
56
|
+
response = IDNAPI.post_json( "#{$url}/cc/api/identityAttribute/create", $token, create_json )
|
57
|
+
end
|
58
|
+
|
59
|
+
#
|
60
|
+
# Updates an identity attribute
|
61
|
+
#
|
62
|
+
def self.update( identity_attribute )
|
63
|
+
update_json = {
|
64
|
+
'displayName' => identity_attribute['displayName'],
|
65
|
+
'name' => identity_attribute['name'],
|
66
|
+
'multiValued' => identity_attribute['multiValued'],
|
67
|
+
'namedColumn' => identity_attribute['namedColumn'],
|
68
|
+
'searchable' => identity_attribute['searchable'],
|
69
|
+
'standard' => identity_attribute['standard'],
|
70
|
+
'system' => identity_attribute['system'],
|
71
|
+
'type' => identity_attribute['type']
|
72
|
+
}
|
73
|
+
response = IDNAPI.post_json( "#{$url}/cc/api/identityAttribute/update?name=#{identity_attribute['name']}", $token, update_json )
|
74
|
+
end
|
75
|
+
|
76
|
+
#
|
77
|
+
# Exports Identity Attribute configurations.
|
78
|
+
#
|
79
|
+
def self.export( directory )
|
80
|
+
|
81
|
+
response = IDNAPI.get( "#{$url}/cc/api/identityAttribute/list", $token )
|
82
|
+
|
83
|
+
case response
|
84
|
+
when Net::HTTPSuccess
|
85
|
+
|
86
|
+
identity_attributes = JSON.parse( response.body )
|
87
|
+
|
88
|
+
$log.info "\tRetreived identity attributes."
|
89
|
+
|
90
|
+
Program.write_file( File.join( directory, "identity-attributes"), "identity-attributes.json", JSON.pretty_generate( identity_attributes ) )
|
91
|
+
|
92
|
+
else
|
93
|
+
$log.error "\tError: Unable to fetch identity attributes."
|
94
|
+
end # case response
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
#
|
99
|
+
# Import Identity Attribute configurations.
|
100
|
+
#
|
101
|
+
def self.import( directory )
|
102
|
+
|
103
|
+
# Read configurations from the file system.
|
104
|
+
identity_attributes = Program.read_file( File.join( directory, "identity-attributes", "identity-attributes.json") )
|
105
|
+
$log.info "\tRetreived identity attributes."
|
106
|
+
|
107
|
+
unless identity_attributes.nil?
|
108
|
+
|
109
|
+
JSON.parse( identity_attributes ).each do |identity_attribute|
|
110
|
+
|
111
|
+
unless ( @@disallowed_identity_attributes.include? identity_attribute["name"] )
|
112
|
+
|
113
|
+
existing_identity_attribute = IdentityAttributes.get_by_name( identity_attribute["name"] )
|
114
|
+
|
115
|
+
if existing_identity_attribute.nil?
|
116
|
+
response = IdentityAttributes.create( identity_attribute )
|
117
|
+
else
|
118
|
+
response = IdentityAttributes.update( identity_attribute )
|
119
|
+
end
|
120
|
+
|
121
|
+
else
|
122
|
+
$log.warn "\t\tSkipping default identity attribute: #{identity_attribute["name"]}."
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
#
|
130
|
+
# Documents Identity Attribute configurations.
|
131
|
+
#
|
132
|
+
def self.doc
|
133
|
+
$log.warn "\tDocumentation for object type identity-attributes is not supported at this time."
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
@@ -0,0 +1,206 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "json"
|
3
|
+
require "idnio/idnapi"
|
4
|
+
require "idnio/program"
|
5
|
+
require "idnio/markdown"
|
6
|
+
|
7
|
+
module IdentityProfiles
|
8
|
+
|
9
|
+
#
|
10
|
+
# These are a list of attributes which are used to update.
|
11
|
+
#
|
12
|
+
@@update_attributes = [
|
13
|
+
"attributeConfig",
|
14
|
+
"authErrorText",
|
15
|
+
"autoInvitationOption",
|
16
|
+
"autoInvite",
|
17
|
+
"autoInviteLifeCycleState",
|
18
|
+
"blockOffNetwork",
|
19
|
+
"blockUntrustedGeographies",
|
20
|
+
"description",
|
21
|
+
"priority",
|
22
|
+
"pwdResetDuo",
|
23
|
+
"pwdResetKba",
|
24
|
+
"pwdResetMfaType",
|
25
|
+
"pwdResetPersonalEmailCode",
|
26
|
+
"pwdResetPersonalPhone",
|
27
|
+
"pwdResetRsa",
|
28
|
+
"pwdResetSafenet",
|
29
|
+
"pwdResetSymantecVip",
|
30
|
+
"pwdResetWorkEmailCode",
|
31
|
+
"pwdResetWorkPhone",
|
32
|
+
"strongAuthDuo",
|
33
|
+
"strongAuthKba",
|
34
|
+
"strongAuthLogin",
|
35
|
+
"strongAuthLoginOffNetwork",
|
36
|
+
"strongAuthLoginUntrustedGeographies",
|
37
|
+
"strongAuthPassword",
|
38
|
+
"strongAuthPersonalEmail",
|
39
|
+
"strongAuthPersonalPhone",
|
40
|
+
"strongAuthRsa",
|
41
|
+
"strongAuthSafenet",
|
42
|
+
"strongAuthSymantecVip",
|
43
|
+
"strongAuthWorkEmail",
|
44
|
+
"strongAuthWorkPhone"
|
45
|
+
]
|
46
|
+
|
47
|
+
#
|
48
|
+
# Query an Identity Profile configuration.
|
49
|
+
#
|
50
|
+
def self.get_by_name( name )
|
51
|
+
|
52
|
+
response = IDNAPI.get( "#{$url}/cc/api/profile/list", $token )
|
53
|
+
|
54
|
+
case response
|
55
|
+
when Net::HTTPSuccess
|
56
|
+
|
57
|
+
identity_profiles = JSON.parse( response.body )
|
58
|
+
|
59
|
+
identity_profiles.each do |identity_profile|
|
60
|
+
|
61
|
+
if( identity_profile["name"] == name )
|
62
|
+
return identity_profile
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end # case response
|
67
|
+
|
68
|
+
return nil
|
69
|
+
end
|
70
|
+
|
71
|
+
#
|
72
|
+
# Exports Identity Profile configurations.
|
73
|
+
#
|
74
|
+
def self.export( directory )
|
75
|
+
|
76
|
+
response = IDNAPI.get( "#{$url}/cc/api/profile/list", $token )
|
77
|
+
|
78
|
+
unless response.nil?
|
79
|
+
|
80
|
+
identityProfiles = JSON.parse( response.body )
|
81
|
+
|
82
|
+
$log.info "\tDetected #{identityProfiles.count} identity profiles."
|
83
|
+
|
84
|
+
identityProfiles.each do |identityProfile|
|
85
|
+
|
86
|
+
response = IDNAPI.get( "#{$url}/cc/api/profile/get/#{identityProfile["id"]}", $token )
|
87
|
+
|
88
|
+
identityProfileObject = JSON.parse( response.body )
|
89
|
+
|
90
|
+
$log.info "\tIdentity Profile: #{identityProfileObject["name"]}"
|
91
|
+
|
92
|
+
Program.write_file( "#{directory}/identity-profiles/", "Identity Profile - #{identityProfileObject["name"]}.json", JSON.pretty_generate( identityProfileObject ) )
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
#
|
99
|
+
# Imports Identity Profile configurations.
|
100
|
+
#
|
101
|
+
def self.import( directory )
|
102
|
+
|
103
|
+
# Read from the file system to determine how many identity profile configurations we have.
|
104
|
+
identity_profiles = Program.read_directory("#{directory}/identity-profiles")
|
105
|
+
$log.info "\tDetected #{identity_profiles.length} identity profiles."
|
106
|
+
|
107
|
+
#
|
108
|
+
# Iterate through each identity profile.
|
109
|
+
#
|
110
|
+
identity_profiles.each do |identity_profile|
|
111
|
+
|
112
|
+
# Get the identity profile JSON.
|
113
|
+
template_idp = JSON.parse( identity_profile )
|
114
|
+
|
115
|
+
$log.info "\tIdentity Profile: #{template_idp["name"]}"
|
116
|
+
|
117
|
+
# Get the existing identity profile.
|
118
|
+
existing_idp = IdentityProfiles.get_by_name( template_idp["name"] )
|
119
|
+
|
120
|
+
# If we don't have an existing IDP, lets create one.
|
121
|
+
if existing_idp.nil?
|
122
|
+
|
123
|
+
# Lets get our existing source.
|
124
|
+
existing_source_id = Sources.get_cc_id( template_idp['source']['name'] )
|
125
|
+
|
126
|
+
# We can't create an identity profile without an existing source, so make sure we have one.
|
127
|
+
unless existing_source_id.nil?
|
128
|
+
|
129
|
+
$log.debug "\t\tCreating identity profile..."
|
130
|
+
|
131
|
+
create_params = {
|
132
|
+
"name" => template_idp['name'],
|
133
|
+
"sourceId" => existing_source_id
|
134
|
+
}
|
135
|
+
response = IDNAPI.post_form( "#{$url}/cc/api/profile/create", $token, create_params )
|
136
|
+
|
137
|
+
unless response.nil?
|
138
|
+
existing_idp = IdentityProfiles.get_by_name( template_idp['name'] )
|
139
|
+
$log.debug "done.\n"
|
140
|
+
end
|
141
|
+
else
|
142
|
+
$log.warn "\t\tSkipping identity profile creation. Source [#{template_idp['source']['name']}] does not exist.\n"
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
|
147
|
+
# Now that we have an IDP, lets update it.
|
148
|
+
unless existing_idp.nil?
|
149
|
+
|
150
|
+
#
|
151
|
+
# Do some clean-up on attribute references... sigh.
|
152
|
+
#
|
153
|
+
template_idp["attributeConfig"]["attributeTransforms"].each do |attributeTransform|
|
154
|
+
unless attributeTransform.nil? || ["attributes"].nil?
|
155
|
+
attributeTransform["attributes"].delete( "applicationId" )
|
156
|
+
attributeTransform["attributes"].delete( "applicationName" )
|
157
|
+
|
158
|
+
unless attributeTransform["attributes"]["input"].nil?
|
159
|
+
attributeTransform["attributes"]["input"]["attributes"].delete( "applicationId" )
|
160
|
+
attributeTransform["attributes"]["input"]["attributes"].delete( "applicationName" )
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
#
|
166
|
+
# Copy over certain settings from the template.
|
167
|
+
#
|
168
|
+
@@update_attributes.each do |update_attribute|
|
169
|
+
existing_idp[update_attribute] = template_idp[update_attribute]
|
170
|
+
end
|
171
|
+
|
172
|
+
$log.debug "\t\tUpdating identity profile..."
|
173
|
+
IDNAPI.post_json( "#{$url}/cc/api/profile/update/#{existing_idp["id"]}", $token, existing_idp )
|
174
|
+
$log.debug "done.\n"
|
175
|
+
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
#
|
182
|
+
# Documents Identity Profile configurations.
|
183
|
+
#
|
184
|
+
def self.doc
|
185
|
+
Markdown.h2( "Identity Profiles" )
|
186
|
+
|
187
|
+
response = IDNAPI.get( "#{$url}/cc/api/profile/list", $token )
|
188
|
+
unless response.nil?
|
189
|
+
identityProfiles = JSON.parse( response.body )
|
190
|
+
|
191
|
+
$log.info "\tDetected #{identityProfiles.count} identity profiles."
|
192
|
+
|
193
|
+
identityProfiles.each do |identityProfile|
|
194
|
+
|
195
|
+
response = IDNAPI.get( "#{$url}/cc/api/profile/get/#{identityProfile["id"]}", $token )
|
196
|
+
|
197
|
+
identityProfile_object = JSON.parse( response.body )
|
198
|
+
|
199
|
+
$log.info "\tIdentity Profile: #{identityProfile_object["name"]}"
|
200
|
+
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
Markdown.write
|
205
|
+
end
|
206
|
+
end
|