ruby-jss 0.10.2a5 → 0.10.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 +5 -0
- data/lib/jss/api_connection.rb +19 -38
- data/lib/jss/api_object/advanced_search.rb +1 -5
- data/lib/jss/api_object/computer.rb +292 -316
- data/lib/jss/api_object/computer_invitation.rb +3 -5
- data/lib/jss/api_object/ebook.rb +0 -5
- data/lib/jss/api_object/group/computer_group.rb +0 -4
- data/lib/jss/api_object/group/mobile_device_group.rb +1 -4
- data/lib/jss/api_object/group.rb +1 -6
- data/lib/jss/api_object/mac_application.rb +0 -5
- data/lib/jss/api_object/mobile_device.rb +336 -57
- data/lib/jss/api_object/mobile_device_application.rb +0 -6
- data/lib/jss/api_object/mobile_device_configuration_profile.rb +0 -36
- data/lib/jss/api_object/osx_configuration_profile.rb +151 -115
- data/lib/jss/api_object/peripheral.rb +7 -5
- data/lib/jss/api_object/policy.rb +0 -5
- data/lib/jss/api_object/restricted_software.rb +0 -5
- data/lib/jss/api_object/scopable/scope.rb +411 -367
- data/lib/jss/api_object/self_servable.rb +4 -15
- data/lib/jss/api_object/site.rb +76 -45
- data/lib/jss/api_object/user.rb +3 -7
- data/lib/jss/api_object.rb +4 -74
- data/lib/jss/utility.rb +0 -21
- data/lib/jss/version.rb +1 -1
- data/lib/jss.rb +0 -4
- metadata +6 -10
- data/lib/jss/api_object/mdm.rb +0 -1268
- data/lib/jss/api_object/patch.rb +0 -38
- data/lib/jss/api_object/patch_policy.rb +0 -38
- data/lib/jss/api_object/sitable.rb +0 -197
@@ -51,7 +51,9 @@ module JSS
|
|
51
51
|
#####################################
|
52
52
|
|
53
53
|
include JSS::Creatable
|
54
|
-
|
54
|
+
|
55
|
+
# Class Variables
|
56
|
+
#####################################
|
55
57
|
|
56
58
|
# Class Methods
|
57
59
|
#####################################
|
@@ -86,9 +88,6 @@ module JSS
|
|
86
88
|
# See {APIObject#add_object_history_entry}
|
87
89
|
OBJECT_HISTORY_OBJECT_TYPE = 84
|
88
90
|
|
89
|
-
# Where is site data located in the API JSON?
|
90
|
-
SITE_SUBSET = :top
|
91
|
-
|
92
91
|
# Attributes
|
93
92
|
#####################################
|
94
93
|
|
@@ -201,7 +200,6 @@ module JSS
|
|
201
200
|
obj.add_element('hide_account').text = hide_account
|
202
201
|
obj.add_element('invitation_status').text = invitation_status
|
203
202
|
obj.add_element('multiple_uses_allowed').text = multiple_uses_allowed
|
204
|
-
add_site_to_xml(doc)
|
205
203
|
doc.to_s
|
206
204
|
end
|
207
205
|
|
data/lib/jss/api_object/ebook.rb
CHANGED
@@ -6,8 +6,6 @@ module JSS
|
|
6
6
|
#
|
7
7
|
class EBook < APIObject
|
8
8
|
|
9
|
-
include Sitable
|
10
|
-
|
11
9
|
### The base for REST resources of this class
|
12
10
|
RSRC_BASE = 'ebooks'.freeze
|
13
11
|
|
@@ -23,9 +21,6 @@ module JSS
|
|
23
21
|
# See {APIObject#add_object_history_entry}
|
24
22
|
OBJECT_HISTORY_OBJECT_TYPE = 24
|
25
23
|
|
26
|
-
# Where is the Site data in the API JSON?
|
27
|
-
SITE_SUBSET = :general
|
28
|
-
|
29
24
|
end
|
30
25
|
|
31
26
|
end
|
@@ -56,7 +56,6 @@ module JSS
|
|
56
56
|
#####################################
|
57
57
|
### Mix-Ins
|
58
58
|
#####################################
|
59
|
-
include JSS::MDM
|
60
59
|
|
61
60
|
#####################################
|
62
61
|
### Class Methods
|
@@ -87,9 +86,6 @@ module JSS
|
|
87
86
|
# See {APIObject#add_object_history_entry}
|
88
87
|
OBJECT_HISTORY_OBJECT_TYPE = 7
|
89
88
|
|
90
|
-
# what kind of devices are these WRT MDM
|
91
|
-
MDM_COMMAND_TARGET = :computergroups
|
92
|
-
|
93
89
|
#####################################
|
94
90
|
### Class Variables
|
95
91
|
#####################################
|
@@ -56,7 +56,7 @@ module JSS
|
|
56
56
|
#####################################
|
57
57
|
### Mix-Ins
|
58
58
|
#####################################
|
59
|
-
|
59
|
+
|
60
60
|
|
61
61
|
#####################################
|
62
62
|
### Class Constants
|
@@ -83,9 +83,6 @@ module JSS
|
|
83
83
|
# See {APIObject#add_object_history_entry}
|
84
84
|
OBJECT_HISTORY_OBJECT_TYPE = 25
|
85
85
|
|
86
|
-
# what kind of devices are these WRT MDM
|
87
|
-
MDM_COMMAND_TARGET = :mobiledevicegroups
|
88
|
-
|
89
86
|
#####################################
|
90
87
|
### Class Variables
|
91
88
|
#####################################
|
data/lib/jss/api_object/group.rb
CHANGED
@@ -67,7 +67,6 @@ module JSS
|
|
67
67
|
include JSS::Creatable
|
68
68
|
include JSS::Updatable
|
69
69
|
include JSS::Criteriable
|
70
|
-
include JSS::Sitable
|
71
70
|
|
72
71
|
|
73
72
|
#####################################
|
@@ -77,9 +76,6 @@ module JSS
|
|
77
76
|
### the types of groups allowed for creation
|
78
77
|
GROUP_TYPES = [:smart, :static]
|
79
78
|
|
80
|
-
# Where is the Site data in the API JSON?
|
81
|
-
SITE_SUBSET = :top
|
82
|
-
|
83
79
|
#####################################
|
84
80
|
### Class Variables
|
85
81
|
#####################################
|
@@ -361,6 +357,7 @@ module JSS
|
|
361
357
|
doc = REXML::Document.new JSS::APIConnection::XML_HEADER
|
362
358
|
group = doc.add_element self.class::RSRC_OBJECT_KEY.to_s
|
363
359
|
group.add_element('name').text = @name
|
360
|
+
group.add_element('site').add_element('name').text = @site if @site
|
364
361
|
group.add_element('is_smart').text = @is_smart
|
365
362
|
if @is_smart
|
366
363
|
group << @criteria.rest_xml if @criteria
|
@@ -368,8 +365,6 @@ module JSS
|
|
368
365
|
group << self.class::MEMBER_CLASS.xml_list(@members, :id)
|
369
366
|
end
|
370
367
|
|
371
|
-
add_site_to_xml(doc)
|
372
|
-
|
373
368
|
return doc.to_s
|
374
369
|
|
375
370
|
end #rest_xml
|
@@ -6,8 +6,6 @@ module JSS
|
|
6
6
|
#
|
7
7
|
class MacApplication < APIObject
|
8
8
|
|
9
|
-
include Sitable
|
10
|
-
|
11
9
|
### The base for REST resources of this class
|
12
10
|
RSRC_BASE = 'macapplications'.freeze
|
13
11
|
|
@@ -23,9 +21,6 @@ module JSS
|
|
23
21
|
# See {APIObject#add_object_history_entry}
|
24
22
|
OBJECT_HISTORY_OBJECT_TYPE = 350
|
25
23
|
|
26
|
-
# Where is the Site data in the API JSON?
|
27
|
-
SITE_SUBSET = :general
|
28
|
-
|
29
24
|
end
|
30
25
|
|
31
26
|
end
|
@@ -39,14 +39,14 @@ module JSS
|
|
39
39
|
# This class represents a Mobile Device stored in the JSS.
|
40
40
|
#
|
41
41
|
# ---
|
42
|
-
# ===
|
42
|
+
# ===Adding devices to the JSS
|
43
43
|
#
|
44
44
|
# This class cannot be used to add new mobile devices to the JSS. That can only be done
|
45
45
|
# via the enrollment process. See JSS::MobileDeviceInvitation for sending
|
46
46
|
# an enrollment invite to a device.
|
47
47
|
#
|
48
48
|
# ---
|
49
|
-
# ===
|
49
|
+
# ===Editing values
|
50
50
|
#
|
51
51
|
# Only a few values can be changed via the API, using these methods, q.v:
|
52
52
|
# - #asset_tag= String
|
@@ -57,17 +57,24 @@ module JSS
|
|
57
57
|
# After modfying any values, #save must be called to save changes to the JSS.
|
58
58
|
#
|
59
59
|
# ---
|
60
|
-
# ===
|
60
|
+
# ===MDM Commands
|
61
61
|
#
|
62
|
-
#
|
63
|
-
#
|
62
|
+
# The following methods can be used to send an APNS command to the device represented by an
|
63
|
+
# instance of JSS::MobileDevice, equivalent to clicking one of the buttons on
|
64
|
+
# the Management Commands section of the Management tab of the Mobile Device details page in the JSS UI.
|
64
65
|
#
|
65
|
-
#
|
66
|
-
#
|
66
|
+
# The methods supported are:
|
67
|
+
# - blank_push (aliases blank, noop, send_blank_push)
|
68
|
+
# - update_inventory (alias recon)
|
69
|
+
# - device_lock (aliases lock, lock_device)
|
70
|
+
# - erase_device (aliases wipe)
|
71
|
+
# - clear_passcode
|
72
|
+
# - unmanage_device (alias unmanage)
|
73
|
+
#
|
74
|
+
# Each returns true if the command as sent.
|
75
|
+
#
|
76
|
+
# @see JSS::APIObject
|
67
77
|
#
|
68
|
-
# NOTE: If the {#name=} method is used to change the name of a supervized device,
|
69
|
-
# the DeviceName MDM command will be sent to the device when
|
70
|
-
# the changes are sent to the server via {#save} or {#update}
|
71
78
|
#
|
72
79
|
class MobileDevice < JSS::APIObject
|
73
80
|
|
@@ -79,8 +86,6 @@ module JSS
|
|
79
86
|
include JSS::Purchasable
|
80
87
|
include JSS::Uploadable
|
81
88
|
include JSS::Extendable
|
82
|
-
include JSS::Sitable
|
83
|
-
include JSS::MDM
|
84
89
|
|
85
90
|
extend JSS::Matchable
|
86
91
|
|
@@ -97,9 +102,6 @@ module JSS
|
|
97
102
|
# It's also used in various error messages
|
98
103
|
RSRC_OBJECT_KEY = :mobile_device
|
99
104
|
|
100
|
-
# Where is the Site data in the API JSON?
|
101
|
-
SITE_SUBSET = :general
|
102
|
-
|
103
105
|
# these keys, as well as :id and :name, are present in valid API JSON data for this class
|
104
106
|
VALID_DATA_KEYS = %i[device_name capacity tethered].freeze
|
105
107
|
|
@@ -118,9 +120,66 @@ module JSS
|
|
118
120
|
# This is the class for relevant Extension Attributes
|
119
121
|
EXT_ATTRIB_CLASS = JSS::MobileDeviceExtensionAttribute
|
120
122
|
|
121
|
-
#
|
122
|
-
|
123
|
+
# the rsrc for mobile dev commands
|
124
|
+
MDM_RSRC = 'mobiledevicecommands/command'.freeze
|
125
|
+
|
126
|
+
# The MDM commands sendable via the api
|
127
|
+
# and alternative versions
|
128
|
+
#
|
129
|
+
MDM_COMMANDS = {
|
130
|
+
blank_push: 'BlankPush',
|
131
|
+
send_blank_push: 'BlankPush',
|
132
|
+
blank: 'BlankPush',
|
133
|
+
noop: 'BlankPush',
|
134
|
+
|
135
|
+
settings: 'Settings',
|
136
|
+
|
137
|
+
update_inventory: 'UpdateInventory',
|
138
|
+
recon: 'UpdateInventory',
|
139
|
+
|
140
|
+
device_lock: 'DeviceLock',
|
141
|
+
lock: 'DeviceLock',
|
142
|
+
lock_device: 'DeviceLock',
|
143
|
+
|
144
|
+
erase_device: 'EraseDevice',
|
145
|
+
erase: 'EraseDevice',
|
146
|
+
wipe: 'EraseDevice',
|
147
|
+
|
148
|
+
clear_passcode: 'ClearPasscode',
|
149
|
+
|
150
|
+
clear_restrictions_password: 'ClearRestrictionsPassword',
|
151
|
+
|
152
|
+
enable_data_roaming: 'SettingsEnableDataRoaming',
|
153
|
+
disable_data_roaming: 'SettingsDisableDataRoaming',
|
154
|
+
|
155
|
+
enable_voice_roaming: 'SettingsEnableVoiceRoaming',
|
156
|
+
disable_voice_roaming: 'SettingsDisableVoiceRoaming',
|
157
|
+
|
158
|
+
enable_app_analytics: 'SettingsEnableAppAnalytics',
|
159
|
+
disable_app_analytics: 'SettingsDisableAppAnalytics',
|
160
|
+
|
161
|
+
enable_diagnostic_submission: 'SettingsEnableDiagnosticSubmission',
|
162
|
+
disable_diagnostic_submission: 'SettingsDisableDiagnosticSubmission',
|
163
|
+
|
164
|
+
# wallpaper: 'Wallpaper',
|
165
|
+
|
166
|
+
device_name: 'DeviceName',
|
123
167
|
|
168
|
+
shutdown_device: 'ShutDownDevice',
|
169
|
+
shutdown: 'ShutDownDevice',
|
170
|
+
|
171
|
+
restart_device: 'RestartDevice',
|
172
|
+
restart: 'RestartDevice',
|
173
|
+
|
174
|
+
# passcode_lock_grace_period: 'PasscodeLockGracePeriod',
|
175
|
+
|
176
|
+
unmanage_device: 'UnmanageDevice',
|
177
|
+
unmanage: 'UnmanageDevice'
|
178
|
+
|
179
|
+
}.freeze
|
180
|
+
|
181
|
+
# These MDM commands need extra data.
|
182
|
+
MDM_COMMANDS_REQUIRING_DATA = %w[DeviceLock DeviceName Wallpaper].freeze
|
124
183
|
|
125
184
|
# The History resource
|
126
185
|
HISTORY_RSRC = 'mobiledevicehistory'.freeze
|
@@ -139,62 +198,101 @@ module JSS
|
|
139
198
|
|
140
199
|
# @return [Array<String>] all mobiledevice serial_numbers
|
141
200
|
def self.all_serial_numbers(refresh = false, api: JSS.api)
|
142
|
-
all(refresh, api:
|
201
|
+
all(refresh, api: API).map { |i| i[:serial_number] }
|
143
202
|
end
|
144
203
|
|
145
204
|
# @return [Array<String>] all mobiledevice phone numbers
|
146
205
|
def self.all_phone_numbers(refresh = false, api: JSS.api)
|
147
|
-
all(refresh, api:
|
206
|
+
all(refresh, api: API).map { |i| i[:phone_number] }.reject(&:empty?)
|
148
207
|
end
|
149
208
|
|
150
209
|
# @return [Array<String>] all mobiledevice wifi mac addrs
|
151
210
|
def self.all_wifi_mac_addresses(refresh = false, api: JSS.api)
|
152
|
-
all(refresh, api:
|
211
|
+
all(refresh, api: API).map { |i| i[:wifi_mac_address] }
|
153
212
|
end
|
154
213
|
|
155
214
|
# @return [Array<String>] all mobiledevice wifi mac addrs
|
156
215
|
def self.all_mac_addresses(refresh = false, api: JSS.api)
|
157
|
-
all_wifi_mac_addresses(refresh, api:
|
216
|
+
all_wifi_mac_addresses(refresh, api: API)
|
158
217
|
end
|
159
218
|
|
160
219
|
# @return [Array<String>] all mobiledevice udids
|
161
220
|
def self.all_udids(refresh = false, api: JSS.api)
|
162
|
-
all(refresh, api:
|
221
|
+
all(refresh, api: API).map { |i| i[:udid] }
|
163
222
|
end
|
164
223
|
|
165
224
|
# @return [Array<Hash>] the list of all managed mobile devices
|
166
225
|
def self.all_managed(refresh = false, api: JSS.api)
|
167
|
-
all(refresh, api:
|
226
|
+
all(refresh, api: API).select { |d| d[:managed] }
|
168
227
|
end
|
169
228
|
|
170
229
|
# @return [Array<Hash>] the list of all unmanaged mobile devices
|
171
230
|
def self.all_unmanaged(refresh = false, api: JSS.api)
|
172
|
-
all(refresh, api:
|
173
|
-
end
|
174
|
-
|
175
|
-
# @return [Array<Hash>] the list of all supervised mobile devices
|
176
|
-
def self.all_supervised(refresh = false, api: JSS.api)
|
177
|
-
all(refresh, api: api).select { |d| d[:supervised] }
|
178
|
-
end
|
179
|
-
|
180
|
-
# @return [Array<Hash>] the list of all unsupervised mobile devices
|
181
|
-
def self.all_unsupervised(refresh = false, api: JSS.api)
|
182
|
-
all(refresh, api: api).reject { |d| d[:supervised] }
|
231
|
+
all(refresh, api: API).reject { |d| d[:managed] }
|
183
232
|
end
|
184
233
|
|
185
234
|
# @return [Array<Hash>] the list of all iPhones
|
186
235
|
def self.all_iphones(refresh = false, api: JSS.api)
|
187
|
-
all(refresh, api:
|
236
|
+
all(refresh, api: API).select { |d| d[:model].start_with? 'iPhone' }
|
188
237
|
end
|
189
238
|
|
190
239
|
# @return [Array<Hash>] the list of all iPads
|
191
240
|
def self.all_ipads(refresh = false, api: JSS.api)
|
192
|
-
all(refresh, api:
|
241
|
+
all(refresh, api: API).select { |d| d[:model].start_with? 'iPad' }
|
193
242
|
end
|
194
243
|
|
195
244
|
# @return [Array<Hash>] the list of all iPads
|
196
245
|
def self.all_apple_tvs(refresh = false, api: JSS.api)
|
197
|
-
all(refresh, api:
|
246
|
+
all(refresh, api: API).select { |d| d[:model_identifier].start_with? 'AppleTV' }
|
247
|
+
end
|
248
|
+
|
249
|
+
# Send an MDM command to one or more mobile devices by id or name
|
250
|
+
#
|
251
|
+
#
|
252
|
+
# @param targets[String,Integer,Array<String,Integer>]
|
253
|
+
# the name or id of the mobile devices to receive the command, or
|
254
|
+
# an array of such names or ids, or a comma-separated string
|
255
|
+
# of them.
|
256
|
+
# @param command[Symbol] the command to send, one of the keys
|
257
|
+
# of MDM_COMMANDS
|
258
|
+
#
|
259
|
+
# @param data[String] Some commands require extra data.
|
260
|
+
#
|
261
|
+
# @param api[JSS::APIConnection] the APi to query. Defaults to the
|
262
|
+
# currently active API, see {JSS::APIConnection}
|
263
|
+
#
|
264
|
+
# @return [String] The uuid of the MDM command sent, if applicable
|
265
|
+
# (blank pushes do not generate uuids)
|
266
|
+
#
|
267
|
+
def self.send_mdm_command(targets, command, data = nil, api: JSS.api)
|
268
|
+
raise JSS::NoSuchItemError, "Unknown command '#{command}'" unless MDM_COMMANDS.keys.include? command
|
269
|
+
|
270
|
+
command = MDM_COMMANDS[command]
|
271
|
+
cmd_rsrc = "#{MDM_RSRC}/#{command}"
|
272
|
+
|
273
|
+
if MDM_COMMANDS_REQUIRING_DATA.include? command
|
274
|
+
raise "MDM command '#{command}' requires additional data." unless data
|
275
|
+
cmd_rsrc << "/#{data}"
|
276
|
+
end
|
277
|
+
|
278
|
+
targets = JSS.to_s_and_a(targets.to_s)[:arrayform] unless targets.is_a? Array
|
279
|
+
|
280
|
+
# make sure its an array of ids
|
281
|
+
targets.map! do |md|
|
282
|
+
if all_ids(api: api).include? md.to_i
|
283
|
+
md.to_i
|
284
|
+
elsif all_names(api: api).include? md
|
285
|
+
map_all_ids_to(:name, api: api.invert[md])
|
286
|
+
else
|
287
|
+
raise JSS::NoSuchItemError, "No mobile device found matching '#{md}'"
|
288
|
+
end # if
|
289
|
+
end # map!
|
290
|
+
|
291
|
+
cmd_rsrc << "/id/#{targets.join ','}"
|
292
|
+
|
293
|
+
result = api.post_rsrc cmd_rsrc, nil
|
294
|
+
result =~ %r{<uuid>(.*)</uuid>}
|
295
|
+
Regexp.last_match(1)
|
198
296
|
end
|
199
297
|
|
200
298
|
def self.management_history(identifier, subset = nil, api: JSS.api)
|
@@ -202,13 +300,12 @@ module JSS
|
|
202
300
|
if identifier.is_a? Integer
|
203
301
|
id = identifier
|
204
302
|
else
|
205
|
-
key =
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
end
|
303
|
+
key = case identifier
|
304
|
+
when *all_names(api: api) then :name
|
305
|
+
when *all_serial_numbers(api: api) then :serial_number
|
306
|
+
when *all_mac_addresses(api: api) then :mac_address
|
307
|
+
when *all_udids(api: api) then :udid
|
308
|
+
end
|
212
309
|
id = map_all_ids_to(key, api: api).invert[identifier]
|
213
310
|
end # if identifier.is_a? Integer
|
214
311
|
|
@@ -397,9 +494,11 @@ module JSS
|
|
397
494
|
# - :file_level_encryption_capable=>true
|
398
495
|
attr_reader :security
|
399
496
|
|
497
|
+
#####################################
|
400
498
|
# Instance Methods
|
401
499
|
#####################################
|
402
500
|
|
501
|
+
#
|
403
502
|
# @see APIObject#initialize
|
404
503
|
#
|
405
504
|
def initialize(args = {})
|
@@ -449,16 +548,188 @@ module JSS
|
|
449
548
|
@applications = @init_data[:applications]
|
450
549
|
end # initialize
|
451
550
|
|
452
|
-
|
453
|
-
|
454
|
-
|
551
|
+
# Send a blank_push MDM command
|
552
|
+
#
|
553
|
+
# @see MobileDevice.send_mdm_command
|
554
|
+
#
|
555
|
+
# @return [String] The command uuid
|
556
|
+
#
|
557
|
+
def blank_push
|
558
|
+
self.class.send_mdm_command @id, :blank_push, api: @api
|
559
|
+
end #
|
560
|
+
|
561
|
+
# Send an update_inventory MDM command
|
562
|
+
#
|
563
|
+
# @see MobileDevice.send_mdm_command
|
564
|
+
#
|
565
|
+
# @return [String] The command uuid
|
566
|
+
#
|
567
|
+
def update_inventory
|
568
|
+
self.class.send_mdm_command @id, :update_inventory, api: @api
|
569
|
+
end
|
570
|
+
|
571
|
+
# Send a device_lock MDM command
|
572
|
+
#
|
573
|
+
# @param message[String] The message to display on the lock screen.
|
574
|
+
#
|
575
|
+
# @see MobileDevice.send_mdm_command
|
576
|
+
#
|
577
|
+
# @return [String] The command uuid
|
578
|
+
#
|
579
|
+
def device_lock(message)
|
580
|
+
self.class.send_mdm_command @id, :device_lock, message, api: @api
|
581
|
+
end
|
582
|
+
|
583
|
+
# Send an erase_device MDM command
|
584
|
+
#
|
585
|
+
# @see MobileDevice.send_mdm_command
|
586
|
+
#
|
587
|
+
# @return [String] The command uuid
|
588
|
+
#
|
589
|
+
def erase_device
|
590
|
+
self.class.send_mdm_command @id, :erase_device, api: @api
|
591
|
+
end
|
592
|
+
|
593
|
+
# Send a clear_passcode MDM command
|
594
|
+
#
|
595
|
+
# @see MobileDevice.send_mdm_command
|
596
|
+
#
|
597
|
+
# @return [String] The command uuid
|
598
|
+
#
|
599
|
+
def clear_passcode
|
600
|
+
self.class.send_mdm_command @id, :clear_passcode, api: @api
|
601
|
+
end
|
602
|
+
|
603
|
+
# Send a unmanage_device MDM command
|
604
|
+
#
|
605
|
+
# @see MobileDevice.send_mdm_command
|
606
|
+
#
|
607
|
+
# @return [String] The command uuid
|
608
|
+
#
|
609
|
+
def unmanage_device
|
610
|
+
@managed = false if self.class.send_mdm_command(@id, :unmanage_device, api: @api)
|
611
|
+
end
|
612
|
+
|
613
|
+
# Send a ClearRestrictionsPassword MDM command
|
614
|
+
#
|
615
|
+
# @see MobileDevice.send_mdm_command
|
616
|
+
#
|
617
|
+
# @return [String] The command uuid
|
618
|
+
#
|
619
|
+
def clear_restrictions_password
|
620
|
+
self.class.send_mdm_command @id, :clear_restrictions_password, api: @api
|
621
|
+
end
|
622
|
+
|
623
|
+
# Send a SettingsEnableDataRoaming MDM command
|
624
|
+
#
|
625
|
+
# @see MobileDevice.send_mdm_command
|
626
|
+
#
|
627
|
+
# @return [String] The command uuid
|
628
|
+
#
|
629
|
+
def enable_data_roaming
|
630
|
+
self.class.send_mdm_command @id, :enable_data_roaming, api: @api
|
631
|
+
end
|
632
|
+
|
633
|
+
# Send a disable_data_roaming MDM command
|
634
|
+
#
|
635
|
+
# @see MobileDevice.send_mdm_command
|
636
|
+
#
|
637
|
+
# @return [String] The command uuid
|
638
|
+
#
|
639
|
+
def disable_data_roaming
|
640
|
+
self.class.send_mdm_command @id, :disable_data_roaming, api: @api
|
641
|
+
end
|
642
|
+
|
643
|
+
# Send a enable_voice_roaming MDM command
|
644
|
+
#
|
645
|
+
# @see MobileDevice.send_mdm_command
|
646
|
+
#
|
647
|
+
# @return [String] The command uuid
|
648
|
+
#
|
649
|
+
def enable_voice_roaming
|
650
|
+
self.class.send_mdm_command @id, :enable_voice_roaming, api: @api
|
651
|
+
end
|
652
|
+
|
653
|
+
# Send a disable_voice_roaming MDM command
|
654
|
+
#
|
655
|
+
# @see MobileDevice.send_mdm_command
|
656
|
+
#
|
657
|
+
# @return [String] The command uuid
|
658
|
+
#
|
659
|
+
def disable_voice_roaming
|
660
|
+
self.class.send_mdm_command @id, :disable_voice_roaming, api: @api
|
661
|
+
end
|
662
|
+
|
663
|
+
# Send a enable_app_analytics MDM command
|
664
|
+
#
|
665
|
+
# @see MobileDevice.send_mdm_command
|
666
|
+
#
|
667
|
+
# @return [String] The command uuid
|
668
|
+
#
|
669
|
+
def enable_app_analytics
|
670
|
+
self.class.send_mdm_command @id, :enable_app_analytics, api: @api
|
671
|
+
end
|
672
|
+
|
673
|
+
# Send a disable_app_analytics MDM command
|
674
|
+
#
|
675
|
+
# @see MobileDevice.send_mdm_command
|
676
|
+
#
|
677
|
+
# @return [String] The command uuid
|
678
|
+
#
|
679
|
+
def disable_app_analytics
|
680
|
+
self.class.send_mdm_command @id, :disable_app_analytics, api: @api
|
681
|
+
end
|
682
|
+
|
683
|
+
# Send a enable_diagnostic_submission MDM command
|
684
|
+
#
|
685
|
+
# @see MobileDevice.send_mdm_command
|
686
|
+
#
|
687
|
+
# @return [String] The command uuid
|
688
|
+
#
|
689
|
+
def enable_diagnostic_submission
|
690
|
+
self.class.send_mdm_command @id, :enable_diagnostic_submission, api: @api
|
691
|
+
end
|
692
|
+
|
693
|
+
# Send a disable_diagnostic_submission MDM command
|
694
|
+
#
|
695
|
+
# @see MobileDevice.send_mdm_command
|
696
|
+
#
|
697
|
+
# @return [String] The command uuid
|
698
|
+
#
|
699
|
+
def disable_diagnostic_submission
|
700
|
+
self.class.send_mdm_command @id, :disable_diagnostic_submission, api: @api
|
701
|
+
end
|
702
|
+
|
703
|
+
# Send a device_name MDM command
|
704
|
+
#
|
705
|
+
# @param new_name[String] The name for the device
|
706
|
+
#
|
707
|
+
# @see MobileDevice.send_mdm_command
|
708
|
+
#
|
709
|
+
# @return [String] The command uuid
|
710
|
+
#
|
711
|
+
def device_name(new_name)
|
712
|
+
self.class.send_mdm_command @id, :device_name, new_name, api: @api
|
455
713
|
end
|
456
714
|
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
715
|
+
# Send a shutdown device MDM command
|
716
|
+
#
|
717
|
+
# @see MobileDevice.send_mdm_command
|
718
|
+
#
|
719
|
+
# @return [String] The command uuid
|
720
|
+
#
|
721
|
+
def shutdown
|
722
|
+
self.class.send_mdm_command @id, :shutdown, api: @api
|
723
|
+
end
|
724
|
+
|
725
|
+
# Send a restart device MDM command
|
726
|
+
#
|
727
|
+
# @see MobileDevice.send_mdm_command
|
728
|
+
#
|
729
|
+
# @return [String] The command uuid
|
730
|
+
#
|
731
|
+
def restart
|
732
|
+
self.class.send_mdm_command @id, :restart, api: @api
|
462
733
|
end
|
463
734
|
|
464
735
|
# The full management History data for this Mobile Device
|
@@ -653,12 +924,18 @@ module JSS
|
|
653
924
|
# Aliases
|
654
925
|
alias battery_percent battery_level
|
655
926
|
alias managed? managed
|
656
|
-
alias supervised? supervised
|
657
927
|
alias sn serial_number
|
658
928
|
alias serialnumber serial_number
|
659
929
|
|
660
|
-
|
661
|
-
|
930
|
+
alias noop blank_push
|
931
|
+
alias send_blank_push blank_push
|
932
|
+
alias recon update_inventory
|
933
|
+
alias lock device_lock
|
934
|
+
alias lock_device device_lock
|
935
|
+
alias erase erase_device
|
936
|
+
alias wipe erase_device
|
937
|
+
alias unmanage unmanage_device
|
938
|
+
alias make_unmanaged unmanage_device
|
662
939
|
|
663
940
|
# private methods
|
664
941
|
##############################
|
@@ -668,10 +945,12 @@ module JSS
|
|
668
945
|
def rest_xml
|
669
946
|
doc = REXML::Document.new APIConnection::XML_HEADER
|
670
947
|
md = doc.add_element self.class::RSRC_OBJECT_KEY.to_s
|
671
|
-
|
948
|
+
|
949
|
+
md << ext_attr_xml if @changed_eas && !@changed_eas.empty?
|
950
|
+
|
672
951
|
md << location_xml if has_location?
|
673
952
|
md << purchasing_xml if has_purchasing?
|
674
|
-
|
953
|
+
|
675
954
|
doc.to_s
|
676
955
|
end
|
677
956
|
|
@@ -48,8 +48,6 @@ module JSS
|
|
48
48
|
include JSS::Categorizable
|
49
49
|
include JSS::Uploadable
|
50
50
|
include JSS::VPPable
|
51
|
-
include JSS::Sitable
|
52
|
-
|
53
51
|
|
54
52
|
# Class Methods
|
55
53
|
#####################################
|
@@ -95,9 +93,6 @@ module JSS
|
|
95
93
|
# See {APIObject#add_object_history_entry}
|
96
94
|
OBJECT_HISTORY_OBJECT_TYPE = 23
|
97
95
|
|
98
|
-
# Where is the Site data in the API JSON?
|
99
|
-
SITE_SUBSET = :general
|
100
|
-
|
101
96
|
# Attributes
|
102
97
|
#####################################
|
103
98
|
|
@@ -457,7 +452,6 @@ module JSS
|
|
457
452
|
obj << @scope.scope_xml
|
458
453
|
add_category_to_xml doc
|
459
454
|
add_self_service_xml doc
|
460
|
-
add_site_to_xml doc
|
461
455
|
add_vpp_xml doc
|
462
456
|
doc.to_s
|
463
457
|
end
|