whm_xml 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +88 -0
- data/Rakefile +11 -0
- data/lib/parameters.rb +67 -0
- data/lib/whm.rb +20 -0
- data/lib/whm/account.rb +64 -0
- data/lib/whm/exceptions.rb +4 -0
- data/lib/whm/package.rb +17 -0
- data/lib/whm/server.rb +372 -0
- data/spec/account_spec.rb +111 -0
- data/spec/fixtures/accountsummary.xml +22 -0
- data/spec/fixtures/changepackage.xml +27 -0
- data/spec/fixtures/createacct.xml +60 -0
- data/spec/fixtures/error.xml +10 -0
- data/spec/fixtures/error2.xml +4 -0
- data/spec/fixtures/generatessl.xml +84 -0
- data/spec/fixtures/gethostname.xml +5 -0
- data/spec/fixtures/limitbw.xml +16 -0
- data/spec/fixtures/listaccts.xml +54 -0
- data/spec/fixtures/listaccts_single.xml +20 -0
- data/spec/fixtures/listpkgs.xml +61 -0
- data/spec/fixtures/modifyacct.xml +40 -0
- data/spec/fixtures/passwd.xml +33 -0
- data/spec/fixtures/removeacct.xml +21 -0
- data/spec/fixtures/suspendacct.xml +26 -0
- data/spec/fixtures/unsuspendacct.xml +20 -0
- data/spec/fixtures/version.xml +5 -0
- data/spec/package_spec.rb +83 -0
- data/spec/server_spec.rb +195 -0
- data/spec/spec_helper.rb +26 -0
- metadata +163 -0
@@ -0,0 +1,40 @@
|
|
1
|
+
<modifyacct>
|
2
|
+
<result>
|
3
|
+
<messages>Changing shell for user.
|
4
|
+
Shell changed.
|
5
|
+
</messages>
|
6
|
+
<newcfg>
|
7
|
+
<cpuser>
|
8
|
+
<BWLIMIT>5242880000</BWLIMIT>
|
9
|
+
<CONTACTEMAIL>owner@domain.com</CONTACTEMAIL>
|
10
|
+
<CONTACTEMAIL2></CONTACTEMAIL2>
|
11
|
+
<DEADDOMAINS>oldsub.domain.com</DEADDOMAINS>
|
12
|
+
<DEMO>0</DEMO>
|
13
|
+
<DOMAIN>domain.com</DOMAIN>
|
14
|
+
<DOMAINS>sub.domain.com</DOMAINS>
|
15
|
+
<DOMAINS>addondomain.com</DOMAINS>
|
16
|
+
<FEATURELIST>reseller_gold</FEATURELIST>
|
17
|
+
<HASCGI>0</HASCGI>
|
18
|
+
<IP>192.168.1.1</IP>
|
19
|
+
<LANG>english</LANG>
|
20
|
+
<MAXADDON>5</MAXADDON>
|
21
|
+
<MAXFTP>0</MAXFTP>
|
22
|
+
<MAXLST>1</MAXLST>
|
23
|
+
<MAXPARK>4</MAXPARK>
|
24
|
+
<MAXPOP>3</MAXPOP>
|
25
|
+
<MAXSQL>6</MAXSQL>
|
26
|
+
<MAXSUB>3</MAXSUB>
|
27
|
+
<OWNER>root</OWNER>
|
28
|
+
<PLAN>reseller_gold</PLAN>
|
29
|
+
<RS>x3</RS>
|
30
|
+
<STARTDATE>1175808157</STARTDATE>
|
31
|
+
<USER>user</USER>
|
32
|
+
</cpuser>
|
33
|
+
<domain>domain.com</domain>
|
34
|
+
<setshell>/bin/bash</setshell>
|
35
|
+
<user>user</user>
|
36
|
+
</newcfg>
|
37
|
+
<status>1</status>
|
38
|
+
<statusmsg>Account Modified</statusmsg>
|
39
|
+
</result>
|
40
|
+
</modifyacct>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<passwd>
|
2
|
+
<passwd>
|
3
|
+
<rawout>Changing password for user
|
4
|
+
Password for user has been changed
|
5
|
+
Updating ftp passwords for user
|
6
|
+
Ftp password files updated.
|
7
|
+
Ftp vhost passwords synced
|
8
|
+
Unable to find pgpass file.
|
9
|
+
</rawout>
|
10
|
+
<services>
|
11
|
+
<app>system</app>
|
12
|
+
</services>
|
13
|
+
<services>
|
14
|
+
<app>ftp</app>
|
15
|
+
</services>
|
16
|
+
<services>
|
17
|
+
<app>mail</app>
|
18
|
+
</services>
|
19
|
+
<services>
|
20
|
+
<app>mySQL</app>
|
21
|
+
</services>
|
22
|
+
<services>
|
23
|
+
<app>postgresql</app>
|
24
|
+
</services>
|
25
|
+
<services>
|
26
|
+
<app>FrontPage</app>
|
27
|
+
</services>
|
28
|
+
<status>1</status>
|
29
|
+
<statusmsg>Password changed for user user</statusmsg>
|
30
|
+
</passwd>
|
31
|
+
</passwd>
|
32
|
+
|
33
|
+
<!-- Web Host Manager (c) cPanel, Inc. 2008 http://cpanel.net/ Unauthorized copying is prohibited. -->
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<removeacct>
|
2
|
+
<result>
|
3
|
+
<rawout>Running pre removal script (/scripts/prekillacct)......DoneCollecting Domain Name and IP...User: user
|
4
|
+
Domain: example.com
|
5
|
+
...DoneKilling all processes owned by user......DoneCleaning passwd,shadow,group......DoneRemoving User from Group..........DoneRemoving Web Logs......DoneRemoving Crontab......DoneRemoving Virtual Hosts...Removed Extra Entries from httpd.conf
|
6
|
+
example.com not found in httpd.conf.
|
7
|
+
...DoneRemoving PostgreSQL databases and users......DoneRemoving System User......DoneRemoving Group......DoneRemoving DNS Entries...example.com => deleted from r15.
|
8
|
+
...DoneRemoving Email Setup...Removing /etc/valiases/example.com
|
9
|
+
...DoneRemoving mailman lists......DoneRemoving MySQL databases and users......DoneRemoving remotedomains,secondarymx,localdomains entries......DoneRemoving Counter Data......DoneAdding ip back to the ip address pool...System has 0 free ips.
|
10
|
+
...DoneRemoving user's cPanel Databases & Updating......DoneReloading Services......DoneRemoving mail and service configs...
|
11
|
+
...DoneSending Contacts......DoneUpdating internal databases...Updating ftp passwords for user
|
12
|
+
Purging ftp user user
|
13
|
+
Ftp password files updated.
|
14
|
+
Ftp vhost passwords synced
|
15
|
+
...DoneRunning post removal scripts (/scripts/legacypostkillacct, /scripts/postkillacct)......DoneAccount Removal Complete!!!...user account removed...Done</rawout>
|
16
|
+
<status>1</status>
|
17
|
+
<statusmsg>user account removed</statusmsg>
|
18
|
+
</result>
|
19
|
+
</removeacct>
|
20
|
+
|
21
|
+
<!-- Web Host Manager (c) cPanel, Inc. 2008 http://cpanel.net/ Unauthorized copying is prohibited. -->
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<suspendacct>
|
2
|
+
<result>
|
3
|
+
<status>1</status>
|
4
|
+
<statusmsg><script>if (self['clear_ui_status']) { clear_ui_status(); }</script>
|
5
|
+
Changing Shell to /bin/false...Changing shell for user.
|
6
|
+
Warning: "/bin/false" is not listed in /etc/shells
|
7
|
+
Shell changed.
|
8
|
+
Done
|
9
|
+
Locking Password...Locking password for user user.
|
10
|
+
passwd: Success
|
11
|
+
Done
|
12
|
+
Suspending mysql users
|
13
|
+
Notification => system@example.com via EMAIL [level => 3]
|
14
|
+
Using Quota v3 Support
|
15
|
+
Suspended document root /home/user/public_html
|
16
|
+
Using Quota v3 Support
|
17
|
+
Suspending FTP accounts...
|
18
|
+
Updating ftp passwords for user
|
19
|
+
Ftp password files updated.
|
20
|
+
Ftp vhost passwords synced
|
21
|
+
user's account has been suspended
|
22
|
+
</statusmsg>
|
23
|
+
</result>
|
24
|
+
</suspendacct>
|
25
|
+
|
26
|
+
<!-- Web Host Manager (c) cPanel, Inc. 2008 http://cpanel.net/ Unauthorized copying is prohibited. -->
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<unsuspendacct>
|
2
|
+
<result>
|
3
|
+
<status>1</status>
|
4
|
+
<statusmsg><script>if (self['clear_ui_status']) { clear_ui_status(); }</script>
|
5
|
+
Changing shell for user.
|
6
|
+
Shell changed.
|
7
|
+
Unlocking password for user user.
|
8
|
+
passwd: Success.
|
9
|
+
Unsuspending FTP accounts...
|
10
|
+
Updating ftp passwords for user
|
11
|
+
Ftp password files updated.
|
12
|
+
Ftp vhost passwords synced
|
13
|
+
user's account is now active
|
14
|
+
Unsuspending mysql users
|
15
|
+
Notification => system@example.com via EMAIL [level => 3]
|
16
|
+
</statusmsg>
|
17
|
+
</result>
|
18
|
+
</unsuspendacct>
|
19
|
+
|
20
|
+
<!-- Web Host Manager (c) cPanel, Inc. 2008 http://cpanel.net/ Unauthorized copying is prohibited. -->
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
require 'lib/whm'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
|
6
|
+
describe "Whm Packages" do
|
7
|
+
before do
|
8
|
+
@server = Whm::Server.new(
|
9
|
+
:username => "username",
|
10
|
+
:password => "password",
|
11
|
+
:host => "dedicated.server.com"
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should find all packages" do
|
16
|
+
data = open(File.dirname(__FILE__) + '/fixtures/listpkgs.xml').read
|
17
|
+
@server.expects(:get_xml).returns(XmlSimple.xml_in(data, { 'ForceArray' => false }))
|
18
|
+
|
19
|
+
@server.packages.length.should == 3
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "A Whm Package" do
|
25
|
+
|
26
|
+
before do
|
27
|
+
@server = Whm::Server.new(
|
28
|
+
:username => "username",
|
29
|
+
:password => "password",
|
30
|
+
:host => "dedicated.server.com"
|
31
|
+
)
|
32
|
+
data = open(File.dirname(__FILE__) + '/fixtures/accountsummary.xml').read
|
33
|
+
@server.expects(:get_xml).with(:url => "accountsummary", :params => {:user=>"magic"}).returns(XmlSimple.xml_in(data,{ 'ForceArray' => false }))
|
34
|
+
@account = @server.account("magic")
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
it "should load account attributes" do
|
39
|
+
@account.attributes['user'].should == "magic"
|
40
|
+
@account.attributes['domain'].should == "magic.example.com"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should have a name" do
|
44
|
+
@account.name.should == "magic"
|
45
|
+
@account.user.should == "magic"
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should change the password" do
|
49
|
+
@server.expects(:change_account_password).returns("new_password")
|
50
|
+
@account.password=("new_password").should == "new_password"
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should suspend an account" do
|
54
|
+
@server.expects(:suspend_account).returns("ok")
|
55
|
+
@account.suspend!.should == "ok"
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should unsuspend an account" do
|
59
|
+
@server.expects(:unsuspend_account).returns("ok")
|
60
|
+
@account.unsuspend!.should == "ok"
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should terminate an account" do
|
64
|
+
@server.expects(:terminate_account).returns("ok")
|
65
|
+
@account.terminate!.should == "ok"
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should change the package on an account" do
|
69
|
+
@server.expects(:change_package).returns("ok")
|
70
|
+
|
71
|
+
@account.package=("new_package").should == "new_package"
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should read an attribute" do
|
75
|
+
@account.domain.should == 'magic.example.com'
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should write an attribute" do
|
79
|
+
@account.username = 'newname'
|
80
|
+
@account.username.should == 'newname'
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
data/spec/server_spec.rb
ADDED
@@ -0,0 +1,195 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
require 'lib/whm'
|
3
|
+
|
4
|
+
describe Whm::Server do
|
5
|
+
before do
|
6
|
+
@server = Whm::Server.new(
|
7
|
+
:username => "username",
|
8
|
+
:password => "password",
|
9
|
+
:host => "dedicated.server.com"
|
10
|
+
)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should build a server object" do
|
14
|
+
@server.should_not be_nil
|
15
|
+
|
16
|
+
@server.host.should eql("dedicated.server.com")
|
17
|
+
@server.username.should eql("username")
|
18
|
+
@server.password.should eql("password")
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should have default options" do
|
22
|
+
@server.debug.should eql(false)
|
23
|
+
@server.ssl.should eql(true)
|
24
|
+
@server.port.should eql(2087)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should handle successful commands from cPanel" do
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should handle unsuccessful commands from cPanel" do
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should list accounts" do
|
34
|
+
data = open(File.expand_path('spec/fixtures/listaccts.xml')).read
|
35
|
+
|
36
|
+
@server.expects(:list_accounts).returns(XmlSimple.xml_in(data))
|
37
|
+
@server.list_accounts.eql?(XmlSimple.xml_in(data))
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should list packages" do
|
41
|
+
data = open('spec/fixtures/listpkgs.xml').read
|
42
|
+
|
43
|
+
@server.expects(:list_packages).returns(XmlSimple.xml_in(data))
|
44
|
+
@server.list_packages.eql?(XmlSimple.xml_in(data))
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should display the actual server hostname" do
|
48
|
+
data = open('spec/fixtures/gethostname.xml').read
|
49
|
+
|
50
|
+
@server.expects(:hostname).returns(XmlSimple.xml_in(data)["hostname"])
|
51
|
+
@server.hostname.eql?("ns100.example.com")
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should display the actual server version" do
|
55
|
+
data = open('spec/fixtures/version.xml').read
|
56
|
+
|
57
|
+
@server.expects(:version).returns(XmlSimple.xml_in(data)["version"])
|
58
|
+
@server.version.eql?("11.24.2")
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should generate ssl certificates" do
|
62
|
+
data = open('spec/fixtures/generatessl.xml').read
|
63
|
+
|
64
|
+
params = {
|
65
|
+
:city => "Houston",
|
66
|
+
:co => "Domain LLC",
|
67
|
+
:cod => "Web",
|
68
|
+
:country => "US",
|
69
|
+
:email => "test@domain.com",
|
70
|
+
:host => "domain.com",
|
71
|
+
:pass => "password",
|
72
|
+
:state => "TX",
|
73
|
+
:xemail => "test@domain.com"
|
74
|
+
}
|
75
|
+
|
76
|
+
@server.expects(:generate_ssl_certificate).with(params).returns(XmlSimple.xml_in(data))
|
77
|
+
@server.generate_ssl_certificate(params).eql?(XmlSimple.xml_in(data))
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should display account summaries" do
|
81
|
+
data = open('spec/fixtures/accountsummary.xml').read
|
82
|
+
|
83
|
+
params = {
|
84
|
+
:user => "magic"
|
85
|
+
}
|
86
|
+
|
87
|
+
@server.expects(:account_summary).with(params).returns(XmlSimple.xml_in(data))
|
88
|
+
@server.account_summary(params).eql?(XmlSimple.xml_in(data))
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should change packages" do
|
92
|
+
data = open('spec/fixtures/accountsummary.xml').read
|
93
|
+
|
94
|
+
params = {
|
95
|
+
:user => "user",
|
96
|
+
:pkg => "new_plan"
|
97
|
+
}
|
98
|
+
|
99
|
+
@server.expects(:change_package).with(params).returns(XmlSimple.xml_in(data))
|
100
|
+
@server.change_package(params).eql?(XmlSimple.xml_in(data))
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should create accounts" do
|
104
|
+
data = open('spec/fixtures/createacct.xml').read
|
105
|
+
|
106
|
+
params = {
|
107
|
+
:user => "user",
|
108
|
+
:domain => "domain.com"
|
109
|
+
}
|
110
|
+
|
111
|
+
@server.expects(:create_account).with(params).returns(XmlSimple.xml_in(data))
|
112
|
+
@server.create_account(params).eql?(XmlSimple.xml_in(data))
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should suspend accounts" do
|
116
|
+
data = open('spec/fixtures/suspendacct.xml').read
|
117
|
+
|
118
|
+
params = {
|
119
|
+
:user => "user",
|
120
|
+
:reason => "N/A"
|
121
|
+
}
|
122
|
+
|
123
|
+
@server.expects(:suspend_account).with(params).returns(XmlSimple.xml_in(data))
|
124
|
+
@server.suspend_account(params).eql?(XmlSimple.xml_in(data))
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should unsuspend accounts" do
|
128
|
+
data = open('spec/fixtures/unsuspendacct.xml').read
|
129
|
+
|
130
|
+
params = {
|
131
|
+
:user => "user"
|
132
|
+
}
|
133
|
+
|
134
|
+
@server.expects(:unsuspend_account).with(params).returns(XmlSimple.xml_in(data))
|
135
|
+
@server.unsuspend_account(params).eql?(XmlSimple.xml_in(data))
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should terminate accounts" do
|
139
|
+
data = open('spec/fixtures/removeacct.xml').read
|
140
|
+
|
141
|
+
params = {
|
142
|
+
:user => "user"
|
143
|
+
}
|
144
|
+
|
145
|
+
@server.expects(:terminate_account).with(params).returns(XmlSimple.xml_in(data))
|
146
|
+
@server.terminate_account(params).eql?(XmlSimple.xml_in(data))
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should limit an account's bandwidth usage limit" do
|
150
|
+
data = open('spec/fixtures/limitbw.xml').read
|
151
|
+
|
152
|
+
params = {
|
153
|
+
:user => "username",
|
154
|
+
:bwlimit => "1"
|
155
|
+
}
|
156
|
+
|
157
|
+
@server.expects(:limit_bandwidth_usage).with(params).returns(XmlSimple.xml_in(data))
|
158
|
+
@server.limit_bandwidth_usage(params).eql?(XmlSimple.xml_in(data))
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should change account passwords" do
|
162
|
+
data = open('spec/fixtures/passwd.xml').read
|
163
|
+
|
164
|
+
params = {
|
165
|
+
:user => "username",
|
166
|
+
:pass => "password"
|
167
|
+
}
|
168
|
+
|
169
|
+
@server.expects(:change_account_password).with(params).returns(XmlSimple.xml_in(data))
|
170
|
+
@server.change_account_password(params).eql?(XmlSimple.xml_in(data))
|
171
|
+
end
|
172
|
+
|
173
|
+
it "should modify accounts" do
|
174
|
+
data = open('spec/fixtures/modifyacct.xml').read
|
175
|
+
|
176
|
+
params = {
|
177
|
+
:user => "user",
|
178
|
+
:domain => "domain.com",
|
179
|
+
:HASCGI => 0,
|
180
|
+
:CPTHEME => "x3",
|
181
|
+
:LANG => "english",
|
182
|
+
:MAXPOP => 3,
|
183
|
+
:MAXFTP => 0,
|
184
|
+
:MAXLST => 1,
|
185
|
+
:MAXSUB => 3,
|
186
|
+
:MAXPARK => 4,
|
187
|
+
:MAXADDON => 5,
|
188
|
+
:MAXSQL => 6,
|
189
|
+
:shell => 1
|
190
|
+
}
|
191
|
+
|
192
|
+
@server.expects(:modify_account).with(params).returns(XmlSimple.xml_in(data))
|
193
|
+
@server.modify_account(params).eql?(XmlSimple.xml_in(data))
|
194
|
+
end
|
195
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
begin
|
2
|
+
require 'spec'
|
3
|
+
rescue LoadError
|
4
|
+
require 'rubygems'
|
5
|
+
gem 'rspec'
|
6
|
+
require 'spec'
|
7
|
+
end
|
8
|
+
|
9
|
+
dir = File.dirname(__FILE__)
|
10
|
+
|
11
|
+
$:.unshift(File.join(dir, '/lib/'))
|
12
|
+
|
13
|
+
# Enable mocha mocking/stubbing
|
14
|
+
Spec::Runner.configure do |config|
|
15
|
+
config.mock_with :mocha
|
16
|
+
end
|
17
|
+
|
18
|
+
def stdout_for(&block)
|
19
|
+
# Inspired by http://www.ruby-forum.com/topic/58647
|
20
|
+
old_stdout = $stdout
|
21
|
+
$stdout = StringIO.new
|
22
|
+
yield
|
23
|
+
output = $stdout.string
|
24
|
+
$stdout = old_stdout
|
25
|
+
output
|
26
|
+
end
|