cloudflare 2.1.0 → 3.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0a37a8b92266e030c82969316e7c5cade2081069
4
- data.tar.gz: bb4db11a47c0777ac96a6dd77fa7aec01c9b8a00
3
+ metadata.gz: 9a110e823c75c13f404a65302681c7dfa94259b7
4
+ data.tar.gz: 9124f505ca1db512e237515ffb5936921a2981b6
5
5
  SHA512:
6
- metadata.gz: 1e5fb4101c0451643b585b005246c2f1803888d0def6278bf350ed23f2750f69311a491a78d33b281f97ee648ab618a0c195f916467d62be1d81e71d68613291
7
- data.tar.gz: c6754b19bf2e6c32536113e3dc0747e4513ffaf0304bf268f833cda3ff5b119184b816fd8a3cef519806460b9761443aad2d46179c12f301004eb7b81b5e1aec
6
+ metadata.gz: 45ece12909dddffe400565bad14412a58d33d1e062a4744676a4b1a6cc3e33a959aa56ee8a6d5f022c34fa31909edc46a3a9b3f7e56e84a2b4d6fb0d4fe22da2
7
+ data.tar.gz: 7190a218eeb9dd39b2dc43c1ce4c8ed7b9a5bd20aefdfbd3be583886f16d601360d53eb58d4fd5e4d0f1f92910cbefc9c1372785c4799ecbaac83603502f76e5
data/.rspec ADDED
@@ -0,0 +1,4 @@
1
+ --format documentation
2
+ --backtrace
3
+ --warnings
4
+ --require spec_helper
@@ -0,0 +1,19 @@
1
+ language: ruby
2
+ sudo: false
3
+ dist: trusty
4
+ cache: bundler
5
+ rvm:
6
+ - 2.0
7
+ - 2.1
8
+ - 2.2
9
+ - 2.3
10
+ - 2.4
11
+ - jruby-head
12
+ - ruby-head
13
+ matrix:
14
+ allow_failures:
15
+ - rvm: ruby-head
16
+ - rvm: jruby-head
17
+ env:
18
+ global:
19
+ secure: c5yG7N1r9nYuw47Y90jGeoHNvkL59AAC55dtPAhKP+gjXWW8hKbntj3oj+lVkxEqzRpzEQgYZzUElrP+6mJnb20ldclZg03L56243tMtVEcpGOx/MFhnIBkx3kKu1H6ydKKMxieHxjsLQ3vnpcIZ3p0skTQjYbjdu607tjbyg7s=
data/Gemfile CHANGED
@@ -1,4 +1,16 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in build.gemspec
3
+ # Specify your gem's dependencies in utopia.gemspec
4
4
  gemspec
5
+
6
+ group :development do
7
+ gem 'pry'
8
+ gem 'pry-coolline'
9
+
10
+ gem 'tty-prompt'
11
+ end
12
+
13
+ group :test do
14
+ gem 'simplecov'
15
+ gem 'coveralls', require: false
16
+ end
data/README.md CHANGED
@@ -1,60 +1,70 @@
1
- # CloudFlare
1
+ # Cloudflare
2
2
 
3
- It is a Ruby wrapper for the CloudFlare API.
3
+ It is a Ruby wrapper for the Cloudflare V4 API. It provides a light weight wrapper using `RestClient::Resource`. The wrapper functionality is limited to zones and DNS records at this time, *PRs welcome*.
4
4
 
5
- [![Build Status](https://travis-ci.org/b4k3r/cloudflare.png?branch=master)](https://travis-ci.org/b4k3r/cloudflare)
6
-
7
- Official home page is [here](https://github.com/b4k3r/cloudflare). The complete [RDoc](http://rdoc.info/github/b4k3r/cloudflare/) is online.
8
-
9
- Visit also a CloudFlare API documentation:
10
-
11
- - [Client](http://www.cloudflare.com/docs/client-api.html)
12
- - [Host](http://www.cloudflare.com/docs/host-api.html)
5
+ [![Build Status](https://secure.travis-ci.org/ioquatix/cloudflare.svg)](http://travis-ci.org/ioquatix/cloudflare)
13
6
 
14
7
  ## Installation
15
8
 
16
9
  Add this line to your application's Gemfile:
17
10
 
18
- gem 'cloudflare'
11
+ ```ruby
12
+ gem 'cloudflare'
13
+ ```
19
14
 
20
15
  And then execute:
21
16
 
22
- $ bundle
17
+ ```
18
+ $ bundle
19
+ ```
23
20
 
24
21
  Or install it yourself as:
25
22
 
26
- $ gem install cloudflare
23
+ ```
24
+ $ gem install cloudflare
25
+ ```
27
26
 
28
27
  ## Usage
29
28
 
30
- **Example for Client API:**
29
+ Prepare a connection to the remote API:
30
+
31
+ ```ruby
32
+ require 'cloudflare'
33
+
34
+ # Grab some details from somewhere:
35
+ email = ENV['CLOUDFLARE_EMAIL']
36
+ key = ENV['CLOUDFLARE_KEY']
31
37
 
32
- require 'cloudflare'
38
+ # Set up the connection:
39
+ connection = Cloudflare.connect(key: key, email: email)
40
+ ```
33
41
 
34
- cf = CloudFlare::connection('user_api_key', 'user_email')
42
+ Get all available zones:
35
43
 
36
- begin
37
- cf.rec_new('domain.com', 'A', 'subdomain', '212.11.6.211', 1)
38
- rescue => e
39
- puts e.message # error message
40
- else
41
- puts 'Successfuly added DNS record'
42
- end
44
+ ```ruby
45
+ zones = connection.zones.all
46
+ ```
43
47
 
44
- **Example for Host API:**
48
+ Get a specific zone:
45
49
 
46
- require 'cloudflare'
50
+ ```ruby
51
+ zone = connection.zones.find_by_id("...")
52
+ zone = connection.zones.find_by_name("example.com")
53
+ ```
47
54
 
48
- cf = CloudFlare::connection('host_api_key')
55
+ Get DNS records for a given zone:
49
56
 
50
- begin
51
- output = cf.create_user('john@example.com', 'secret', 'john')
52
- rescue => e
53
- puts e.message # error message
54
- else
55
- puts output['msg']
56
- puts "Your login is #{output['response']['cloudflare_username']}" # => john
57
- end
57
+ ```ruby
58
+ dns_records = zones.first.dns_records.all
59
+ ```
60
+
61
+ Show some details of the DNS record:
62
+
63
+ ```ruby
64
+ dns_record = records.first
65
+ puts records.first.record[:name]
66
+ puts records
67
+ ```
58
68
 
59
69
  ## Contributing
60
70
 
@@ -64,12 +74,17 @@ Or install it yourself as:
64
74
  4. Push to the branch (`git push origin my-new-feature`)
65
75
  5. Create new Pull Request
66
76
 
77
+ ## See Also
78
+
79
+ - [Cloudflare::DNS::Update](https://github.com/ioquatix/cloudflare-dns-update) - A dynamic DNS updater based on this gem.
80
+ - [Rubyflare](https://github.com/trev/rubyflare) - Another implementation.
81
+
67
82
  ## License
68
83
 
69
84
  Released under the MIT license.
70
85
 
71
86
  Copyright, 2012, 2014, by [Marcin Prokop](https://github.com/b4k3r).
72
- Copyright, 2014, by [Samuel G. D. Williams](http://www.codeotaku.com/samuel-williams).
87
+ Copyright, 2017, by [Samuel G. D. Williams](http://www.codeotaku.com/samuel-williams).
73
88
 
74
89
  Permission is hereby granted, free of charge, to any person obtaining a copy
75
90
  of this software and associated documentation files (the "Software"), to deal
data/Rakefile CHANGED
@@ -1,8 +1,22 @@
1
- require 'rake/testtask'
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
2
3
 
3
- Rake::TestTask.new do |t|
4
- t.libs << 'test'
5
- end
4
+ RSpec::Core::RakeTask.new(:test)
6
5
 
7
- desc "Run tests"
8
6
  task :default => :test
7
+
8
+ task :coverage do
9
+ ENV['COVERAGE'] = 'y'
10
+ end
11
+
12
+ task :console do
13
+ require 'cloudflare'
14
+ require 'pry'
15
+
16
+ email = ENV['CLOUDFLARE_EMAIL']
17
+ key = ENV['CLOUDFLARE_KEY']
18
+
19
+ connection = Cloudflare::Connection.new(key: key, email: email)
20
+
21
+ binding.pry
22
+ end
@@ -1,25 +1,27 @@
1
1
  # -*- encoding: utf-8 -*-
2
- $LOAD_PATH.push File.expand_path("../lib", __FILE__)
3
- require 'cloudflare/version'
2
+ require_relative 'lib/cloudflare/version'
4
3
 
5
- Gem::Specification.new do |s|
6
- s.name = 'cloudflare'
7
- s.version = CloudFlare::VERSION
8
- s.platform = Gem::Platform::RUBY
4
+ Gem::Specification.new do |spec|
5
+ spec.name = 'cloudflare'
6
+ spec.version = Cloudflare::VERSION
7
+ spec.platform = Gem::Platform::RUBY
9
8
 
10
- s.description = 'A Ruby wrapper for the CloudFlare API.'
11
- s.summary = 'A Ruby wrapper for the CloudFlare API.'
12
- s.authors = ['Marcin Prokop']
13
- s.email = 'marcin@prokop.co'
14
- s.homepage = 'https://github.com/b4k3r/cloudflare'
15
- s.licenses = ['MIT']
9
+ spec.summary = 'A Ruby wrapper for the Cloudflare API.'
10
+ spec.authors = ['Marcin Prokop', 'Samuel Williams']
11
+ spec.email = ['marcin@prokop.co', 'samuel.williams@oriontransfer.co.nz']
12
+ spec.homepage = 'https://github.com/b4k3r/cloudflare'
13
+ spec.licenses = ['MIT']
16
14
 
17
- s.files = `git ls-files`.split("\n")
18
- s.test_files = ['test/test_cloudflare.rb']
19
- s.rdoc_options = ['--main', 'README.md', '--charset=UTF-8']
20
- s.extra_rdoc_files = ['README.md', 'LICENSE']
21
-
22
- s.required_ruby_version = '>= 1.9.0'
23
- s.add_runtime_dependency 'json', '~> 1'
24
- s.add_development_dependency 'rake'
15
+ spec.files = `git ls-files`.split($/)
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.required_ruby_version = '>= 2.0.0'
21
+
22
+ spec.add_dependency 'rest-client'
23
+
24
+ spec.add_development_dependency "rspec", "~> 3.6"
25
+ spec.add_development_dependency "bundler", "~> 1.3"
26
+ spec.add_development_dependency "rake"
25
27
  end
@@ -1,4 +1,5 @@
1
1
  # Copyright, 2012, by Marcin Prokop.
2
+ # Copyright, 2017, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
3
  #
3
4
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
5
  # of this software and associated documentation files (the "Software"), to deal
@@ -18,10 +19,12 @@
18
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
20
  # THE SOFTWARE.
20
21
 
21
- require 'cloudflare/connection'
22
+ require_relative 'cloudflare/connection'
23
+ require_relative 'cloudflare/zone'
24
+ require_relative 'cloudflare/user'
22
25
 
23
- module CloudFlare
24
- def self.connection(api_key, email = nil)
25
- Connection.new(api_key, email)
26
- end
26
+ module Cloudflare
27
+ def self.connect(**options)
28
+ Connection.new(**options)
29
+ end
27
30
  end
@@ -1,4 +1,5 @@
1
1
  # Copyright, 2012, by Marcin Prokop.
2
+ # Copyright, 2017, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
3
  #
3
4
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
5
  # of this software and associated documentation files (the "Software"), to deal
@@ -21,524 +22,34 @@
21
22
  require 'net/http'
22
23
  require 'json'
23
24
 
24
- # For more information please visit:
25
- # - http://www.cloudflare.com/docs/client-api.html
26
- # - http://www.cloudflare.com/docs/host-api.html
27
- #
28
- module CloudFlare
29
- class RequestError < StandardError
30
- def initialize(what, response)
31
- super(what)
32
-
33
- @response = response
34
- end
35
-
36
- attr :response
37
- end
38
-
39
- class Connection
40
- # URL for Client and Host API
41
- URL_API = {
42
- client: 'https://www.cloudflare.com/api_json.html',
43
- host: 'https://api.cloudflare.com/host-gw.html'
44
- }
45
-
46
- TIMEOUT = 5 # Default is 5 seconds
47
-
48
- # @param api_key [String] user or Host API key.
49
- # @param email [String] it is for a Client API.
50
- def initialize(api_key, email = nil)
51
- @params = Hash.new
52
-
53
- if email.nil?
54
- @params[:api_key] = api_key
55
- else
56
- @params[:api_key] = api_key
57
- @params[:email] = email
58
- end
59
- end
60
-
61
- # CLIENT
62
-
63
- # This function can be used to get currently settings of values such as the security level.
64
- #
65
- # @see http://www.cloudflare.com/docs/client-api.html#s3.1
66
- #
67
- # @param zone [String]
68
- # @param interval [Integer]
69
-
70
- def stats(zone, interval = 20)
71
- send_req({a: :stats, z: zone, interval: interval})
72
- end
73
-
74
- # This function lists all domains in a CloudFlare account along with other data.
75
- #
76
- # @see http://www.cloudflare.com/docs/client-api.html#s3.2
77
-
78
- def zone_load_multi
79
- send_req(a: :zone_load_multi)
80
- end
81
-
82
- # This function lists all of the DNS records from a particular domain in a CloudFlare account.
83
- #
84
- # @see http://www.cloudflare.com/docs/client-api.html#s3.3
85
- #
86
- # @param zone [String]
87
-
88
- def rec_load_all(zone, offset = 0)
89
- send_req({a: :rec_load_all, z: zone, o: offset})
90
- end
91
-
92
- # This function checks whether one or more websites/domains are active under an account and return the zone ids (zids) for these.
93
- #
94
- # @see http://www.cloudflare.com/docs/client-api.html#s3.4
95
- #
96
- # @param zones [String or Array]
97
-
98
- def zone_check(*zones)
99
- send_req({a: :zone_check, zones: zones.kind_of?(Array) ? zones.join(',') : zones})
100
- end
101
-
102
- # DEPRECATED!
103
- # This function pulls recent IPs hitting your site.
104
- #
105
- # @see http://www.cloudflare.com/docs/client-api.html#s3.5
106
- #
107
- # @param zone [String]
108
- # @param hours [Integer] max 48
109
- # @param classification [String] (optional) values: r|c|t
110
- # @param geo [Fixnum] (optional)
111
-
112
- def zone_ips(zone, classification = nil, hours = 24, geo = 1)
113
- puts 'Warning! This method is deprecated.'
114
- send_req({a: :zone_ips, z: zone, hours: hours, "class" => classification, geo: geo})
115
- end
116
-
117
- # This function checks the threat score for a given IP.
118
- #
119
- # @see http://www.cloudflare.com/docs/client-api.html#s3.6
120
- #
121
- # @param ip [String]
122
-
123
- def ip_lkup(ip)
124
- send_req({a: :ip_lkup, ip: ip})
125
- end
126
-
127
- # This function retrieves all current settings for a given domain.
128
- #
129
- # @see http://www.cloudflare.com/docs/client-api.html#s3.7
130
- #
131
- # @param zone [String]
132
-
133
- def zone_settings(zone)
134
- send_req({a: :zone_settings, z: zone})
135
- end
136
-
137
- # This function sets the Basic Security Level to HELP I'M UNDER ATTACK / HIGH / MEDIUM / LOW / ESSENTIALLY OFF.
138
- #
139
- # @see http://www.cloudflare.com/docs/client-api.html#s4.1
140
- #
141
- # @param zone [String]
142
- # @param value [String] values: low|med|high|help|eoff
143
-
144
- def sec_lvl(zone, value)
145
- send_req({a: :sec_lvl, z: zone, v: value})
146
- end
147
-
148
- # This function sets the Caching Level to Aggressive or Basic.
149
- #
150
- # @see http://www.cloudflare.com/docs/client-api.html#s4.2
151
- #
152
- # @param zone [String]
153
- # @param value [String] values: agg|basic
154
-
155
- def cache_lvl(zone, value)
156
- send_req({a: :cache_lvl, z: zone, v: value})
157
- end
158
-
159
- # This function allows you to toggle Development Mode on or off for a particular domain.
160
- #
161
- # @see http://www.cloudflare.com/docs/client-api.html#s4.3
162
- #
163
- # @param zone [String]
164
- # @param value [Boolean]
165
-
166
- def devmode(zone, value)
167
- send_req({a: :devmode, z: zone, v: value ? 1 : 0})
168
- end
169
-
170
- # This function will purge CloudFlare of any cached files.
171
- #
172
- # @see http://www.cloudflare.com/docs/client-api.html#s4.4
173
- #
174
- # @param zone [String]
175
-
176
- def fpurge_ts(zone)
177
- send_req({a: :fpurge_ts, z: zone, v: 1})
178
- end
179
-
180
- # This function will purge a single file from CloudFlare's cache.
181
- #
182
- # @see http://www.cloudflare.com/docs/client-api.html#s4.5
183
- #
184
- # @param zone [String]
185
- # @param url [String]
186
-
187
- def zone_file_purge(zone, url)
188
- send_req({a: :zone_file_purge, z: zone, url: url})
189
- end
190
-
191
- # This function adds an IP address to your white lists.
192
- #
193
- # @see http://www.cloudflare.com/docs/client-api.html#s4.6
194
- #
195
- # @param ip [String]
196
-
197
- def whitelist(ip)
198
- send_req({a: :wl, key: ip})
199
- end
200
-
201
-
202
- # This function adds an IP address to your black lists.
203
- #
204
- # @see http://www.cloudflare.com/docs/client-api.html#s4.6
205
- #
206
- # @param ip [String]
207
-
208
- def blacklist(ip)
209
- send_req({a: :ban, key: ip})
210
- end
211
-
212
- # This function removes the IP from whitelist or blacklist.
213
- #
214
- # @see http://www.cloudflare.com/docs/client-api.html#s4.6
215
- #
216
- # @param ip [String]
217
-
218
- def remove_ip(ip)
219
- send_req({a: :nul, key: ip})
220
- end
221
-
222
- # This function toggles IPv6 support.
223
- #
224
- # @see http://www.cloudflare.com/docs/client-api.html#s4.7
225
- #
226
- # @param zone [String]
227
- # @param value [Boolean]
228
-
229
- def ipv46(zone, value)
230
- send_req({a: :ipv46, z: zone, v: value ? 1 : 0})
231
- end
232
-
233
- # This function changes Rocket Loader setting.
234
- #
235
- # @see http://www.cloudflare.com/docs/client-api.html#s4.8
236
- #
237
- # @param zone [String]
238
- # @param value [Integer or String] values: 0|a|m
239
-
240
- def async(zone, value)
241
- send_req({a: :async, z: zone, v: value})
242
- end
243
-
244
- # This function changes minification settings.
245
- #
246
- # @see http://www.cloudflare.com/docs/client-api.html#s4.9
247
- #
248
- # @param zone [String]
249
- # @param value [Integer] values: 0|2|3|4|5|6|7
250
-
251
- def minify(zone, value)
252
- send_req({a: :minify, z: zone, v: value})
253
- end
254
-
255
-
256
- # This function changes mirage2 settings.
257
- #
258
- # @see http://www.cloudflare.com/docs/client-api.html#s4.10
259
- #
260
- # @param zone [String]
261
- # @param value [Integer] values: 0|1
262
-
263
- def mirage2(zone, value)
264
- send_req({a: :mirage2, z: zone, v: value})
265
- end
266
-
267
- # This function creates a new DNS record for your site. This can be either a CNAME or A record.
268
- #
269
- # @see http://www.cloudflare.com/docs/client-api.html#s5.1
270
- #
271
- # @param zone [String]
272
- # @param type [String] values: A|CNAME|MX|TXT|SPF|AAAA|NS|SRV|LOC
273
- # @param name [String]
274
- # @param content [String]
275
- # @param ttl [Integer] values: 1|120...4294967295
276
- # @param prio [Integer] (applies to MX/SRV)
277
- # @param service [String] (applies to SRV)
278
- # @param srvname [String] (applies to SRV)
279
- # @param protocol [Integer] (applies to SRV) values: _tcp|_udp|_tls
280
- # @param weight [Intger] (applies to SRV)
281
- # @param port [Integer] (applies to SRV)
282
- # @param target [String] (applies to SRV)
283
- # @param service_mode [Boolean] (applies to A/AAAA/CNAME)
284
-
285
- def rec_new(zone, type, name, content, ttl, prio = nil, service = nil, srvname = nil, protocol = nil, weight = nil, port = nil, target = nil, service_mode = true)
286
- send_req({
287
- a: :rec_new,
288
- z: zone,
289
- type: type,
290
- name: name,
291
- content: content,
292
- ttl: ttl,
293
- prio: prio,
294
- service: service,
295
- srvname: srvname,
296
- protocol: protocol,
297
- weight: weight,
298
- port: port,
299
- target: target,
300
- service_mode: service_mode ? 1 : 0,
301
- })
302
- end
303
-
304
- # This function edits a DNS record for a zone.
305
- #
306
- # @see http://www.cloudflare.com/docs/client-api.html#s5.2
307
- #
308
- # @param zone [String]
309
- # @param type [String] values: A|CNAME|MX|TXT|SPF|AAAA|NS|SRV|LOC
310
- # @param record_id [Integer]
311
- # @param name [String]
312
- # @param content [String]
313
- # @param ttl [Integer] values: 1|120...4294967295
314
- # @param prio [Integer] (applies to MX/SRV)
315
- # @param service [String] (applies to SRV)
316
- # @param srvname [String] (applies to SRV)
317
- # @param protocol [Integer] (applies to SRV) values: _tcp/_udp/_tls
318
- # @param weight [Intger] (applies to SRV)
319
- # @param port [Integer] (applies to SRV)
320
- # @param target [String] (applies to SRV)
321
- # @param service_mode [Boolean] (applies to A/AAAA/CNAME)
322
-
323
- def rec_edit(zone, type, record_id, name, content, ttl, prio = nil, service = nil, srvname = nil, protocol = nil, weight = nil, port = nil, target = nil, service_mode = true)
324
- send_req({
325
- a: :rec_edit,
326
- z: zone,
327
- type: type,
328
- id: record_id,
329
- name: name,
330
- content: content,
331
- ttl: ttl,
332
- prio: prio,
333
- service: service,
334
- srvname: srvname,
335
- protocol: protocol,
336
- weight: weight,
337
- port: port,
338
- target: target,
339
- service_mode: service_mode ? 1 : 0,
340
- })
341
- end
342
-
343
- # This functon deletes a record for a domain.
344
- #
345
- # @see http://www.cloudflare.com/docs/client-api.html#s5.3
346
- #
347
- # @param zone [String]
348
- # @param zoneid [Integer]
349
-
350
- def rec_delete(zone, zoneid)
351
- send_req({a: :rec_delete, z: zone, id: zoneid})
352
- end
353
-
354
- # HOST
355
-
356
- # This function creates a CloudFlare account mapped to your user.
357
- #
358
- # @see http://www.cloudflare.com/docs/host-api.html#s3.2.1
359
- #
360
- # @param email [String]
361
- # @param pass [String]
362
- # @param login [String] (optional) cloudflare_username
363
- # @param id [Integer] (optional) unique_id
364
- # @param cui [Integer] (optional) clobber_unique_id
365
-
366
- def create_user(email, pass, login = nil, id = nil, cui = nil)
367
- send_req({
368
- act: :user_create,
369
- cloudflare_email: email,
370
- cloudflare_pass: pass,
371
- cloudflare_username: login,
372
- unique_id: id,
373
- clobber_unique_id: cui
374
- })
375
- end
376
-
377
- # This function setups a User's zone for CNAME hosting.
378
- #
379
- # @see http://www.cloudflare.com/docs/host-api.html#s3.2.2
380
- #
381
- # @param user_key [String]
382
- # @param zone [String]
383
- # @param resolve_to [String]
384
- # @param subdomains [String or Array]
385
-
386
- def add_zone(user_key, zone, resolve_to, subdomains)
387
- send_req({
388
- act: :zone_set,
389
- user_key: user_key,
390
- zone_name: zone,
391
- resolve_to: resolve_to,
392
- subdomains: subdomains.kind_of?(Array) ? zones.join(',') : subdomains
393
- })
394
- end
395
-
396
- # This function adds a zone using the full setup.
397
- #
398
- # @see http://www.cloudflare.com/docs/host-api.html#s3.2.3
399
- #
400
- # @param user_key [String]
401
- # @param zone [String]
402
-
403
- def add_full_zone(user_key, zone)
404
- send_req({
405
- act: :full_zone_set,
406
- user_key: user_key,
407
- zone_name: zone
408
- })
409
- end
410
-
411
- # This function lookups a user's CloudFlare account information.
412
- #
413
- # @see http://www.cloudflare.com/docs/host-api.html#s3.2.4
414
- #
415
- # *Example:*
416
- #
417
- # cf = CloudFlare('your_host_key')
418
- # cf.user_lookup('unique_id', true)
419
- #
420
- # If +id+ is set to true, email is a unique_id.
421
- #
422
- # @param email [String or Integer]
423
- # @param id [Boolean]
424
-
425
- def user_lookup(email, id = false)
426
- if id
427
- send_req({act: :user_lookup, unique_id: email})
428
- else
429
- send_req({act: :user_lookup, cloudflare_email: email})
430
- end
431
- end
432
-
433
- # This function authorizes access to a user's existing CloudFlare account.
434
- #
435
- # @see http://www.cloudflare.com/docs/host-api.html#s3.2.5
436
- #
437
- # @param email [String]
438
- # @param pass [String]
439
- # @param unique_id [Integer] (optional)
440
- # @param cui [Integer] (optional) clobber_unique_id
441
-
442
- def user_auth(email, pass, id = nil, cui = nil)
443
- send_req({
444
- act: :user_auth,
445
- cloudflare_email: email,
446
- cloudflare_pass: pass,
447
- unique_id: id,
448
- clobber_unique_id: cui
449
- })
450
- end
451
-
452
- # This function lookups a specific user's zone.
453
- #
454
- # @see http://www.cloudflare.com/docs/host-api.html#s3.2.6
455
- #
456
- # @param user_key [String]
457
- # @param zone [String]
458
-
459
- def zone_lookup(user_key, zone)
460
- send_req({act: :zone_lookup, user_key: user_key, zone_name: zone})
461
- end
462
-
463
- # This function deletes a specific zone on behalf of a user.
464
- #
465
- # @see http://www.cloudflare.com/docs/host-api.html#s3.2.7
466
- #
467
- # @param user_key [String]
468
- # @param zone [String]
469
-
470
- def del_zone(user_key, zone)
471
- send_req({act: :zone_delete, user_key: user_key, zone_name: zone})
472
- end
473
-
474
- # This function regenerates your host key.
475
- #
476
- # @see http://www.cloudflare.com/docs/host-api.html#s3.2.8
477
-
478
- def host_key_regen
479
- send_req(act: :host_key_regen)
480
- end
481
-
482
- # This function stops a child host provider account.
483
- #
484
- # @see http://www.cloudflare.com/docs/host-api.html#s3.2.9
485
- #
486
- # @param id [Integer] child_id
487
-
488
- def host_child_stop(id)
489
- send_req({act: :host_child_stop, child_id: id})
490
- end
491
-
492
- # This function lists the domains currently active on CloudFlare for the given host.
493
- #
494
- # @see http://www.cloudflare.com/docs/host-api.html#s3.2.10
495
- #
496
- # @param limit [Integer] (optional)
497
- # @param offset [Integer] (optional)
498
- # @param name [String] (optional) zone_name
499
- # @param sub_id [Integer] (optional) sub_id
500
- # @param status [String] (optional) values: V|D|ALL
501
- # @param sub_status [String] (optional) values: V|CNL|ALL
502
-
503
- def zone_list(limit = 100, offset = 0, name = nil, sub_id = nil, status = nil, sub_status = nil)
504
- send_req({
505
- act: :zone_list,
506
- offset: offset,
507
- zone_name: name,
508
- sub_id: sub_id,
509
- zone_status: status,
510
- sub_status: sub_status
511
- })
512
- end
513
-
514
- private
515
-
516
- def send_req(params)
517
- if @params[:email]
518
- params[:tkn] = @params[:api_key]
519
- params[:u] = @params[:email]
520
- uri = URI(URL_API[:client])
521
- else
522
- params[:host_key] = @params[:api_key]
523
- uri = URI(URL_API[:host])
524
- end
525
-
526
- req = Net::HTTP::Post.new(uri.path)
527
- req.set_form_data(params.reject{|k, v| v.nil?})
528
-
529
- http = Net::HTTP.new(uri.host, uri.port)
530
- http.use_ssl = true
531
- http.read_timeout = TIMEOUT
532
-
533
- res = http.request(req)
534
- out = JSON.parse(res.body)
535
-
536
- # If there is an error, raise an exception:
537
- if out['result'] == 'error'
538
- raise RequestError.new(out['msg'], out)
539
- else
540
- return out
541
- end
542
- end
543
- end
25
+ require 'rest-client'
26
+
27
+ require_relative 'response'
28
+
29
+ module Cloudflare
30
+ DEFAULT_URL = "https://api.cloudflare.com/client/v4/"
31
+ TIMEOUT = 10 # Default is 5 seconds
32
+
33
+ class Resource < RestClient::Resource
34
+ # @param api_key [String] `X-Auth-Key` or `X-Auth-User-Service-Key` if no email provided.
35
+ # @param email [String] `X-Auth-Email`, your email address for the account.
36
+ def initialize(url = DEFAULT_URL, key: nil, email: nil, **options)
37
+ headers = options[:headers] || {}
38
+
39
+ if email.nil?
40
+ headers['X-Auth-User-Service-Key'] = key
41
+ else
42
+ headers['X-Auth-Key'] = key
43
+ headers['X-Auth-Email'] = email
44
+ end
45
+
46
+ # Convert HTTP API responses to our own internal response class:
47
+ super(url, headers: headers, accept: 'application/json', **options) do |response|
48
+ Response.new(response.request.url, response.body)
49
+ end
50
+ end
51
+ end
52
+
53
+ class Connection < Resource
54
+ end
544
55
  end