class Vestacp::Base

Vestacp::Base is the main class used to subclass Vestacp API resources

Public Class Methods

parse_response(raw, json_response = false) click to toggle source

Parse VestaCP responses. TODO: add more responses.

See: vestacp.com/docs/api/#return_codes

# File lib/vestacp/base.rb, line 56
def self.parse_response(raw, json_response = false)
  case raw
  when 'OK'
    {error: false, response: raw}
  when /^Error/
    {error: true, response: raw}
  else
    {error: false, response: raw}
  end

  # case raw
  # when '0'
  #   {
  #     error: false, value: raw, name: 'OK',
  #     comment: 'Command has been successfuly performed.'
  #   }
  # when '1'
  #   {
  #     error: true, value: raw, name: 'E_ARGS',
  #     comment: 'Not enough arguments provided.'
  #   }
  # when '2'
  #   {
  #     error: true, value: raw, name: 'E_INVALID',
  #     comment: 'Object or argument is not valid.'
  #   }
  # when '3'
  #   {
  #     error: true, value: raw, name: 'E_NOTEXIST',
  #     comment: "Object doesn't exist."
  #   }
  # else
  #   {
  #     error: true, value: '-1', name: 'E_UNKNOWN',
  #     comment: "Unknown response: #{raw}"
  #   }
  # end
end
send_request(params = {}, raw = {}, json_response = false) click to toggle source

Sends an API request to the Vestacp API

Parameters:

  • :cmd - The API action to perform

All other paramters are passed along as HTTP POST variables

# File lib/vestacp/base.rb, line 14
def self.send_request(params = {}, raw = {}, json_response = false)
  if params[:cmd].blank?
    raise "No API command set"
  end

  if !raw[:server]
    raise "No server as argument and server configuration!" unless Vestacp.config
    raw[:server] = {
      api_username: Vestacp.config.api_username,
      api_password: Vestacp.config.api_password,
      api_url: Vestacp.config.api_url
    }
  end

  params.merge!(
    user: raw[:server][:api_username],
    password: raw[:server][:api_password]
  )

  # params.merge!(returncode: 'yes') unless params[:returncode]

  url = URI.parse(raw[:server][:api_url])

  # SSL without is really bad design. In order to support even self-signed
  # certificates I should do that.
  conn = Faraday.new(:url => url, ssl: { verify: false }) do |faraday|
    faraday.request  :url_encoded             # form-encode POST params
    faraday.response :logger                  # log requests to STDOUT
    faraday.adapter  Faraday.default_adapter  # make requests with Net::HTTP
  end

  response = conn.post do |req|
    req.body = params
  end

  parse_response(json_response ? JSON.parse(response.body) : response.body)
end