cpanel 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/cpanel.gemspec +62 -0
- data/lib/cpanel/response.rb +31 -0
- data/lib/cpanel/server.rb +71 -0
- metadata +46 -19
data/Rakefile
CHANGED
@@ -13,8 +13,8 @@ begin
|
|
13
13
|
|
14
14
|
gem.add_development_dependency "thoughtbot-shoulda"
|
15
15
|
|
16
|
-
gem.add_dependency "
|
17
|
-
gem.add_dependency "
|
16
|
+
gem.add_dependency "activeresource"
|
17
|
+
gem.add_dependency "activesupport"
|
18
18
|
end
|
19
19
|
rescue LoadError
|
20
20
|
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/cpanel.gemspec
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{cpanel}
|
8
|
+
s.version = "0.1.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Josh Delsman"]
|
12
|
+
s.date = %q{2010-06-25}
|
13
|
+
s.description = %q{cPanel connection wrapper for Ruby}
|
14
|
+
s.email = %q{jdelsman@voxxit.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"cpanel.gemspec",
|
27
|
+
"lib/cpanel.rb",
|
28
|
+
"lib/cpanel/response.rb",
|
29
|
+
"lib/cpanel/server.rb",
|
30
|
+
"test/cpanel_test.rb",
|
31
|
+
"test/test_helper.rb"
|
32
|
+
]
|
33
|
+
s.homepage = %q{http://github.com/voxxit/cpanel}
|
34
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
35
|
+
s.require_paths = ["lib"]
|
36
|
+
s.rubygems_version = %q{1.3.7}
|
37
|
+
s.summary = %q{cPanel connection wrapper for Ruby}
|
38
|
+
s.test_files = [
|
39
|
+
"test/cpanel_test.rb",
|
40
|
+
"test/test_helper.rb"
|
41
|
+
]
|
42
|
+
|
43
|
+
if s.respond_to? :specification_version then
|
44
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
45
|
+
s.specification_version = 3
|
46
|
+
|
47
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
48
|
+
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
49
|
+
s.add_runtime_dependency(%q<activeresource>, [">= 0"])
|
50
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
51
|
+
else
|
52
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
53
|
+
s.add_dependency(%q<activeresource>, [">= 0"])
|
54
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
55
|
+
end
|
56
|
+
else
|
57
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
58
|
+
s.add_dependency(%q<activeresource>, [">= 0"])
|
59
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'active_support/json'
|
2
|
+
|
3
|
+
module Cpanel
|
4
|
+
class Response
|
5
|
+
attr_accessor :response, :success
|
6
|
+
|
7
|
+
def initialize(response)
|
8
|
+
response = ActiveSupport::JSON.decode(response)
|
9
|
+
|
10
|
+
if response["result"]
|
11
|
+
@response = response["result"][0] ? response["result"][0] : response["result"]
|
12
|
+
else
|
13
|
+
@response = response
|
14
|
+
end
|
15
|
+
|
16
|
+
@success = success?
|
17
|
+
end
|
18
|
+
|
19
|
+
def errors
|
20
|
+
if success?
|
21
|
+
nil
|
22
|
+
else
|
23
|
+
return response["statusmsg"] ? response["statusmsg"] : nil
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def success?
|
28
|
+
return response["status"] ? response["status"] == 1 : true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'net/https'
|
3
|
+
require 'openssl'
|
4
|
+
require 'active_resource'
|
5
|
+
|
6
|
+
module Cpanel
|
7
|
+
class Server
|
8
|
+
include ActiveResource
|
9
|
+
|
10
|
+
attr_accessor :url, :key, :timeout, :api
|
11
|
+
|
12
|
+
def initialize(options = {})
|
13
|
+
@url = URI.parse(options[:url])
|
14
|
+
@key = format_key(options[:key])
|
15
|
+
@timeout = options[:timeout] || 300
|
16
|
+
@api = options[:api] || "json"
|
17
|
+
end
|
18
|
+
|
19
|
+
def key=(api_key)
|
20
|
+
@key = format_key(api_key)
|
21
|
+
end
|
22
|
+
|
23
|
+
def request(script, options = {})
|
24
|
+
request = Net::HTTP::Get.new("/#{api}-api/" + script)
|
25
|
+
request.add_field "Authorization", "WHM root:#{key}"
|
26
|
+
request.set_form_data(options) unless options.empty?
|
27
|
+
|
28
|
+
result = http.request(request)
|
29
|
+
response = handle_response(result)
|
30
|
+
|
31
|
+
return Response.new(response)
|
32
|
+
rescue Timeout::Error, Errno::ETIMEDOUT => e
|
33
|
+
raise TimeoutError.new(e.message)
|
34
|
+
rescue Errno::ECONNREFUSED => e
|
35
|
+
raise CommandFailed.new("Connection to cPanel server was refused; may be down or unreachable")
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def format_key(key)
|
41
|
+
key.gsub("\n", "").gsub("\r", "").strip
|
42
|
+
end
|
43
|
+
|
44
|
+
def handle_response(response)
|
45
|
+
case response.code.to_i
|
46
|
+
when 301, 302 then raise(Redirection.new(response))
|
47
|
+
when 200...400 then return(response.body)
|
48
|
+
when 400 then raise(BadRequest.new(response))
|
49
|
+
when 401 then raise(UnauthorizedAccess.new(response))
|
50
|
+
when 403 then raise(ForbiddenAccess.new(response))
|
51
|
+
when 404 then raise(ResourceNotFound.new(response))
|
52
|
+
when 405 then raise(MethodNotAllowed.new(response))
|
53
|
+
when 409 then raise(ResourceConflict.new(response))
|
54
|
+
when 422 then raise(ResourceInvalid.new(response))
|
55
|
+
when 401...500 then raise(ClientError.new(response))
|
56
|
+
when 500...600 then raise(ServerError.new(response))
|
57
|
+
else
|
58
|
+
raise ConnectionError.new(response, "Unknown response code: #{response.code}")
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def http
|
63
|
+
http = Net::HTTP.new(url.host, url.port)
|
64
|
+
http.use_ssl = (url.scheme == 'https')
|
65
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE if url.scheme == 'https'
|
66
|
+
http.read_timeout = timeout
|
67
|
+
http.open_timeout = timeout
|
68
|
+
http
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cpanel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 25
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Josh Delsman
|
@@ -9,39 +15,51 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-
|
18
|
+
date: 2010-06-25 00:00:00 -04:00
|
13
19
|
default_executable:
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
22
|
name: thoughtbot-shoulda
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
20
26
|
requirements:
|
21
27
|
- - ">="
|
22
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
23
32
|
version: "0"
|
24
|
-
|
33
|
+
type: :development
|
34
|
+
version_requirements: *id001
|
25
35
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
27
|
-
|
28
|
-
|
29
|
-
|
36
|
+
name: activeresource
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
30
40
|
requirements:
|
31
41
|
- - ">="
|
32
42
|
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
33
46
|
version: "0"
|
34
|
-
version:
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: active_support
|
37
47
|
type: :runtime
|
38
|
-
|
39
|
-
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: activesupport
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
40
54
|
requirements:
|
41
55
|
- - ">="
|
42
56
|
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
58
|
+
segments:
|
59
|
+
- 0
|
43
60
|
version: "0"
|
44
|
-
|
61
|
+
type: :runtime
|
62
|
+
version_requirements: *id003
|
45
63
|
description: cPanel connection wrapper for Ruby
|
46
64
|
email: jdelsman@voxxit.com
|
47
65
|
executables: []
|
@@ -58,7 +76,10 @@ files:
|
|
58
76
|
- README.rdoc
|
59
77
|
- Rakefile
|
60
78
|
- VERSION
|
79
|
+
- cpanel.gemspec
|
61
80
|
- lib/cpanel.rb
|
81
|
+
- lib/cpanel/response.rb
|
82
|
+
- lib/cpanel/server.rb
|
62
83
|
- test/cpanel_test.rb
|
63
84
|
- test/test_helper.rb
|
64
85
|
has_rdoc: true
|
@@ -71,21 +92,27 @@ rdoc_options:
|
|
71
92
|
require_paths:
|
72
93
|
- lib
|
73
94
|
required_ruby_version: !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
74
96
|
requirements:
|
75
97
|
- - ">="
|
76
98
|
- !ruby/object:Gem::Version
|
99
|
+
hash: 3
|
100
|
+
segments:
|
101
|
+
- 0
|
77
102
|
version: "0"
|
78
|
-
version:
|
79
103
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
80
105
|
requirements:
|
81
106
|
- - ">="
|
82
107
|
- !ruby/object:Gem::Version
|
108
|
+
hash: 3
|
109
|
+
segments:
|
110
|
+
- 0
|
83
111
|
version: "0"
|
84
|
-
version:
|
85
112
|
requirements: []
|
86
113
|
|
87
114
|
rubyforge_project:
|
88
|
-
rubygems_version: 1.3.
|
115
|
+
rubygems_version: 1.3.7
|
89
116
|
signing_key:
|
90
117
|
specification_version: 3
|
91
118
|
summary: cPanel connection wrapper for Ruby
|