ruby-jss 1.2.10 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ruby-jss might be problematic. Click here for more details.

Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +92 -1
  3. data/lib/jamf/api/abstract_classes/json_object.rb +1 -1
  4. data/lib/jamf/api/abstract_classes/prestage.rb +1 -1
  5. data/lib/jamf/api/connection.rb +7 -3
  6. data/lib/jamf/configuration.rb +7 -9
  7. data/lib/jamf/ruby_extensions.rb +1 -0
  8. data/lib/jamf/ruby_extensions/array.rb +1 -1
  9. data/lib/jamf/ruby_extensions/array/utils.rb +3 -3
  10. data/lib/jamf/ruby_extensions/dig.rb +52 -0
  11. data/lib/jss.rb +2 -0
  12. data/lib/jss/api_connection.rb +2 -29
  13. data/lib/jss/api_object.rb +15 -2
  14. data/lib/jss/api_object/directory_binding.rb +273 -0
  15. data/lib/jss/api_object/directory_binding_type.rb +90 -0
  16. data/lib/jss/api_object/directory_binding_type/active_directory.rb +502 -0
  17. data/lib/jss/api_object/directory_binding_type/admitmac.rb +525 -0
  18. data/lib/jss/api_object/directory_binding_type/centrify.rb +212 -0
  19. data/lib/jss/api_object/directory_binding_type/open_directory.rb +178 -0
  20. data/lib/jss/api_object/directory_binding_type/powerbroker_identity_services.rb +73 -0
  21. data/lib/jss/api_object/disk_encryption_configurations.rb +114 -0
  22. data/lib/jss/api_object/distribution_point.rb +95 -35
  23. data/lib/jss/api_object/dock_item.rb +137 -0
  24. data/lib/jss/api_object/mobile_device_application.rb +12 -0
  25. data/lib/jss/api_object/network_segment.rb +152 -58
  26. data/lib/jss/api_object/package.rb +106 -41
  27. data/lib/jss/api_object/policy.rb +379 -4
  28. data/lib/jss/api_object/printer.rb +440 -0
  29. data/lib/jss/api_object/scopable/scope.rb +24 -24
  30. data/lib/jss/composer.rb +1 -1
  31. data/lib/jss/utility.rb +8 -22
  32. data/lib/jss/version.rb +1 -1
  33. metadata +13 -2
@@ -0,0 +1,525 @@
1
+ ### Copyright 2019 Rixar
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
+
26
+ module JSS
27
+
28
+ # Module for containing the different types of DirectoryBindings stored within the JSS
29
+
30
+ module DirectoryBindingType
31
+
32
+ # Module Variables
33
+ #####################################
34
+
35
+ # Module Methods
36
+ #####################################
37
+
38
+ # Classes
39
+ #####################################
40
+
41
+ # Class for the specific ADmitMac DirectoryBinding type stored within the JSS
42
+ #
43
+ # @author Tyler Morgan
44
+ #
45
+ # @note "Map Home Directory To Attribute" is currently only available in the Jamf Pro UI not through the API.
46
+ #
47
+ # Attributes
48
+ # @!attribute [rw] require_confirmation
49
+ # @!attribute [rw] local_home
50
+ # @!attribute [rw] mount_style
51
+ # @!attribute [rw] default_shell
52
+ # @!attribute [rw] mount_network_home
53
+ # @!attribute [rw] place_home_folders
54
+ # @!attribute [rw] uid
55
+ # @!attribute [rw] user_gid
56
+ # @!attribute [rw] gid
57
+ # @!attribute [rw] admin_group
58
+ # @!attribute [rw] cached_credentials
59
+ # @!attribute [rw] add_user_to_local
60
+ # @!attribute [rw] users_ou
61
+ # @!attribute [rw] groups_ou
62
+ # @!attribute [rw] printers_ou
63
+ # @!attribute [rw] shared_folders_ou
64
+ # TODO: Include default values upon creation
65
+
66
+ class ADmitMac < DirectoryBindingType
67
+ # Mix-Ins
68
+ #####################################
69
+
70
+ # Class Methods
71
+ #####################################
72
+
73
+ # Class Constants
74
+ #####################################
75
+
76
+ # Attributes
77
+ #####################################
78
+
79
+ attr_reader :require_confirmation
80
+ attr_reader :local_home
81
+ attr_reader :mount_style
82
+ attr_reader :default_shell
83
+ attr_reader :mount_network_home
84
+ attr_reader :place_home_folders
85
+ attr_reader :uid
86
+ attr_reader :user_gid
87
+ attr_reader :gid
88
+ attr_reader :admin_group
89
+ attr_reader :cached_credentials
90
+ attr_reader :add_user_to_local
91
+ attr_reader :users_ou
92
+ attr_reader :groups_ou
93
+ attr_reader :printers_ou
94
+ attr_reader :shared_folders_ou
95
+
96
+ # Constructor
97
+ #####################################
98
+
99
+ # An initializer for the ADmitMac object.
100
+ #
101
+ # @author Tyler Morgan
102
+ # @see JSS::DirectoryBinding
103
+ # @see JSS::DirectoryBindingType
104
+ #
105
+ # @note Due to a JSS API funk, mount_style is not able to be configured through the API. It is linked to place_home_folders
106
+ #
107
+ # @param [Hash] initialize data
108
+ def initialize(init_data)
109
+
110
+ # Return without processing anything since there is
111
+ # nothing to process.
112
+ return if init_data.nil?
113
+
114
+ # Process the provided information
115
+ @require_confirmation = init_data[:require_confirmation]
116
+ @default_shell = init_data[:default_shell]
117
+ @mount_network_home = init_data[:mount_network_home]
118
+ @place_home_folders = init_data[:place_home_folders]
119
+ @uid = init_data[:uid]
120
+ @user_gid = init_data[:user_gid]
121
+ @gid = init_data[:gid]
122
+ @cached_credentials = init_data[:cached_credentials]
123
+ @add_user_to_local = init_data[:add_user_to_local]
124
+ @users_ou = init_data[:users_ou]
125
+ @groups_ou = init_data[:groups_ou]
126
+ @printers_ou = init_data[:printers_ou]
127
+ @shared_folders_ou = init_data[:shared_folders_ou]
128
+ @mount_style = init_data[:mount_style]
129
+
130
+ if init_data[:local_home].nil? || init_data[:local_home].is_a?(String)
131
+ raise JSS::InvalidDataError, "Local Home must be one of #{HOME_FOLDER_TYPE.values.join(', ')}." unless HOME_FOLDER_TYPE.values.include? init_data[:local_home] || init_data[:local_home].nil?
132
+
133
+ @local_home = init_data[:local_home]
134
+ else
135
+ raise JSS::InvalidDataError, "Local Home must be one of :#{HOME_FOLDER_TYPE.keys.join(',:')}." unless HOME_FOLDER_TYPE.keys.include? init_data[:local_home]
136
+ end
137
+
138
+ if init_data[:admin_group].nil?
139
+ # This is needed since we have the ability to add and
140
+ # remove admin groups from this array.
141
+ @admin_group = []
142
+ elsif init_data[:admin_group].is_a? String
143
+ @admin_group = init_data[:admin_group].split(',')
144
+ else
145
+ @admin_group = init_data[:admin_group]
146
+ end
147
+ end
148
+
149
+
150
+
151
+ # Public Instance Methods
152
+ #####################################
153
+
154
+ # Require confirmation before creating a mobile account on the system.
155
+ #
156
+ # @author Tyler Morgan
157
+ #
158
+ # @param newvalue [Bool]
159
+ #
160
+ # @raise [JSS::InvalidDataError] If the new value doesn't match a Bool value
161
+ #
162
+ # @return [void]
163
+ def require_confirmation=(newvalue)
164
+
165
+ raise JSS::InvalidDataError, "require_confirmation must be true or false." unless newvalue.is_a? Bool
166
+
167
+ @require_confirmation = newvalue
168
+
169
+ self.container&.should_update
170
+ end
171
+
172
+
173
+ # The type of home directory type created upon logging into a system
174
+ #
175
+ # @author Tyler Morgan
176
+ #
177
+ # @param newvalue [Symbol] The key specific to the folder type you want in HOME_FOLDER_TYPE
178
+ # @see JSS::DirectoryBindingType::HOME_FOLDER_TYPE
179
+ #
180
+ # @raise [JSS::InvalidDataError] If the new value is not one of the possible keys in HOME_FOLDER_TYPE
181
+ #
182
+ # @return [void]
183
+ def local_home=(newvalue)
184
+
185
+ raise JSS::InvalidDataError, "local_home must be one of :#{HOME_FOLDER_TYPE.keys.join(',:')}." unless HOME_FOLDER_TYPE.keys.include? newvalue
186
+
187
+ @local_home = HOME_FOLDER_TYPE[newvalue]
188
+
189
+ self.container&.should_update
190
+ end
191
+
192
+ # The default shell assigned first upon logging into a system
193
+ #
194
+ # @author Tyler Morgan
195
+ #
196
+ # @param newvalue [String] The string path of the shell file being set as the default
197
+ #
198
+ # @raise [JSS::InvalidDataError] If the new value is not a String
199
+ #
200
+ # @return [void]
201
+ def default_shell=(newvalue)
202
+
203
+ raise JSS::InvalidDataError, "default_shell must be empty or a string." unless newvalue.is_a?(String)
204
+
205
+ @default_shell = newvalue
206
+
207
+ self.container&.should_update
208
+ end
209
+
210
+
211
+ # Mount network home folder on desktop
212
+ #
213
+ # @author Tyler Morgan
214
+ #
215
+ # @param newvalue [Bool]
216
+ #
217
+ # @raise [JSS::InvalidDataError] If the new value is not a Bool
218
+ #
219
+ # @return [void]
220
+ def mount_network_home=(newvalue)
221
+
222
+ raise JSS::InvalidDataError, "mount_network_home must be true or false." unless newvalue.is_a? Bool
223
+
224
+ @mount_network_home = newvalue
225
+
226
+ self.container&.should_update
227
+ end
228
+
229
+ # Path at which home folders are placed
230
+ #
231
+ # @author Tyler Morgan
232
+ #
233
+ # @param newvalue [String] The string path of the folder which user's directory files and folders will be created
234
+ #
235
+ # @raise [JSS::InvalidDataError] If the new value is not a String
236
+ #
237
+ # @return [void]
238
+ def place_home_folders=(newvalue)
239
+
240
+ raise JSS::InvalidDataError, "place_home_folders must be a string." unless newvalue.is_a? String
241
+
242
+ @place_home_folders = newvalue
243
+
244
+ self.container&.should_update
245
+ end
246
+
247
+ # Jamf has these linked for some reason...
248
+ alias mount_style place_home_folders
249
+
250
+
251
+ # Map specific UID to Attribute
252
+ #
253
+ # @author Tyler Morgan
254
+ #
255
+ # @param newvalue [String] The UID you want to be mapped
256
+ #
257
+ # @raise [JSS::InvalidDataError] If the new value is not a String
258
+ #
259
+ # @return [void]
260
+ def uid=(newvalue)
261
+
262
+ raise JSS::InvalidDataError, "uid must be a string, integer, or nil." unless newvalue.is_a?(String) || newvalue.is_a?(Integer) || newvalue.nil?
263
+
264
+ @uid = newvalue
265
+
266
+ self.container&.should_update
267
+ end
268
+
269
+
270
+ # Map specific a User's GID to Attribute
271
+ #
272
+ # @author Tyler Morgan
273
+ #
274
+ # @param newvalue [String] The User's GID you want to be mapped
275
+ #
276
+ # @raise [JSS::InvalidDataError] If the new value is not a String
277
+ #
278
+ # @return [void]
279
+ def user_gid=(newvalue)
280
+
281
+ raise JSS::InvalidDataError, "user_gid must be a string, integer, or nil." unless newvalue.is_a?(String) || newvalue.is_a?(Integer) || newvalue.nil?
282
+
283
+ @user_gid = newvalue
284
+
285
+ self.container&.should_update
286
+ end
287
+
288
+
289
+ # Map specific GID to Attribute
290
+ #
291
+ # @author Tyler Morgan
292
+ #
293
+ # @param newvalue [String] The GID you want to be mapped
294
+ #
295
+ # @raise [JSS::InvalidDataError] If the new value is not a String
296
+ #
297
+ # @return [void]
298
+ def gid=(newvalue)
299
+
300
+ raise JSS::InvalidDataError, "gid must be a string, integer, or nil." unless newvalue.is_a?(String) || newvalue.is_a?(Integer) || newvalue.nil?
301
+
302
+ @gid = newvalue
303
+
304
+ self.container&.should_update
305
+ end
306
+
307
+ # Set specific groups to become administrators to a system.
308
+ #
309
+ # @author Tyler Morgan
310
+ #
311
+ # @param newvalue [Array<String>] An array of all the admin group names you want to set.
312
+ # @see add_admin_group
313
+ # @see remove_admin_group
314
+ #
315
+ # @raise [JSS::InvalidDataError] If the new value is not an Array
316
+ #
317
+ # @return [void]
318
+ def admin_group=(newvalue)
319
+
320
+ raise JSS::InvalidDataError, "An Array must be provided, please use add_admin_group and remove_admin_group for individual group additions and removals." unless newvalue.is_a? Array
321
+
322
+ @admin_group = newvalue
323
+
324
+ self.container&.should_update
325
+ end
326
+
327
+
328
+ # The number of times a user can log into the device while not connected to a network
329
+ #
330
+ # @author Tyler Morgan
331
+ #
332
+ # @param newvalue [Integer] The number of times you want a user to login while not connected to a network
333
+ #
334
+ # @raise [JSS::InvalidDataError] If the new value is not an Integer
335
+ #
336
+ # @return [void]
337
+ def cached_credentials=(newvalue)
338
+
339
+ raise JSS::InvalidDataError, "cached_credentials must be an integer." unless newvalue.is_a? Integer
340
+
341
+ @cached_credentials = newvalue
342
+
343
+ self.container&.should_update
344
+ end
345
+
346
+
347
+ # If the user is a member of one of the groups in admin_group, add them
348
+ # to the local administrator group.
349
+ #
350
+ # @author Tyler Morgan
351
+ # @see admin_group
352
+ #
353
+ # @param newvalue [Bool]
354
+ #
355
+ # @raise [JSS::InvalidDataError] If the new value is not a Bool
356
+ #
357
+ # @return [void]
358
+ def add_user_to_local=(newvalue)
359
+
360
+ raise JSS::InvalidDataError, "add_user_to_local must be true or false." unless newvalue.is_a? Bool
361
+
362
+ @add_user_to_local = newvalue
363
+
364
+ self.container&.should_update
365
+ end
366
+
367
+
368
+ # An OU path for specific Users
369
+ #
370
+ # @author Tyler Morgan
371
+ #
372
+ # @param newvalue [String] The OU path for the specific user
373
+ # @note Not sure what this is used for
374
+ #
375
+ # @raise [JSS::InvalidDataError] If the new value is not a String
376
+ #
377
+ # @return [void]
378
+ def users_ou=(newvalue)
379
+
380
+ raise JSS::InvalidDataError, "users_ou must be either a string or nil." unless newvalue.is_a? String || newvalue.nil?
381
+
382
+ @users_ou = newvalue
383
+
384
+ self.container&.should_update
385
+ end
386
+
387
+
388
+ # An OU path for specific User Groups
389
+ #
390
+ # @author Tyler Morgan
391
+ #
392
+ # @param newvalue [String] The OU path for the specific user group
393
+ # @note Not sure what this is used for
394
+ #
395
+ # @raise [JSS::InvalidDataError] If the new value is not a String
396
+ #
397
+ # @return [void]
398
+ def groups_ou=(newvalue)
399
+
400
+ raise JSS::InvalidDataError, "groups_ou must be either a string or nil." unless newvalue.is_a? String || newvalue.nil?
401
+
402
+ @groups_ou = newvalue
403
+
404
+ self.container&.should_update
405
+ end
406
+
407
+
408
+ # An OU path for specific Printers
409
+ #
410
+ # @author Tyler Morgan
411
+ #
412
+ # @param newvalue [String] The OU path for the specific printer
413
+ # @note Not sure what this is used for
414
+ #
415
+ # @raise [JSS::InvalidDataError] If the new value is not a String
416
+ #
417
+ # @return [void]
418
+ def printers_ou=(newvalue)
419
+
420
+ raise JSS::InvalidDataError, "printers_ou must be either a string or nil." unless newvalue.is_a? String || newvalue.nil?
421
+
422
+ @printers_ou = newvalue
423
+
424
+ self.container&.should_update
425
+ end
426
+
427
+
428
+ # An OU path for specific shared folders
429
+ #
430
+ # @author Tyler Morgan
431
+ #
432
+ # @param newvalue [String] The OU path for the specific shared folders
433
+ # @note Not sure what this is used for
434
+ #
435
+ # @raise [JSS::InvalidDataError] If the new value is not a String
436
+ #
437
+ # @return [void]
438
+ def shared_folders_ou=(newvalue)
439
+
440
+ raise JSS::InvalidDataError, "shared_folders_ou must be either a string or nil." unless newvalue.is_a? String || newvalue.nil?
441
+
442
+ @shared_folders_ou = newvalue
443
+
444
+ self.container&.should_update
445
+ end
446
+
447
+
448
+ # An a specific admin group to admin_group
449
+ #
450
+ # @author Tyler Morgan
451
+ #
452
+ # @param value [String] The admin group name you wish to add to the admin group list
453
+ #
454
+ # @raise [JSS::InvalidDataError] If the value provided is not a String
455
+ # @raise [JSS::InvalidDataError] If the group provided is already a member of the admin_group array
456
+ #
457
+ # @return [Array <String>] An array of all the admin groups currently set.
458
+ def add_admin_group(value)
459
+
460
+ raise JSS::InvalidDataError, "Admin group must be a string." unless value.is_a? String
461
+ raise JSS::InvalidDataError, "Admin group \"#{value}\" already is in the list of admin groups." unless !@admin_group.include? value
462
+
463
+ @admin_group << value
464
+
465
+ self.container&.should_update
466
+
467
+ return @admin_group
468
+ end
469
+
470
+
471
+ # Remove a specific admin group to admin_group
472
+ #
473
+ # @author Tyler Morgan
474
+ #
475
+ # @param newvalue [String] The admin group name you wish to remove from the admin group list
476
+ #
477
+ # @raise [JSS::InvalidDataError] If the value provided is not a String
478
+ # @raise [JSS::InvalidDataError] If the group provided is not in the admin_group array
479
+ #
480
+ # @return [Array <String>] An array of all the admin groups currently set.
481
+ def remove_admin_group(value)
482
+
483
+ raise JSS::InvalidDataError, "Admin group being removed must be a string" unless value.is_a? String
484
+ raise JSS::InvalidDataError, "Admin group #{value} is not in the current admin group(s)." unless @admin_group.include? value
485
+
486
+ @admin_group.delete value
487
+
488
+ self.container&.should_update
489
+
490
+ return @admin_group
491
+ end
492
+
493
+
494
+ # Return a REXML Element containing the current state of the DirectoryBindingType
495
+ # object for adding into the XML of the container.
496
+ #
497
+ # @author Tyler Morgan
498
+ #
499
+ # @return [REXML::Element]
500
+ def type_setting_xml
501
+ type_setting = REXML::Element.new "admitmac"
502
+ type_setting.add_element("require_confirmation").text = @require_confirmation
503
+ type_setting.add_element("local_home").text = @local_home
504
+ type_setting.add_element("mount_style").text = @mount_style.downcase
505
+ type_setting.add_element("default_shell").text = @default_shell
506
+ type_setting.add_element("mount_network_home").text = @mount_network_home
507
+ type_setting.add_element("place_home_folders").text = @place_home_folders
508
+ type_setting.add_element("uid").text = @uid
509
+ type_setting.add_element("user_gid").text = @user_gid
510
+ type_setting.add_element("gid").text = @gid
511
+ type_setting.add_element("add_user_to_local").text = @add_user_to_local
512
+ type_setting.add_element("cached_credentials").text = @cached_credentials
513
+ type_setting.add_element("users_ou").text = @users_ou
514
+ type_setting.add_element("groups_ou").text = @groups_ou
515
+ type_setting.add_element("printers_ou").text = @printers_ou
516
+ type_setting.add_element("shared_folders_ou").text = @shared_folders_ou
517
+ type_setting.add_element("admin_group").text = @admin_group.join(',').to_s unless @admin_group.nil?
518
+
519
+ return type_setting
520
+ end
521
+ end
522
+
523
+ end
524
+
525
+ end