ruby-jss 1.2.9 → 1.2.10

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 44439acce68bb49aeb3da5c4cf4505a3e5bf7b36ca41de4bfd757c529aef15b4
4
- data.tar.gz: 75596bf86aa714f16c8dd84bfa28e6f4f2e06371e681c898f28ad8f27cfbbdfb
3
+ metadata.gz: 0734256ff4d9e553418ff9e0189e85cbb455751e682af0278dfff3f85f9a6070
4
+ data.tar.gz: 40fde852a9d6f4cc22a804b0240038bdb17d319e1d51edaa8c974ad50d05861d
5
5
  SHA512:
6
- metadata.gz: 7dd80d0809c30e843cc52d408ca0586f1499e58ca11c73f3a5ffa596472c24e9f7058a9c04cc64dcad5b34e4578ab7436fe58e08c119bb2c095a0d07dc8ad8db
7
- data.tar.gz: 26fea8c492531bbf6f5138617837776657a8b0e1193192c7c04b5dcef49ada7fb237b44142e05914a02bdaf4aa79a94006f4be0d7b34af86a1e76216246b84cb
6
+ metadata.gz: 721bc4ef63c7c1114a66bb772a609c4589879977e65922eb008dacf478ea17cc09a78e367e4a8297b46139b9d08f5d16fa6ffa7e0516af6c7ccc571ab37e39da
7
+ data.tar.gz: 0d8788ff29178d488fc11da8fa4c77c3ca5b40c8a770979cc7bf11bb8ab727f43315e2632ed74c8ae9685d79142e2536e1239624c236ba218fc2de5c70adddd4
data/CHANGES.md CHANGED
@@ -4,6 +4,20 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## \[1.2.10] - 2020-04-25
8
+
9
+ ### Added
10
+
11
+ - Computer#reported_ip_address. This value is collected in newer versions of Jamf Pro. While the #ip_address is the client's IP address from the Jamf Server's perspective, the #reported_ip_address is the IP from the client's perspective, which may be different on a NATted network like a home network.
12
+
13
+ ### Fixed
14
+
15
+ - MobileDevice#upload now works like Computer#upload
16
+
17
+ ### Changed
18
+
19
+ - Validation of Ext. Attribute values is improved, namely for EAs with integer values, integer-strings like "12" are accepted and converted to real integers as needed.
20
+
7
21
  ## \[1.2.9] - 2020-04-13
8
22
 
9
23
  ### Fixed
@@ -529,9 +529,12 @@ module JSS
529
529
  # @return [Time] when was it added to the JSS
530
530
  attr_reader :initial_entry_date
531
531
 
532
- # @return [IPAddr] the last known IP address
532
+ # @return [IPAddr] the last known IP address from the server's perspective
533
533
  attr_reader :ip_address
534
534
 
535
+ # @return [IPAddr] the last known IP address from the client's perspecive
536
+ attr_reader :reported_ip_address
537
+
535
538
  # @return [Boolean]
536
539
  attr_reader :itunes_store_account_is_active
537
540
 
@@ -784,6 +787,7 @@ module JSS
784
787
  @initial_entry_date = JSS.epoch_to_time @init_data[:general][:initial_entry_date_epoch]
785
788
  @last_enrolled = JSS.epoch_to_time @init_data[:general][:last_enrolled_date_epoch]
786
789
  @ip_address = @init_data[:general][:ip_address]
790
+ @reported_ip_address = @init_data[:general][:last_reported_ip]
787
791
  @itunes_store_account_is_active = @init_data[:general][:itunes_store_account_is_active]
788
792
  @jamf_version = @init_data[:general][:jamf_version]
789
793
  @last_contact_time = JSS.epoch_to_time @init_data[:general][:last_contact_time_epoch]
@@ -180,34 +180,21 @@ module JSS
180
180
  #
181
181
  # @return [void]
182
182
  #
183
- def set_ext_attr(name, value, validate_popup_choice: true, refresh: false)
184
- raise ArgumentError, "Unknown Extension Attribute Name: '#{name}'" unless ea_types.key? 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 ||= JSS::BLANK
187
- validate_popup_value(name, value, refresh) if validate_popup_choice
188
-
189
- value =
190
- case ea_types[name]
191
- when JSS::ExtensionAttribute::DATA_TYPE_DATE # date
192
- JSS.parse_datetime(value).to_s
193
- when *JSS::ExtensionAttribute::NUMERIC_TYPES # integer
194
- if value.is_a? Integer
195
- value
196
- elsif value.to_s.jss_integer?
197
- value.to_s.to_i
198
- else
199
- raise JSS::InvalidDataError, "The value for #{name} must be an integer"
200
- end # if
201
- else # string
202
- value.to_s
203
- end # case
186
+ value = validate_ea_value(ea_name, value, validate_popup_choice, refresh)
204
187
 
205
188
  # update this ea hash in the @extension_attributes array
206
- @extension_attributes.each { |ea| ea[:value] = value if ea[:name] == name }
189
+ ea_hash = @extension_attributes.find { |ea| ea[:name] == ea_name }
190
+
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
192
+
193
+ ea_hash[:value] = value
207
194
 
208
195
  # update the shortcut hash too
209
- @ext_attrs[name] = value if @ext_attrs
210
- @changed_eas << name
196
+ @ext_attrs[ea_name] = value if @ext_attrs
197
+ @changed_eas << ea_name
211
198
  @need_to_update = true
212
199
  end
213
200
 
@@ -251,22 +238,71 @@ module JSS
251
238
  eaxml
252
239
  end
253
240
 
254
- # Used by set_ext_attr
255
- def validate_popup_value(name, value, refresh)
256
- # all popups can take blanks
257
- return if value == JSS::BLANK
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
258
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)
259
295
  # get the ea def. instance from the api cache, or the api
260
296
  api.ext_attr_definition_cache[self.class] ||= {}
261
- api.ext_attr_definition_cache[self.class][name] = nil if refresh
262
- api.ext_attr_definition_cache[self.class][name] ||= self.class::EXT_ATTRIB_CLASS.fetch name: name, api: api
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
263
299
 
264
- ea_def = api.ext_attr_definition_cache[self.class][name]
300
+ ea_def = api.ext_attr_definition_cache[self.class][ea_name]
265
301
  return unless ea_def.from_popup_menu?
266
302
 
267
303
  return if ea_def.popup_choices.include? value.to_s
268
304
 
269
- raise JSS::UnsupportedError, "The value for #{name} must be one of: '#{ea_def.popup_choices.join("' '")}'"
305
+ raise JSS::UnsupportedError, "The value for #{ea_name} must be one of: '#{ea_def.popup_choices.join("' '")}'"
270
306
  end
271
307
 
272
308
  end # module extendable
@@ -132,6 +132,9 @@ module JSS
132
132
 
133
133
  NON_UNIQUE_NAMES = true
134
134
 
135
+ # file uploads can send attachments to the JSS using :mobiledevices as the sub-resource.
136
+ UPLOAD_TYPES = { attachment: :mobiledevices }.freeze
137
+
135
138
  # This class lets us seach for computers
136
139
  SEARCH_CLASS = JSS::AdvancedMobileDeviceSearch
137
140
 
@@ -27,6 +27,6 @@
27
27
  module JSS
28
28
 
29
29
  ### The version of ruby-jss
30
- VERSION = '1.2.9'.freeze
30
+ VERSION = '1.2.10'.freeze
31
31
 
32
32
  end # module
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-jss
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.9
4
+ version: 1.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Lasell
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-04-13 00:00:00.000000000 Z
12
+ date: 2020-04-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: plist