ruby-jss 0.9.2 → 0.10.0a1
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 +13 -1
- data/README.md +7 -7
- data/bin/cgrouper +6 -6
- data/bin/netseg-update +1 -1
- data/lib/jss.rb +1 -0
- data/lib/jss/api_connection.rb +428 -44
- data/lib/jss/api_object.rb +119 -68
- data/lib/jss/api_object/account.rb +12 -12
- data/lib/jss/api_object/advanced_search.rb +12 -12
- data/lib/jss/api_object/categorizable.rb +4 -4
- data/lib/jss/api_object/category.rb +2 -2
- data/lib/jss/api_object/computer.rb +111 -58
- data/lib/jss/api_object/computer_invitation.rb +2 -2
- data/lib/jss/api_object/creatable.rb +19 -8
- data/lib/jss/api_object/criteriable/criteria.rb +8 -8
- data/lib/jss/api_object/distribution_point.rb +14 -48
- data/lib/jss/api_object/extension_attribute.rb +14 -11
- data/lib/jss/api_object/extension_attribute/computer_extension_attribute.rb +18 -18
- data/lib/jss/api_object/group.rb +7 -7
- data/lib/jss/api_object/ldap_server.rb +51 -60
- data/lib/jss/api_object/locatable.rb +2 -2
- data/lib/jss/api_object/matchable.rb +8 -9
- data/lib/jss/api_object/mobile_device.rb +61 -59
- data/lib/jss/api_object/mobile_device_application.rb +3 -3
- data/lib/jss/api_object/network_segment.rb +24 -19
- data/lib/jss/api_object/package.rb +6 -6
- data/lib/jss/api_object/peripheral.rb +5 -5
- data/lib/jss/api_object/policy.rb +5 -5
- data/lib/jss/api_object/restricted_software.rb +4 -4
- data/lib/jss/api_object/scopable/scope.rb +3 -3
- data/lib/jss/api_object/script.rb +1 -1
- data/lib/jss/api_object/self_servable.rb +3 -3
- data/lib/jss/api_object/self_servable/icon.rb +7 -2
- data/lib/jss/api_object/updatable.rb +2 -2
- data/lib/jss/api_object/uploadable.rb +1 -1
- data/lib/jss/api_object/user.rb +2 -2
- data/lib/jss/composer.rb +37 -10
- data/lib/jss/ruby_extensions/string.rb +51 -42
- data/lib/jss/server.rb +27 -6
- data/lib/jss/utility.rb +44 -0
- data/lib/jss/validate.rb +85 -0
- data/lib/jss/version.rb +1 -1
- metadata +5 -4
data/lib/jss/server.rb
CHANGED
@@ -26,13 +26,14 @@
|
|
26
26
|
###
|
27
27
|
module JSS
|
28
28
|
|
29
|
-
# A class representing the currently-connected JSS Server
|
29
|
+
# A class representing the currently-connected JSS Server in a
|
30
|
+
# JSS::APIConnection instance.
|
30
31
|
#
|
31
32
|
# The {JSS::APIConnection} instance has a JSS::Server instance in its #server
|
32
33
|
# attribute. It is created fresh every time {APIConnection#connect} is called.
|
33
34
|
#
|
34
35
|
# That's the only time it should be instantiated, and all access should be
|
35
|
-
# through
|
36
|
+
# through the #server attribute of the APIConnection instance.
|
36
37
|
#
|
37
38
|
class Server
|
38
39
|
|
@@ -66,6 +67,10 @@ module JSS
|
|
66
67
|
# @return [String]
|
67
68
|
attr_reader :raw_version
|
68
69
|
|
70
|
+
# @return [JSS::APIConnection] The APIConnection object that contains this
|
71
|
+
# instance of Server
|
72
|
+
attr_reader :api
|
73
|
+
|
69
74
|
# Instance Methods
|
70
75
|
#####################################
|
71
76
|
|
@@ -77,8 +82,12 @@ module JSS
|
|
77
82
|
# However, it's marked as 'deprecated'. Hopefully jamf will
|
78
83
|
# keep this basic level of info available for basic authentication
|
79
84
|
# and JSS version checking.
|
80
|
-
|
81
|
-
|
85
|
+
#
|
86
|
+
# The 'api' is a reference to the JSS::APIConnection instance
|
87
|
+
# which this JSS::Server instance is a part of.
|
88
|
+
#
|
89
|
+
def initialize(jss_data, api)
|
90
|
+
@api = api
|
82
91
|
@license_type = jss_data[:license_type]
|
83
92
|
@product = jss_data[:product]
|
84
93
|
@raw_version = jss_data[:version]
|
@@ -91,16 +100,28 @@ module JSS
|
|
91
100
|
|
92
101
|
# @return [String] the organization to which the server is licensed
|
93
102
|
def organization
|
94
|
-
@act_code_data ||=
|
103
|
+
@act_code_data ||= @api.get_rsrc(ACTIVATION_CODE_RSRC)[ACTIVATION_CODE_KEY]
|
95
104
|
@act_code_data[:organization_name]
|
96
105
|
end
|
97
106
|
|
98
107
|
# @return [String] the activation code for the server licence
|
99
108
|
def activation_code
|
100
|
-
@act_code_data ||=
|
109
|
+
@act_code_data ||= @api.get_rsrc(ACTIVATION_CODE_RSRC)[ACTIVATION_CODE_KEY]
|
101
110
|
@act_code_data[:code]
|
102
111
|
end
|
103
112
|
|
113
|
+
# Remove the api object from
|
114
|
+
# the instance_variables used to create
|
115
|
+
# pretty-print (pp) output.
|
116
|
+
#
|
117
|
+
# @return [Array] the desired instance_variables
|
118
|
+
#
|
119
|
+
def pretty_print_instance_variables
|
120
|
+
vars = instance_variables.sort
|
121
|
+
vars.delete :@api
|
122
|
+
vars
|
123
|
+
end
|
124
|
+
|
104
125
|
##### Aliases
|
105
126
|
alias institution organization
|
106
127
|
alias product_name product
|
data/lib/jss/utility.rb
CHANGED
@@ -264,6 +264,50 @@ module JSS
|
|
264
264
|
Time.at(epoch.to_i / 1000.0)
|
265
265
|
end # parse_date
|
266
266
|
|
267
|
+
# Given a name, singular or plural, of a JSS::APIObject subclass as a String
|
268
|
+
# or Symbol (e.g. :computer/'computers'), return the class itself
|
269
|
+
# (e.g. JSS::Computer)
|
270
|
+
# The available names are the RSRC_LIST_KEY
|
271
|
+
# and RSRC_OBJECT_KEY values for each APIObject subclass.
|
272
|
+
#
|
273
|
+
# @seealso JSS.api_object_names
|
274
|
+
#
|
275
|
+
# @param name[String,Symbol] The name of a JSS::APIObject subclass, singluar
|
276
|
+
# or plural
|
277
|
+
#
|
278
|
+
# @return [Class] The class
|
279
|
+
#
|
280
|
+
def self.api_object_class(name)
|
281
|
+
klass = api_object_names[name.downcase.to_sym]
|
282
|
+
raise JSS::InvalidDataError, "Unknown API Object Class: #{name}" unless klass
|
283
|
+
klass
|
284
|
+
end
|
285
|
+
|
286
|
+
# APIObject subclasses have singular names, and are, of course
|
287
|
+
# capitalized, e.g. 'Computer'
|
288
|
+
# But we often want to refer to them in the plural, or lowercase,
|
289
|
+
# e.g. 'computers'
|
290
|
+
# This method returns a Hash of the RSRC_LIST_KEY (a plural symbol)
|
291
|
+
# and the RSRC_OBJECT_KEY (a singular symbol) of each APIObject
|
292
|
+
# subclass, keyed to the class itself, such that both :computer
|
293
|
+
# and :computers are keys for JSS::Computer and both :policy and
|
294
|
+
# :policies are keys for JSS::Policy, and so on.
|
295
|
+
#
|
296
|
+
# @return [Hash] APIObject subclass names to Classes
|
297
|
+
#
|
298
|
+
def self.api_object_names
|
299
|
+
return @api_object_names if @api_object_names
|
300
|
+
@api_object_names ||= {}
|
301
|
+
JSS.constants.each do |const|
|
302
|
+
klass = JSS.const_get const
|
303
|
+
next unless klass.is_a? Class
|
304
|
+
next unless klass.ancestors.include? JSS::APIObject
|
305
|
+
@api_object_names[klass.const_get(:RSRC_LIST_KEY).to_sym] = klass if klass.constants.include? :RSRC_LIST_KEY
|
306
|
+
@api_object_names[klass.const_get(:RSRC_OBJECT_KEY).to_sym] = klass if klass.constants.include? :RSRC_OBJECT_KEY
|
307
|
+
end
|
308
|
+
@api_object_names
|
309
|
+
end
|
310
|
+
|
267
311
|
# Given a string of xml element text, escape any characters that would make XML unhappy.
|
268
312
|
# * & => &
|
269
313
|
# * " => "
|
data/lib/jss/validate.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
# Copyright 2017 Pixar
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "Apache License")
|
4
|
+
# with the following modification; you may not use this file except in
|
5
|
+
# compliance with the Apache License and the following modification to it:
|
6
|
+
# Section 6. Trademarks. is deleted and replaced with:
|
7
|
+
#
|
8
|
+
# 6. Trademarks. This License does not grant permission to use the trade
|
9
|
+
# names, trademarks, service marks, or product names of the Licensor
|
10
|
+
# and its affiliates, except as required to comply with Section 4(c) of
|
11
|
+
# the License and to reproduce the content of the NOTICE file.
|
12
|
+
#
|
13
|
+
# You may obtain a copy of the Apache License at
|
14
|
+
#
|
15
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
16
|
+
#
|
17
|
+
# Unless required by applicable law or agreed to in writing, software
|
18
|
+
# distributed under the Apache License with the above modification is
|
19
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
20
|
+
# KIND, either express or implied. See the Apache License for the specific
|
21
|
+
# language governing permissions and limitations under the Apache License.
|
22
|
+
#
|
23
|
+
#
|
24
|
+
|
25
|
+
#
|
26
|
+
module JSS
|
27
|
+
|
28
|
+
# A collection of methods for validating values. Mostly for
|
29
|
+
# ensuring the validity of data being set as attributes of APIObject
|
30
|
+
# subclass instances.
|
31
|
+
#
|
32
|
+
# Some of these methods can take multiple input types, such as a String
|
33
|
+
# or an Array. All of them will either raise an exception
|
34
|
+
# if the value isn't valid, or will return a standardized form of the input
|
35
|
+
# (e.g. an Array, even if given a String)
|
36
|
+
#
|
37
|
+
module Validate
|
38
|
+
|
39
|
+
# The regular expression that matches a valid MAC address.
|
40
|
+
MAC_ADDR_RE = /^[a-f0-9]{2}(:[a-f0-9]{2}){5}$/i
|
41
|
+
|
42
|
+
# Validate the format and content of a MAC address
|
43
|
+
#
|
44
|
+
# @param val[String] The value to validate
|
45
|
+
#
|
46
|
+
# @return [String] The valid value
|
47
|
+
#
|
48
|
+
def self.mac_address(val)
|
49
|
+
raise JSS::InvalidDataError, "Not a valid MAC address: '#{val}'" unless val =~ MAC_ADDR_RE
|
50
|
+
val
|
51
|
+
end
|
52
|
+
|
53
|
+
# Validate the format and content of an IPv4 address
|
54
|
+
#
|
55
|
+
# @param val[String] The value to validate
|
56
|
+
#
|
57
|
+
# @return [String] The valid value
|
58
|
+
#
|
59
|
+
def self.ip_address(val)
|
60
|
+
ok = true
|
61
|
+
parts = val.strip.split '.'
|
62
|
+
ok = false unless parts.size == 4
|
63
|
+
parts.each { |p| ok = false unless p.jss_integer? && p.to_i < 256 }
|
64
|
+
raise JSS::InvalidDataError, "Not a valid IPv4 address: '#{val}'" unless ok
|
65
|
+
val
|
66
|
+
end
|
67
|
+
|
68
|
+
# Validate that a value doesn't already exist for a given identifier of a given class
|
69
|
+
#
|
70
|
+
# @param klass[JSS::APIObject] A subclass of JSS::APIObject, e.g. JSS::Computer
|
71
|
+
#
|
72
|
+
# @param identifier[Symbol] One of the keys of an Item of the class's #all Array
|
73
|
+
#
|
74
|
+
# @param val[Object] The value to check for uniqueness
|
75
|
+
#
|
76
|
+
# @return [Object] the validated unique value
|
77
|
+
#
|
78
|
+
def self.unique_identifier(klass, identifier, val)
|
79
|
+
raise JSS::AlreadyExistsError, "A #{klass} already exists with #{identifier} '#{val}'" if klass.all.map { |i| i[identifier] }.include? val
|
80
|
+
val
|
81
|
+
end
|
82
|
+
|
83
|
+
end # module validate
|
84
|
+
|
85
|
+
end # module JSS
|
data/lib/jss/version.rb
CHANGED
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: 0.
|
4
|
+
version: 0.10.0a1
|
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: 2017-
|
12
|
+
date: 2017-08-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: plist
|
@@ -181,6 +181,7 @@ files:
|
|
181
181
|
- lib/jss/ruby_extensions/time.rb
|
182
182
|
- lib/jss/server.rb
|
183
183
|
- lib/jss/utility.rb
|
184
|
+
- lib/jss/validate.rb
|
184
185
|
- lib/jss/version.rb
|
185
186
|
- lib/ruby-jss.rb
|
186
187
|
homepage: http://pixaranimationstudios.github.io/ruby-jss/
|
@@ -203,9 +204,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
203
204
|
version: 1.9.3
|
204
205
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
205
206
|
requirements:
|
206
|
-
- - "
|
207
|
+
- - ">"
|
207
208
|
- !ruby/object:Gem::Version
|
208
|
-
version:
|
209
|
+
version: 1.3.1
|
209
210
|
requirements: []
|
210
211
|
rubyforge_project:
|
211
212
|
rubygems_version: 2.6.8
|