Class: Vestacp::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/vestacp/base.rb

Overview

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

Direct Known Subclasses

Account, Database, Domain

Class Method Summary collapse

Class Method Details

.parse_response(raw, json_response = false) ⇒ Object

Parse VestaCP responses. TODO: add more responses.

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



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# 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) ⇒ Object

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



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/vestacp/base.rb', line 14

def self.send_request(params = {}, raw = {}, json_response = false)
  if params[:cmd].nil? || params[:cmd].empty?
    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