cloudflare 3.2.1 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/.rubocop.yml DELETED
@@ -1,19 +0,0 @@
1
- Naming/UncommunicativeMethodParamName:
2
- AllowedNames:
3
- - ip
4
- - id
5
-
6
- Style/Documentation:
7
- Enabled: false
8
-
9
- Metrics/LineLength:
10
- Max: 120
11
-
12
- Metrics/MethodLength:
13
- Max: 20
14
-
15
- Lint/Debugger:
16
- Enabled: false
17
-
18
- Gemspec/RequiredRubyVersion:
19
- Enabled: false
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.5.0
@@ -1,202 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright, 2012, by Marcin Prokop.
4
- # Copyright, 2017, by Samuel G. D. Williams. <http://www.codeotaku.com>
5
- # Copyright, 2017, by David Rosenbloom. <http://artifactory.com>
6
- #
7
- # Permission is hereby granted, free of charge, to any person obtaining a copy
8
- # of this software and associated documentation files (the "Software"), to deal
9
- # in the Software without restriction, including without limitation the rights
10
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
- # copies of the Software, and to permit persons to whom the Software is
12
- # furnished to do so, subject to the following conditions:
13
- #
14
- # The above copyright notice and this permission notice shall be included in
15
- # all copies or substantial portions of the Software.
16
- #
17
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
- # THE SOFTWARE.
24
-
25
- require_relative 'connection'
26
-
27
- module Cloudflare
28
- class Connection < Resource
29
- def zones
30
- @zones ||= Zones.new(concat_urls(url, 'zones'), options)
31
- end
32
- end
33
-
34
- class DNSRecord < Resource
35
- def initialize(url, record = nil, **options)
36
- super(url, **options)
37
-
38
- @record = record || get.result
39
- end
40
-
41
- def update_content(content)
42
- response = put({ type: @record[:type],
43
- name: @record[:name],
44
- content: content }.to_json,
45
- content_type: 'application/json')
46
- response.successful?
47
- end
48
-
49
- attr_reader :record
50
-
51
- def to_s
52
- "#{@record[:name]} #{@record[:type]} #{@record[:content]}"
53
- end
54
- end
55
-
56
- class DNSRecords < Resource
57
- def initialize(url, zone, **options)
58
- super(url, **options)
59
-
60
- @zone = zone
61
- end
62
-
63
- attr_reader :zone
64
-
65
- def all
66
- results = paginate(DNSRecords, url)
67
- results.map { |record| DNSRecord.new(concat_urls(url, record[:id]), record, **options) }
68
- end
69
-
70
- def find_by_name(name)
71
- response = get(params: { name: name })
72
-
73
- return if response.empty?
74
- record = response.results.first
75
-
76
- DNSRecord.new(concat_urls(url, record[:id]), record, **options)
77
- end
78
-
79
- def find_by_id(id)
80
- DNSRecord.new(concat_urls(url, id), **options)
81
- end
82
- end
83
-
84
- class FirewallRule < Resource
85
- def initialize(url, record = nil, **options)
86
- super(url, **options)
87
-
88
- @record = record || get.result
89
- end
90
-
91
- attr_reader :record
92
-
93
- def to_s
94
- "#{@record[:configuration][:value]} - #{@record[:mode]} - #{@record[:notes]}"
95
- end
96
- end
97
-
98
- class FirewallRules < Resource
99
- def initialize(url, zone, **options)
100
- super(url, **options)
101
-
102
- @zone = zone
103
- end
104
-
105
- attr_reader :zone
106
-
107
- def all(mode = nil, ip = nil, notes = nil)
108
- url_args = ''
109
- url_args.concat("&mode=#{mode}") if mode
110
- url_args.concat("&configuration_value=#{ip}") if ip
111
- url_args.concat("&notes=#{notes}") if notes
112
-
113
- results = paginate(FirewallRules, url, url_args)
114
- results.map { |record| FirewallRule.new(concat_urls(url, record[:id]), record, **options) }
115
- end
116
-
117
- def firewalled_ips(rules)
118
- rules.collect { |r| r.record[:configuration][:value] }
119
- end
120
-
121
- def blocked_ips
122
- firewalled_ips(all('block'))
123
- end
124
-
125
- def set(mode, ip, note)
126
- data = {
127
- mode: mode.to_s,
128
- configuration: {
129
- target: 'ip',
130
- value: ip.to_s,
131
- notes: "cloudflare gem firewall_rules [#{mode}] #{note} #{Time.now.strftime('%m/%d/%y')}"
132
- }
133
- }
134
-
135
- post(data.to_json, content_type: 'application/json')
136
- end
137
-
138
- def unset(mode, value)
139
- rule = send("find_by_#{mode}", value)
140
- rule.delete
141
- end
142
-
143
- def find_by_id(id)
144
- FirewallRule.new(concat_urls(url, id), **options)
145
- end
146
-
147
- def find_by_ip(ip)
148
- rule = FirewallRule.new(concat_urls(url, "?configuration_value=#{ip}"), **options)
149
- FirewallRule.new(concat_urls(url, rule.record.first[:id]), **options)
150
- end
151
- end
152
-
153
- class Zone < Resource
154
- DEFAULT_PURGE_CACHE_PARAMS = {
155
- purge_everything: true
156
- }.freeze
157
-
158
- def initialize(url, record = nil, preload = false, **options)
159
- super(url, **options)
160
- @record = record || get.result if preload
161
- end
162
-
163
- attr_reader :record
164
-
165
- def dns_records
166
- @dns_records ||= DNSRecords.new(concat_urls(url, 'dns_records'), self, **options)
167
- end
168
-
169
- def firewall_rules
170
- @firewall_rules ||= FirewallRules.new(concat_urls(url, 'firewall/access_rules/rules'), self, **options)
171
- end
172
-
173
- def purge_cache(params = DEFAULT_PURGE_CACHE_PARAMS)
174
- response = self['purge_cache'].post(params.to_json)
175
- response.successful?
176
- end
177
-
178
- def to_s
179
- @record[:name]
180
- end
181
- end
182
-
183
- class Zones < Resource
184
- def all
185
- results = paginate(Zone, url)
186
- results.map { |record| Zone.new(concat_urls(url, record[:id]), record, **options) }
187
- end
188
-
189
- def find_by_name(name)
190
- response = get(params: { name: name })
191
-
192
- return if response.empty?
193
- record = response.results.first
194
-
195
- Zone.new(concat_urls(url, record[:id]), record, true, **options)
196
- end
197
-
198
- def find_by_id(id)
199
- Zone.new(concat_urls(url, id), **options)
200
- end
201
- end
202
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'sinatra/base'
4
-
5
- class FakeCloudFlare < Sinatra::Base
6
- get '/zones/:id/dns_records/?page=1&per_page=50&scope_type=organization' do
7
- json_response 200, 'get_all_zones.json'
8
- end
9
-
10
- private
11
-
12
- def json_response(response_code, file_name)
13
- content_type :json
14
- status response_code
15
- File.open(File.dirname(__FILE__) + '/fixtures/' + file_name, 'rb').read
16
- end
17
- end