Module: Nexpose::AJAX

Defined in:
lib/nexpose/ajax.rb

Overview

Accessor to the Nexpose AJAX API. These core methods should allow direct access to underlying controllers in order to test functionality that is not currently exposed through the XML API.

Defined Under Namespace

Modules: CONTENT_TYPE

Class Method Summary collapse

Class Method Details

._get_rows(nsc, pref) ⇒ Object



167
168
169
170
171
172
173
174
175
176
177
# File 'lib/nexpose/ajax.rb', line 167

def _get_rows(nsc, pref)
  uri = '/ajax/user_pref_get.txml'
  resp = get(nsc, uri, CONTENT_TYPE::XML, 'name' => "#{pref}.rows")
  xml = REXML::Document.new(resp)
  if val = REXML::XPath.first(xml, 'GetUserPref/userPref')
    rows = val.text.to_i
    rows > 0 ? rows : 10
  else
    10
  end
end

._headers(nsc, request) ⇒ Object

Attach necessary header fields.



143
144
145
146
# File 'lib/nexpose/ajax.rb', line 143

def _headers(nsc, request)
  request.add_field('nexposeCCSessionID', nsc.session_id)
  request.add_field('Cookie', "nexposeCCSessionID=#{nsc.session_id}")
end

._https(nsc) ⇒ Object

Use the Nexpose::Connection to establish a correct HTTPS object.



135
136
137
138
139
140
# File 'lib/nexpose/ajax.rb', line 135

def _https(nsc)
  http = Net::HTTP.new(nsc.host, nsc.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  http
end

._request(nsc, request) ⇒ Object



148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/nexpose/ajax.rb', line 148

def _request(nsc, request)
  http = _https(nsc)
  _headers(nsc, request)

  # Return response body if request is successful. Brittle.
  response = http.request(request)
  case response
  when Net::HTTPOK
    response.body
  when Net::HTTPCreated
    response.body
  when Net::HTTPUnauthorized
    raise Nexpose::PermissionError.new(response) 
  else
    req_type = request.class.name.split('::').last.upcase
    raise Nexpose::APIError.new(response, "#{req_type} request to #{request.path} failed. #{request.body}")
  end
end

._row_pref_of(val) ⇒ Object



190
191
192
193
194
195
196
197
198
199
200
201
202
# File 'lib/nexpose/ajax.rb', line 190

def _row_pref_of(val)
  if val.nil? || val > 100
    500
  elsif val > 50
    100
  elsif val > 25
    50
  elsif val > 10
    25
  else
    10
  end
end

._set_rows(nsc, pref, value) ⇒ Object



179
180
181
182
183
184
185
186
187
188
# File 'lib/nexpose/ajax.rb', line 179

def _set_rows(nsc, pref, value)
  uri = '/ajax/user_pref_set.txml'
  params = { 'name'  => "#{pref}.rows",
             'value' => value }
  resp = get(nsc, uri, CONTENT_TYPE::XML, params)
  xml = REXML::Document.new(resp)
  if attr = REXML::XPath.first(xml, 'SetUserPref/@success')
    attr.value == '1'
  end
end

.delete(nsc, uri, content_type = CONTENT_TYPE::XML) ⇒ Object

DELETE call to a Nexpose controller.

Parameters:

  • nsc (Connection)

    API connection to a Nexpose console.

  • uri (String)

    Controller address relative to host:port

  • content_type (String) (defaults to: CONTENT_TYPE::XML)

    Content type to use when issuing the DELETE.



101
102
103
104
105
# File 'lib/nexpose/ajax.rb', line 101

def delete(nsc, uri, content_type = CONTENT_TYPE::XML)
  delete = Net::HTTP::Delete.new(uri)
  delete.set_content_type(content_type)
  _request(nsc, delete)
end

.form_post(nsc, uri, parameters, content_type = CONTENT_TYPE::FORM) ⇒ Hash

POST call to a Nexpose controller that uses a form-post model. This is here to support legacy use of POST in old controllers.

Parameters:

  • nsc (Connection)

    API connection to a Nexpose console.

  • uri (String)

    Controller address relative to host:port

  • parameters (Hash)

    Hash of attributes that need to be sent to the controller.

  • content_type (String) (defaults to: CONTENT_TYPE::FORM)

    Content type to use when issuing the POST.

Returns:

  • (Hash)

    The parsed JSON response from the call.



89
90
91
92
93
94
# File 'lib/nexpose/ajax.rb', line 89

def form_post(nsc, uri, parameters, content_type = CONTENT_TYPE::FORM)
  post = Net::HTTP::Post.new(uri)
  post.set_content_type(content_type)
  post.set_form_data(parameters)
  _request(nsc, post)
end

.get(nsc, uri, content_type = CONTENT_TYPE::XML, options = {}) ⇒ String|REXML::Document|Hash

GET call to a Nexpose controller.

Parameters:

  • nsc (Connection)

    API connection to a Nexpose console.

  • uri (String)

    Controller address relative to host:port

  • content_type (String) (defaults to: CONTENT_TYPE::XML)

    Content type to use when issuing the GET.

  • options (Hash) (defaults to: {})

    Parameter options to the call.

Returns:

  • (String|REXML::Document|Hash)

    The response from the call.



27
28
29
30
31
32
# File 'lib/nexpose/ajax.rb', line 27

def get(nsc, uri, content_type = CONTENT_TYPE::XML, options = {})
  parameterize_uri(uri, options)
  get = Net::HTTP::Get.new(uri)
  get.set_content_type(content_type)
  _request(nsc, get)
end

.parameterize_uri(uri, parameters) ⇒ Hash

Append the query parameters to given URI.

Parameters:

  • uri (String)

    Controller address relative to host:port

  • parameters (Hash)

    Hash of attributes that need to be sent to the controller.

Returns:

  • (Hash)

    The parameterized URI.



114
115
116
117
118
119
120
# File 'lib/nexpose/ajax.rb', line 114

def parameterize_uri(uri, parameters)
  params = Hash.try_convert(parameters)
  unless params.nil? || params.empty?
    uri = uri.concat(('?').concat(parameters.map { |k, v| "#{k}=#{CGI.escape(v.to_s)}" }.join('&'))) 
  end
  uri
end

.patch(nsc, uri, payload = nil, content_type = CONTENT_TYPE::XML) ⇒ String

PATCH call to a Nexpose controller.

Parameters:

  • nsc (Connection)

    API connection to a Nexpose console.

  • uri (String)

    Controller address relative to host:port

  • payload (String|REXML::Document) (defaults to: nil)

    XML document required by the call.

  • content_type (String) (defaults to: CONTENT_TYPE::XML)

    Content type to use when issuing the PATCH.

Returns:

  • (String)

    The response from the call.



72
73
74
75
76
77
# File 'lib/nexpose/ajax.rb', line 72

def patch(nsc, uri, payload = nil, content_type = CONTENT_TYPE::XML)
  patch = Net::HTTP::Patch.new(uri)
  patch.set_content_type(content_type)
  patch.body = payload.to_s if payload
  _request(nsc, patch)
end

.post(nsc, uri, payload = nil, content_type = CONTENT_TYPE::XML) ⇒ String|REXML::Document|Hash

POST call to a Nexpose controller.

Parameters:

  • nsc (Connection)

    API connection to a Nexpose console.

  • uri (String)

    Controller address relative to host:port

  • payload (String|REXML::Document) (defaults to: nil)

    XML document required by the call.

  • content_type (String) (defaults to: CONTENT_TYPE::XML)

    Content type to use when issuing the POST.

Returns:

  • (String|REXML::Document|Hash)

    The response from the call.



57
58
59
60
61
62
# File 'lib/nexpose/ajax.rb', line 57

def post(nsc, uri, payload = nil, content_type = CONTENT_TYPE::XML)
  post = Net::HTTP::Post.new(uri)
  post.set_content_type(content_type)
  post.body = payload.to_s if payload
  _request(nsc, post)
end

.preserving_preference(nsc, pref) ⇒ Object



122
123
124
125
126
127
128
129
# File 'lib/nexpose/ajax.rb', line 122

def preserving_preference(nsc, pref)
  begin
    orig = _get_rows(nsc, pref)
    yield
  ensure
    _set_rows(nsc, pref, orig)
  end
end

.put(nsc, uri, payload = nil, content_type = CONTENT_TYPE::XML) ⇒ String

PUT call to a Nexpose controller.

Parameters:

  • nsc (Connection)

    API connection to a Nexpose console.

  • uri (String)

    Controller address relative to host:port

  • payload (String|REXML::Document) (defaults to: nil)

    XML document required by the call.

  • content_type (String) (defaults to: CONTENT_TYPE::XML)

    Content type to use when issuing the PUT.

Returns:

  • (String)

    The response from the call.



42
43
44
45
46
47
# File 'lib/nexpose/ajax.rb', line 42

def put(nsc, uri, payload = nil, content_type = CONTENT_TYPE::XML)
  put = Net::HTTP::Put.new(uri)
  put.set_content_type(content_type)
  put.body = payload.to_s if payload
  _request(nsc, put)
end