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.
- checksums.yaml +4 -4
 - data/CHANGES.md +92 -1
 - data/lib/jamf/api/abstract_classes/json_object.rb +1 -1
 - data/lib/jamf/api/abstract_classes/prestage.rb +1 -1
 - data/lib/jamf/api/connection.rb +7 -3
 - data/lib/jamf/configuration.rb +7 -9
 - data/lib/jamf/ruby_extensions.rb +1 -0
 - data/lib/jamf/ruby_extensions/array.rb +1 -1
 - data/lib/jamf/ruby_extensions/array/utils.rb +3 -3
 - data/lib/jamf/ruby_extensions/dig.rb +52 -0
 - data/lib/jss.rb +2 -0
 - data/lib/jss/api_connection.rb +2 -29
 - data/lib/jss/api_object.rb +15 -2
 - data/lib/jss/api_object/directory_binding.rb +273 -0
 - data/lib/jss/api_object/directory_binding_type.rb +90 -0
 - data/lib/jss/api_object/directory_binding_type/active_directory.rb +502 -0
 - data/lib/jss/api_object/directory_binding_type/admitmac.rb +525 -0
 - data/lib/jss/api_object/directory_binding_type/centrify.rb +212 -0
 - data/lib/jss/api_object/directory_binding_type/open_directory.rb +178 -0
 - data/lib/jss/api_object/directory_binding_type/powerbroker_identity_services.rb +73 -0
 - data/lib/jss/api_object/disk_encryption_configurations.rb +114 -0
 - data/lib/jss/api_object/distribution_point.rb +95 -35
 - data/lib/jss/api_object/dock_item.rb +137 -0
 - data/lib/jss/api_object/mobile_device_application.rb +12 -0
 - data/lib/jss/api_object/network_segment.rb +152 -58
 - data/lib/jss/api_object/package.rb +106 -41
 - data/lib/jss/api_object/policy.rb +379 -4
 - data/lib/jss/api_object/printer.rb +440 -0
 - data/lib/jss/api_object/scopable/scope.rb +24 -24
 - data/lib/jss/composer.rb +1 -1
 - data/lib/jss/utility.rb +8 -22
 - data/lib/jss/version.rb +1 -1
 - metadata +13 -2
 
| 
         @@ -174,7 +174,9 @@ module JSS 
     | 
|
| 
       174 
174 
     | 
    
         
             
                  change_pw: 'specified',
         
     | 
| 
       175 
175 
     | 
    
         
             
                  generate_pw: 'random',
         
     | 
| 
       176 
176 
     | 
    
         
             
                  enable_fv2: 'fileVaultEnable',
         
     | 
| 
       177 
     | 
    
         
            -
                  disable_fv2: 'fileVaultDisable'
         
     | 
| 
      
 177 
     | 
    
         
            +
                  disable_fv2: 'fileVaultDisable',
         
     | 
| 
      
 178 
     | 
    
         
            +
                  reset_random: 'resetRandom',
         
     | 
| 
      
 179 
     | 
    
         
            +
                  reset_pw: 'reset'
         
     | 
| 
       178 
180 
     | 
    
         
             
                }.freeze
         
     | 
| 
       179 
181 
     | 
    
         | 
| 
       180 
182 
     | 
    
         
             
                PACKAGE_ACTIONS = {
         
     | 
| 
         @@ -191,6 +193,12 @@ module JSS 
     | 
|
| 
       191 
193 
     | 
    
         
             
                  after: 'After'
         
     | 
| 
       192 
194 
     | 
    
         
             
                }.freeze
         
     | 
| 
       193 
195 
     | 
    
         | 
| 
      
 196 
     | 
    
         
            +
                DISK_ENCRYPTION_ACTIONS = {
         
     | 
| 
      
 197 
     | 
    
         
            +
                  apply: "apply",
         
     | 
| 
      
 198 
     | 
    
         
            +
                  remediate: "remediate",
         
     | 
| 
      
 199 
     | 
    
         
            +
                  none: "none"
         
     | 
| 
      
 200 
     | 
    
         
            +
                }
         
     | 
| 
      
 201 
     | 
    
         
            +
             
     | 
| 
       194 
202 
     | 
    
         
             
                PRINTER_ACTIONS = {
         
     | 
| 
       195 
203 
     | 
    
         
             
                  map: 'install',
         
     | 
| 
       196 
204 
     | 
    
         
             
                  unmap: 'uninstall'
         
     | 
| 
         @@ -541,6 +549,7 @@ module JSS 
     | 
|
| 
       541 
549 
     | 
    
         | 
| 
       542 
550 
     | 
    
         
             
                # @return [String] the message shown the user at policy end
         
     | 
| 
       543 
551 
     | 
    
         
             
                attr_reader :user_message_finish
         
     | 
| 
      
 552 
     | 
    
         
            +
                alias user_message_end user_message_finish
         
     | 
| 
       544 
553 
     | 
    
         | 
| 
       545 
554 
     | 
    
         
             
                # @return [Hash]
         
     | 
| 
       546 
555 
     | 
    
         
             
                #
         
     | 
| 
         @@ -670,6 +679,7 @@ module JSS 
     | 
|
| 
       670 
679 
     | 
    
         
             
                    @disk_encryption = @init_data[:disk_encryption]
         
     | 
| 
       671 
680 
     | 
    
         | 
| 
       672 
681 
     | 
    
         
             
                    @printers = @init_data[:printers]
         
     | 
| 
      
 682 
     | 
    
         
            +
                    @printers.shift
         
     | 
| 
       673 
683 
     | 
    
         | 
| 
       674 
684 
     | 
    
         
             
                    # Not in jss yet
         
     | 
| 
       675 
685 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -914,6 +924,30 @@ module JSS 
     | 
|
| 
       914 
924 
     | 
    
         
             
                end
         
     | 
| 
       915 
925 
     | 
    
         
             
                alias message= reboot_message=
         
     | 
| 
       916 
926 
     | 
    
         | 
| 
      
 927 
     | 
    
         
            +
                # Set User Start Message
         
     | 
| 
      
 928 
     | 
    
         
            +
                #
         
     | 
| 
      
 929 
     | 
    
         
            +
                # @param user_message[String] Text of User Message
         
     | 
| 
      
 930 
     | 
    
         
            +
                #
         
     | 
| 
      
 931 
     | 
    
         
            +
                # @return [void] description of returned object
         
     | 
| 
      
 932 
     | 
    
         
            +
                def user_message_start=(message)
         
     | 
| 
      
 933 
     | 
    
         
            +
                  raise JSS::InvalidDataError, 'User message must be a String' unless message.is_a? String
         
     | 
| 
      
 934 
     | 
    
         
            +
                  @user_message_start = message
         
     | 
| 
      
 935 
     | 
    
         
            +
                  @need_to_update = true
         
     | 
| 
      
 936 
     | 
    
         
            +
                end
         
     | 
| 
      
 937 
     | 
    
         
            +
             
     | 
| 
      
 938 
     | 
    
         
            +
                # Set User Finish Message
         
     | 
| 
      
 939 
     | 
    
         
            +
                #
         
     | 
| 
      
 940 
     | 
    
         
            +
                # @param user_message[String] Text of User Message
         
     | 
| 
      
 941 
     | 
    
         
            +
                #
         
     | 
| 
      
 942 
     | 
    
         
            +
                # @return [void] description of returned object
         
     | 
| 
      
 943 
     | 
    
         
            +
                def user_message_end=(message)
         
     | 
| 
      
 944 
     | 
    
         
            +
                  raise JSS::InvalidDataError, 'User message must be a String' unless message.is_a? String
         
     | 
| 
      
 945 
     | 
    
         
            +
                  @user_message_finish = message
         
     | 
| 
      
 946 
     | 
    
         
            +
                  @need_to_update = true
         
     | 
| 
      
 947 
     | 
    
         
            +
                end
         
     | 
| 
      
 948 
     | 
    
         
            +
             
     | 
| 
      
 949 
     | 
    
         
            +
                alias user_message_finish= user_message_end=
         
     | 
| 
      
 950 
     | 
    
         
            +
             
     | 
| 
       917 
951 
     | 
    
         
             
                # Set Startup Disk
         
     | 
| 
       918 
952 
     | 
    
         
             
                # Only Supports 'Specify Local Startup Disk' at the moment
         
     | 
| 
       919 
953 
     | 
    
         
             
                #
         
     | 
| 
         @@ -1180,7 +1214,7 @@ module JSS 
     | 
|
| 
       1180 
1214 
     | 
    
         | 
| 
       1181 
1215 
     | 
    
         
             
                # Remove a package from this policy by name or id
         
     | 
| 
       1182 
1216 
     | 
    
         
             
                #
         
     | 
| 
       1183 
     | 
    
         
            -
                # @param  
     | 
| 
      
 1217 
     | 
    
         
            +
                # @param identifier [String,Integer] the name or id of the package to remove
         
     | 
| 
       1184 
1218 
     | 
    
         
             
                #
         
     | 
| 
       1185 
1219 
     | 
    
         
             
                # @return [Array, nil] the new packages array or nil if no change
         
     | 
| 
       1186 
1220 
     | 
    
         
             
                #
         
     | 
| 
         @@ -1270,7 +1304,7 @@ module JSS 
     | 
|
| 
       1270 
1304 
     | 
    
         | 
| 
       1271 
1305 
     | 
    
         
             
                # Remove a script from this policy by name or id
         
     | 
| 
       1272 
1306 
     | 
    
         
             
                #
         
     | 
| 
       1273 
     | 
    
         
            -
                # @param  
     | 
| 
      
 1307 
     | 
    
         
            +
                # @param identifier [String,Integer] the name or id of the script to remove
         
     | 
| 
       1274 
1308 
     | 
    
         
             
                #
         
     | 
| 
       1275 
1309 
     | 
    
         
             
                # @return [Array, nil] the new scripts array or nil if no change
         
     | 
| 
       1276 
1310 
     | 
    
         
             
                #
         
     | 
| 
         @@ -1292,6 +1326,49 @@ module JSS 
     | 
|
| 
       1292 
1326 
     | 
    
         
             
                  @directory_bindings.map { |p| p[:name] }
         
     | 
| 
       1293 
1327 
     | 
    
         
             
                end
         
     | 
| 
       1294 
1328 
     | 
    
         | 
| 
      
 1329 
     | 
    
         
            +
                # Add a Directory Bidning to the list of directory_bindings handled by this policy.
         
     | 
| 
      
 1330 
     | 
    
         
            +
                # If the directory binding already exists in the policy, nil is returned and
         
     | 
| 
      
 1331 
     | 
    
         
            +
                # no changes are made.
         
     | 
| 
      
 1332 
     | 
    
         
            +
                #
         
     | 
| 
      
 1333 
     | 
    
         
            +
                # @param [String,Integer] identifier the name or id of the directory binding to add to this policy
         
     | 
| 
      
 1334 
     | 
    
         
            +
                #
         
     | 
| 
      
 1335 
     | 
    
         
            +
                # @param position [Symbol, Integer] where to add this directory binding among the list of
         
     | 
| 
      
 1336 
     | 
    
         
            +
                #   directory_bindings. Zero-based, :start and 0 are the same, as are :end and -1.
         
     | 
| 
      
 1337 
     | 
    
         
            +
                #   Defaults to :end
         
     | 
| 
      
 1338 
     | 
    
         
            +
                #
         
     | 
| 
      
 1339 
     | 
    
         
            +
                # @return [Array, nil]  the new @directory_bindings array, nil if directory_binding was already in the policy
         
     | 
| 
      
 1340 
     | 
    
         
            +
                #
         
     | 
| 
      
 1341 
     | 
    
         
            +
                def add_directory_binding(identifier, **opts)
         
     | 
| 
      
 1342 
     | 
    
         
            +
                  id = validate_directory_binding_opts identifier, opts
         
     | 
| 
      
 1343 
     | 
    
         
            +
             
     | 
| 
      
 1344 
     | 
    
         
            +
                  return nil if @directory_bindings.map { |s| s[:id] }.include? id
         
     | 
| 
      
 1345 
     | 
    
         
            +
             
     | 
| 
      
 1346 
     | 
    
         
            +
                  name = JSS::DirectoryBinding.map_all_ids_to(:name, api: @api)[id]
         
     | 
| 
      
 1347 
     | 
    
         
            +
             
     | 
| 
      
 1348 
     | 
    
         
            +
                  directory_binding_data = {
         
     | 
| 
      
 1349 
     | 
    
         
            +
                    id: id,
         
     | 
| 
      
 1350 
     | 
    
         
            +
                    name: name
         
     | 
| 
      
 1351 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1352 
     | 
    
         
            +
             
     | 
| 
      
 1353 
     | 
    
         
            +
                  @directory_bindings.insert opts[:position], directory_binding_data
         
     | 
| 
      
 1354 
     | 
    
         
            +
             
     | 
| 
      
 1355 
     | 
    
         
            +
                  @need_to_update = true
         
     | 
| 
      
 1356 
     | 
    
         
            +
                  @directory_bindings
         
     | 
| 
      
 1357 
     | 
    
         
            +
                end
         
     | 
| 
      
 1358 
     | 
    
         
            +
             
     | 
| 
      
 1359 
     | 
    
         
            +
             
     | 
| 
      
 1360 
     | 
    
         
            +
                # Remove a directory binding from this policy by name or id
         
     | 
| 
      
 1361 
     | 
    
         
            +
                #
         
     | 
| 
      
 1362 
     | 
    
         
            +
                # @param identifier [String,Integer] the name or id of the directory binding to remove
         
     | 
| 
      
 1363 
     | 
    
         
            +
                #
         
     | 
| 
      
 1364 
     | 
    
         
            +
                # @return [Array, nil] the new directory bindings array or nil if no change
         
     | 
| 
      
 1365 
     | 
    
         
            +
                #
         
     | 
| 
      
 1366 
     | 
    
         
            +
                def remove_directory_binding(identifier)
         
     | 
| 
      
 1367 
     | 
    
         
            +
                  removed = @directory_bindings.delete_if { |s| s[:id] == identifier || s[:name] == identifier }
         
     | 
| 
      
 1368 
     | 
    
         
            +
                  @need_to_update = true if removed
         
     | 
| 
      
 1369 
     | 
    
         
            +
                  removed
         
     | 
| 
      
 1370 
     | 
    
         
            +
                end
         
     | 
| 
      
 1371 
     | 
    
         
            +
             
     | 
| 
       1295 
1372 
     | 
    
         
             
                ###### Dock items
         
     | 
| 
       1296 
1373 
     | 
    
         | 
| 
       1297 
1374 
     | 
    
         
             
                # @return [Array] the id's of the dock_items handled by the policy
         
     | 
| 
         @@ -1304,6 +1381,86 @@ module JSS 
     | 
|
| 
       1304 
1381 
     | 
    
         
             
                  @dock_items.map { |p| p[:name] }
         
     | 
| 
       1305 
1382 
     | 
    
         
             
                end
         
     | 
| 
       1306 
1383 
     | 
    
         | 
| 
      
 1384 
     | 
    
         
            +
             
     | 
| 
      
 1385 
     | 
    
         
            +
                ###### Printers
         
     | 
| 
      
 1386 
     | 
    
         
            +
             
     | 
| 
      
 1387 
     | 
    
         
            +
                # Add a specific printer object to the policy.
         
     | 
| 
      
 1388 
     | 
    
         
            +
                #
         
     | 
| 
      
 1389 
     | 
    
         
            +
                # @author Tyler Morgan
         
     | 
| 
      
 1390 
     | 
    
         
            +
                #
         
     | 
| 
      
 1391 
     | 
    
         
            +
                # @param newvalue [String,Integer] The name or the id of the printer to be added to this policy.
         
     | 
| 
      
 1392 
     | 
    
         
            +
                #
         
     | 
| 
      
 1393 
     | 
    
         
            +
                # @param position [Symbol, Integer] where to add this printer object among the list of printer
         
     | 
| 
      
 1394 
     | 
    
         
            +
                #   objects. Zero-based, :start and 0 are the same, as are :end and -1.
         
     | 
| 
      
 1395 
     | 
    
         
            +
                #   Defaults to :end
         
     | 
| 
      
 1396 
     | 
    
         
            +
                #
         
     | 
| 
      
 1397 
     | 
    
         
            +
                # @param action [Symbol] One of the PRINTER_ACTIONS symbols. What you want done with the printer object upon policy execution.
         
     | 
| 
      
 1398 
     | 
    
         
            +
                #
         
     | 
| 
      
 1399 
     | 
    
         
            +
                # @param make_default [TrueClass,FalseClass] Should this printer object be set to default.
         
     | 
| 
      
 1400 
     | 
    
         
            +
                #   Defaults to false
         
     | 
| 
      
 1401 
     | 
    
         
            +
                #
         
     | 
| 
      
 1402 
     | 
    
         
            +
                # @return [String] The new printers array or nil if the printer was already in the policy
         
     | 
| 
      
 1403 
     | 
    
         
            +
                def add_printer(identifier, **opts)
         
     | 
| 
      
 1404 
     | 
    
         
            +
                  id = validate_printer_opts identifier, opts
         
     | 
| 
      
 1405 
     | 
    
         
            +
             
     | 
| 
      
 1406 
     | 
    
         
            +
                  return nil if @printers.map { |p| p[:id] }.include? id
         
     | 
| 
      
 1407 
     | 
    
         
            +
             
     | 
| 
      
 1408 
     | 
    
         
            +
                  name = JSS::Printer.map_all_ids_to(:name, api: @api)[id]
         
     | 
| 
      
 1409 
     | 
    
         
            +
             
     | 
| 
      
 1410 
     | 
    
         
            +
                  printer_data = {
         
     | 
| 
      
 1411 
     | 
    
         
            +
                    id: id,
         
     | 
| 
      
 1412 
     | 
    
         
            +
                    name: name,
         
     | 
| 
      
 1413 
     | 
    
         
            +
                    action: PRINTER_ACTIONS[opts[:action]],
         
     | 
| 
      
 1414 
     | 
    
         
            +
                    make_default: opts[:make_default]
         
     | 
| 
      
 1415 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1416 
     | 
    
         
            +
             
     | 
| 
      
 1417 
     | 
    
         
            +
                  @printers.insert opts[:position], printer_data
         
     | 
| 
      
 1418 
     | 
    
         
            +
             
     | 
| 
      
 1419 
     | 
    
         
            +
                  @need_to_update = true
         
     | 
| 
      
 1420 
     | 
    
         
            +
                  @printers
         
     | 
| 
      
 1421 
     | 
    
         
            +
                end
         
     | 
| 
      
 1422 
     | 
    
         
            +
             
     | 
| 
      
 1423 
     | 
    
         
            +
             
     | 
| 
      
 1424 
     | 
    
         
            +
                # Remove a specific printer object from the policy.
         
     | 
| 
      
 1425 
     | 
    
         
            +
                #
         
     | 
| 
      
 1426 
     | 
    
         
            +
                # @author Tyler Morgan
         
     | 
| 
      
 1427 
     | 
    
         
            +
                #
         
     | 
| 
      
 1428 
     | 
    
         
            +
                # @param identifier [String,Integer] The name or id of the printer to be removed.
         
     | 
| 
      
 1429 
     | 
    
         
            +
                #
         
     | 
| 
      
 1430 
     | 
    
         
            +
                # @return [Array, nil] The new printers array or nil if no change.
         
     | 
| 
      
 1431 
     | 
    
         
            +
                def remove_printer(identifier)
         
     | 
| 
      
 1432 
     | 
    
         
            +
                  removed = @printers.delete_if { |p| p[:id] == identifier || p[:name] == identifier }
         
     | 
| 
      
 1433 
     | 
    
         
            +
             
     | 
| 
      
 1434 
     | 
    
         
            +
                  @need_to_update = true
         
     | 
| 
      
 1435 
     | 
    
         
            +
                  removed
         
     | 
| 
      
 1436 
     | 
    
         
            +
                end
         
     | 
| 
      
 1437 
     | 
    
         
            +
             
     | 
| 
      
 1438 
     | 
    
         
            +
                # Add a dock item to the policy
         
     | 
| 
      
 1439 
     | 
    
         
            +
                def add_dock_item(identifier, action)
         
     | 
| 
      
 1440 
     | 
    
         
            +
                  id = JSS::DockItem.valid_id identifier, api: @api
         
     | 
| 
      
 1441 
     | 
    
         
            +
             
     | 
| 
      
 1442 
     | 
    
         
            +
                  raise JSS::NoSuchItemError, "No Dock Item matches '#{identifier}'" unless id
         
     | 
| 
      
 1443 
     | 
    
         
            +
             
     | 
| 
      
 1444 
     | 
    
         
            +
                  raise JSS::InvalidDataError, "Action must be one of: :#{DOCK_ITEM_ACTIONS.keys.join ', :'}" unless DOCK_ITEM_ACTIONS.include? action
         
     | 
| 
      
 1445 
     | 
    
         
            +
             
     | 
| 
      
 1446 
     | 
    
         
            +
                  return nil if @dock_items.map { |d| d[:id] }.include? id
         
     | 
| 
      
 1447 
     | 
    
         
            +
             
     | 
| 
      
 1448 
     | 
    
         
            +
                  name = JSS::DockItem.map_all_ids_to(:name, api: @api)[id]
         
     | 
| 
      
 1449 
     | 
    
         
            +
             
     | 
| 
      
 1450 
     | 
    
         
            +
                  @dock_items << {id: id, name: name, action: DOCK_ITEM_ACTIONS[action]}
         
     | 
| 
      
 1451 
     | 
    
         
            +
             
     | 
| 
      
 1452 
     | 
    
         
            +
                  @need_to_update = true
         
     | 
| 
      
 1453 
     | 
    
         
            +
                  @dock_items
         
     | 
| 
      
 1454 
     | 
    
         
            +
                end
         
     | 
| 
      
 1455 
     | 
    
         
            +
             
     | 
| 
      
 1456 
     | 
    
         
            +
                # Remove a dock item from the policy
         
     | 
| 
      
 1457 
     | 
    
         
            +
                def remove_dock_item(identifier)
         
     | 
| 
      
 1458 
     | 
    
         
            +
                  # TODO: Add validation against JSS::DockItem
         
     | 
| 
      
 1459 
     | 
    
         
            +
                  removed = @dock_items.delete_if { |d| d[:id] == identifier || d[:name] == identifier }
         
     | 
| 
      
 1460 
     | 
    
         
            +
                  @need_to_update = true if removed
         
     | 
| 
      
 1461 
     | 
    
         
            +
                  removed
         
     | 
| 
      
 1462 
     | 
    
         
            +
                end
         
     | 
| 
      
 1463 
     | 
    
         
            +
             
     | 
| 
       1307 
1464 
     | 
    
         
             
                # @return [Array] the id's of the printers handled by the policy
         
     | 
| 
       1308 
1465 
     | 
    
         
             
                def printer_ids
         
     | 
| 
       1309 
1466 
     | 
    
         
             
                    begin
         
     | 
| 
         @@ -1312,7 +1469,7 @@ module JSS 
     | 
|
| 
       1312 
1469 
     | 
    
         
             
                        return []
         
     | 
| 
       1313 
1470 
     | 
    
         
             
                    end
         
     | 
| 
       1314 
1471 
     | 
    
         
             
                end
         
     | 
| 
       1315 
     | 
    
         
            -
             
     | 
| 
      
 1472 
     | 
    
         
            +
             
     | 
| 
       1316 
1473 
     | 
    
         
             
                # @return [Array] the names of the printers handled by the policy
         
     | 
| 
       1317 
1474 
     | 
    
         
             
                def printer_names
         
     | 
| 
       1318 
1475 
     | 
    
         
             
                    begin
         
     | 
| 
         @@ -1322,6 +1479,130 @@ module JSS 
     | 
|
| 
       1322 
1479 
     | 
    
         
             
                    end
         
     | 
| 
       1323 
1480 
     | 
    
         
             
                end
         
     | 
| 
       1324 
1481 
     | 
    
         | 
| 
      
 1482 
     | 
    
         
            +
             
     | 
| 
      
 1483 
     | 
    
         
            +
             
     | 
| 
      
 1484 
     | 
    
         
            +
                ###### Disk Encryption
         
     | 
| 
      
 1485 
     | 
    
         
            +
             
     | 
| 
      
 1486 
     | 
    
         
            +
                # Sets the Disk Encryption application to "Remediate" and sets the remediation key type to individual.
         
     | 
| 
      
 1487 
     | 
    
         
            +
                #
         
     | 
| 
      
 1488 
     | 
    
         
            +
                # @author Tyler Morgan
         
     | 
| 
      
 1489 
     | 
    
         
            +
                #
         
     | 
| 
      
 1490 
     | 
    
         
            +
                # @return [Void]
         
     | 
| 
      
 1491 
     | 
    
         
            +
                #
         
     | 
| 
      
 1492 
     | 
    
         
            +
                def reissue_key()
         
     | 
| 
      
 1493 
     | 
    
         
            +
                  if @disk_encryption[:action] != DISK_ENCRYPTION_ACTIONS[:remediate]
         
     | 
| 
      
 1494 
     | 
    
         
            +
                    # Setting New Action
         
     | 
| 
      
 1495 
     | 
    
         
            +
                    hash = {
         
     | 
| 
      
 1496 
     | 
    
         
            +
                      action: DISK_ENCRYPTION_ACTIONS[:remediate],
         
     | 
| 
      
 1497 
     | 
    
         
            +
                      remediate_key_type: "Individual"
         
     | 
| 
      
 1498 
     | 
    
         
            +
                    }
         
     | 
| 
      
 1499 
     | 
    
         
            +
             
     | 
| 
      
 1500 
     | 
    
         
            +
                    @disk_encryption = hash
         
     | 
| 
      
 1501 
     | 
    
         
            +
                    @need_to_update = true
         
     | 
| 
      
 1502 
     | 
    
         
            +
             
     | 
| 
      
 1503 
     | 
    
         
            +
                  else
         
     | 
| 
      
 1504 
     | 
    
         
            +
                    # Update
         
     | 
| 
      
 1505 
     | 
    
         
            +
                    return
         
     | 
| 
      
 1506 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1507 
     | 
    
         
            +
             
     | 
| 
      
 1508 
     | 
    
         
            +
                end
         
     | 
| 
      
 1509 
     | 
    
         
            +
             
     | 
| 
      
 1510 
     | 
    
         
            +
             
     | 
| 
      
 1511 
     | 
    
         
            +
                # Sets the Disk Encryption application to "Apply" and sets the correct disk encryption configuration ID using either the name or id.
         
     | 
| 
      
 1512 
     | 
    
         
            +
                #
         
     | 
| 
      
 1513 
     | 
    
         
            +
                # @author Tyler Morgan
         
     | 
| 
      
 1514 
     | 
    
         
            +
                #
         
     | 
| 
      
 1515 
     | 
    
         
            +
                # @return [Void]
         
     | 
| 
      
 1516 
     | 
    
         
            +
                #
         
     | 
| 
      
 1517 
     | 
    
         
            +
                def apply_encryption_configuration(identifier)
         
     | 
| 
      
 1518 
     | 
    
         
            +
             
     | 
| 
      
 1519 
     | 
    
         
            +
                  id = JSS::DiskEncryptionConfiguration.valid_id identifier
         
     | 
| 
      
 1520 
     | 
    
         
            +
             
     | 
| 
      
 1521 
     | 
    
         
            +
                  return if id.nil?
         
     | 
| 
      
 1522 
     | 
    
         
            +
             
     | 
| 
      
 1523 
     | 
    
         
            +
                  hash = {
         
     | 
| 
      
 1524 
     | 
    
         
            +
                    action: DISK_ENCRYPTION_ACTIONS[:apply],
         
     | 
| 
      
 1525 
     | 
    
         
            +
                    disk_encryption_configuration_id: id,
         
     | 
| 
      
 1526 
     | 
    
         
            +
                    auth_restart: false
         
     | 
| 
      
 1527 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1528 
     | 
    
         
            +
             
     | 
| 
      
 1529 
     | 
    
         
            +
                  @disk_encryption = hash
         
     | 
| 
      
 1530 
     | 
    
         
            +
                  @need_to_update = true
         
     | 
| 
      
 1531 
     | 
    
         
            +
                end
         
     | 
| 
      
 1532 
     | 
    
         
            +
             
     | 
| 
      
 1533 
     | 
    
         
            +
             
     | 
| 
      
 1534 
     | 
    
         
            +
                # Removes the Disk Encryption settings associated with this specific policy.
         
     | 
| 
      
 1535 
     | 
    
         
            +
                #
         
     | 
| 
      
 1536 
     | 
    
         
            +
                # @author Tyler Morgan
         
     | 
| 
      
 1537 
     | 
    
         
            +
                #
         
     | 
| 
      
 1538 
     | 
    
         
            +
                # @return [Void]
         
     | 
| 
      
 1539 
     | 
    
         
            +
                #
         
     | 
| 
      
 1540 
     | 
    
         
            +
                def remove_encryption_configuration()
         
     | 
| 
      
 1541 
     | 
    
         
            +
                  hash = {
         
     | 
| 
      
 1542 
     | 
    
         
            +
                    action: DISK_ENCRYPTION_ACTIONS[:none]
         
     | 
| 
      
 1543 
     | 
    
         
            +
                  }
         
     | 
| 
      
 1544 
     | 
    
         
            +
             
     | 
| 
      
 1545 
     | 
    
         
            +
                  @disk_encryption = hash
         
     | 
| 
      
 1546 
     | 
    
         
            +
                  @need_to_update = true
         
     | 
| 
      
 1547 
     | 
    
         
            +
                end
         
     | 
| 
      
 1548 
     | 
    
         
            +
             
     | 
| 
      
 1549 
     | 
    
         
            +
                # Interact with management account settings
         
     | 
| 
      
 1550 
     | 
    
         
            +
                #
         
     | 
| 
      
 1551 
     | 
    
         
            +
                # @param action [Key] one of the MGMT_ACCOUNT_ACTIONS keys
         
     | 
| 
      
 1552 
     | 
    
         
            +
                #
         
     | 
| 
      
 1553 
     | 
    
         
            +
                # @return The current specified management settings.
         
     | 
| 
      
 1554 
     | 
    
         
            +
                #
         
     | 
| 
      
 1555 
     | 
    
         
            +
                # Reference: https://developer.jamf.com/documentation#resources-with-passwords
         
     | 
| 
      
 1556 
     | 
    
         
            +
                #
         
     | 
| 
      
 1557 
     | 
    
         
            +
                def set_management_account(action, **opts)
         
     | 
| 
      
 1558 
     | 
    
         
            +
                  # TODO: Add proper error handling
         
     | 
| 
      
 1559 
     | 
    
         
            +
                  raise JSS::InvalidDataError, "Action must be one of: :#{MGMT_ACCOUNT_ACTIONS.keys.join ', :'}" unless MGMT_ACCOUNT_ACTIONS.include? action
         
     | 
| 
      
 1560 
     | 
    
         
            +
             
     | 
| 
      
 1561 
     | 
    
         
            +
                  management_data = {}
         
     | 
| 
      
 1562 
     | 
    
         
            +
             
     | 
| 
      
 1563 
     | 
    
         
            +
                  if action == :change_pw || action == :reset_pw
         
     | 
| 
      
 1564 
     | 
    
         
            +
                    raise JSS::MissingDataError, ":password must be provided when changing management account password" if opts[:password].nil?
         
     | 
| 
      
 1565 
     | 
    
         
            +
             
     | 
| 
      
 1566 
     | 
    
         
            +
                    management_data = {
         
     | 
| 
      
 1567 
     | 
    
         
            +
                      action: MGMT_ACCOUNT_ACTIONS[action],
         
     | 
| 
      
 1568 
     | 
    
         
            +
                      managed_password: opts[:password]
         
     | 
| 
      
 1569 
     | 
    
         
            +
                    }
         
     | 
| 
      
 1570 
     | 
    
         
            +
                  elsif action == :reset_random || action == :generate_pw
         
     | 
| 
      
 1571 
     | 
    
         
            +
                    raise JSS::MissingDataError, ":password_length must be provided when setting a random password" if opts[:password_length].nil?
         
     | 
| 
      
 1572 
     | 
    
         
            +
                    raise JSS::InvalidDataError, ":password_length must be an Integer" unless opts[:password_length].is_a? Integer
         
     | 
| 
      
 1573 
     | 
    
         
            +
             
     | 
| 
      
 1574 
     | 
    
         
            +
                    management_data = {
         
     | 
| 
      
 1575 
     | 
    
         
            +
                      action: MGMT_ACCOUNT_ACTIONS[action],
         
     | 
| 
      
 1576 
     | 
    
         
            +
                      managed_password_length: opts[:password_length]
         
     | 
| 
      
 1577 
     | 
    
         
            +
                    }
         
     | 
| 
      
 1578 
     | 
    
         
            +
                  else
         
     | 
| 
      
 1579 
     | 
    
         
            +
                    management_data = {
         
     | 
| 
      
 1580 
     | 
    
         
            +
                      action: MGMT_ACCOUNT_ACTIONS[action]
         
     | 
| 
      
 1581 
     | 
    
         
            +
                    }
         
     | 
| 
      
 1582 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1583 
     | 
    
         
            +
             
     | 
| 
      
 1584 
     | 
    
         
            +
                  @management_account = management_data
         
     | 
| 
      
 1585 
     | 
    
         
            +
             
     | 
| 
      
 1586 
     | 
    
         
            +
                  @need_to_update = true
         
     | 
| 
      
 1587 
     | 
    
         
            +
             
     | 
| 
      
 1588 
     | 
    
         
            +
                  @management_account
         
     | 
| 
      
 1589 
     | 
    
         
            +
             
     | 
| 
      
 1590 
     | 
    
         
            +
                end
         
     | 
| 
      
 1591 
     | 
    
         
            +
             
     | 
| 
      
 1592 
     | 
    
         
            +
                # Check if management password matches provided password
         
     | 
| 
      
 1593 
     | 
    
         
            +
                #
         
     | 
| 
      
 1594 
     | 
    
         
            +
                # @param password[String] the password that is SHA256'ed to compare to the one from the API.
         
     | 
| 
      
 1595 
     | 
    
         
            +
                #
         
     | 
| 
      
 1596 
     | 
    
         
            +
                # @return [Boolean] The result of the comparison of the management password and provided text.
         
     | 
| 
      
 1597 
     | 
    
         
            +
                #
         
     | 
| 
      
 1598 
     | 
    
         
            +
                def verify_management_password(password)
         
     | 
| 
      
 1599 
     | 
    
         
            +
                  raise JSS::InvalidDataError, "Management password must be a string." unless password.is_a? String
         
     | 
| 
      
 1600 
     | 
    
         
            +
             
     | 
| 
      
 1601 
     | 
    
         
            +
                  raise JSS::UnsupportedError, "'#{@management_account[:action].to_s}' does not support management passwords." unless @management_account[:action] == MGMT_ACCOUNT_ACTIONS[:change_pw] || @management_account[:action] == MGMT_ACCOUNT_ACTIONS[:reset_pw]
         
     | 
| 
      
 1602 
     | 
    
         
            +
             
     | 
| 
      
 1603 
     | 
    
         
            +
                  return Digest::SHA256.hexdigest(password).to_s == @management_account[:managed_password_sha256].to_s
         
     | 
| 
      
 1604 
     | 
    
         
            +
                end
         
     | 
| 
      
 1605 
     | 
    
         
            +
             
     | 
| 
       1325 
1606 
     | 
    
         
             
                ###### Actions
         
     | 
| 
       1326 
1607 
     | 
    
         | 
| 
       1327 
1608 
     | 
    
         
             
                # Try to execute this policy on this machine.
         
     | 
| 
         @@ -1439,6 +1720,64 @@ module JSS 
     | 
|
| 
       1439 
1720 
     | 
    
         
             
                  id
         
     | 
| 
       1440 
1721 
     | 
    
         
             
                end
         
     | 
| 
       1441 
1722 
     | 
    
         | 
| 
      
 1723 
     | 
    
         
            +
                # raise an error if the directory binding being added isn't valid
         
     | 
| 
      
 1724 
     | 
    
         
            +
                #
         
     | 
| 
      
 1725 
     | 
    
         
            +
                # @see #add_directory_binding
         
     | 
| 
      
 1726 
     | 
    
         
            +
                #
         
     | 
| 
      
 1727 
     | 
    
         
            +
                # @return [Integer, nil] the valid id for the package
         
     | 
| 
      
 1728 
     | 
    
         
            +
                #
         
     | 
| 
      
 1729 
     | 
    
         
            +
                def validate_directory_binding_opts(identifier, opts)
         
     | 
| 
      
 1730 
     | 
    
         
            +
                  opts[:position] ||= -1
         
     | 
| 
      
 1731 
     | 
    
         
            +
             
     | 
| 
      
 1732 
     | 
    
         
            +
                  opts[:position] =
         
     | 
| 
      
 1733 
     | 
    
         
            +
                    case opts[:position]
         
     | 
| 
      
 1734 
     | 
    
         
            +
                    when :start then 0
         
     | 
| 
      
 1735 
     | 
    
         
            +
                    when :end then -1
         
     | 
| 
      
 1736 
     | 
    
         
            +
                    else JSS::Validate.integer(opts[:position])
         
     | 
| 
      
 1737 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1738 
     | 
    
         
            +
             
     | 
| 
      
 1739 
     | 
    
         
            +
                    # if the given position is past the end, set it to -1 (the end)
         
     | 
| 
      
 1740 
     | 
    
         
            +
                    opts[:position] = -1 if opts[:position] > @directory_bindings.size
         
     | 
| 
      
 1741 
     | 
    
         
            +
             
     | 
| 
      
 1742 
     | 
    
         
            +
                    id = JSS::DirectoryBinding.valid_id identifier, api: @api
         
     | 
| 
      
 1743 
     | 
    
         
            +
                    raise JSS::NoSuchItemError, "No directory binding matches '#{identifier}'" unless id
         
     | 
| 
      
 1744 
     | 
    
         
            +
                    id
         
     | 
| 
      
 1745 
     | 
    
         
            +
                end
         
     | 
| 
      
 1746 
     | 
    
         
            +
             
     | 
| 
      
 1747 
     | 
    
         
            +
                # Raises an error if the printer being added isn't valid, additionally checks the options and sets defaults where possible.
         
     | 
| 
      
 1748 
     | 
    
         
            +
                #
         
     | 
| 
      
 1749 
     | 
    
         
            +
                # @see #add_printer
         
     | 
| 
      
 1750 
     | 
    
         
            +
                #
         
     | 
| 
      
 1751 
     | 
    
         
            +
                # @return [Integer, nil] the valid id for the package
         
     | 
| 
      
 1752 
     | 
    
         
            +
                #
         
     | 
| 
      
 1753 
     | 
    
         
            +
                def validate_printer_opts(identifier, opts)
         
     | 
| 
      
 1754 
     | 
    
         
            +
                  opts[:position] ||= -1
         
     | 
| 
      
 1755 
     | 
    
         
            +
             
     | 
| 
      
 1756 
     | 
    
         
            +
                  opts[:position] =
         
     | 
| 
      
 1757 
     | 
    
         
            +
                    case opts[:position]
         
     | 
| 
      
 1758 
     | 
    
         
            +
                    when :start then 0
         
     | 
| 
      
 1759 
     | 
    
         
            +
                    when :end then -1
         
     | 
| 
      
 1760 
     | 
    
         
            +
                    else JSS::Validate.integer(opts[:position])
         
     | 
| 
      
 1761 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1762 
     | 
    
         
            +
             
     | 
| 
      
 1763 
     | 
    
         
            +
                  # If the given position is past the end, set it to -1 (the end)
         
     | 
| 
      
 1764 
     | 
    
         
            +
                  opts[:position] = -1 if opts[:position] > @printers.size
         
     | 
| 
      
 1765 
     | 
    
         
            +
             
     | 
| 
      
 1766 
     | 
    
         
            +
                  # Checks if action to be done with the printer object is provided and valid.
         
     | 
| 
      
 1767 
     | 
    
         
            +
                  raise JSS::MissingDataError, "action must be provided, must be one of :#{PRINTER_ACTIONS.keys.join(':,')}." if opts[:action].nil?
         
     | 
| 
      
 1768 
     | 
    
         
            +
                  raise JSS::InvalidDataError, "action must be one of :#{PRINTER_ACTIONS.keys.join(',:')}." unless PRINTER_ACTIONS.keys.include? opts[:action]
         
     | 
| 
      
 1769 
     | 
    
         
            +
             
     | 
| 
      
 1770 
     | 
    
         
            +
             
     | 
| 
      
 1771 
     | 
    
         
            +
                  # Checks if the make_default option is valid, and sets the default if needed.
         
     | 
| 
      
 1772 
     | 
    
         
            +
                  raise JSS::InvalidDataError, "make_default must be either true or false." unless opts[:make_default].is_a?(TrueClass) || opts[:make_default].is_a?(FalseClass) || opts[:make_default].nil?
         
     | 
| 
      
 1773 
     | 
    
         
            +
             
     | 
| 
      
 1774 
     | 
    
         
            +
                  opts[:make_default] = false if opts[:make_default].nil?
         
     | 
| 
      
 1775 
     | 
    
         
            +
             
     | 
| 
      
 1776 
     | 
    
         
            +
                  id = JSS::Printer.valid_id identifier, api: @api
         
     | 
| 
      
 1777 
     | 
    
         
            +
                  raise JSS::NoSuchItemError, "No printer matches '#{identifier}'" unless id
         
     | 
| 
      
 1778 
     | 
    
         
            +
                  id
         
     | 
| 
      
 1779 
     | 
    
         
            +
                end
         
     | 
| 
      
 1780 
     | 
    
         
            +
             
     | 
| 
       1442 
1781 
     | 
    
         
             
                def rest_xml
         
     | 
| 
       1443 
1782 
     | 
    
         
             
                  doc = REXML::Document.new APIConnection::XML_HEADER
         
     | 
| 
       1444 
1783 
     | 
    
         
             
                  obj = doc.add_element RSRC_OBJECT_KEY.to_s
         
     | 
| 
         @@ -1475,6 +1814,22 @@ module JSS 
     | 
|
| 
       1475 
1814 
     | 
    
         
             
                  maint.add_element('user_cache').text = @user_cache.to_s
         
     | 
| 
       1476 
1815 
     | 
    
         
             
                  maint.add_element('verify').text = @verify_startup_disk.to_s
         
     | 
| 
       1477 
1816 
     | 
    
         | 
| 
      
 1817 
     | 
    
         
            +
                  acct_maint = obj.add_element 'account_maintenance'
         
     | 
| 
      
 1818 
     | 
    
         
            +
             
     | 
| 
      
 1819 
     | 
    
         
            +
                  mgmt_acct = acct_maint.add_element 'management_account'
         
     | 
| 
      
 1820 
     | 
    
         
            +
                  JSS.hash_to_rexml_array(@management_account).each { |x| mgmt_acct << x }
         
     | 
| 
      
 1821 
     | 
    
         
            +
             
     | 
| 
      
 1822 
     | 
    
         
            +
                  directory_bindings = acct_maint.add_element 'directory_bindings'
         
     | 
| 
      
 1823 
     | 
    
         
            +
                  @directory_bindings.each do |b|
         
     | 
| 
      
 1824 
     | 
    
         
            +
                    directory_binding = directory_bindings.add_element 'binding'
         
     | 
| 
      
 1825 
     | 
    
         
            +
                    dbdeets = JSS.hash_to_rexml_array b
         
     | 
| 
      
 1826 
     | 
    
         
            +
                    dbdeets.each { |d| directory_binding << d }
         
     | 
| 
      
 1827 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1828 
     | 
    
         
            +
             
     | 
| 
      
 1829 
     | 
    
         
            +
                  user_interaction = obj.add_element 'user_interaction'
         
     | 
| 
      
 1830 
     | 
    
         
            +
                  user_interaction.add_element('message_start').text = @user_message_start.to_s
         
     | 
| 
      
 1831 
     | 
    
         
            +
                  user_interaction.add_element('message_finish').text = @user_message_finish.to_s
         
     | 
| 
      
 1832 
     | 
    
         
            +
             
     | 
| 
       1478 
1833 
     | 
    
         
             
                  files_processes = obj.add_element 'files_processes'
         
     | 
| 
       1479 
1834 
     | 
    
         
             
                  JSS.hash_to_rexml_array(@files_processes).each { |f| files_processes << f }
         
     | 
| 
       1480 
1835 
     | 
    
         | 
| 
         @@ -1493,6 +1848,26 @@ module JSS 
     | 
|
| 
       1493 
1848 
     | 
    
         
             
                    sdeets.each { |d| script << d }
         
     | 
| 
       1494 
1849 
     | 
    
         
             
                  end
         
     | 
| 
       1495 
1850 
     | 
    
         | 
| 
      
 1851 
     | 
    
         
            +
                  disk_encryption = obj.add_element 'disk_encryption'
         
     | 
| 
      
 1852 
     | 
    
         
            +
             
     | 
| 
      
 1853 
     | 
    
         
            +
                  @disk_encryption.each do |k,v|
         
     | 
| 
      
 1854 
     | 
    
         
            +
                    disk_encryption.add_element(k.to_s).text = v.to_s
         
     | 
| 
      
 1855 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1856 
     | 
    
         
            +
             
     | 
| 
      
 1857 
     | 
    
         
            +
                  printers = obj.add_element 'printers'
         
     | 
| 
      
 1858 
     | 
    
         
            +
                  @printers.each do |pr|
         
     | 
| 
      
 1859 
     | 
    
         
            +
                    printer = printers.add_element 'printer'
         
     | 
| 
      
 1860 
     | 
    
         
            +
                    pdeets = JSS.hash_to_rexml_array pr
         
     | 
| 
      
 1861 
     | 
    
         
            +
                    pdeets.each { |d| printer << d }
         
     | 
| 
      
 1862 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1863 
     | 
    
         
            +
             
     | 
| 
      
 1864 
     | 
    
         
            +
                  dock_items = obj.add_element 'dock_items'
         
     | 
| 
      
 1865 
     | 
    
         
            +
                  @dock_items.each do |d|
         
     | 
| 
      
 1866 
     | 
    
         
            +
                    dock_item = dock_items.add_element 'dock_item'
         
     | 
| 
      
 1867 
     | 
    
         
            +
                    ddeets = JSS.hash_to_rexml_array d
         
     | 
| 
      
 1868 
     | 
    
         
            +
                    ddeets.each { |de| dock_item << de }
         
     | 
| 
      
 1869 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1870 
     | 
    
         
            +
             
     | 
| 
       1496 
1871 
     | 
    
         
             
                  add_self_service_xml doc
         
     | 
| 
       1497 
1872 
     | 
    
         
             
                  add_site_to_xml doc
         
     | 
| 
       1498 
1873 
     | 
    
         |