ruby-jss 1.2.10 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

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