chook 1.0.0.b1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +174 -0
- data/README.md +259 -0
- data/bin/chook-server +28 -0
- data/data/sample_handlers/RestAPIOperation-executable +91 -0
- data/data/sample_handlers/RestAPIOperation.rb +45 -0
- data/data/sample_handlers/SmartGroupComputerMembershipChange-executable +47 -0
- data/data/sample_handlers/SmartGroupComputerMembershipChange.rb +33 -0
- data/data/sample_jsons/ComputerAdded.json +27 -0
- data/data/sample_jsons/ComputerCheckIn.json +27 -0
- data/data/sample_jsons/ComputerInventoryCompleted.json +27 -0
- data/data/sample_jsons/ComputerPolicyFinished.json +27 -0
- data/data/sample_jsons/ComputerPushCapabilityChanged.json +27 -0
- data/data/sample_jsons/JSSShutdown.json +14 -0
- data/data/sample_jsons/JSSStartup.json +14 -0
- data/data/sample_jsons/MobileDeviceCheckIn.json +26 -0
- data/data/sample_jsons/MobileDeviceCommandCompleted.json +26 -0
- data/data/sample_jsons/MobileDeviceEnrolled.json +26 -0
- data/data/sample_jsons/MobileDevicePushSent.json +26 -0
- data/data/sample_jsons/MobileDeviceUnEnrolled.json +26 -0
- data/data/sample_jsons/PatchSoftwareTitleUpdated.json +14 -0
- data/data/sample_jsons/PushSent.json +11 -0
- data/data/sample_jsons/README +4 -0
- data/data/sample_jsons/RestAPIOperation.json +15 -0
- data/data/sample_jsons/SCEPChallenge.json +10 -0
- data/data/sample_jsons/SmartGroupComputerMembershipChange.json +13 -0
- data/data/sample_jsons/SmartGroupMobileDeviceMembershipChange.json +13 -0
- data/lib/chook.rb +38 -0
- data/lib/chook/configuration.rb +198 -0
- data/lib/chook/event.rb +153 -0
- data/lib/chook/event/handled_event.rb +154 -0
- data/lib/chook/event/handled_event/handlers.rb +206 -0
- data/lib/chook/event/test_event.rb +140 -0
- data/lib/chook/event_handling.rb +40 -0
- data/lib/chook/event_testing.rb +43 -0
- data/lib/chook/foundation.rb +33 -0
- data/lib/chook/handled_events.rb +33 -0
- data/lib/chook/handled_subjects.rb +33 -0
- data/lib/chook/procs.rb +46 -0
- data/lib/chook/server.rb +121 -0
- data/lib/chook/server/routes.rb +27 -0
- data/lib/chook/server/routes/handle_webhook_event.rb +39 -0
- data/lib/chook/server/routes/home.rb +37 -0
- data/lib/chook/subject.rb +143 -0
- data/lib/chook/subject/computer.rb +121 -0
- data/lib/chook/subject/handled_subject.rb +84 -0
- data/lib/chook/subject/jss.rb +56 -0
- data/lib/chook/subject/mobile_device.rb +115 -0
- data/lib/chook/subject/patch_software_title_update.rb +55 -0
- data/lib/chook/subject/push.rb +38 -0
- data/lib/chook/subject/randomizers.rb +506 -0
- data/lib/chook/subject/rest_api_operation.rb +62 -0
- data/lib/chook/subject/samplers.rb +360 -0
- data/lib/chook/subject/scep_challenge.rb +32 -0
- data/lib/chook/subject/smart_group.rb +50 -0
- data/lib/chook/subject/test_subject.rb +195 -0
- data/lib/chook/subject/validators.rb +117 -0
- data/lib/chook/test_events.rb +33 -0
- data/lib/chook/test_subjects.rb +33 -0
- data/lib/chook/version.rb +32 -0
- metadata +129 -0
@@ -0,0 +1,62 @@
|
|
1
|
+
### Copyright 2017 Pixar
|
2
|
+
|
3
|
+
###
|
4
|
+
### Licensed under the Apache License, Version 2.0 (the "Apache License")
|
5
|
+
### with the following modification; you may not use this file except in
|
6
|
+
### compliance with the Apache License and the following modification to it:
|
7
|
+
### Section 6. Trademarks. is deleted and replaced with:
|
8
|
+
###
|
9
|
+
### 6. Trademarks. This License does not grant permission to use the trade
|
10
|
+
### names, trademarks, service marks, or product names of the Licensor
|
11
|
+
### and its affiliates, except as required to comply with Section 4(c) of
|
12
|
+
### the License and to reproduce the content of the NOTICE file.
|
13
|
+
###
|
14
|
+
### You may obtain a copy of the Apache License at
|
15
|
+
###
|
16
|
+
### http://www.apache.org/licenses/LICENSE-2.0
|
17
|
+
###
|
18
|
+
### Unless required by applicable law or agreed to in writing, software
|
19
|
+
### distributed under the Apache License with the above modification is
|
20
|
+
### distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
21
|
+
### KIND, either express or implied. See the Apache License for the specific
|
22
|
+
### language governing permissions and limitations under the Apache License.
|
23
|
+
###
|
24
|
+
###
|
25
|
+
Chook::Subject.classes[Chook::Subject::REST_API_OPERATION] = {
|
26
|
+
operationSuccessful: {
|
27
|
+
validation: :boolean,
|
28
|
+
randomizer: :bool
|
29
|
+
# sampler: ,
|
30
|
+
# api_object_attribute: :operationSuccessful
|
31
|
+
},
|
32
|
+
objectID: {
|
33
|
+
validation: Integer,
|
34
|
+
randomizer: :int,
|
35
|
+
# sampler: ,
|
36
|
+
# api_object_attribute: :objectID
|
37
|
+
},
|
38
|
+
objectName: { # This can be "" if the object doesn't have a name attribute.
|
39
|
+
validation: String,
|
40
|
+
randomizer: :word,
|
41
|
+
# sampler: ,
|
42
|
+
# api_object_attribute: :objectName
|
43
|
+
},
|
44
|
+
objectTypeName: {
|
45
|
+
validation: String,
|
46
|
+
randomizer: :word,
|
47
|
+
# sampler: ,
|
48
|
+
# api_object_attribute: :objectTypeName
|
49
|
+
},
|
50
|
+
authorizedUsername: {
|
51
|
+
validation: String,
|
52
|
+
randomizer: :word,
|
53
|
+
# sampler: :username,
|
54
|
+
# api_object_attribute: :authorizedUsername
|
55
|
+
},
|
56
|
+
restAPIOperationType: {
|
57
|
+
validation: String,
|
58
|
+
randomizer: :rest_operation,
|
59
|
+
# sampler: ,
|
60
|
+
# api_object_attribute: :restAPIOperationType
|
61
|
+
}
|
62
|
+
}
|
@@ -0,0 +1,360 @@
|
|
1
|
+
require 'jss'
|
2
|
+
|
3
|
+
module Chook
|
4
|
+
|
5
|
+
# A namespace for holding Constants and methods for
|
6
|
+
# pulling sample data from a JSS for use with Test events and test subjects
|
7
|
+
module Samplers
|
8
|
+
|
9
|
+
# Institution Sampler
|
10
|
+
#
|
11
|
+
# @param [JSS::APIConnection] API Connection object
|
12
|
+
# @return [String] The name of the JSS's Organization Name
|
13
|
+
#
|
14
|
+
def self.institution(api: JSS.api)
|
15
|
+
api.get_rsrc('activationcode')[:activation_code][:organization_name]
|
16
|
+
end # end institution
|
17
|
+
|
18
|
+
# Serial Number
|
19
|
+
#
|
20
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
21
|
+
# @return [Type] Sampled Computer or Mobile Device Serial Number
|
22
|
+
#
|
23
|
+
def self.serial_number(device_object)
|
24
|
+
device_object.serial_number
|
25
|
+
end # end serial_number
|
26
|
+
|
27
|
+
# MAC Address Sampler
|
28
|
+
#
|
29
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
30
|
+
# @return [String] A MAC Address sampled from a MobileDevice or Computer in the JSS
|
31
|
+
#
|
32
|
+
def self.mac_address(device_object)
|
33
|
+
if device_object.is_a? JSS::Computer
|
34
|
+
device_object.mac_address
|
35
|
+
else
|
36
|
+
device_object.wifi_mac_address
|
37
|
+
end
|
38
|
+
end # end mac_address
|
39
|
+
|
40
|
+
# UDID Sampler
|
41
|
+
#
|
42
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
43
|
+
# @return [String] A UDID sampled from a MobileDevice or Computer in the JSS
|
44
|
+
#
|
45
|
+
def self.udid(device_object)
|
46
|
+
if device_object.is_a? JSS::Computer
|
47
|
+
device_object.udid
|
48
|
+
else
|
49
|
+
device_object.uuid
|
50
|
+
end
|
51
|
+
end # end udid
|
52
|
+
|
53
|
+
# IMEI Sampler
|
54
|
+
#
|
55
|
+
# @param [JSS:MobileDevice] device_object JSS Mobile Device Object
|
56
|
+
# @return [String] An IMEI sampled from a MobileDevice in the JSS
|
57
|
+
#
|
58
|
+
def self.imei(mobile_device_object)
|
59
|
+
mobile_device_object.network[:imei]
|
60
|
+
end # end imei
|
61
|
+
|
62
|
+
# ICCID Sampler
|
63
|
+
#
|
64
|
+
# @param [JSS:MobileDevice] device_object JSS Mobile Device Object
|
65
|
+
# @return [String] An ICCID sampled from a MobileDevice in the JSS
|
66
|
+
#
|
67
|
+
def self.iccid(mobile_device_object)
|
68
|
+
mobile_device_object.network[:iccid]
|
69
|
+
end # end iccid
|
70
|
+
|
71
|
+
# Version
|
72
|
+
#
|
73
|
+
# @param [JSS::APIConnection] API Connection object
|
74
|
+
# @return [String] Carrier Version String
|
75
|
+
#
|
76
|
+
def self.version(mobile_device_object)
|
77
|
+
mobile_device_object.network[:carrier_settings_version]
|
78
|
+
end # end version
|
79
|
+
|
80
|
+
# Product
|
81
|
+
# is always nil in the sample JSONs... And there isn't anything labeled "product" in api.get_rsrc("mobiledevices/id/#{id}")
|
82
|
+
#
|
83
|
+
# @return [NilClass] nil
|
84
|
+
#
|
85
|
+
def self.product
|
86
|
+
nil
|
87
|
+
end # end product
|
88
|
+
|
89
|
+
# Model Display
|
90
|
+
# @param [JSS:MobileDevice] device_object JSS Mobile Device Object
|
91
|
+
# @return [String] Mobile Device Model String
|
92
|
+
#
|
93
|
+
def self.model_display(mobile_device_object)
|
94
|
+
mobile_device_object.model_display
|
95
|
+
end # end model_display
|
96
|
+
|
97
|
+
# JSS ID Sampler
|
98
|
+
#
|
99
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
100
|
+
# @return [Integer] A JSS ID sampled from a MobileDevice or Computer in the JSS
|
101
|
+
#
|
102
|
+
def self.jssid(device_object)
|
103
|
+
device_object.id
|
104
|
+
end # end jssid
|
105
|
+
|
106
|
+
# OS Build Sampler
|
107
|
+
#
|
108
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
109
|
+
# @return [String] Operating System Build from a MobileDevice or Computer in the JSS
|
110
|
+
#
|
111
|
+
def self.os_build(device_object)
|
112
|
+
if device_object.is_a? JSS::Computer
|
113
|
+
device_object.hardware[:os_build]
|
114
|
+
else
|
115
|
+
device_object.os_build
|
116
|
+
end
|
117
|
+
end # end os_build
|
118
|
+
|
119
|
+
# OS Version Sampler
|
120
|
+
#
|
121
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
122
|
+
# @return [String] Operating System Version from a MobileDevice or Computer in the JSS
|
123
|
+
#
|
124
|
+
def self.os_version(device_object)
|
125
|
+
if device_object.is_a? JSS::Computer
|
126
|
+
device_object.hardware[:os_version]
|
127
|
+
else
|
128
|
+
device_object.os_version
|
129
|
+
end
|
130
|
+
end # end os_version
|
131
|
+
|
132
|
+
# Device Name Sampler
|
133
|
+
#
|
134
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
135
|
+
# @return [String] A name sampled from a MobileDevice or Computer in the JSS
|
136
|
+
#
|
137
|
+
def self.device_name(device_object)
|
138
|
+
device_object.name
|
139
|
+
end # end device_name
|
140
|
+
|
141
|
+
# Model Sampler
|
142
|
+
#
|
143
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
144
|
+
# @return [String] A model sampled from a MobileDevice or Computer in the JSS
|
145
|
+
#
|
146
|
+
def self.model(device_object)
|
147
|
+
if device_object.is_a? JSS::Computer
|
148
|
+
device_object.hardware[:model]
|
149
|
+
else
|
150
|
+
device_object.model
|
151
|
+
end
|
152
|
+
end # end model
|
153
|
+
|
154
|
+
# Username Sampler
|
155
|
+
#
|
156
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
157
|
+
# @return [String] A username sampled from a MobileDevice or Computer in the JSS
|
158
|
+
#
|
159
|
+
def self.username(device_object)
|
160
|
+
device_object.username
|
161
|
+
end # end username
|
162
|
+
|
163
|
+
# User Directory ID Sampler
|
164
|
+
#
|
165
|
+
# @param [JSS::Computer] computer_object JSS Computer Object
|
166
|
+
# @return [Integer] A randomly sampled uid from a Computer in the JSS
|
167
|
+
#
|
168
|
+
def self.user_directory_id(computer_object)
|
169
|
+
an_account = computer_object.groups_accounts[:local_accounts].sample
|
170
|
+
return '-1' if an_account.empty?
|
171
|
+
an_account[:uid]
|
172
|
+
end # end user_directory_id
|
173
|
+
|
174
|
+
# Real Name Sampler
|
175
|
+
#
|
176
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
177
|
+
# @return [String] A real name from a Computer or MobileDevice in the JSS
|
178
|
+
#
|
179
|
+
def self.real_name(device_object)
|
180
|
+
device_object.real_name
|
181
|
+
end # end real_name
|
182
|
+
|
183
|
+
# Email Address Sampler
|
184
|
+
#
|
185
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
186
|
+
# @return [String] An email address from a Computer or MobileDevice in the JSS
|
187
|
+
#
|
188
|
+
def self.email_address(device_object)
|
189
|
+
device_object.email_address
|
190
|
+
end # end email_address
|
191
|
+
|
192
|
+
# Phone Sampler
|
193
|
+
#
|
194
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
195
|
+
# @return [String] A phone number from a Computer or MobileDevice in the JSS
|
196
|
+
#
|
197
|
+
def self.phone(device_object)
|
198
|
+
device_object.phone
|
199
|
+
end # end phone
|
200
|
+
|
201
|
+
# Position Sampler
|
202
|
+
#
|
203
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
204
|
+
# @return [String] A position from a Computer or MobileDevice in the JSS
|
205
|
+
#
|
206
|
+
def self.position(device_object)
|
207
|
+
device_object.position
|
208
|
+
end # end position
|
209
|
+
|
210
|
+
# Department Sampler
|
211
|
+
#
|
212
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
213
|
+
# @return [String] A department from a Computer or MobileDevice in the JSS
|
214
|
+
#
|
215
|
+
def self.department(device_object)
|
216
|
+
device_object.department
|
217
|
+
end # end department
|
218
|
+
|
219
|
+
# Building Sampler
|
220
|
+
#
|
221
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
222
|
+
# @return [String] A building from a Computer or MobileDevice in the JSS
|
223
|
+
#
|
224
|
+
def self.building(device_object)
|
225
|
+
if device_object.is_a? JSS::Computer
|
226
|
+
device_object.building
|
227
|
+
else
|
228
|
+
device_object.location[:building]
|
229
|
+
end
|
230
|
+
end # end building
|
231
|
+
|
232
|
+
# Room Sampler
|
233
|
+
#
|
234
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
235
|
+
# @return [String] A room from a Computer or MobileDevice in the JSS
|
236
|
+
#
|
237
|
+
def self.room(device_object)
|
238
|
+
device_object.room
|
239
|
+
end # end room
|
240
|
+
|
241
|
+
#### SmartGroup
|
242
|
+
|
243
|
+
# Smart Group Sampler
|
244
|
+
#
|
245
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
246
|
+
# @return [String] A Smart Group name from the JSS
|
247
|
+
#
|
248
|
+
# def self.smart_group(device_object)
|
249
|
+
# if device_object.is_a? JSS::Computer
|
250
|
+
# device_object.smart_groups[:smart_groups].sample[:name]
|
251
|
+
# elsif device_object.is_a? JSS::MobileDevice
|
252
|
+
# device_object.mobile_device_groups.sample[:name]
|
253
|
+
# else
|
254
|
+
# ''
|
255
|
+
# end # if device_object.is_a? JSS::Computer
|
256
|
+
# end # end smart_group
|
257
|
+
|
258
|
+
# Smart Group ID Sampler
|
259
|
+
#
|
260
|
+
# @param [JSS:MobileDevice or JSS::Computer] device_object JSS Mobile Device or Computer Object
|
261
|
+
# @return [Integer] The ID # of a MobileDevice or Computer Smart Group from JSS
|
262
|
+
#
|
263
|
+
# def self.smart_group_jssid(device_object)
|
264
|
+
# if device_object.is_a? JSS::Computer
|
265
|
+
# device_object.smart_groups[:smart_groups].sample[:id]
|
266
|
+
# elsif device_object.is_a? JSS::MobileDevice
|
267
|
+
# device_object.mobile_device_groups.sample[:id]
|
268
|
+
# else
|
269
|
+
# 0
|
270
|
+
# end # if device_object.is_a? JSS::Computer
|
271
|
+
# end # end group_jssid
|
272
|
+
|
273
|
+
def self.smart_group_type(device_object)
|
274
|
+
if device_object.is_a? JSS::Computer
|
275
|
+
true
|
276
|
+
elsif device_object.is_a? JSS::MobileDevice
|
277
|
+
false
|
278
|
+
end # if device_object.is_a? JSS::Computer
|
279
|
+
end
|
280
|
+
|
281
|
+
# Any Smart Group ID (wrapper)
|
282
|
+
#
|
283
|
+
# @return [Integer] The ID # of a MobileDevice or Computer Smart Group from JSS
|
284
|
+
#
|
285
|
+
# def self.any_smart_group_jssid
|
286
|
+
# [computer_smart_group_jssid, mobile_smart_group_jssid].sample
|
287
|
+
# end # end any_smart_group_id
|
288
|
+
|
289
|
+
#### PatchSoftwareTitleUpdated
|
290
|
+
|
291
|
+
# Patch ID Sampler
|
292
|
+
#
|
293
|
+
# @param [JSS::APIConnection] API Connection object
|
294
|
+
# @return [Integer] An enabled Patch Reporting Software ID from the JSS
|
295
|
+
#
|
296
|
+
def self.patch_id(_patch_hash, api: JSS.api)
|
297
|
+
all_patch_ids(api).sample.to_i
|
298
|
+
end # end patch_id
|
299
|
+
|
300
|
+
# All Patch IDs
|
301
|
+
#
|
302
|
+
# @param [JSS::APIConnection] API Connection object
|
303
|
+
# @return [Array<Integer>] An Array of enabled Patch Reporting Software IDs from the JSS
|
304
|
+
#
|
305
|
+
def self.all_patch_ids(_patch_hash, api: JSS.api)
|
306
|
+
all_patches = api.get_rsrc('patches')[:patch_reporting_software_titles]
|
307
|
+
all_ids = []
|
308
|
+
all_patches.each { |patch| all_ids << patch[:id] }
|
309
|
+
raise 'No Patch Reporting Software Titles found' if all_ids.empty?
|
310
|
+
all_ids
|
311
|
+
end # end all_patch_ids
|
312
|
+
|
313
|
+
# Patch Last Update Sampler
|
314
|
+
#
|
315
|
+
# @return [Time] A Time for a Patch, since they can't be sampled via the API.
|
316
|
+
#
|
317
|
+
def self.patch_last_update(_patch_hash)
|
318
|
+
Time.now
|
319
|
+
end # end patch_last_update
|
320
|
+
|
321
|
+
# Patch Report URL
|
322
|
+
#
|
323
|
+
# @param [JSS::APIConnection] API Connection object
|
324
|
+
# @return [String] description of returned object
|
325
|
+
#
|
326
|
+
def self.patch_report_url(_patch_hash, api: JSS.api)
|
327
|
+
api.rest_url.chomp('/JSSResource')
|
328
|
+
end # end patch_report_url
|
329
|
+
|
330
|
+
# All Patches
|
331
|
+
#
|
332
|
+
# @param [JSS::APIConnection] API Connection object
|
333
|
+
# @return [Array<Hash>] Array of Hashes containing ids and names of enabled Patches
|
334
|
+
#
|
335
|
+
def self.all_patches(api: JSS.api)
|
336
|
+
api.get_rsrc('patches')[:patch_reporting_software_titles]
|
337
|
+
end # end all_patches
|
338
|
+
|
339
|
+
# Patch Name Sampler
|
340
|
+
#
|
341
|
+
# @param [Hash] raw_patch Hash of output from API query like get_rsrc("patches/id/#{id}")
|
342
|
+
# @return [String] A Patch Reporting Software Title Name
|
343
|
+
#
|
344
|
+
def self.patch_name(raw_patch) # , api: JSS.api)
|
345
|
+
raw_patch[:software_title][:name]
|
346
|
+
end # end patch_name
|
347
|
+
|
348
|
+
# Patch Latest Version
|
349
|
+
#
|
350
|
+
# @param [Hash] raw_patch Hash of output from API query like get_rsrc("patches/id/#{id}")
|
351
|
+
# @return [String] The lastest version of a patch software title
|
352
|
+
#
|
353
|
+
def self.patch_latest_version(raw_patch, api: JSS.api)
|
354
|
+
patch = api.get_rsrc("patches/id/#{raw_patch[:id]}")
|
355
|
+
patch[:software_title][:versions].select { |i| i.is_a? String }.first
|
356
|
+
end # end patch_latest_version
|
357
|
+
|
358
|
+
end # module samplers
|
359
|
+
|
360
|
+
end # module Chook
|
@@ -0,0 +1,32 @@
|
|
1
|
+
### Copyright 2017 Pixar
|
2
|
+
|
3
|
+
###
|
4
|
+
### Licensed under the Apache License, Version 2.0 (the "Apache License")
|
5
|
+
### with the following modification; you may not use this file except in
|
6
|
+
### compliance with the Apache License and the following modification to it:
|
7
|
+
### Section 6. Trademarks. is deleted and replaced with:
|
8
|
+
###
|
9
|
+
### 6. Trademarks. This License does not grant permission to use the trade
|
10
|
+
### names, trademarks, service marks, or product names of the Licensor
|
11
|
+
### and its affiliates, except as required to comply with Section 4(c) of
|
12
|
+
### the License and to reproduce the content of the NOTICE file.
|
13
|
+
###
|
14
|
+
### You may obtain a copy of the Apache License at
|
15
|
+
###
|
16
|
+
### http://www.apache.org/licenses/LICENSE-2.0
|
17
|
+
###
|
18
|
+
### Unless required by applicable law or agreed to in writing, software
|
19
|
+
### distributed under the Apache License with the above modification is
|
20
|
+
### distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
21
|
+
### KIND, either express or implied. See the Apache License for the specific
|
22
|
+
### language governing permissions and limitations under the Apache License.
|
23
|
+
###
|
24
|
+
###
|
25
|
+
Chook::Subject.classes[Chook::Subject::SCEP_CHALLENGE] = {
|
26
|
+
targetDevice: {
|
27
|
+
# validation: ,
|
28
|
+
# randomizer: ,
|
29
|
+
# sampler: ,
|
30
|
+
# api_object_attribute:
|
31
|
+
}
|
32
|
+
}
|