module Resource::Session

Namespace for Session resource.

Attributes

session[R]

@return [Boolean] whether has a session.

Public Instance Methods

destroy() click to toggle source

Destroy the current session.

# File lib/modules/session.rb, line 40
def destroy
  request.delete({ path: '/session', headers: headers })
  @session = false
end
Also aliased as: logout
logout()
Alias for: destroy
session_create(username, password)
Alias for: set_session
set_session(username, password) click to toggle source

Autenticate into Nessus resource. @param [String] username @param [String] password @return [nil] @raise [NessusClient::Error] Unable to authenticate. @todo Validate response token format

# File lib/modules/session.rb, line 16
def set_session(username, password)
  payload = {
    username: username,
    password: password
  }

  resp = request.post({ path: '/session', payload: payload, headers: headers })
  # binding.pry
  if !resp.key?('token')
    raise NessusClient::Error, 'Unable to authenticate.'
  elsif !resp['token'].match(/(?<token>[a-z0-9]{48})/)
    raise NessusClient::Error, 'The token doesnt match with the pattern.'
  end

  headers.update('X-Cookie' => 'token=' + resp['token'])
  @session = true
  api_token = set_api_token
  headers.update('X-API-Token' => api_token) if api_token
rescue NessusClient::Error => e
  raise e
end
Also aliased as: session_create

Private Instance Methods

set_api_token() click to toggle source

Set the API Token from legacy Nessus version @raise [NessusClient::Error] Unable to get API Token. @todo To get it direct from the session authentication on v6.x

# File lib/modules/session.rb, line 51
def set_api_token
  response = request.get({ path: '/nessus6.js', headers: headers })
  response.match(/return"(\w{8}-(?:\w{4}-){3}\w{12})"\}/)
  unless  Regexp.last_match(1)
    raise NessusClient::Error, "Unable to get API Token. Some features won't work."
  end
rescue NessusClient::Error => e
  puts e.message
else
  Regexp.last_match(1)
end