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



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/jamf/api/connection/jamf_pro_api.rb', line 21

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:



141
142
143
144
145
146
147
148
149
# File 'lib/jamf/api/connection/jamf_pro_api.rb', line 141

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



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

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:



47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/jamf/api/connection/jamf_pro_api.rb', line 47

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:



118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/jamf/api/connection/jamf_pro_api.rb', line 118

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:



72
73
74
75
76
77
78
79
80
81
82
# File 'lib/jamf/api/connection/jamf_pro_api.rb', line 72

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:



95
96
97
98
99
100
101
102
103
104
105
# File 'lib/jamf/api/connection/jamf_pro_api.rb', line 95

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:



173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
# File 'lib/jamf/api/connection/jamf_pro_api.rb', line 173

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