ruby-jss 1.2.4a4 → 1.3.3
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.
- checksums.yaml +4 -4
- data/CHANGES.md +185 -1
- data/README.md +3 -1
- data/bin/cgrouper +1 -1
- data/bin/jamfHelperBackgrounder +1 -1
- data/bin/netseg-update +1 -1
- data/data/ruby-jss.conf.example +1 -1
- data/lib/jamf.rb +1 -1
- data/lib/jamf/api/abstract_classes/advanced_search.rb +1 -1
- data/lib/jamf/api/abstract_classes/collection_resource.rb +31 -26
- data/lib/jamf/api/abstract_classes/generic_reference.rb +1 -1
- data/lib/jamf/api/abstract_classes/json_object.rb +15 -5
- data/lib/jamf/api/abstract_classes/prestage.rb +2 -2
- data/lib/jamf/api/abstract_classes/prestage_skip_setup_items.rb +1 -1
- data/lib/jamf/api/abstract_classes/resource.rb +1 -1
- data/lib/jamf/api/abstract_classes/singleton_resource.rb +1 -1
- data/lib/jamf/api/attribute_classes/ip_address.rb +1 -1
- data/lib/jamf/api/attribute_classes/timestamp.rb +1 -1
- data/lib/jamf/api/connection.rb +106 -60
- data/lib/jamf/api/connection/api_error.rb +1 -1
- data/lib/jamf/api/connection/api_error_styleguide.rb +1 -1
- data/lib/jamf/api/connection/token.rb +80 -13
- data/lib/jamf/api/json_objects/account_prefs.rb +1 -1
- data/lib/jamf/api/json_objects/android_details.rb +1 -1
- data/lib/jamf/api/json_objects/appletv_details.rb +1 -1
- data/lib/jamf/api/json_objects/attachment.rb +1 -1
- data/lib/jamf/api/json_objects/cellular_network.rb +1 -1
- data/lib/jamf/api/json_objects/change_log_entry.rb +1 -1
- data/lib/jamf/api/json_objects/computer_prestage_skip_setup_items.rb +1 -1
- data/lib/jamf/api/json_objects/country.rb +1 -1
- data/lib/jamf/api/json_objects/criterion.rb +1 -1
- data/lib/jamf/api/json_objects/device_enrollment_device.rb +1 -1
- data/lib/jamf/api/json_objects/device_enrollment_sync_status.rb +1 -1
- data/lib/jamf/api/json_objects/extension_attribute_value.rb +1 -1
- data/lib/jamf/api/json_objects/installed_application.rb +1 -1
- data/lib/jamf/api/json_objects/installed_certificate.rb +1 -1
- data/lib/jamf/api/json_objects/installed_configuration_profile.rb +1 -1
- data/lib/jamf/api/json_objects/installed_ebook.rb +1 -1
- data/lib/jamf/api/json_objects/installed_provisioning_profile.rb +1 -1
- data/lib/jamf/api/json_objects/inventory_preload_extension_attribute.rb +1 -1
- data/lib/jamf/api/json_objects/ios_details.rb +1 -1
- data/lib/jamf/api/json_objects/location.rb +1 -1
- data/lib/jamf/api/json_objects/md_prestage_name.rb +1 -1
- data/lib/jamf/api/json_objects/md_prestage_names.rb +1 -1
- data/lib/jamf/api/json_objects/md_prestage_skip_setup_items.rb +1 -1
- data/lib/jamf/api/json_objects/mobile_device_details.rb +1 -1
- data/lib/jamf/api/json_objects/mobile_device_security.rb +1 -1
- data/lib/jamf/api/json_objects/prestage_assignment.rb +1 -1
- data/lib/jamf/api/json_objects/prestage_location.rb +1 -1
- data/lib/jamf/api/json_objects/prestage_purchasing_data.rb +1 -1
- data/lib/jamf/api/json_objects/prestage_scope.rb +1 -1
- data/lib/jamf/api/json_objects/prestage_sync_status.rb +1 -1
- data/lib/jamf/api/json_objects/purchasing_data.rb +1 -1
- data/lib/jamf/api/mixins/abstract.rb +1 -1
- data/lib/jamf/api/mixins/bulk_deletable.rb +1 -1
- data/lib/jamf/api/mixins/change_log.rb +1 -1
- data/lib/jamf/api/mixins/extendable.rb +1 -1
- data/lib/jamf/api/mixins/immutable.rb +1 -1
- data/lib/jamf/api/mixins/locatable.rb +1 -1
- data/lib/jamf/api/mixins/lockable.rb +1 -1
- data/lib/jamf/api/mixins/referable.rb +1 -1
- data/lib/jamf/api/mixins/searchable.rb +1 -1
- data/lib/jamf/api/mixins/uncreatable.rb +1 -1
- data/lib/jamf/api/mixins/undeletable.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/account.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/advanced_mobile_device_search.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/advanced_user_search.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/building.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/category.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/computer.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/computer_prestage.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/department.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/device_enrollment.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/extension_attribute.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/inventory_preload_record.rb +9 -2
- data/lib/jamf/api/resources/collection_resources/mobile_device.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/mobile_device_prestage.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/script.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/site.rb +1 -1
- data/lib/jamf/api/resources/collection_resources/time_zone.rb +1 -1
- data/lib/jamf/api/resources/singleton_resources/app_store_country_codes.rb +1 -1
- data/lib/jamf/api/resources/singleton_resources/authorization.rb +1 -1
- data/lib/jamf/api/resources/singleton_resources/client_checkin_settings.rb +1 -1
- data/lib/jamf/api/resources/singleton_resources/reenrollment_settings.rb +1 -1
- data/lib/jamf/client.rb +1 -1
- data/lib/jamf/client/jamf_binary.rb +1 -1
- data/lib/jamf/client/jamf_helper.rb +1 -1
- data/lib/jamf/client/management_action.rb +1 -1
- data/lib/jamf/compatibility.rb +1 -1
- data/lib/jamf/composer.rb +1 -1
- data/lib/jamf/configuration.rb +8 -10
- data/lib/jamf/exceptions.rb +6 -1
- data/lib/jamf/ruby_extensions.rb +2 -1
- data/lib/jamf/ruby_extensions/array.rb +2 -2
- data/lib/jamf/ruby_extensions/array/predicates.rb +1 -1
- data/lib/jamf/ruby_extensions/array/utils.rb +4 -4
- data/lib/jamf/ruby_extensions/dig.rb +52 -0
- data/lib/jamf/ruby_extensions/filetest.rb +1 -1
- data/lib/jamf/ruby_extensions/filetest/predicates.rb +1 -1
- data/lib/jamf/ruby_extensions/hash.rb +1 -1
- data/lib/jamf/ruby_extensions/hash/backports.rb +2 -2
- data/lib/jamf/ruby_extensions/ipaddr.rb +1 -1
- data/lib/jamf/ruby_extensions/ipaddr/utils.rb +1 -1
- data/lib/jamf/ruby_extensions/object.rb +1 -1
- data/lib/jamf/ruby_extensions/object/predicates.rb +1 -1
- data/lib/jamf/ruby_extensions/pathname.rb +1 -1
- data/lib/jamf/ruby_extensions/pathname/predicates.rb +1 -1
- data/lib/jamf/ruby_extensions/pathname/utils.rb +1 -1
- data/lib/jamf/ruby_extensions/string.rb +1 -1
- data/lib/jamf/ruby_extensions/string/backports.rb +1 -1
- data/lib/jamf/ruby_extensions/string/conversions.rb +1 -1
- data/lib/jamf/ruby_extensions/string/predicates.rb +14 -4
- data/lib/jamf/utility.rb +1 -1
- data/lib/jamf/validate.rb +1 -1
- data/lib/jamf/version.rb +2 -2
- data/lib/jpapi.rb +1 -1
- data/lib/jss-api.rb +1 -1
- data/lib/jss.rb +5 -2
- data/lib/jss/api_connection.rb +3 -30
- data/lib/jss/api_object.rb +16 -3
- data/lib/jss/api_object/account.rb +1 -1
- data/lib/jss/api_object/advanced_search.rb +1 -1
- data/lib/jss/api_object/advanced_search/advanced_computer_search.rb +1 -1
- data/lib/jss/api_object/advanced_search/advanced_mobile_device_search.rb +1 -1
- data/lib/jss/api_object/advanced_search/advanced_user_search.rb +1 -1
- data/lib/jss/api_object/building.rb +1 -1
- data/lib/jss/api_object/categorizable.rb +1 -1
- data/lib/jss/api_object/category.rb +1 -1
- data/lib/jss/api_object/computer.rb +12 -6
- data/lib/jss/api_object/computer/application_installs.rb +1 -1
- data/lib/jss/api_object/computer_invitation.rb +1 -1
- data/lib/jss/api_object/configuration_profile.rb +4 -2
- data/lib/jss/api_object/configuration_profile/mobile_device_configuration_profile.rb +1 -1
- data/lib/jss/api_object/configuration_profile/osx_configuration_profile.rb +1 -1
- data/lib/jss/api_object/creatable.rb +1 -1
- data/lib/jss/api_object/criteriable.rb +10 -5
- data/lib/jss/api_object/criteriable/criteria.rb +26 -10
- data/lib/jss/api_object/criteriable/criterion.rb +1 -1
- data/lib/jss/api_object/department.rb +1 -1
- 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 +96 -36
- data/lib/jss/api_object/dock_item.rb +137 -0
- data/lib/jss/api_object/ebook.rb +1 -1
- data/lib/jss/api_object/extendable.rb +67 -28
- data/lib/jss/api_object/extension_attribute.rb +1 -1
- data/lib/jss/api_object/extension_attribute/computer_extension_attribute.rb +1 -1
- data/lib/jss/api_object/extension_attribute/mobile_device_extension_attribute.rb +1 -1
- data/lib/jss/api_object/extension_attribute/user_extension_attribute.rb +1 -1
- data/lib/jss/api_object/group.rb +1 -1
- data/lib/jss/api_object/group/computer_group.rb +1 -1
- data/lib/jss/api_object/group/mobile_device_group.rb +1 -1
- data/lib/jss/api_object/group/user_group.rb +1 -1
- data/lib/jss/api_object/ibeacon.rb +1 -1
- data/lib/jss/api_object/ldap_server.rb +1 -1
- data/lib/jss/api_object/locatable.rb +1 -1
- data/lib/jss/api_object/mac_application.rb +1 -1
- data/lib/jss/api_object/management_history.rb +23 -22
- data/lib/jss/api_object/management_history/audit_event.rb +1 -1
- data/lib/jss/api_object/management_history/casper_imaging_log.rb +1 -1
- data/lib/jss/api_object/management_history/casper_remote_log.rb +1 -1
- data/lib/jss/api_object/management_history/computer_usage_log.rb +1 -1
- data/lib/jss/api_object/management_history/ebook.rb +1 -1
- data/lib/jss/api_object/management_history/hashlike.rb +1 -1
- data/lib/jss/api_object/management_history/mac_app_store_app.rb +1 -1
- data/lib/jss/api_object/management_history/mdm_command.rb +1 -1
- data/lib/jss/api_object/management_history/mobile_device_app.rb +1 -1
- data/lib/jss/api_object/management_history/policy_log.rb +1 -1
- data/lib/jss/api_object/management_history/screen_sharing_log.rb +1 -1
- data/lib/jss/api_object/management_history/user_location_change.rb +1 -1
- data/lib/jss/api_object/matchable.rb +1 -1
- data/lib/jss/api_object/mdm.rb +1 -1
- data/lib/jss/api_object/mobile_device.rb +29 -6
- data/lib/jss/api_object/mobile_device_application.rb +13 -1
- data/lib/jss/api_object/netboot_server.rb +1 -1
- data/lib/jss/api_object/network_segment.rb +153 -59
- data/lib/jss/api_object/package.rb +106 -41
- data/lib/jss/api_object/patch_policy.rb +1 -1
- data/lib/jss/api_object/patch_source.rb +1 -1
- data/lib/jss/api_object/patch_source/patch_external_source.rb +1 -1
- data/lib/jss/api_object/patch_source/patch_internal_source.rb +1 -1
- data/lib/jss/api_object/patch_title.rb +1 -1
- data/lib/jss/api_object/patch_title/version.rb +1 -1
- data/lib/jss/api_object/peripheral.rb +1 -1
- data/lib/jss/api_object/peripheral_type.rb +1 -1
- data/lib/jss/api_object/policy.rb +380 -5
- data/lib/jss/api_object/printer.rb +440 -0
- data/lib/jss/api_object/purchasable.rb +1 -1
- data/lib/jss/api_object/removable_macaddr.rb +1 -1
- data/lib/jss/api_object/restricted_software.rb +1 -1
- data/lib/jss/api_object/scopable.rb +1 -1
- data/lib/jss/api_object/scopable/scope.rb +257 -37
- data/lib/jss/api_object/script.rb +1 -1
- data/lib/jss/api_object/self_servable.rb +7 -7
- data/lib/jss/api_object/self_servable/icon.rb +1 -1
- data/lib/jss/api_object/sitable.rb +6 -2
- data/lib/jss/api_object/site.rb +1 -1
- data/lib/jss/api_object/software_update_server.rb +1 -1
- data/lib/jss/api_object/updatable.rb +1 -1
- data/lib/jss/api_object/uploadable.rb +1 -1
- data/lib/jss/api_object/user.rb +5 -3
- data/lib/jss/api_object/vppable.rb +1 -1
- data/lib/jss/api_object/webhook.rb +1 -1
- data/lib/jss/client.rb +1 -1
- data/lib/jss/client/jamf_binary.rb +1 -1
- data/lib/jss/client/jamf_helper.rb +1 -1
- data/lib/jss/client/management_action.rb +1 -1
- data/lib/jss/compatibility.rb +1 -1
- data/lib/jss/composer.rb +2 -2
- data/lib/jss/configuration.rb +1 -1
- data/lib/jss/db_connection.rb +1 -1
- data/lib/jss/exceptions.rb +1 -1
- data/lib/jss/ruby_extensions.rb +1 -1
- data/lib/jss/ruby_extensions/array.rb +1 -1
- data/lib/jss/ruby_extensions/filetest.rb +1 -1
- data/lib/jss/ruby_extensions/hash.rb +1 -1
- data/lib/jss/ruby_extensions/ipaddr.rb +1 -1
- data/lib/jss/ruby_extensions/pathname.rb +1 -1
- data/lib/jss/ruby_extensions/string.rb +1 -1
- data/lib/jss/ruby_extensions/string/backports.rb +1 -1
- data/lib/jss/ruby_extensions/string/conversions.rb +1 -1
- data/lib/jss/ruby_extensions/string/predicates.rb +14 -4
- data/lib/jss/ruby_extensions/time.rb +1 -1
- data/lib/jss/server.rb +1 -1
- data/lib/jss/utility.rb +9 -23
- data/lib/jss/validate.rb +1 -1
- data/lib/jss/version.rb +2 -2
- data/lib/jss/xml_workaround.rb +1 -1
- data/lib/ruby-jss.rb +1 -1
- data/test/bin/runtests +1 -1
- data/test/lib/testhelper.rb +1 -1
- data/test/lib/testhelper/auth.rb +1 -1
- data/test/lib/testhelper/patch_mgmt.rb +1 -1
- data/test/specs/api_connection_spec.rb +1 -1
- data/test/specs/patch01_source_spec.rb +1 -1
- data/test/specs/patch02_internal_source_spec.rb +1 -1
- data/test/specs/patch03_external_source_spec.rb +1 -1
- data/test/specs/patch04_titles_spec.rb +1 -1
- data/test/specs/patch05_policies_spec.rb +1 -1
- data/test/specs/patch06_cleanup_spec.rb +1 -1
- data/test/specs/policy_spec.rb +1 -1
- metadata +15 -4
data/lib/jss/api_object/ebook.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
1
|
+
# Copyright 2020 Pixar
|
|
2
2
|
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "Apache License")
|
|
@@ -180,31 +180,21 @@ module JSS
|
|
|
180
180
|
#
|
|
181
181
|
# @return [void]
|
|
182
182
|
#
|
|
183
|
-
def set_ext_attr(
|
|
184
|
-
raise ArgumentError, "Unknown Extension Attribute Name: '#{
|
|
183
|
+
def set_ext_attr(ea_name, value, validate_popup_choice: true, refresh: false)
|
|
184
|
+
raise ArgumentError, "Unknown Extension Attribute Name: '#{ea_name}'" unless ea_types.key? ea_name
|
|
185
185
|
|
|
186
|
-
value
|
|
187
|
-
validate_popup_value(name, value, refresh) if validate_popup_choice
|
|
186
|
+
value = validate_ea_value(ea_name, value, validate_popup_choice, refresh)
|
|
188
187
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
raise JSS::InvalidDataError, "The value for #{name} must be a date, cannot be blank" if value == JSS::BLANK
|
|
192
|
-
|
|
193
|
-
value = JSS.parse_datetime value
|
|
194
|
-
|
|
195
|
-
when *JSS::ExtensionAttribute::NUMERIC_TYPES
|
|
196
|
-
raise JSS::InvalidDataError, "The value for #{name} must be an integer" unless value.is_a? Integer
|
|
188
|
+
# update this ea hash in the @extension_attributes array
|
|
189
|
+
ea_hash = @extension_attributes.find { |ea| ea[:name] == ea_name }
|
|
197
190
|
|
|
198
|
-
|
|
199
|
-
value = value.to_s
|
|
200
|
-
end # case
|
|
191
|
+
raise JSS::NoSuchItemError, "#{self.class} '#{name}'(id #{id}) does not know about ExtAttr '#{ea_name}'. Please re-fetch and try again." unless ea_hash
|
|
201
192
|
|
|
202
|
-
|
|
203
|
-
@extension_attributes.each { |ea| ea[:value] = value if ea[:name] == name }
|
|
193
|
+
ea_hash[:value] = value
|
|
204
194
|
|
|
205
195
|
# update the shortcut hash too
|
|
206
|
-
@ext_attrs[
|
|
207
|
-
@changed_eas <<
|
|
196
|
+
@ext_attrs[ea_name] = value if @ext_attrs
|
|
197
|
+
@changed_eas << ea_name
|
|
208
198
|
@need_to_update = true
|
|
209
199
|
end
|
|
210
200
|
|
|
@@ -248,22 +238,71 @@ module JSS
|
|
|
248
238
|
eaxml
|
|
249
239
|
end
|
|
250
240
|
|
|
251
|
-
#
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
241
|
+
# is the value being passed to set_ext_attr valid?
|
|
242
|
+
# Converts values as needed (e.g. strings to integers or Times)
|
|
243
|
+
#
|
|
244
|
+
# If the EA is defined to hold a string, any value is accepted and
|
|
245
|
+
# converted with #to_s
|
|
246
|
+
#
|
|
247
|
+
# Note: All EAs can be blank
|
|
248
|
+
#
|
|
249
|
+
# @param name[String] the name of the extension attribute to set
|
|
250
|
+
#
|
|
251
|
+
# @param value[String,Time,Integer] the new value for the extension
|
|
252
|
+
# attribute for this user
|
|
253
|
+
#
|
|
254
|
+
# @param validate_popup_choice[Boolean] validate the new value against the E.A. definition.
|
|
255
|
+
# Defaults to true.
|
|
256
|
+
#
|
|
257
|
+
# @param refresh[Boolean] Re-read the ext. attrib definition from the API,
|
|
258
|
+
# for popup validation.
|
|
259
|
+
#
|
|
260
|
+
# @return [Object] the possibly modified valid value
|
|
261
|
+
#
|
|
262
|
+
def validate_ea_value(ea_name, value, validate_popup_choice, refresh)
|
|
263
|
+
return JSS::BLANK if value.to_s == JSS::BLANK
|
|
264
|
+
|
|
265
|
+
value =
|
|
266
|
+
case ea_types[ea_name]
|
|
267
|
+
when JSS::ExtensionAttribute::DATA_TYPE_DATE
|
|
268
|
+
JSS.parse_datetime(value).to_s
|
|
269
|
+
when *JSS::ExtensionAttribute::NUMERIC_TYPES
|
|
270
|
+
validate_integer_ea_value ea_name, value
|
|
271
|
+
else
|
|
272
|
+
value.to_s
|
|
273
|
+
end # case
|
|
274
|
+
|
|
275
|
+
validate_popup_value(ea_name, value, refresh) if validate_popup_choice
|
|
276
|
+
|
|
277
|
+
value
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
# raise error if the value isn't an integer
|
|
281
|
+
def validate_integer_ea_value(ea_name, value)
|
|
282
|
+
if value.is_a? Integer
|
|
283
|
+
value
|
|
284
|
+
elsif value.to_s.jss_integer?
|
|
285
|
+
value.to_s.to_i
|
|
286
|
+
else
|
|
287
|
+
raise JSS::InvalidDataError, "The value for #{ea_name} must be an integer"
|
|
288
|
+
end # if
|
|
289
|
+
end
|
|
255
290
|
|
|
291
|
+
# Raise an error if the named EA has a popup menu,
|
|
292
|
+
# but the provided value isn't one of the menu items
|
|
293
|
+
#
|
|
294
|
+
def validate_popup_value(ea_name, value, refresh)
|
|
256
295
|
# get the ea def. instance from the api cache, or the api
|
|
257
296
|
api.ext_attr_definition_cache[self.class] ||= {}
|
|
258
|
-
api.ext_attr_definition_cache[self.class][
|
|
259
|
-
api.ext_attr_definition_cache[self.class][
|
|
297
|
+
api.ext_attr_definition_cache[self.class][ea_name] = nil if refresh
|
|
298
|
+
api.ext_attr_definition_cache[self.class][ea_name] ||= self.class::EXT_ATTRIB_CLASS.fetch name: ea_name, api: api
|
|
260
299
|
|
|
261
|
-
ea_def = api.ext_attr_definition_cache[self.class][
|
|
300
|
+
ea_def = api.ext_attr_definition_cache[self.class][ea_name]
|
|
262
301
|
return unless ea_def.from_popup_menu?
|
|
263
302
|
|
|
264
303
|
return if ea_def.popup_choices.include? value.to_s
|
|
265
304
|
|
|
266
|
-
raise JSS::UnsupportedError, "The value for #{
|
|
305
|
+
raise JSS::UnsupportedError, "The value for #{ea_name} must be one of: '#{ea_def.popup_choices.join("' '")}'"
|
|
267
306
|
end
|
|
268
307
|
|
|
269
308
|
end # module extendable
|
data/lib/jss/api_object/group.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
### Copyright
|
|
1
|
+
### Copyright 2020 Pixar
|
|
2
2
|
|
|
3
3
|
###
|
|
4
4
|
### Licensed under the Apache License, Version 2.0 (the "Apache License")
|
|
@@ -293,27 +293,6 @@ module JSS
|
|
|
293
293
|
end # completed_mdm_commands
|
|
294
294
|
alias completed_commands completed_mdm_commands
|
|
295
295
|
|
|
296
|
-
# The time of the most recently completed MDM command.
|
|
297
|
-
#
|
|
298
|
-
# For Mobile Devices, this seems to be the best indicator of the real
|
|
299
|
-
# last-contact time, since the last_inventory_update is changed when
|
|
300
|
-
# changes are made via the API.
|
|
301
|
-
#
|
|
302
|
-
# @param ident [Type] The identifier for the object - id, name, sn, udid, etc.
|
|
303
|
-
#
|
|
304
|
-
# @param api [JSS::APIConnection] The API connection to use for the query
|
|
305
|
-
# defaults to the currently active connection
|
|
306
|
-
#
|
|
307
|
-
# @return [Time, nil] An array of completed MDMCommands
|
|
308
|
-
#
|
|
309
|
-
def last_mdm_contact(ident, api: JSS.api)
|
|
310
|
-
cmds = completed_mdm_commands(ident, api: api)
|
|
311
|
-
return nil if cmds.empty?
|
|
312
|
-
|
|
313
|
-
JSS.epoch_to_time cmds.map{|cmd| cmd.completed_epoch }.max
|
|
314
|
-
end
|
|
315
|
-
|
|
316
|
-
|
|
317
296
|
# The history of pending mdm commands for a target
|
|
318
297
|
#
|
|
319
298
|
# @param ident [Type] The identifier for the object - id, name, sn, udid, etc.
|
|
@@ -342,6 +321,28 @@ module JSS
|
|
|
342
321
|
end # completed_mdm_commands
|
|
343
322
|
alias failed_commands failed_mdm_commands
|
|
344
323
|
|
|
324
|
+
# The time of the most recently completed or failed MDM command.
|
|
325
|
+
# (knowledge of a failure means the device communicated with us)
|
|
326
|
+
#
|
|
327
|
+
# For Mobile Devices, this seems to be the best indicator of the real
|
|
328
|
+
# last-contact time, since the last_inventory_update is changed when
|
|
329
|
+
# changes are made via the API.
|
|
330
|
+
#
|
|
331
|
+
# @param ident [Type] The identifier for the object - id, name, sn, udid, etc.
|
|
332
|
+
#
|
|
333
|
+
# @param api [JSS::APIConnection] The API connection to use for the query
|
|
334
|
+
# defaults to the currently active connection
|
|
335
|
+
#
|
|
336
|
+
# @return [Time, nil] An array of completed MDMCommands
|
|
337
|
+
#
|
|
338
|
+
def last_mdm_contact(ident, api: JSS.api)
|
|
339
|
+
epochs = completed_mdm_commands(ident, api: api).map { |cmd| cmd.completed_epoch }
|
|
340
|
+
epochs += failed_mdm_commands(ident, api: api).map { |cmd| cmd.failed_epoch }
|
|
341
|
+
epoch = epochs.max
|
|
342
|
+
epoch ? JSS.epoch_to_time(epoch) : nil
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
|
|
345
346
|
# The history of app store apps for a computer
|
|
346
347
|
#
|
|
347
348
|
# @param ident [Type] The identifier for the object - id, name, sn, udid, etc.
|
data/lib/jss/api_object/mdm.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
### Copyright
|
|
1
|
+
### Copyright 2020 Pixar
|
|
2
2
|
|
|
3
3
|
###
|
|
4
4
|
### Licensed under the Apache License, Version 2.0 (the "Apache License")
|
|
@@ -126,8 +126,15 @@ module JSS
|
|
|
126
126
|
}
|
|
127
127
|
}.freeze
|
|
128
128
|
|
|
129
|
+
HW_PREFIX_TV = 'AppleTV'.freeze
|
|
130
|
+
HW_PREFIX_IPAD = 'iPad'.freeze
|
|
131
|
+
HW_PREFIX_IPHONE = 'iPhone'.freeze
|
|
132
|
+
|
|
129
133
|
NON_UNIQUE_NAMES = true
|
|
130
134
|
|
|
135
|
+
# file uploads can send attachments to the JSS using :mobiledevices as the sub-resource.
|
|
136
|
+
UPLOAD_TYPES = { attachment: :mobiledevices }.freeze
|
|
137
|
+
|
|
131
138
|
# This class lets us seach for computers
|
|
132
139
|
SEARCH_CLASS = JSS::AdvancedMobileDeviceSearch
|
|
133
140
|
|
|
@@ -489,6 +496,19 @@ module JSS
|
|
|
489
496
|
end
|
|
490
497
|
end # initialize
|
|
491
498
|
|
|
499
|
+
def tv?
|
|
500
|
+
model_identifier.start_with? HW_PREFIX_TV
|
|
501
|
+
end
|
|
502
|
+
alias apple_tv? tv?
|
|
503
|
+
|
|
504
|
+
def ipad?
|
|
505
|
+
model_identifier.start_with? HW_PREFIX_IPAD
|
|
506
|
+
end
|
|
507
|
+
|
|
508
|
+
def iphone?
|
|
509
|
+
model_identifier.start_with? HW_PREFIX_IPHONE
|
|
510
|
+
end
|
|
511
|
+
|
|
492
512
|
def name=(new_name)
|
|
493
513
|
super
|
|
494
514
|
@needs_mdm_name_change = true if managed? && supervised?
|
|
@@ -510,16 +530,19 @@ module JSS
|
|
|
510
530
|
|
|
511
531
|
#
|
|
512
532
|
def asset_tag=(new_val)
|
|
533
|
+
new_val = new_val.strip
|
|
513
534
|
return nil if @asset_tag == new_val
|
|
514
|
-
|
|
535
|
+
|
|
515
536
|
@asset_tag = new_val
|
|
516
537
|
@need_to_update = true
|
|
517
538
|
end
|
|
518
539
|
|
|
519
|
-
#
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
540
|
+
# @param no_mdm_rename[Boolean] should a MDM `set device name` command be sent
|
|
541
|
+
# if the device is managed and supervised?
|
|
542
|
+
def update(no_mdm_rename: false)
|
|
543
|
+
super()
|
|
544
|
+
return @id if no_mdm_rename || !@needs_mdm_name_change
|
|
545
|
+
|
|
523
546
|
set_device_name @name if managed? && supervised?
|
|
524
547
|
@needs_mdm_name_change = false
|
|
525
548
|
@id
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
### Copyright
|
|
1
|
+
### Copyright 2020 Pixar
|
|
2
2
|
|
|
3
3
|
###
|
|
4
4
|
### Licensed under the Apache License, Version 2.0 (the "Apache License")
|
|
@@ -444,6 +444,18 @@ module JSS
|
|
|
444
444
|
refresh_ipa
|
|
445
445
|
end
|
|
446
446
|
|
|
447
|
+
# Remove the various cached data
|
|
448
|
+
# from the instance_variables used to create
|
|
449
|
+
# pretty-print (pp) output.
|
|
450
|
+
#
|
|
451
|
+
# @return [Array] the desired instance_variables
|
|
452
|
+
#
|
|
453
|
+
def pretty_print_instance_variables
|
|
454
|
+
vars = super
|
|
455
|
+
vars.delete :@ipa
|
|
456
|
+
vars
|
|
457
|
+
end
|
|
458
|
+
|
|
447
459
|
# Private Instance Methods
|
|
448
460
|
###########################################
|
|
449
461
|
private
|