ipecache 0.0.5 → 0.0.6
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 +8 -8
- data/CHANGELOG.md +18 -2
- data/Gemfile.lock +27 -4
- data/README.md +10 -3
- data/bin/ipecache +29 -10
- data/ipecache.gemspec +2 -1
- data/lib/ipecache/plugins/akamai.rb +0 -1
- data/lib/ipecache/plugins/ats_chef.rb +1 -2
- data/lib/ipecache/plugins/cloudflare.rb +70 -0
- data/lib/ipecache/plugins/edgecast.rb +1 -2
- data/lib/ipecache/plugins/fastly.rb +1 -2
- data/lib/ipecache/plugins/plugin.rb +14 -2
- data/lib/ipecache/runner.rb +3 -1
- data/plugins/CloudFlare.md +26 -0
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZWYxNWE2YWQwNjExY2E0NWUzMzk3ZTAwMDJmYjEzYjk4Nzc2OWY4Nw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MzJiMTJiZGMxMWRjNzQxZGEzY2QxYWRjM2U5M2M2Y2RhOWI5ZGNmNw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OTdjZjdlMTdhMjVmZDZkOTNlZjBhNzdkY2JjY2UwYjgzY2MyY2I0MDk2ODZl
|
10
|
+
NTc5OTFhMDgwMmNiZjdhMzljZGMzOWQ0NDBhMjg3NzcyZDA3YWJjMTIxY2Q5
|
11
|
+
MTdlMmY3Zjc1NGQzNWVjYWNkMWNkNTFiM2JhNDRkZjU4M2NjMTc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZjFkODA2YTRjZjMwNDk2NTRhN2E1NDA3YWM4ZGEyNTAxZTg5YWRhZjJiZmM0
|
14
|
+
YzMzOTgxZWNhYmQ0MGZiYWE2MzE2ZGE5ZjY1YzM3MzNlNmJiMzgyMmRkOGNi
|
15
|
+
NTkxYTEwNGRmZGQxN2Q4ZWQ4ZWM5MTBjNTVkYzNmZTAyMGUxZTI=
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,23 @@
|
|
1
|
+
## 0.0.6 (April 28, 2014)
|
2
|
+
|
3
|
+
Features:
|
4
|
+
|
5
|
+
- Cloudflare plugin (Thanks to https://github.com/adedommelin)
|
6
|
+
- Add quiet mode (Thanks to https://github.com/nespresso)
|
7
|
+
- Add -n short option to --nofail (Thanks to https://github.com/nespresso)
|
8
|
+
|
9
|
+
Bugfixes:
|
10
|
+
|
11
|
+
- Fix plugin_puts_error to print URL (Thanks to https://github.com/nespresso)
|
12
|
+
|
1
13
|
## 0.0.5 (April 25, 2014)
|
2
14
|
|
3
|
-
|
15
|
+
Features:
|
16
|
+
|
17
|
+
- Switched Akamai plugin to use new CCUAPI (Thanks to https://github.com/adedommelin)
|
4
18
|
|
5
19
|
## 0.0.1 (March 20, 2013)
|
6
20
|
|
7
|
-
|
21
|
+
Features:
|
22
|
+
|
23
|
+
- Initial version.
|
data/Gemfile.lock
CHANGED
@@ -1,21 +1,44 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ipecache (0.0.
|
4
|
+
ipecache (0.0.4)
|
5
5
|
app_conf (>= 0.4.0)
|
6
6
|
choice (>= 0.1.6)
|
7
7
|
faraday_middleware (>= 0.9.0)
|
8
|
+
savon (>= 2.1.0)
|
8
9
|
|
9
10
|
GEM
|
10
11
|
remote: http://rubygems.org/
|
11
12
|
specs:
|
12
|
-
|
13
|
+
akami (1.2.0)
|
14
|
+
gyoku (>= 0.4.0)
|
15
|
+
nokogiri (>= 1.4.0)
|
16
|
+
app_conf (0.4.0)
|
17
|
+
builder (3.0.0)
|
13
18
|
choice (0.1.6)
|
14
|
-
faraday (0.8.
|
15
|
-
multipart-post (~> 1.
|
19
|
+
faraday (0.8.6)
|
20
|
+
multipart-post (~> 1.1)
|
16
21
|
faraday_middleware (0.9.0)
|
17
22
|
faraday (>= 0.7.4, < 0.9)
|
23
|
+
gyoku (1.0.0)
|
24
|
+
builder (>= 2.1.2)
|
25
|
+
httpi (2.0.2)
|
26
|
+
rack
|
18
27
|
multipart-post (1.2.0)
|
28
|
+
nokogiri (1.5.9)
|
29
|
+
nori (2.0.4)
|
30
|
+
rack (1.4.1)
|
31
|
+
savon (2.1.0)
|
32
|
+
akami (~> 1.2.0)
|
33
|
+
builder (>= 2.1.2)
|
34
|
+
gyoku (~> 1.0.0)
|
35
|
+
httpi (~> 2.0.2)
|
36
|
+
nokogiri (>= 1.4.0)
|
37
|
+
nori (~> 2.0.3)
|
38
|
+
wasabi (~> 3.0.0)
|
39
|
+
wasabi (3.0.0)
|
40
|
+
httpi (~> 2.0)
|
41
|
+
nokogiri (>= 1.4.0)
|
19
42
|
|
20
43
|
PLATFORMS
|
21
44
|
ruby
|
data/README.md
CHANGED
@@ -45,6 +45,9 @@ plugins:
|
|
45
45
|
akamai:
|
46
46
|
username: myusername
|
47
47
|
password: mypassword
|
48
|
+
cloudflare:
|
49
|
+
login: foo@bar.com
|
50
|
+
api_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
48
51
|
```
|
49
52
|
|
50
53
|
#### atschef
|
@@ -59,6 +62,9 @@ For more information on how to configure the Edgecast CDN plugin, please read th
|
|
59
62
|
#### Akamai
|
60
63
|
For more information on how to configure the Akamai plugin, please read the [plugins/Akamai.md](plugins/Akamai.md) file.
|
61
64
|
|
65
|
+
#### CloudFlare
|
66
|
+
For more information on how to configure the CloudFlare plugin, please read the [plugins/CloudFlare.md](plugins/CloudFlare.md) file.
|
67
|
+
|
62
68
|
|
63
69
|
|
64
70
|
Ipecache Usage
|
@@ -67,7 +73,7 @@ The main component of Ipecache, and the program which initialises and calls all
|
|
67
73
|
|
68
74
|
#### Usage
|
69
75
|
```bash
|
70
|
-
ipecache [-f -u -c -p -l --status]
|
76
|
+
ipecache [-f -u -c -p -l -q --status]
|
71
77
|
```
|
72
78
|
|
73
79
|
* Mandatory Parameters (you must specify one or the other)
|
@@ -79,7 +85,8 @@ ipecache [-f -u -c -p -l --status]
|
|
79
85
|
* -c: Indicates that only CDN plugins should be run
|
80
86
|
* -p: Indicates that only local proxy plugins should be run.
|
81
87
|
* -l: Specify a file to log errors to
|
82
|
-
* --nofail: Do not quit on error, continue purging
|
88
|
+
* -n, --nofail: Do not quit on error, continue purging
|
89
|
+
* -q, --quiet: Suppress all console output
|
83
90
|
|
84
91
|
|
85
92
|
#### Example (Checking plugin status)
|
@@ -179,4 +186,4 @@ $> ipecache -f ~/urlfile
|
|
179
186
|
Ipecache::Plugins::Fastly: Purge successful!
|
180
187
|
|
181
188
|
All done!
|
182
|
-
```
|
189
|
+
```
|
data/bin/ipecache
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
# ipecache -
|
3
|
+
# ipecache - Extensible tool for purging URLs from Caches and CDNs.
|
4
4
|
#
|
5
5
|
# Author:: Jon Cowie (<jcowie@etsy.com>)
|
6
6
|
|
@@ -48,9 +48,20 @@ Choice.options do
|
|
48
48
|
end
|
49
49
|
|
50
50
|
option :continue_on_error, :required => false do
|
51
|
+
short '-n'
|
51
52
|
long '--nofail'
|
52
53
|
desc 'Continue on errors instead of exiting'
|
53
54
|
end
|
55
|
+
|
56
|
+
option :quiet_mode, :required => false do
|
57
|
+
short '-q'
|
58
|
+
long '--quiet'
|
59
|
+
desc 'Suppress all console output'
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
if Choice.choices[:quiet_mode]
|
64
|
+
@quiet_mode = Choice.choices[:quiet_mode]
|
54
65
|
end
|
55
66
|
|
56
67
|
if Choice.choices[:status]
|
@@ -70,7 +81,9 @@ elsif Choice.choices[:urlfile]
|
|
70
81
|
if File.exists?(urlfile)
|
71
82
|
@urls = File.open(urlfile, 'r').readlines
|
72
83
|
else
|
73
|
-
|
84
|
+
if !@quiet_mode
|
85
|
+
puts "Error: #{urlfile} doesn't exist."
|
86
|
+
end
|
74
87
|
exit 1
|
75
88
|
end
|
76
89
|
else
|
@@ -86,18 +99,24 @@ if Choice.choices[:continue_on_error]
|
|
86
99
|
end
|
87
100
|
|
88
101
|
if !Choice.choices[:cdnonly]
|
89
|
-
|
90
|
-
|
91
|
-
|
102
|
+
if !@quiet_mode
|
103
|
+
puts ""
|
104
|
+
puts "Running plugins registered for Proxy Purge..."
|
105
|
+
puts ""
|
106
|
+
end
|
92
107
|
run_plugins(:proxy_purge)
|
93
108
|
end
|
94
109
|
|
95
110
|
if !Choice.choices[:proxyonly]
|
96
|
-
|
97
|
-
|
98
|
-
|
111
|
+
if !@quiet_mode
|
112
|
+
puts ""
|
113
|
+
puts "Running plugins registered for CDN Purge..."
|
114
|
+
puts ""
|
115
|
+
end
|
99
116
|
run_plugins(:cdn_purge)
|
100
117
|
end
|
101
118
|
|
102
|
-
|
103
|
-
puts "
|
119
|
+
if !@quiet_mode
|
120
|
+
puts ""
|
121
|
+
puts "All done!"
|
122
|
+
end
|
data/ipecache.gemspec
CHANGED
@@ -2,7 +2,7 @@ $:.push File.expand_path('../lib', __FILE__)
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |gem|
|
4
4
|
gem.name = 'ipecache'
|
5
|
-
gem.version = '0.0.
|
5
|
+
gem.version = '0.0.6'
|
6
6
|
gem.authors = ["Jon Cowie"]
|
7
7
|
gem.email = 'jonlives@gmail.com'
|
8
8
|
gem.homepage = 'https://github.com/jonlives/ipecache'
|
@@ -18,4 +18,5 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.add_runtime_dependency 'app_conf', '>= 0.4.0'
|
19
19
|
gem.add_runtime_dependency 'choice', '>= 0.1.6'
|
20
20
|
gem.add_runtime_dependency 'faraday_middleware', '>= 0.9.0'
|
21
|
+
gem.add_runtime_dependency 'public_suffix', '>= 1.4.2'
|
21
22
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'ipecache/plugins/plugin'
|
2
|
+
|
3
|
+
module Ipecache
|
4
|
+
module Plugins
|
5
|
+
class CloudFlare < Plugin
|
6
|
+
name :cloudflare
|
7
|
+
hooks :cdn_purge
|
8
|
+
|
9
|
+
def perform
|
10
|
+
safe_require 'uri'
|
11
|
+
safe_require 'faraday_middleware'
|
12
|
+
safe_require 'json'
|
13
|
+
safe_require 'public_suffix'
|
14
|
+
|
15
|
+
login = config.login
|
16
|
+
api_key = config.api_key
|
17
|
+
|
18
|
+
if login.nil?
|
19
|
+
plugin_puts "CloudFlare login not specified, Exiting..."
|
20
|
+
exit 1
|
21
|
+
end
|
22
|
+
|
23
|
+
if api_key.nil?
|
24
|
+
plugin_puts "CloudFlare API key not specified, Exiting..."
|
25
|
+
exit 1
|
26
|
+
end
|
27
|
+
|
28
|
+
plugin_puts "Beginning URL Purge from CloudFlare..."
|
29
|
+
|
30
|
+
urls.each do |u|
|
31
|
+
url = u.chomp
|
32
|
+
plugin_puts "Purging #{url}"
|
33
|
+
|
34
|
+
uri = URI.parse(url)
|
35
|
+
zone = PublicSuffix.parse(uri.host).domain
|
36
|
+
|
37
|
+
connection = Faraday::Connection.new(
|
38
|
+
{:url => "https://www.cloudflare.com",
|
39
|
+
:headers => { :accept => 'application/json',
|
40
|
+
:user_agent => 'Ipecache'
|
41
|
+
},
|
42
|
+
:ssl => { :verify => true }
|
43
|
+
}) do |builder|
|
44
|
+
builder.request :url_encoded
|
45
|
+
builder.adapter Faraday.default_adapter
|
46
|
+
end
|
47
|
+
|
48
|
+
response = connection.get("/api_json.html",
|
49
|
+
{ :act => 'zone_file_purge',
|
50
|
+
:tkn => api_key,
|
51
|
+
:email => login,
|
52
|
+
:z => zone,
|
53
|
+
:url => url
|
54
|
+
})
|
55
|
+
|
56
|
+
response_json = JSON.parse(response.body)
|
57
|
+
response_result = response_json['result']
|
58
|
+
|
59
|
+
if response_result != 'success'
|
60
|
+
plugin_puts_error(url,"Purge failed!")
|
61
|
+
plugin_puts response.body
|
62
|
+
exit 1 unless continue_on_error
|
63
|
+
else
|
64
|
+
plugin_puts "Purge successful!"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -17,7 +17,6 @@ module Ipecache
|
|
17
17
|
exit 1
|
18
18
|
end
|
19
19
|
|
20
|
-
puts ""
|
21
20
|
plugin_puts "Beginning URL Purge from Fastly..."
|
22
21
|
|
23
22
|
urls.each do |u|
|
@@ -57,4 +56,4 @@ class Net::HTTP::Purge < Net::HTTPRequest
|
|
57
56
|
METHOD = 'PURGE'
|
58
57
|
REQUEST_HAS_BODY = false
|
59
58
|
RESPONSE_HAS_BODY = true
|
60
|
-
end
|
59
|
+
end
|
@@ -21,6 +21,9 @@ module Ipecache
|
|
21
21
|
# hook. That will be fired when the hook is fired.
|
22
22
|
def self.hook(the_hook)
|
23
23
|
self.send(:define_method, the_hook.to_sym) do
|
24
|
+
if !quiet_mode
|
25
|
+
puts ""
|
26
|
+
end
|
24
27
|
perform
|
25
28
|
end
|
26
29
|
end
|
@@ -47,19 +50,28 @@ module Ipecache
|
|
47
50
|
@options[:continue_on_error]
|
48
51
|
end
|
49
52
|
|
53
|
+
def quiet_mode
|
54
|
+
@options[:quiet_mode]
|
55
|
+
end
|
56
|
+
|
50
57
|
def name
|
51
58
|
self.class.to_s
|
52
59
|
end
|
53
60
|
|
54
61
|
def plugin_puts(message)
|
55
|
-
|
62
|
+
if !quiet_mode
|
63
|
+
puts "#{name}: #{message}"
|
64
|
+
end
|
56
65
|
end
|
57
66
|
|
58
67
|
def plugin_puts_error(url,message)
|
59
68
|
if log_file
|
60
69
|
File.open(log_file, 'a') { |file| file.write("#{Time.now.getutc} #{url} #{name}: #{message}\n") }
|
61
70
|
end
|
62
|
-
|
71
|
+
|
72
|
+
if !quiet_mode
|
73
|
+
puts "#{url} #{name}: #{message}"
|
74
|
+
end
|
63
75
|
end
|
64
76
|
|
65
77
|
private
|
data/lib/ipecache/runner.rb
CHANGED
@@ -26,12 +26,14 @@ module Ipecache
|
|
26
26
|
urls = @urls
|
27
27
|
log_file = @log_file
|
28
28
|
continue_on_error = @continue_on_error
|
29
|
+
quiet_mode = @quiet_mode
|
29
30
|
Ipecache::Plugins.run(
|
30
31
|
:config => ipecache_config,
|
31
32
|
:hook => hook.to_sym,
|
32
33
|
:urls => urls,
|
33
34
|
:log_file => log_file,
|
34
|
-
:continue_on_error => continue_on_error
|
35
|
+
:continue_on_error => continue_on_error,
|
36
|
+
:quiet_mode => quiet_mode
|
35
37
|
)
|
36
38
|
end
|
37
39
|
|
@@ -0,0 +1,26 @@
|
|
1
|
+
CloudFlare
|
2
|
+
==========
|
3
|
+
Purge URLs from the CloudFlare CDN.
|
4
|
+
|
5
|
+
Hooks
|
6
|
+
-----
|
7
|
+
- `cdn_purge`
|
8
|
+
|
9
|
+
Configuration
|
10
|
+
-------------
|
11
|
+
```yaml
|
12
|
+
plugins:
|
13
|
+
cloudflare:
|
14
|
+
login: foo@bar.com
|
15
|
+
api_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
16
|
+
```
|
17
|
+
|
18
|
+
#### login
|
19
|
+
This is your standard CloudFlare login.
|
20
|
+
|
21
|
+
- Type: `String`
|
22
|
+
|
23
|
+
#### api_key
|
24
|
+
Associated API Key, available on the "Account" page.
|
25
|
+
|
26
|
+
- Type: `String`
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ipecache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Cowie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
11
|
+
date: 2014-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: app_conf
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ! '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.9.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: public_suffix
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.4.2
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.4.2
|
55
69
|
description: An extensible tool for purging urls from caches and CDNs
|
56
70
|
email: jonlives@gmail.com
|
57
71
|
executables:
|
@@ -71,12 +85,14 @@ files:
|
|
71
85
|
- lib/ipecache/plugins.rb
|
72
86
|
- lib/ipecache/plugins/akamai.rb
|
73
87
|
- lib/ipecache/plugins/ats_chef.rb
|
88
|
+
- lib/ipecache/plugins/cloudflare.rb
|
74
89
|
- lib/ipecache/plugins/edgecast.rb
|
75
90
|
- lib/ipecache/plugins/fastly.rb
|
76
91
|
- lib/ipecache/plugins/plugin.rb
|
77
92
|
- lib/ipecache/runner.rb
|
78
93
|
- plugins/ATSChef.md
|
79
94
|
- plugins/Akamai.md
|
95
|
+
- plugins/CloudFlare.md
|
80
96
|
- plugins/Edgecast.md
|
81
97
|
- plugins/Fastly.md
|
82
98
|
- plugins/README.md
|