lumberg 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/.gitignore +9 -0
  2. data/.rspec +2 -0
  3. data/.rvmrc +1 -0
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +98 -0
  6. data/LICENSE +20 -0
  7. data/README.md +178 -0
  8. data/Rakefile +49 -0
  9. data/lib/cacert.pem +3910 -0
  10. data/lib/lumberg.rb +23 -0
  11. data/lib/lumberg/exceptions.rb +6 -0
  12. data/lib/lumberg/version.rb +3 -0
  13. data/lib/lumberg/whm.rb +70 -0
  14. data/lib/lumberg/whm/account.rb +329 -0
  15. data/lib/lumberg/whm/args.rb +113 -0
  16. data/lib/lumberg/whm/base.rb +28 -0
  17. data/lib/lumberg/whm/dns.rb +205 -0
  18. data/lib/lumberg/whm/reseller.rb +268 -0
  19. data/lib/lumberg/whm/server.rb +290 -0
  20. data/lib/net_http_hacked.rb +42 -0
  21. data/lumberg.gemspec +28 -0
  22. data/spec/lumberg_spec.rb +9 -0
  23. data/spec/spec_helper.rb +33 -0
  24. data/spec/vcr_cassettes/whm/account/accountsummary.yml +43 -0
  25. data/spec/vcr_cassettes/whm/account/changepackage.yml +64 -0
  26. data/spec/vcr_cassettes/whm/account/createacct.yml +43 -0
  27. data/spec/vcr_cassettes/whm/account/domainuserdata.yml +43 -0
  28. data/spec/vcr_cassettes/whm/account/editquota.yml +85 -0
  29. data/spec/vcr_cassettes/whm/account/limitbw.yml +85 -0
  30. data/spec/vcr_cassettes/whm/account/listaccts.yml +147 -0
  31. data/spec/vcr_cassettes/whm/account/listsuspended.yml +43 -0
  32. data/spec/vcr_cassettes/whm/account/modifyacct.yml +63 -0
  33. data/spec/vcr_cassettes/whm/account/myprivs.yml +43 -0
  34. data/spec/vcr_cassettes/whm/account/passwd.yml +43 -0
  35. data/spec/vcr_cassettes/whm/account/removeacct.yml +85 -0
  36. data/spec/vcr_cassettes/whm/account/restoreaccount.yml +198 -0
  37. data/spec/vcr_cassettes/whm/account/setsiteip.yml +190 -0
  38. data/spec/vcr_cassettes/whm/account/suspend.yml +64 -0
  39. data/spec/vcr_cassettes/whm/account/unsuspend.yml +43 -0
  40. data/spec/vcr_cassettes/whm/dns/adddns.yml +64 -0
  41. data/spec/vcr_cassettes/whm/dns/addzonerecord.yml +43 -0
  42. data/spec/vcr_cassettes/whm/dns/dumpzone.yml +43 -0
  43. data/spec/vcr_cassettes/whm/dns/editzonerecord.yml +64 -0
  44. data/spec/vcr_cassettes/whm/dns/getzonerecord.yml +64 -0
  45. data/spec/vcr_cassettes/whm/dns/killdns.yml +43 -0
  46. data/spec/vcr_cassettes/whm/dns/listmxs.yml +22 -0
  47. data/spec/vcr_cassettes/whm/dns/listzones.yml +22 -0
  48. data/spec/vcr_cassettes/whm/dns/lookupnsip.yml +43 -0
  49. data/spec/vcr_cassettes/whm/dns/removezonerecord.yml +64 -0
  50. data/spec/vcr_cassettes/whm/dns/resetzone.yml +43 -0
  51. data/spec/vcr_cassettes/whm/dns/resolvedomainname.yml +43 -0
  52. data/spec/vcr_cassettes/whm/dns/savemxs.yml +22 -0
  53. data/spec/vcr_cassettes/whm/reseller/acctcounts.yml +43 -0
  54. data/spec/vcr_cassettes/whm/reseller/listacls.yml +22 -0
  55. data/spec/vcr_cassettes/whm/reseller/listresellers.yml +22 -0
  56. data/spec/vcr_cassettes/whm/reseller/resellerstats.yml +43 -0
  57. data/spec/vcr_cassettes/whm/reseller/saveacllist.yml +85 -0
  58. data/spec/vcr_cassettes/whm/reseller/setacls.yml +43 -0
  59. data/spec/vcr_cassettes/whm/reseller/setresellerips.yml +42 -0
  60. data/spec/vcr_cassettes/whm/reseller/setresellerlimits.yml +43 -0
  61. data/spec/vcr_cassettes/whm/reseller/setresellermainip.yml +64 -0
  62. data/spec/vcr_cassettes/whm/reseller/setresellernameservers.yml +64 -0
  63. data/spec/vcr_cassettes/whm/reseller/setresellerpackagelimit.yml +64 -0
  64. data/spec/vcr_cassettes/whm/reseller/setupreseller.yml +43 -0
  65. data/spec/vcr_cassettes/whm/reseller/suspendreseller.yml +64 -0
  66. data/spec/vcr_cassettes/whm/reseller/terminatereseller.yml +64 -0
  67. data/spec/vcr_cassettes/whm/reseller/unsetupreseller.yml +43 -0
  68. data/spec/vcr_cassettes/whm/reseller/unsuspendreseller.yml +43 -0
  69. data/spec/vcr_cassettes/whm/server/applist.yml +22 -0
  70. data/spec/vcr_cassettes/whm/server/gethostname.yml +22 -0
  71. data/spec/vcr_cassettes/whm/server/getlanglist.yml +22 -0
  72. data/spec/vcr_cassettes/whm/server/loadavg.yml +28 -0
  73. data/spec/vcr_cassettes/whm/server/my_function.yml +64 -0
  74. data/spec/vcr_cassettes/whm/server/response_type.yml +85 -0
  75. data/spec/vcr_cassettes/whm/server/systemloadavg.yml +43 -0
  76. data/spec/vcr_cassettes/whm/server/version.yml +22 -0
  77. data/spec/whm/account_spec.rb +577 -0
  78. data/spec/whm/args_spec.rb +179 -0
  79. data/spec/whm/base_spec.rb +28 -0
  80. data/spec/whm/dns_spec.rb +352 -0
  81. data/spec/whm/reseller_spec.rb +359 -0
  82. data/spec/whm/server_spec.rb +288 -0
  83. data/spec/whm/whm_spec.rb +41 -0
  84. metadata +265 -0
@@ -0,0 +1,28 @@
1
+ module Lumberg
2
+ module Whm
3
+ class Base
4
+ # Whm::Server
5
+ attr_accessor :server
6
+
7
+ #
8
+ # ==== Required
9
+ # * <tt>:server</tt> - PENDING
10
+ def initialize(options = {})
11
+ Args.new(options) do |c|
12
+ c.requires :server
13
+ end
14
+
15
+ @server = setup_server options.delete(:server)
16
+ end
17
+
18
+ def setup_server(value)
19
+ if value.is_a?(Whm::Server)
20
+ value
21
+ else
22
+ Whm::Server.new value
23
+ end
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,205 @@
1
+ module Lumberg
2
+ module Whm
3
+ class Dns < Base
4
+ # Creates a DNS zone. All zone information other than domain name and IP address is created based on the standard zone template in WHM.
5
+ # Your MX, nameserver, domain PTR, and A records will all be generated automatically
6
+ #
7
+ # ==== Required
8
+ # * <tt>:domain</tt> - PENDING
9
+ # * <tt>:ip</tt> - PENDING
10
+ #
11
+ # ==== Optional
12
+ # * <tt>:template</tt> - PENDING
13
+ # * <tt>:trueowner</tt> - PENDING
14
+ def add_zone(options = {})
15
+ Args.new(options) do |c|
16
+ c.requires :domain, :ip
17
+ c.optionals :template, :trueowner
18
+ end
19
+
20
+ server.perform_request('adddns', options)
21
+ end
22
+
23
+ # Adds a DNS zone record to the server
24
+ #
25
+ # ==== Required
26
+ # * <tt>:zone</tt> - PENDING
27
+ #
28
+ # ==== Optional
29
+ # * <tt>:name</tt> - PENDING
30
+ # * <tt>:address</tt> - PENDING
31
+ # * <tt>:type</tt> - PENDING
32
+ # * <tt>:class</tt> - PENDING
33
+ # * <tt>:cname</tt> - PENDING
34
+ # * <tt>:exchange</tt> - PENDING
35
+ # * <tt>:nsdname</tt> - PENDING
36
+ # * <tt>:ptdrname</tt> - PENDING
37
+ # * <tt>:preference</tt> - PENDING
38
+ # * <tt>:ttl</tt> - PENDING
39
+ def add_zone_record(options = {})
40
+ Args.new(options) do |c|
41
+ c.requires :zone
42
+ c.optionals :name, :address, :type, :class, :cname, :exchange, :nsdname, :ptdrname, :preference, :ttl
43
+ end
44
+
45
+ server.perform_request('addzonerecord', options)
46
+ end
47
+
48
+ # Generates a list of all domains and corresponding DNS zones associated with your server
49
+ def list_zones(options = {})
50
+ server.perform_request('listzones', options.merge(:key => 'zone'))
51
+ end
52
+
53
+ # Return zone records for a domain.
54
+ #
55
+ # To use this function most effectively, you may first wish to run the dumpzone function for the domain(s) whose record(s) you wish to retrieve.
56
+ # The Line output variable from that function call can then be used as a reference to create the input for this function.
57
+ #
58
+ # ==== Required
59
+ # * <tt>:domain</tt> - PENDING
60
+ # * <tt>:Line</tt> - PENDING
61
+ def get_zone_record(options = {})
62
+ Args.new(options) do |c|
63
+ c.requires :domain, :Line
64
+ end
65
+
66
+ server.perform_request('getzonerecord', options)
67
+ end
68
+
69
+ # Displays the DNS zone configuration for a specific domain
70
+ #
71
+ # ==== Required
72
+ # * <tt>:domain</tt> - PENDING
73
+ def dump_zone(options = {})
74
+ Args.new(options) do |c|
75
+ c.requires :domain
76
+ end
77
+
78
+ server.perform_request('dumpzone', options)
79
+ end
80
+
81
+ # Attempts to resolve an IP address for a specified domain name
82
+ #
83
+ # ==== Required
84
+ # * <tt>:domain</tt> - PENDING
85
+ # * <tt>:"api.version".to_sym</tt> - PENDING
86
+ def resolve_domain(options = {})
87
+ Args.new(options) do |c|
88
+ c.requires :domain, "api.version".to_sym
89
+ end
90
+
91
+ server.perform_request('resolvedomainname', options.merge(:key => 'data'))
92
+ end
93
+
94
+ # Allows you to edit a DNS zone record on the server.
95
+ #
96
+ # To use this function most effectively, you should first run the dumpzone function for the domain(s) whose record(s) you wish to edit.
97
+ # The output of that function call will be used as a reference to create the input for this function.
98
+ #
99
+ # ==== Required
100
+ # * <tt>:domain</tt> - PENDING
101
+ # * <tt>:Line</tt> - PENDING
102
+ #
103
+ # ==== Optional
104
+ # * <tt>:address</tt> - PENDING
105
+ # * <tt>:class</tt> - PENDING
106
+ # * <tt>:cname</tt> - PENDING
107
+ # * <tt>:exchange</tt> - PENDING
108
+ # * <tt>:preference</tt> - PENDING
109
+ # * <tt>:expire</tt> - PENDING
110
+ # * <tt>:minimum</tt> - PENDING
111
+ # * <tt>:mname</tt> - PENDING
112
+ def edit_zone_record(options = {})
113
+ Args.new(options) do |c|
114
+ c.requires :domain, :Line
115
+ c.optionals :address, :class, :cname, :exchange, :preference, :expire, :minimum, :mname,
116
+ :name, :nsdname, :raw, :refresh, :retry, :rname, :serial, :ttl, :type, :txtdata
117
+ end
118
+
119
+ server.perform_request('editzonerecord', options)
120
+ end
121
+
122
+ # Deletes a DNS zone
123
+ #
124
+ # ==== Required
125
+ # * <tt>:domain</tt> - PENDING
126
+ def kill_dns(options = {})
127
+ Args.new(options) do |c|
128
+ c.requires :domain
129
+ end
130
+
131
+ server.perform_request('killdns', options)
132
+ end
133
+
134
+ # Obtains the IP address of a registered nameserver from the root nameservers
135
+ #
136
+ # ==== Required
137
+ # * <tt>:nameserver</tt> - PENDING
138
+ def lookup_nameserver_ip(options = {})
139
+ Args.new(options) do |c|
140
+ c.requires :nameserver
141
+ end
142
+
143
+ server.perform_request('lookupnsip', options.merge(:key => 'ip'))
144
+ end
145
+
146
+ # Allows you to remove a DNS zone record from the server.
147
+ #
148
+ # To use this function most effectively, you should first run the dumpzone function for the domain(s) whose record(s) you wish to remove.
149
+ # The output of that function call will be used as a reference to create the input for this function.
150
+ #
151
+ # ==== Required
152
+ # * <tt>:zone</tt> - PENDING
153
+ # * <tt>:Line</tt> - PENDING
154
+ def remove_zone_record(options = {})
155
+ Args.new(options) do |c|
156
+ c.requires :zone, :Line
157
+ end
158
+
159
+ server.perform_request('removezonerecord', options)
160
+ end
161
+
162
+ # Restore a DNS zone to its default values. This includes any subdomain DNS records associated with the domain.
163
+ #
164
+ # This function can be useful for restoring DNS zones that have become corrupted or have been improperly edited.
165
+ # It will also restore zone file subdomains listed in the server's httpd.conf file, along with default settings for new accounts.
166
+ #
167
+ # ==== Required
168
+ # * <tt>:domain</tt> - PENDING
169
+ # * <tt>:zone</tt> - PENDING
170
+ def reset_zone(options = {})
171
+ Args.new(options) do |c|
172
+ c.requires :domain, :zone
173
+ end
174
+
175
+ server.perform_request('resetzone', options)
176
+ end
177
+
178
+ # This function will list a specified domain's MX records
179
+ #
180
+ # *This function is only available in version 11.27/11.28+*
181
+ #
182
+ # ==== Required
183
+ # * <tt>:domain</tt> - PENDING
184
+ # * <tt>:"api.version".to_sym</tt> - PENDING
185
+ def list_mxs(options = {})
186
+ Args.new(options) do |c|
187
+ c.requires :domain, "api.version".to_sym
188
+ end
189
+
190
+ server.perform_request('listmxs', options.merge(:key => 'data'))
191
+ end
192
+
193
+ # This function will add an MX record
194
+ #
195
+ # *This function is only available in version 11.27/11.28+*
196
+ def save_mx(options = {})
197
+ Args.new(options) do |c|
198
+ c.requires "api.version".to_sym, :domain, :name, :exchange, :preference
199
+ end
200
+
201
+ server.perform_request('savemxs', options)
202
+ end
203
+ end
204
+ end
205
+ end
@@ -0,0 +1,268 @@
1
+ module Lumberg
2
+ module Whm
3
+ class Reseller < Base
4
+ # Gives reseller status to an account.
5
+ #
6
+ # *Note:* The user must already exist to be made a reseller. This function will not create an account. If the account does not yet exist, you can use the createacct function to set it up before conferring reseller privileges.
7
+ #
8
+ # ==== Required
9
+ # * <tt>:username</tt> - PENDING
10
+ def create(options = {})
11
+ Args.new(options) do |c|
12
+ c.requires :username
13
+ c.booleans :makeowner
14
+ end
15
+ options[:user] = options.delete(:username)
16
+ server.perform_request('setupreseller', options)
17
+ end
18
+
19
+ # Lists the usernames of all resellers on the server
20
+ def list
21
+ # This method is funky. That is all
22
+ result = server.perform_request('listresellers', :key => 'reseller')
23
+ result[:success] = true
24
+ result[:params] = {:resellers => result.delete(:params)}
25
+ result
26
+ end
27
+
28
+ # Adds IP addresses to a reseller account
29
+ #
30
+ # ==== Required
31
+ # * <tt>:username</tt> - PENDING
32
+ #
33
+ # ==== Optional
34
+ # * <tt>:ips</tt> - PENDING
35
+ def add_ips(options = {})
36
+ Args.new(options) do |c|
37
+ c.requires :username
38
+ c.optionals :ips
39
+ c.booleans :delegate
40
+ end
41
+
42
+ options[:user] = options.delete(:username)
43
+ server.perform_request('setresellerips', options)
44
+ end
45
+
46
+ # Specifies the amount of bandwidth and disk space a reseller is able to use
47
+ #
48
+ # ==== Required
49
+ # * <tt>:username</tt> - PENDING
50
+ #
51
+ # ==== Optional
52
+ # * <tt>:account_limit</tt> - PENDING
53
+ # * <tt>:bandwidth_limit</tt> - PENDING
54
+ # * <tt>:diskspace_limit</tt> - PENDING
55
+ def set_limits(options = {})
56
+ Args.new(options) do |c|
57
+ c.requires :username
58
+ c.optionals :account_limit, :bandwidth_limit, :diskspace_limit
59
+ c.booleans :enable_account_limit, :enable_resource_limits, :enable_overselling,
60
+ :enable_overselling_bandwidth, :enable_overselling_diskspace, :enable_package_limits,
61
+ :enable_package_limit_numbers
62
+ end
63
+
64
+ options[:user] = options.delete(:username)
65
+ server.perform_request('setresellerlimits', options)
66
+ end
67
+
68
+ # Terminates a reseller's main account, as well as all accounts owned by the reseller
69
+ #
70
+ # ==== Required
71
+ # * <tt>:reseller</tt> - PENDING
72
+ def terminate(options = {})
73
+ Args.new(options) do |c|
74
+ c.requires :reseller
75
+ c.booleans :terminatereseller
76
+ end
77
+
78
+ # WTF, seriously?
79
+ wtf = "I understand this will irrevocably remove all the "
80
+ wtf << "accounts owned by the reseller #{options[:reseller]}"
81
+ options[:verify] = wtf
82
+
83
+ server.perform_request('terminatereseller', options)
84
+ end
85
+
86
+ # Assigns a main, shared IP address to a reseller
87
+ #
88
+ # ==== Required
89
+ # * <tt>:username</tt> - PENDING
90
+ # * <tt>:ip</tt> - PENDING
91
+ def set_main_ip(options = {})
92
+ Args.new(options) do |c|
93
+ c.requires :username, :ip
94
+ end
95
+
96
+ options[:user] = options.delete(:username)
97
+ server.perform_request('setresellermainip', options)
98
+ end
99
+
100
+ # Sets which packages resellers are able to use. It also allows you to define the number of times a package can be used by a reseller
101
+ #
102
+ # ==== Required
103
+ # * <tt>:username</tt> - PENDING
104
+ # * <tt>:no_limit</tt> - PENDING
105
+ # * <tt>:package</tt> - PENDING
106
+ #
107
+ # ==== Optional
108
+ # * <tt>:allowed</tt> - PENDING
109
+ # * <tt>:number</tt> - PENDING
110
+ def set_package_limit(options = {})
111
+ Args.new(options) do |c|
112
+ c.requires :username, :no_limit, :package
113
+ c.booleans :no_limit, :allowed
114
+ c.optionals :allowed, :number
115
+ end
116
+
117
+ options[:user] = options.delete(:username)
118
+ server.perform_request('setresellerpackagelimit', options)
119
+ end
120
+
121
+ # Suspends a reseller's account. The suspension will prevent the reseller from accessing his or her account
122
+ #
123
+ # ==== Required
124
+ # * <tt>:username</tt> - PENDING
125
+ #
126
+ # ==== Optional
127
+ # * <tt>:reason</tt> - PENDING
128
+ def suspend(options = {})
129
+ Args.new(options) do |c|
130
+ c.requires :username
131
+ c.optionals :reason
132
+ end
133
+
134
+ options[:user] = options.delete(:username)
135
+ server.perform_request('suspendreseller', options)
136
+ end
137
+
138
+ # Unsuspends a reseller's account
139
+ #
140
+ # ==== Required
141
+ # * <tt>:username</tt> - PENDING
142
+ def unsuspend(options = {})
143
+ Args.new(options) do |c|
144
+ c.requires :username
145
+ end
146
+
147
+ options[:user] = options.delete(:username)
148
+ server.perform_request('unsuspendreseller', options)
149
+ end
150
+
151
+ # Lists the total number of accounts owned by a reseller, as well as how many suspended accounts the reseller owns, and what the reseller's account creation limit is, if any.
152
+ # If no reseller is specified, counts will be provided for the reseller who is currently logged in.
153
+ #
154
+ # *Note:* Counts for other users will only be provided if the user issuing the function call has root-level permissions or owns the provided account.
155
+ #
156
+ # ==== Required
157
+ # * <tt>:username</tt> - PENDING
158
+ def account_counts(options = {})
159
+ Args.new(options) do |c|
160
+ c.requires :username
161
+ end
162
+
163
+ options[:user] = options.delete(:username)
164
+ server.perform_request('acctcounts', options.merge(:key => 'reseller'))
165
+ end
166
+
167
+ # Defines a reseller's nameservers. Additionally, you may use it to reset a reseller's nameservers to the default settings
168
+ #
169
+ # ==== Required
170
+ # * <tt>:username</tt> - PENDING
171
+ #
172
+ # ==== Optional
173
+ # * <tt>:nameservers</tt> - PENDING
174
+ def set_nameservers(options = {})
175
+ Args.new(options) do |c|
176
+ c.requires :username
177
+ c.optionals :nameservers
178
+ end
179
+
180
+ options[:user] = options.delete(:username)
181
+ server.perform_request('setresellernameservers', options)
182
+ end
183
+
184
+ # Shows account statistics for a specific reseller's accounts
185
+ #
186
+ # ==== Required
187
+ # * <tt>:reseller</tt> - PENDING
188
+ def stats(options = {})
189
+ Args.new(options) do |c|
190
+ c.requires :reseller
191
+ end
192
+
193
+ server.perform_request('resellerstats', options)
194
+ end
195
+
196
+ # Lists the saved reseller ACL lists on the server
197
+ def list_acls
198
+ server.perform_request('listacls', {:key => 'acls'})
199
+ end
200
+
201
+ # Creates a new reseller ACL list
202
+ #
203
+ # ==== Required
204
+ # * <tt>:acllist</tt> - PENDING
205
+ def save_acl_list(options = {})
206
+ optional_args = [
207
+ "acl-add-pkg", "acl-add-pkg-ip", "acl-add-pkg-shell", "acl-all", "acl-allow-addoncreate",
208
+ "acl-allow-parkedcreate", "acl-allow-unlimited-disk-pkgs", "acl-allow-unlimited-pkgs",
209
+ "acl-clustering", "acl-create-acct", "acl-create-dns", "acl-demo-setup", "acl-disallow-shell",
210
+ "acl-edit-account", "acl-edit-dns", "acl-edit-mx", "acl-edit-pkg", "acl-frontpage",
211
+ "acl-kill-acct", "acl-kill-dns", "acl-limit-bandwidth", "acl-list-accts", "acl-mailcheck",
212
+ "acl-mod-subdomains", "acl-news", "acl-onlyselfandglobalpkgs", "acl-park-dns", "acl-passwd",
213
+ "acl-quota", "acl-rearrange-accts", "acl-res-cart", "acl-status", "acl-resftp", "acl-restart",
214
+ "acl-show-bandwidth", "acl-ssl", "acl-ssl-gencrt", "acl-stats", "acl-suspend-acct", "acl-upgrade-account"
215
+ ].collect { |option| option.to_sym }
216
+
217
+ Args.new(options) do |c|
218
+ c.requires :acllist
219
+ c.booleans *optional_args
220
+ c.optionals *optional_args
221
+ end
222
+
223
+ server.perform_request('saveacllist', options.merge(:key => 'results'))
224
+ end
225
+
226
+ # Sets the ACL for a reseller, or modifies specific ACL items for a reseller
227
+ #
228
+ # ==== Required
229
+ # * <tt>:reseller</tt> - PENDING
230
+ #
231
+ # ==== Optional
232
+ # * <tt>:acllist</tt> - PENDING
233
+ # * <tt>:*optional_args</tt> - PENDING
234
+ def set_acls(options = {})
235
+ optional_args = [
236
+ "acl-add-pkg", "acl-add-pkg-ip", "acl-add-pkg-shell", "acl-all", "acl-allow-addoncreate",
237
+ "acl-allow-parkedcreate", "acl-allow-unlimited-disk-pkgs", "acl-allow-unlimited-pkgs",
238
+ "acl-clustering", "acl-create-acct", "acl-create-dns", "acl-demo-setup", "acl-disallow-shell",
239
+ "acl-edit-account", "acl-edit-dns", "acl-edit-mx", "acl-edit-pkg", "acl-frontpage",
240
+ "acl-kill-acct", "acl-kill-dns", "acl-limit-bandwidth", "acl-list-accts", "acl-mailcheck",
241
+ "acl-mod-subdomains", "acl-news", "acl-onlyselfandglobalpkgs", "acl-park-dns", "acl-passwd",
242
+ "acl-quota", "acl-rearrange-accts", "acl-res-cart", "acl-status", "acl-resftp", "acl-restart",
243
+ "acl-show-bandwidth", "acl-ssl", "acl-ssl-gencrt", "acl-stats", "acl-suspend-acct", "acl-upgrade-account"
244
+ ].collect { |option| option.to_sym }
245
+
246
+ Args.new(options) do |c|
247
+ c.requires :reseller
248
+ c.booleans *optional_args
249
+ c.optionals :acllist, *optional_args
250
+ end
251
+
252
+ server.perform_request('setacls', options)
253
+ end
254
+
255
+ # Removes reseller status from an account
256
+ #
257
+ # *Note:* This function will not delete the account; it will only remove its reseller status
258
+ def unsetup(options = {})
259
+ Args.new(options) do |c|
260
+ c.requires :username
261
+ end
262
+
263
+ options[:user] = options.delete(:username)
264
+ server.perform_request('unsetupreseller', options)
265
+ end
266
+ end
267
+ end
268
+ end