ruby-jss 1.2.6 → 1.4.1

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.
Files changed (250) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +189 -1
  3. data/README.md +1 -1
  4. data/bin/cgrouper +1 -1
  5. data/bin/jamfHelperBackgrounder +1 -1
  6. data/bin/netseg-update +1 -1
  7. data/data/ruby-jss.conf.example +1 -1
  8. data/lib/jamf.rb +1 -1
  9. data/lib/jamf/api/abstract_classes/advanced_search.rb +1 -1
  10. data/lib/jamf/api/abstract_classes/collection_resource.rb +17 -9
  11. data/lib/jamf/api/abstract_classes/generic_reference.rb +1 -1
  12. data/lib/jamf/api/abstract_classes/json_object.rb +2 -2
  13. data/lib/jamf/api/abstract_classes/prestage.rb +2 -2
  14. data/lib/jamf/api/abstract_classes/prestage_skip_setup_items.rb +1 -1
  15. data/lib/jamf/api/abstract_classes/resource.rb +1 -1
  16. data/lib/jamf/api/abstract_classes/singleton_resource.rb +1 -1
  17. data/lib/jamf/api/attribute_classes/ip_address.rb +1 -1
  18. data/lib/jamf/api/attribute_classes/timestamp.rb +1 -1
  19. data/lib/jamf/api/connection.rb +9 -5
  20. data/lib/jamf/api/connection/api_error.rb +1 -1
  21. data/lib/jamf/api/connection/api_error_styleguide.rb +1 -1
  22. data/lib/jamf/api/connection/token.rb +22 -2
  23. data/lib/jamf/api/json_objects/account_prefs.rb +1 -1
  24. data/lib/jamf/api/json_objects/android_details.rb +1 -1
  25. data/lib/jamf/api/json_objects/appletv_details.rb +1 -1
  26. data/lib/jamf/api/json_objects/attachment.rb +1 -1
  27. data/lib/jamf/api/json_objects/cellular_network.rb +1 -1
  28. data/lib/jamf/api/json_objects/change_log_entry.rb +1 -1
  29. data/lib/jamf/api/json_objects/computer_prestage_skip_setup_items.rb +1 -1
  30. data/lib/jamf/api/json_objects/country.rb +1 -1
  31. data/lib/jamf/api/json_objects/criterion.rb +1 -1
  32. data/lib/jamf/api/json_objects/device_enrollment_device.rb +1 -1
  33. data/lib/jamf/api/json_objects/device_enrollment_sync_status.rb +1 -1
  34. data/lib/jamf/api/json_objects/extension_attribute_value.rb +1 -1
  35. data/lib/jamf/api/json_objects/installed_application.rb +1 -1
  36. data/lib/jamf/api/json_objects/installed_certificate.rb +1 -1
  37. data/lib/jamf/api/json_objects/installed_configuration_profile.rb +1 -1
  38. data/lib/jamf/api/json_objects/installed_ebook.rb +1 -1
  39. data/lib/jamf/api/json_objects/installed_provisioning_profile.rb +1 -1
  40. data/lib/jamf/api/json_objects/inventory_preload_extension_attribute.rb +1 -1
  41. data/lib/jamf/api/json_objects/ios_details.rb +1 -1
  42. data/lib/jamf/api/json_objects/location.rb +1 -1
  43. data/lib/jamf/api/json_objects/md_prestage_name.rb +1 -1
  44. data/lib/jamf/api/json_objects/md_prestage_names.rb +1 -1
  45. data/lib/jamf/api/json_objects/md_prestage_skip_setup_items.rb +1 -1
  46. data/lib/jamf/api/json_objects/mobile_device_details.rb +1 -1
  47. data/lib/jamf/api/json_objects/mobile_device_security.rb +1 -1
  48. data/lib/jamf/api/json_objects/prestage_assignment.rb +1 -1
  49. data/lib/jamf/api/json_objects/prestage_location.rb +1 -1
  50. data/lib/jamf/api/json_objects/prestage_purchasing_data.rb +1 -1
  51. data/lib/jamf/api/json_objects/prestage_scope.rb +1 -1
  52. data/lib/jamf/api/json_objects/prestage_sync_status.rb +1 -1
  53. data/lib/jamf/api/json_objects/purchasing_data.rb +1 -1
  54. data/lib/jamf/api/mixins/abstract.rb +1 -1
  55. data/lib/jamf/api/mixins/bulk_deletable.rb +1 -1
  56. data/lib/jamf/api/mixins/change_log.rb +1 -1
  57. data/lib/jamf/api/mixins/extendable.rb +1 -1
  58. data/lib/jamf/api/mixins/immutable.rb +1 -1
  59. data/lib/jamf/api/mixins/locatable.rb +1 -1
  60. data/lib/jamf/api/mixins/lockable.rb +1 -1
  61. data/lib/jamf/api/mixins/referable.rb +1 -1
  62. data/lib/jamf/api/mixins/searchable.rb +1 -1
  63. data/lib/jamf/api/mixins/uncreatable.rb +1 -1
  64. data/lib/jamf/api/mixins/undeletable.rb +1 -1
  65. data/lib/jamf/api/resources/collection_resources/account.rb +1 -1
  66. data/lib/jamf/api/resources/collection_resources/advanced_mobile_device_search.rb +1 -1
  67. data/lib/jamf/api/resources/collection_resources/advanced_user_search.rb +1 -1
  68. data/lib/jamf/api/resources/collection_resources/building.rb +1 -1
  69. data/lib/jamf/api/resources/collection_resources/category.rb +1 -1
  70. data/lib/jamf/api/resources/collection_resources/computer.rb +1 -1
  71. data/lib/jamf/api/resources/collection_resources/computer_prestage.rb +1 -1
  72. data/lib/jamf/api/resources/collection_resources/department.rb +2 -2
  73. data/lib/jamf/api/resources/collection_resources/device_enrollment.rb +4 -4
  74. data/lib/jamf/api/resources/collection_resources/extension_attribute.rb +1 -1
  75. data/lib/jamf/api/resources/collection_resources/inventory_preload_record.rb +1 -1
  76. data/lib/jamf/api/resources/collection_resources/mobile_device.rb +1 -1
  77. data/lib/jamf/api/resources/collection_resources/mobile_device_prestage.rb +1 -1
  78. data/lib/jamf/api/resources/collection_resources/script.rb +1 -1
  79. data/lib/jamf/api/resources/collection_resources/site.rb +1 -1
  80. data/lib/jamf/api/resources/collection_resources/time_zone.rb +1 -1
  81. data/lib/jamf/api/resources/singleton_resources/app_store_country_codes.rb +1 -1
  82. data/lib/jamf/api/resources/singleton_resources/authorization.rb +1 -1
  83. data/lib/jamf/api/resources/singleton_resources/client_checkin_settings.rb +1 -1
  84. data/lib/jamf/api/resources/singleton_resources/reenrollment_settings.rb +1 -1
  85. data/lib/jamf/client.rb +1 -1
  86. data/lib/jamf/client/jamf_binary.rb +1 -1
  87. data/lib/jamf/client/jamf_helper.rb +1 -1
  88. data/lib/jamf/client/management_action.rb +1 -1
  89. data/lib/jamf/compatibility.rb +1 -1
  90. data/lib/jamf/composer.rb +1 -1
  91. data/lib/jamf/configuration.rb +8 -10
  92. data/lib/jamf/exceptions.rb +1 -1
  93. data/lib/jamf/ruby_extensions.rb +2 -1
  94. data/lib/jamf/ruby_extensions/array.rb +2 -2
  95. data/lib/jamf/ruby_extensions/array/predicates.rb +1 -1
  96. data/lib/jamf/ruby_extensions/array/utils.rb +4 -4
  97. data/lib/jamf/ruby_extensions/dig.rb +52 -0
  98. data/lib/jamf/ruby_extensions/filetest.rb +1 -1
  99. data/lib/jamf/ruby_extensions/filetest/predicates.rb +1 -1
  100. data/lib/jamf/ruby_extensions/hash.rb +1 -1
  101. data/lib/jamf/ruby_extensions/hash/backports.rb +2 -2
  102. data/lib/jamf/ruby_extensions/ipaddr.rb +1 -1
  103. data/lib/jamf/ruby_extensions/ipaddr/utils.rb +1 -1
  104. data/lib/jamf/ruby_extensions/object.rb +1 -1
  105. data/lib/jamf/ruby_extensions/object/predicates.rb +1 -1
  106. data/lib/jamf/ruby_extensions/pathname.rb +1 -1
  107. data/lib/jamf/ruby_extensions/pathname/predicates.rb +1 -1
  108. data/lib/jamf/ruby_extensions/pathname/utils.rb +1 -1
  109. data/lib/jamf/ruby_extensions/string.rb +1 -1
  110. data/lib/jamf/ruby_extensions/string/backports.rb +1 -1
  111. data/lib/jamf/ruby_extensions/string/conversions.rb +1 -1
  112. data/lib/jamf/ruby_extensions/string/predicates.rb +14 -4
  113. data/lib/jamf/utility.rb +1 -1
  114. data/lib/jamf/validate.rb +1 -1
  115. data/lib/jamf/version.rb +2 -2
  116. data/lib/jpapi.rb +1 -1
  117. data/lib/jss-api.rb +1 -1
  118. data/lib/jss.rb +3 -1
  119. data/lib/jss/api_connection.rb +3 -30
  120. data/lib/jss/api_object.rb +23 -4
  121. data/lib/jss/api_object/account.rb +1 -1
  122. data/lib/jss/api_object/advanced_search.rb +28 -27
  123. data/lib/jss/api_object/advanced_search/advanced_computer_search.rb +1 -1
  124. data/lib/jss/api_object/advanced_search/advanced_mobile_device_search.rb +1 -1
  125. data/lib/jss/api_object/advanced_search/advanced_user_search.rb +1 -1
  126. data/lib/jss/api_object/app_store_country_codes.rb +298 -0
  127. data/lib/jss/api_object/building.rb +1 -1
  128. data/lib/jss/api_object/categorizable.rb +1 -1
  129. data/lib/jss/api_object/category.rb +1 -1
  130. data/lib/jss/api_object/computer.rb +12 -6
  131. data/lib/jss/api_object/computer/application_installs.rb +1 -1
  132. data/lib/jss/api_object/computer_invitation.rb +1 -1
  133. data/lib/jss/api_object/configuration_profile.rb +4 -2
  134. data/lib/jss/api_object/configuration_profile/mobile_device_configuration_profile.rb +1 -1
  135. data/lib/jss/api_object/configuration_profile/osx_configuration_profile.rb +1 -1
  136. data/lib/jss/api_object/creatable.rb +1 -1
  137. data/lib/jss/api_object/criteriable.rb +1 -1
  138. data/lib/jss/api_object/criteriable/criteria.rb +1 -1
  139. data/lib/jss/api_object/criteriable/criterion.rb +1 -1
  140. data/lib/jss/api_object/department.rb +1 -1
  141. data/lib/jss/api_object/directory_binding.rb +273 -0
  142. data/lib/jss/api_object/directory_binding_type.rb +90 -0
  143. data/lib/jss/api_object/directory_binding_type/active_directory.rb +502 -0
  144. data/lib/jss/api_object/directory_binding_type/admitmac.rb +525 -0
  145. data/lib/jss/api_object/directory_binding_type/centrify.rb +212 -0
  146. data/lib/jss/api_object/directory_binding_type/open_directory.rb +178 -0
  147. data/lib/jss/api_object/directory_binding_type/powerbroker_identity_services.rb +73 -0
  148. data/lib/jss/api_object/disk_encryption_configurations.rb +114 -0
  149. data/lib/jss/api_object/distribution_point.rb +96 -36
  150. data/lib/jss/api_object/dock_item.rb +137 -0
  151. data/lib/jss/api_object/ebook.rb +2 -3
  152. data/lib/jss/api_object/extendable.rb +67 -28
  153. data/lib/jss/api_object/extension_attribute.rb +5 -4
  154. data/lib/jss/api_object/extension_attribute/computer_extension_attribute.rb +1 -1
  155. data/lib/jss/api_object/extension_attribute/mobile_device_extension_attribute.rb +1 -1
  156. data/lib/jss/api_object/extension_attribute/user_extension_attribute.rb +1 -1
  157. data/lib/jss/api_object/group.rb +1 -1
  158. data/lib/jss/api_object/group/computer_group.rb +1 -1
  159. data/lib/jss/api_object/group/mobile_device_group.rb +1 -1
  160. data/lib/jss/api_object/group/user_group.rb +1 -1
  161. data/lib/jss/api_object/ibeacon.rb +1 -1
  162. data/lib/jss/api_object/ldap_server.rb +1 -1
  163. data/lib/jss/api_object/locatable.rb +1 -1
  164. data/lib/jss/api_object/mac_application.rb +108 -9
  165. data/lib/jss/api_object/management_history.rb +1 -1
  166. data/lib/jss/api_object/management_history/audit_event.rb +1 -1
  167. data/lib/jss/api_object/management_history/casper_imaging_log.rb +1 -1
  168. data/lib/jss/api_object/management_history/casper_remote_log.rb +1 -1
  169. data/lib/jss/api_object/management_history/computer_usage_log.rb +1 -1
  170. data/lib/jss/api_object/management_history/ebook.rb +1 -1
  171. data/lib/jss/api_object/management_history/hashlike.rb +1 -1
  172. data/lib/jss/api_object/management_history/mac_app_store_app.rb +1 -1
  173. data/lib/jss/api_object/management_history/mdm_command.rb +1 -1
  174. data/lib/jss/api_object/management_history/mobile_device_app.rb +1 -1
  175. data/lib/jss/api_object/management_history/policy_log.rb +1 -1
  176. data/lib/jss/api_object/management_history/screen_sharing_log.rb +1 -1
  177. data/lib/jss/api_object/management_history/user_location_change.rb +1 -1
  178. data/lib/jss/api_object/matchable.rb +1 -1
  179. data/lib/jss/api_object/mdm.rb +1 -1
  180. data/lib/jss/api_object/mobile_device.rb +12 -6
  181. data/lib/jss/api_object/mobile_device_application.rb +13 -1
  182. data/lib/jss/api_object/netboot_server.rb +1 -1
  183. data/lib/jss/api_object/network_segment.rb +153 -59
  184. data/lib/jss/api_object/package.rb +106 -41
  185. data/lib/jss/api_object/patch_policy.rb +1 -1
  186. data/lib/jss/api_object/patch_source.rb +1 -1
  187. data/lib/jss/api_object/patch_source/patch_external_source.rb +1 -1
  188. data/lib/jss/api_object/patch_source/patch_internal_source.rb +1 -1
  189. data/lib/jss/api_object/patch_title.rb +1 -1
  190. data/lib/jss/api_object/patch_title/version.rb +1 -1
  191. data/lib/jss/api_object/peripheral.rb +1 -1
  192. data/lib/jss/api_object/peripheral_type.rb +1 -1
  193. data/lib/jss/api_object/policy.rb +492 -8
  194. data/lib/jss/api_object/printer.rb +440 -0
  195. data/lib/jss/api_object/purchasable.rb +1 -1
  196. data/lib/jss/api_object/removable_macaddr.rb +1 -1
  197. data/lib/jss/api_object/restricted_software.rb +1 -1
  198. data/lib/jss/api_object/scopable.rb +1 -1
  199. data/lib/jss/api_object/scopable/scope.rb +387 -72
  200. data/lib/jss/api_object/script.rb +1 -1
  201. data/lib/jss/api_object/self_servable.rb +24 -16
  202. data/lib/jss/api_object/self_servable/icon.rb +1 -1
  203. data/lib/jss/api_object/sitable.rb +1 -1
  204. data/lib/jss/api_object/site.rb +1 -1
  205. data/lib/jss/api_object/software_update_server.rb +1 -1
  206. data/lib/jss/api_object/updatable.rb +1 -1
  207. data/lib/jss/api_object/uploadable.rb +2 -2
  208. data/lib/jss/api_object/user.rb +43 -2
  209. data/lib/jss/api_object/vpp_account.rb +209 -0
  210. data/lib/jss/api_object/vppable.rb +170 -14
  211. data/lib/jss/api_object/webhook.rb +1 -1
  212. data/lib/jss/client.rb +1 -1
  213. data/lib/jss/client/jamf_binary.rb +1 -1
  214. data/lib/jss/client/jamf_helper.rb +1 -1
  215. data/lib/jss/client/management_action.rb +1 -1
  216. data/lib/jss/compatibility.rb +1 -1
  217. data/lib/jss/composer.rb +2 -2
  218. data/lib/jss/configuration.rb +1 -1
  219. data/lib/jss/db_connection.rb +1 -1
  220. data/lib/jss/exceptions.rb +1 -1
  221. data/lib/jss/ruby_extensions.rb +1 -1
  222. data/lib/jss/ruby_extensions/array.rb +1 -1
  223. data/lib/jss/ruby_extensions/filetest.rb +1 -1
  224. data/lib/jss/ruby_extensions/hash.rb +1 -1
  225. data/lib/jss/ruby_extensions/ipaddr.rb +1 -1
  226. data/lib/jss/ruby_extensions/pathname.rb +1 -1
  227. data/lib/jss/ruby_extensions/string.rb +1 -1
  228. data/lib/jss/ruby_extensions/string/backports.rb +1 -1
  229. data/lib/jss/ruby_extensions/string/conversions.rb +1 -1
  230. data/lib/jss/ruby_extensions/string/predicates.rb +14 -4
  231. data/lib/jss/ruby_extensions/time.rb +1 -1
  232. data/lib/jss/server.rb +1 -1
  233. data/lib/jss/utility.rb +9 -23
  234. data/lib/jss/validate.rb +54 -11
  235. data/lib/jss/version.rb +2 -2
  236. data/lib/jss/xml_workaround.rb +1 -1
  237. data/lib/ruby-jss.rb +1 -1
  238. data/test/bin/runtests +1 -1
  239. data/test/lib/testhelper.rb +1 -1
  240. data/test/lib/testhelper/auth.rb +1 -1
  241. data/test/lib/testhelper/patch_mgmt.rb +1 -1
  242. data/test/specs/api_connection_spec.rb +1 -1
  243. data/test/specs/patch01_source_spec.rb +1 -1
  244. data/test/specs/patch02_internal_source_spec.rb +1 -1
  245. data/test/specs/patch03_external_source_spec.rb +1 -1
  246. data/test/specs/patch04_titles_spec.rb +1 -1
  247. data/test/specs/patch05_policies_spec.rb +1 -1
  248. data/test/specs/patch06_cleanup_spec.rb +1 -1
  249. data/test/specs/policy_spec.rb +1 -1
  250. metadata +15 -2
@@ -1,4 +1,4 @@
1
- ### Copyright 2019 Pixar
1
+ ### Copyright 2020 Pixar
2
2
 
3
3
  ###
4
4
  ### Licensed under the Apache License, Version 2.0 (the "Apache License")
@@ -1,5 +1,5 @@
1
1
 
2
- ### Copyright 2019 Pixar
2
+ ### Copyright 2020 Pixar
3
3
 
4
4
  ###
5
5
  ### Licensed under the Apache License, Version 2.0 (the "Apache License")
@@ -51,12 +51,12 @@ module JSS
51
51
  # - :security
52
52
  #
53
53
  # Additionally, items that apper in macOS Slf Svc have these keys:
54
- # - :self_service_display_name
54
+ # - :self_service_display_name (but not JSS::MacApplication)
55
55
  # - :install_button_text
56
- # - :reinstall_button_text
56
+ # - :reinstall_button_text (but not JSS::MacApplication)
57
57
  # - :force_users_to_view_description
58
58
  # - :notification
59
- # - :notification_location # PENDING API FIX
59
+ # - :notification_location # PENDING API FIX, and also, not JSS::MacApplication
60
60
  # - :notification_subject
61
61
  # - :notification_message
62
62
  #
@@ -178,15 +178,14 @@ module JSS
178
178
  notification_reminders: true
179
179
  },
180
180
  JSS::MacApplication => {
181
- # in_self_service_data_path was finally implemnted in JamfPro 10.9
182
- # Jamf Product Issue [PI-003773]
183
- in_self_service_data_path: [:general, :deployment_type],
181
+ in_self_service_data_path: %i[general deployment_type],
184
182
  in_self_service: MAKE_AVAILABLE,
185
183
  not_in_self_service: AUTO_INSTALL_OR_PROMPT,
186
184
  targets: [:macos],
187
185
  payload: :app,
188
186
  can_display_in_categories: true,
189
187
  can_feature_in_categories: true,
188
+ notifications_supported: :ssvc_and_nctr,
190
189
  url_entity: 'app'
191
190
  # OTHER BUG: no notification options seem to be changable via the API
192
191
  },
@@ -329,6 +328,7 @@ module JSS
329
328
  #
330
329
  def self_service_view_url
331
330
  return nil unless @self_service_data_config[:url_entity]
331
+
332
332
  "#{USER_URL_BASE}#{@self_service_data_config[:url_entity]}&id=#{id}&action=#{USER_URL_VIEW_ACTION}"
333
333
  end
334
334
 
@@ -336,6 +336,7 @@ module JSS
336
336
  #
337
337
  def self_service_execute_url
338
338
  return nil unless @self_service_data_config[:url_entity]
339
+
339
340
  "#{USER_URL_BASE}#{@self_service_data_config[:url_entity]}&id=#{id}&action=#{USER_URL_EXEC_ACTION}"
340
341
  end
341
342
 
@@ -347,8 +348,9 @@ module JSS
347
348
  # @return [void]
348
349
  #
349
350
  def self_service_description=(new_val)
350
- new_val.strip!
351
+ new_val = new_val.strip
351
352
  return if @self_service_description == new_val
353
+
352
354
  @self_service_description = new_val
353
355
  @need_to_update = true
354
356
  end
@@ -358,7 +360,7 @@ module JSS
358
360
  # @return [void]
359
361
  #
360
362
  def self_service_display_name=(new_val)
361
- new_val.strip!
363
+ new_val = new_val.strip
362
364
  return nil if @self_service_dislay_name == new_val
363
365
  raise JSS::InvalidDataError, 'Only macOS Self Service items have display names' unless self_service_targets.include? :macos
364
366
  @self_service_dislay_name = new_val
@@ -372,7 +374,7 @@ module JSS
372
374
  # @return [void]
373
375
  #
374
376
  def self_service_install_button_text=(new_val)
375
- new_val.strip!
377
+ new_val = new_val.strip
376
378
  return nil if @self_service_install_button_text == new_val
377
379
  raise JSS::InvalidDataError, 'Only macOS Self Service Items can have custom button text' unless self_service_targets.include? :macos
378
380
  @self_service_install_button_text = new_val
@@ -384,7 +386,7 @@ module JSS
384
386
  # @return [void]
385
387
  #
386
388
  def self_service_reinstall_button_text=(new_val)
387
- new_val.strip!
389
+ new_val = new_val.strip
388
390
  return nil if @self_service_reinstall_button_text == new_val
389
391
  raise JSS::InvalidDataError, 'Only macOS Self Service Items can have custom button text' unless self_service_targets.include? :macos
390
392
  @self_service_reinstall_button_text = new_val
@@ -532,7 +534,7 @@ module JSS
532
534
  # @return [void]
533
535
  #
534
536
  def self_service_notification_subject=(subj)
535
- subj.strip!
537
+ subj = subj.strip
536
538
  return if subj == @self_service_notification_subject
537
539
  validate_notifications_supported
538
540
  @self_service_notification_subject = subj
@@ -544,7 +546,7 @@ module JSS
544
546
  # @return [void]
545
547
  #
546
548
  def self_service_notification_message=(msg)
547
- msg.strip!
549
+ msg = msg.strip
548
550
  return if msg == @self_service_notification_message
549
551
  validate_notifications_supported
550
552
  @self_service_notification_message = msg
@@ -820,7 +822,7 @@ module JSS
820
822
  # ssvc subset...
821
823
  add_in_self_service_xml doc_root
822
824
 
823
- subset_key = @self_service_data_config[:self_service_subset] ? @self_service_data_config[:self_service_subset] : :self_service
825
+ subset_key = @self_service_data_config[:self_service_subset] || :self_service
824
826
 
825
827
  ssvc = doc_root.add_element subset_key.to_s
826
828
 
@@ -857,6 +859,7 @@ module JSS
857
859
  # add the xml specific to profiles
858
860
  def add_self_service_profile_xml(ssvc, doc_root)
859
861
  return unless self_service_payload == :profile
862
+
860
863
  if self_service_targets.include? :ios
861
864
  sec = ssvc.add_element('security')
862
865
  sec.add_element('removal_disallowed').text = PROFILE_REMOVAL_BY_USER[@self_service_user_removable]
@@ -871,6 +874,7 @@ module JSS
871
874
  def add_self_service_category_xml(ssvc)
872
875
  cats = ssvc.add_element('self_service_categories')
873
876
  return if self_service_categories.empty?
877
+
874
878
  self_service_categories.each do |cat|
875
879
  catelem = cats.add_element('category')
876
880
  catelem.add_element('name').text = cat[:name]
@@ -882,10 +886,14 @@ module JSS
882
886
  # set macOS settings in ssvc xml
883
887
  def add_self_service_macos_xml(ssvc)
884
888
  return unless self_service_targets.include? :macos
885
- ssvc.add_element('self_service_display_name').text = self_service_display_name if self_service_display_name
889
+
886
890
  ssvc.add_element('install_button_text').text = self_service_install_button_text if self_service_install_button_text
887
- ssvc.add_element('reinstall_button_text').text = self_service_reinstall_button_text if self_service_reinstall_button_text
888
891
  ssvc.add_element('force_users_to_view_description').text = self_service_force_users_to_view_description.to_s
892
+
893
+ return if self.class == JSS::MacApplication
894
+
895
+ ssvc.add_element('self_service_display_name').text = self_service_display_name if self_service_display_name
896
+ ssvc.add_element('reinstall_button_text').text = self_service_reinstall_button_text if self_service_reinstall_button_text
889
897
  end
890
898
 
891
899
 
@@ -1,4 +1,4 @@
1
- ### Copyright 2019 Pixar
1
+ ### Copyright 2020 Pixar
2
2
 
3
3
  ###
4
4
  ### Licensed under the Apache License, Version 2.0 (the "Apache License")
@@ -1,4 +1,4 @@
1
- ### Copyright 2019 Pixar
1
+ ### Copyright 2020 Pixar
2
2
 
3
3
  ###
4
4
  ### Licensed under the Apache License, Version 2.0 (the "Apache License")
@@ -1,4 +1,4 @@
1
- # Copyright 2019 Pixar
1
+ # Copyright 2020 Pixar
2
2
 
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "Apache License")
@@ -1,4 +1,4 @@
1
- ### Copyright 2019 Pixar
1
+ ### Copyright 2020 Pixar
2
2
 
3
3
  ###
4
4
  ### Licensed under the Apache License, Version 2.0 (the "Apache License")
@@ -1,4 +1,4 @@
1
- ### Copyright 2019 Pixar
1
+ ### Copyright 2020 Pixar
2
2
 
3
3
  ###
4
4
  ### Licensed under the Apache License, Version 2.0 (the "Apache License")
@@ -1,4 +1,4 @@
1
- ### Copyright 2019 Pixar
1
+ ### Copyright 2020 Pixar
2
2
 
3
3
  ###
4
4
  ### Licensed under the Apache License, Version 2.0 (the "Apache License")
@@ -103,7 +103,7 @@ module JSS
103
103
  # Methods
104
104
  #####################################
105
105
 
106
- #
106
+
107
107
  # Upload a file to the JSS via the REST Resource of the
108
108
  # object to which this module is mixed in.
109
109
  #
@@ -1,4 +1,4 @@
1
- ### Copyright 2019 Pixar
1
+ ### Copyright 2020 Pixar
2
2
 
3
3
  ###
4
4
  ### Licensed under the Apache License, Version 2.0 (the "Apache License")
@@ -144,7 +144,7 @@ module JSS
144
144
 
145
145
  ### @return [Array<Hash>]
146
146
  ###
147
- ### The vpp assignments associated with this user
147
+ ### The user-based vpp assignments associated with this user
148
148
  ###
149
149
  ### Each Hash has then :id and :name for one assignment
150
150
  ###
@@ -249,6 +249,47 @@ module JSS
249
249
  @need_to_update = true
250
250
  end
251
251
 
252
+ # Workaround for the recurring Jamf Classic API Bug where
253
+ # JSON is missing data that should come in an array of hashes, but
254
+ # only comes as a hash with a single hash inside, with data for only
255
+ # the last item in the XML array.
256
+ #
257
+ # When needed, we fetch and parse the XML, which has the desired data.
258
+ # Use any truthy parameter to re-fetch the XML data, otherwise the
259
+ # data last fetched is used.
260
+ #
261
+ # In this case, the user group data is fetched as XML and returned as
262
+ # an Array of Hashes, one per group the user is a member of. Each hash
263
+ # containing three Symbol keys:
264
+ #
265
+ # id: Integer, the group id
266
+ # name: String, the group name
267
+ # is_smart: Boolean, is it a smart group or a static group?
268
+ #
269
+ # @param refresh[Boolean] Re-fetch the group data from the API
270
+ #
271
+ # @return [Array<Hash>] The groups the user is a member of.
272
+ #
273
+ def user_groups(refresh = false)
274
+ @grp_array = nil if refresh
275
+ return @grp_array if @grp_array
276
+
277
+ @grp_array = []
278
+ raw_xml = @api.get_rsrc "/users/id/#{@id}", :xml
279
+ xmlroot = REXML::Document.new(raw_xml).root
280
+ xml_grps = xmlroot.elements['user_groups']
281
+
282
+ xml_grps.each do |xml_grp|
283
+ next if xml_grp.name == 'size'
284
+
285
+ gid = xml_grp.elements['id'].text.to_i
286
+ gname = xml_grp.elements['name'].text
287
+ smart = xml_grp.elements['is_smart'].text == 'true'
288
+ @grp_array << { id: gid, name: gname, is_smart: smart }
289
+ end # groups.each
290
+
291
+ @grp_array
292
+ end # user_groups
252
293
 
253
294
  #####################################
254
295
  ### Private Instance Methods
@@ -0,0 +1,209 @@
1
+ ### Copyright 2020 Pixar
2
+
3
+ ###
4
+ ### Licensed under the Apache License, Version 2.0 (the "Apache License")
5
+ ### with the following modification; you may not use this file except in
6
+ ### compliance with the Apache License and the following modification to it:
7
+ ### Section 6. Trademarks. is deleted and replaced with:
8
+ ###
9
+ ### 6. Trademarks. This License does not grant permission to use the trade
10
+ ### names, trademarks, service marks, or product names of the Licensor
11
+ ### and its affiliates, except as required to comply with Section 4(c) of
12
+ ### the License and to reproduce the content of the NOTICE file.
13
+ ###
14
+ ### You may obtain a copy of the Apache License at
15
+ ###
16
+ ### http://www.apache.org/licenses/LICENSE-2.0
17
+ ###
18
+ ### Unless required by applicable law or agreed to in writing, software
19
+ ### distributed under the Apache License with the above modification is
20
+ ### distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21
+ ### KIND, either express or implied. See the Apache License for the specific
22
+ ### language governing permissions and limitations under the Apache License.
23
+ ###
24
+ ###
25
+
26
+ ###
27
+ module JSS
28
+
29
+ # A VPP account defined in the JSS
30
+ #
31
+ class VPPAccount < JSS::APIObject
32
+
33
+ # Mix-Ins
34
+ #####################################
35
+ include JSS::Updatable
36
+ include JSS::Sitable
37
+
38
+ # Class Constants
39
+ #####################################
40
+
41
+ ### The base for REST resources of this class
42
+ RSRC_BASE = 'vppaccounts'.freeze
43
+
44
+ ### the hash key used for the JSON list output of all objects in the JSS
45
+ RSRC_LIST_KEY = :vpp_accounts
46
+
47
+ ### The hash key used for the JSON object output.
48
+ ### It's also used in various error messages
49
+ RSRC_OBJECT_KEY = :vpp_account
50
+
51
+ SITE_SUBSET = :top
52
+
53
+ # Attributes
54
+ #####################################
55
+
56
+ # @return [String] The full name of the local contact person for the acct
57
+ attr_reader :contact
58
+
59
+ # @return [String] The service token for connecting to the account at Apple.
60
+ # Currently not visible, appears as '***************'
61
+ attr_reader :service_token
62
+
63
+ # @return [String] The name of the company associated with the Acct/Token
64
+ attr_reader :account_name
65
+
66
+ # @return [Time] The expiration date of the Acct/Token
67
+ attr_reader :expiration_date
68
+
69
+ # @return [String] The location associated with the Acct/Token
70
+ attr_reader :location_name
71
+ alias location location_name
72
+
73
+ # @return [String] The Country Code associated with the acct
74
+ attr_reader :country
75
+
76
+ # @return [String] The AppleID associated with the acct
77
+ attr_reader :apple_id
78
+
79
+ # @return [Boolean] Automatically populate purchased content from Apple
80
+ # School Manager or Apple Business Manager in Jamf Pro
81
+ attr_reader :populate_catalog_from_vpp_content
82
+
83
+ # @return [Boolean] Display a notification to users on their mobile devices
84
+ # when a volume purchased app in a user-based volume assignment is no
85
+ # longer assigned to them
86
+ attr_reader :notify_disassociation
87
+
88
+ # @return [Boolean] Automatically register users that have Managed Apple IDs
89
+ # so they do not receive an invitation and are not prompted to register
90
+ # with volume purchasing
91
+ attr_reader :auto_register_managed_users
92
+
93
+ # Constructor
94
+ #####################################
95
+
96
+ # See JSS::APIObject#initialize
97
+ #
98
+ def initialize(args = {})
99
+ super
100
+ @contact = @init_data[:contact]
101
+ @service_token = @init_data[:service_token]
102
+ @account_name = @init_data[:account_name]
103
+ @expiration_date = @init_data[:expiration_date].to_s.empty? ? nil : Time.parse(@init_data[:expiration_date])
104
+ @location_name = @init_data[:location_name]
105
+ @country = @init_data[:country]
106
+ @apple_id = @init_data[:apple_id]
107
+ @populate_catalog_from_vpp_content = @init_data[:populate_catalog_from_vpp_content]
108
+ @notify_disassociation = @init_data[:notify_disassociation]
109
+ @auto_register_managed_users = @init_data[:auto_register_managed_users]
110
+ end
111
+
112
+ # Public Instance Methods
113
+ #####################################
114
+
115
+ # @param new_val[String] the value
116
+ #
117
+ # @return [void]
118
+ #
119
+ def contact=(new_val = @contact)
120
+ return if new_val == @contact
121
+
122
+ @contact = JSS::Validate.non_empty_string new_val, 'Contact must be a non-empty String'
123
+ @need_to_update = true
124
+ end
125
+
126
+ # @param new_val[String] the value
127
+ #
128
+ # @return [void]
129
+ #
130
+ def country=(new_val = @country)
131
+ return if new_val == @country
132
+
133
+ @country = JSS::Validate.app_store_country_code new_val
134
+ @need_to_update = true
135
+ end
136
+
137
+ # @param new_val[String] the value
138
+ #
139
+ # @return [void]
140
+ #
141
+ def apple_id=(new_val = @apple_id)
142
+ return if new_val == @apple_id
143
+
144
+ @apple_id = JSS::Validate.email_address new_val
145
+ @need_to_update = true
146
+ end
147
+
148
+ # @param new_val[String] the value
149
+ #
150
+ # @return [void]
151
+ #
152
+ def populate_catalog_from_vpp_content=(new_val = @populate_catalog_from_vpp_content)
153
+ return if new_val == @populate_catalog_from_vpp_content
154
+
155
+ @populate_catalog_from_vpp_content = JSS::Validate.boolean new_val
156
+ @need_to_update = true
157
+ end
158
+
159
+ # @param new_val[String] the value
160
+ #
161
+ # @return [void]
162
+ #
163
+ def notify_disassociation=(new_val = @notify_disassociation)
164
+ return if new_val == @notify_disassociation
165
+
166
+ @notify_disassociation = JSS::Validate.boolean new_val
167
+ @need_to_update = true
168
+ end
169
+
170
+ # @param new_val[String] the value
171
+ #
172
+ # @return [void]
173
+ #
174
+ def auto_register_managed_users=(new_val = @auto_register_managed_users)
175
+ return if new_val == @auto_register_managed_users
176
+
177
+ @auto_register_managed_users = JSS::Validate.boolean new_val
178
+ @need_to_update = true
179
+ end
180
+
181
+ # Private Instance Methods
182
+ #####################################
183
+ private
184
+
185
+ # Return a String with the XML Resource
186
+ # for submitting creation or changes to the JSS via
187
+ # the API via the Creatable or Updatable modules
188
+ #
189
+ # Most classes will redefine this method.
190
+ #
191
+ def rest_xml
192
+ doc = REXML::Document.new APIConnection::XML_HEADER
193
+ tmpl = doc.add_element self.class::RSRC_OBJECT_KEY.to_s
194
+ tmpl.add_element('name').text = @name
195
+ tmpl.add_element('contact').text = @contact
196
+ tmpl.add_element('country').text = @country
197
+ tmpl.add_element('apple_id').text = @apple_id
198
+ tmpl.add_element('populate_catalog_from_vpp_content').text = @populate_catalog_from_vpp_content.to_s
199
+ tmpl.add_element('notify_disassociation').text = @notify_disassociation.to_s
200
+ tmpl.add_element('auto_register_managed_users').text = @auto_register_managed_users.to_s
201
+
202
+ add_site_to_xml doc
203
+
204
+ doc.to_s
205
+ end
206
+
207
+ end # VPPAccount
208
+
209
+ end # JSS