Module: Jamf::Connection::JamfProAPI

Included in:
Jamf::Connection
Defined in:
lib/jamf/api/connection/jamf_pro_api.rb

Overview

This Module defines methods used for interacting with the Jamf Pro API. This includes creating the Faraday connection, sending HTTP requests and handling responses

Instance Method Summary collapse

Instance Method Details

#create_jp_connection(parse_json: true, upload: false) ⇒ Object

create the faraday JPAPI connection object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/jamf/api/connection/jamf_pro_api.rb', line 38

def create_jp_connection(parse_json: true, upload: false)
  Faraday.new(@jp_base_url, ssl: ssl_options) do |cnx|
    # use a proc for the token value, so its looked up on every request
    # meaning we don't have to validate that the token is still valid before every request
    # because the Token instance will (usually) refresh it automatically.
    cnx.request :authorization, 'Bearer', -> { @token.token }

    cnx.options[:timeout] = @timeout
    cnx.options[:open_timeout] = @open_timeout

    cnx.request :multipart if upload

    if parse_json
      cnx.request :json unless upload
      cnx.response :json, parser_options: { symbolize_names: true }
    end

    cnx.adapter :net_http
  end
end

#jp_delete(rsrc) ⇒ String Also known as: delete

Delete an existing Jamf Pro API resource

Parameters:

  • rsrc (String)

    the API resource being deleted, the URL part after ‘api/’

Returns:

  • (String)

    the response from the server.

Raises:



158
159
160
161
162
163
164
165
166
# File 'lib/jamf/api/connection/jamf_pro_api.rb', line 158

def jp_delete(rsrc)
  validate_connected
  rsrc = rsrc.delete_prefix Jamf::Connection::SLASH
  resp = @jp_cnx.delete rsrc
  @last_http_response = resp
  return resp.body if resp.success?

  raise Jamf::Connection::JamfProAPIError, resp
end

#jp_download(rsrc) ⇒ Object

GET a rsrc without doing any JSON parsing, using a temporary Faraday connection object



173
174
175
176
177
178
179
180
181
# File 'lib/jamf/api/connection/jamf_pro_api.rb', line 173

def jp_download(rsrc)
  rsrc = rsrc.delete_prefix Jamf::Connection::SLASH
  temp_cnx = create_jp_connection(parse_json: false)
  resp = temp_cnx.get rsrc
  @last_http_response = resp
  return resp.body if resp.success?

  raise Jamf::Connection::JamfProAPIError, resp
end

#jp_get(rsrc) ⇒ Hash Also known as: get

Returns the result of the get.

Returns:

  • (Hash)

    the result of the get

Raises:



64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/jamf/api/connection/jamf_pro_api.rb', line 64

def jp_get(rsrc)
  validate_connected
  rsrc = rsrc.delete_prefix Jamf::Connection::SLASH
  resp = @jp_cnx.get(rsrc) do |req|
    # Modify the request here if needed.
    # puts "JPAPI Cookie is: #{req.headers['Cookie']}"
  end
  @last_http_response = resp

  return resp.body if resp.success?

  raise Jamf::Connection::JamfProAPIError, resp
end

#jp_patch(rsrc, data) ⇒ String Also known as: patch

Update an existing Jamf Pro API resource

Parameters:

  • rsrc (String)

    the API resource being changed, the URL part after ‘api/’

  • data (String)

    the json specifying the changes.

Returns:

  • (String)

    the response from the server.

Raises:



135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/jamf/api/connection/jamf_pro_api.rb', line 135

def jp_patch(rsrc, data)
  validate_connected
  rsrc = rsrc.delete_prefix Jamf::Connection::SLASH
  resp = @jp_cnx.patch(rsrc) do |req|
    # Patch requests must use this content type!
    req.headers['Content-Type'] = 'application/merge-patch+json'
    req.body = data
  end
  @last_http_response = resp
  return resp.body if resp.success?

  raise Jamf::Connection::JamfProAPIError, resp
end

#jp_post(rsrc, data) ⇒ String Also known as: post

Create a JPAPI resource via POST

Parameters:

  • rsrc (String)

    the resource to POST (the part of the API url after the ‘/api/’ )

  • data (String)

    the JSON data to POST

Returns:

  • (String)

    the response body

Raises:



89
90
91
92
93
94
95
96
97
98
99
# File 'lib/jamf/api/connection/jamf_pro_api.rb', line 89

def jp_post(rsrc, data)
  validate_connected
  rsrc = rsrc.delete_prefix Jamf::Connection::SLASH
  resp = @jp_cnx.post(rsrc) do |req|
    req.body = data
  end
  @last_http_response = resp
  return resp.body if resp.success?

  raise Jamf::Connection::JamfProAPIError, resp
end

#jp_put(rsrc, data) ⇒ String Also known as: put

Replace an existing Jamf Pro API resource

Parameters:

  • rsrc (String)

    the API resource being changed, the URL part after ‘api/’

  • data (String)

    the json specifying the changes.

Returns:

  • (String)

    the response from the server.

Raises:



112
113
114
115
116
117
118
119
120
121
122
# File 'lib/jamf/api/connection/jamf_pro_api.rb', line 112

def jp_put(rsrc, data)
  validate_connected
  rsrc = rsrc.delete_prefix Jamf::Connection::SLASH
  resp = @jp_cnx.put(rsrc) do |req|
    req.body = data
  end
  @last_http_response = resp
  return resp.body if resp.success?

  raise Jamf::Connection::JamfProAPIError, resp
end

#jp_upload(rsrc, local_file) ⇒ String

Returns the xml response from the server.

Parameters:

  • rsrc (String)

    the API resource being uploadad-to, the URL part after ‘JSSResource/’

  • local_file (String, Pathname)

    the local file to upload

Returns:

  • (String)

    the xml response from the server.

Raises:



190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
# File 'lib/jamf/api/connection/jamf_pro_api.rb', line 190

def jp_upload(rsrc, local_file)
  upload_cnx = create_jp_connection upload: true

  rsrc = rsrc.delete_prefix Jamf::Connection::SLASH

  payload = {}
  payload[:file] = Faraday::Multipart::FilePart.new(local_file.to_s, 'application/octet-stream')

  resp = upload_cnx.post rsrc, payload

  @last_http_response = resp

  return resp.body if resp.success?

  raise Jamf::Connection::JamfProAPIError, resp
end