github-pages-health-check 1.1.2 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/fastly-ips.txt +14 -0
- data/lib/github-pages-health-check.rb +3 -1
- data/lib/github-pages-health-check/{cloudflare.rb → cdn.rb} +6 -5
- data/lib/github-pages-health-check/cdns/cloudflare.rb +8 -0
- data/lib/github-pages-health-check/cdns/fastly.rb +8 -0
- data/lib/github-pages-health-check/domain.rb +25 -11
- data/lib/github-pages-health-check/error.rb +4 -0
- data/lib/github-pages-health-check/version.rb +1 -1
- data/script/check-cdn-ips +20 -0
- data/script/cibuild +1 -1
- data/script/update-cdn-ips +20 -0
- metadata +9 -6
- data/script/check-cloudflare-ips +0 -17
- data/script/update-cloudflare-ips +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55c8b9311f05c9c89c57e74f4e47700964f97b16
|
4
|
+
data.tar.gz: 7bf75965fb566b0bd9c6a5945cb073bea18a6fdc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 611f792db12ab0f8ea674a4368c2300126340a0da1a2d4d6c0e8974ac07b498a0d488d01b1ecd193c314b473357836b25743daa6f538ffd71be3462aca7b2806
|
7
|
+
data.tar.gz: af8a4e34b798af708a3df0cbe8dafaa5d49e7b987ba9e1ac846d1f215ce278f5f37d2f34c0e71dacfa22e5d8cf0366b8b3bd6675a87a9271c31d0a7a1c16fcb4
|
@@ -19,7 +19,9 @@ end
|
|
19
19
|
module GitHubPages
|
20
20
|
module HealthCheck
|
21
21
|
|
22
|
-
autoload :
|
22
|
+
autoload :CDN, "github-pages-health-check/cdn"
|
23
|
+
autoload :CloudFlare, "github-pages-health-check/cdns/cloudflare"
|
24
|
+
autoload :Fastly, "github-pages-health-check/cdns/fastly"
|
23
25
|
autoload :Error, "github-pages-health-check/error"
|
24
26
|
autoload :Errors, "github-pages-health-check/errors"
|
25
27
|
autoload :Checkable, "github-pages-health-check/checkable"
|
@@ -1,22 +1,23 @@
|
|
1
1
|
module GitHubPages
|
2
2
|
module HealthCheck
|
3
|
-
class
|
3
|
+
class CDN
|
4
4
|
include Singleton
|
5
5
|
|
6
6
|
# Internal: The path of the config file.
|
7
|
-
attr_reader :path
|
7
|
+
attr_reader :name, :path
|
8
8
|
|
9
9
|
# Public: Does cloudflare control this address?
|
10
10
|
def self.controls_ip?(address)
|
11
11
|
instance.controls_ip?(address)
|
12
12
|
end
|
13
13
|
|
14
|
-
# Internal: Create a new
|
14
|
+
# Internal: Create a new CDN info instance.
|
15
15
|
def initialize(options = {})
|
16
|
+
@name = options.fetch(:name) { self.class.name.split("::").last.downcase }
|
16
17
|
@path = options.fetch(:path) { default_config_path }
|
17
18
|
end
|
18
19
|
|
19
|
-
# Internal: Does
|
20
|
+
# Internal: Does this CDN control this address?
|
20
21
|
def controls_ip?(address)
|
21
22
|
ranges.any? { |range| range.include?(address) }
|
22
23
|
end
|
@@ -34,7 +35,7 @@ module GitHubPages
|
|
34
35
|
end
|
35
36
|
|
36
37
|
def default_config_path
|
37
|
-
File.expand_path("../../config
|
38
|
+
File.expand_path("../../config/#{name}-ips.txt", File.dirname(__FILE__))
|
38
39
|
end
|
39
40
|
end
|
40
41
|
end
|
@@ -4,10 +4,14 @@ module GitHubPages
|
|
4
4
|
|
5
5
|
attr_reader :host
|
6
6
|
|
7
|
-
LEGACY_IP_ADDRESSES =
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
LEGACY_IP_ADDRESSES = [
|
8
|
+
# Legacy GitHub Datacenter
|
9
|
+
"207.97.227.245",
|
10
|
+
"204.232.175.78",
|
11
|
+
|
12
|
+
# Legacy Fastly Datacenter
|
13
|
+
"199.27.73.133",
|
14
|
+
"199.27.76.133"
|
11
15
|
].freeze
|
12
16
|
|
13
17
|
CURRENT_IP_ADDRESSES = %w[
|
@@ -16,7 +20,7 @@ module GitHubPages
|
|
16
20
|
].freeze
|
17
21
|
|
18
22
|
HASH_METHODS = [
|
19
|
-
:host, :uri, :dns_resolves?, :proxied?, :cloudflare_ip?,
|
23
|
+
:host, :uri, :dns_resolves?, :proxied?, :cloudflare_ip?, :fastly_ip?,
|
20
24
|
:old_ip_address?, :a_record?, :cname_record?, :valid_domain?,
|
21
25
|
:apex_domain?, :should_be_a_record?, :cname_to_github_user_domain?,
|
22
26
|
:cname_to_pages_dot_github_dot_com?, :cname_to_fastly?,
|
@@ -36,8 +40,8 @@ module GitHubPages
|
|
36
40
|
def check!
|
37
41
|
raise Errors::InvalidDomainError.new(domain: self) unless valid_domain?
|
38
42
|
raise Errors::InvalidDNSError.new(domain: self) unless dns_resolves?
|
39
|
-
return true if proxied?
|
40
43
|
raise Errors::DeprecatedIPError.new(domain: self) if deprecated_ip?
|
44
|
+
return true if proxied?
|
41
45
|
raise Errors::InvalidARecordError.new(domain: self) if invalid_a_record?
|
42
46
|
raise Errors::InvalidCNAMEError.new(domain: self) if invalid_cname?
|
43
47
|
raise Errors::NotServedByPagesError.new(domain: self) unless served_by_pages?
|
@@ -138,10 +142,12 @@ module GitHubPages
|
|
138
142
|
|
139
143
|
# Does the domain resolve to a CloudFlare-owned IP
|
140
144
|
def cloudflare_ip?
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
+
cdn_ip?(CloudFlare)
|
146
|
+
end
|
147
|
+
|
148
|
+
# Does the domain resolve to a Fastly-owned IP
|
149
|
+
def fastly_ip?
|
150
|
+
cdn_ip?(Fastly)
|
145
151
|
end
|
146
152
|
|
147
153
|
# Does this non-GitHub-pages domain proxy a GitHub Pages site?
|
@@ -154,7 +160,7 @@ module GitHubPages
|
|
154
160
|
return unless dns?
|
155
161
|
return true if cloudflare_ip?
|
156
162
|
return false if pointed_to_github_pages_ip? || cname_to_github_user_domain?
|
157
|
-
return false if cname_to_pages_dot_github_dot_com? || cname_to_fastly?
|
163
|
+
return false if cname_to_pages_dot_github_dot_com? || cname_to_fastly? || fastly_ip?
|
158
164
|
served_by_pages?
|
159
165
|
end
|
160
166
|
|
@@ -268,6 +274,14 @@ module GitHubPages
|
|
268
274
|
def scheme
|
269
275
|
@scheme ||= github_domain? ? "https" : "http"
|
270
276
|
end
|
277
|
+
|
278
|
+
# Does the domain resolve to a CDN-owned IP
|
279
|
+
def cdn_ip?(cdn)
|
280
|
+
return unless dns?
|
281
|
+
dns.all? do |answer|
|
282
|
+
answer.class == Net::DNS::RR::A && cdn.controls_ip?(answer.address)
|
283
|
+
end
|
284
|
+
end
|
271
285
|
end
|
272
286
|
end
|
273
287
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/bin/bash -e
|
2
|
+
|
3
|
+
script/update-cdn-ips >/dev/null 2>&1
|
4
|
+
files=( cloudflare fastly)
|
5
|
+
|
6
|
+
# `git diff --quiet` suppresses output and sets a return code
|
7
|
+
# 0 - no changes
|
8
|
+
# 1 - changes
|
9
|
+
for file in "${files[@]}"
|
10
|
+
do
|
11
|
+
if git diff -w --quiet --cached "config/$file-ips.txt"
|
12
|
+
then
|
13
|
+
echo "$file IP list is up-to-date."
|
14
|
+
else
|
15
|
+
echo git reset "config/$file-ips.txt"
|
16
|
+
git reset --quiet "config/$file-ips.txt"
|
17
|
+
echo "*** $file IP list is out of date! Run script/update-cdn-ips!"
|
18
|
+
exit 1
|
19
|
+
fi
|
20
|
+
done
|
data/script/cibuild
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#/ Usage script/update-ips
|
3
|
+
#/ updates config/cloudflare-ips.txt and config/fastly-ips.txt
|
4
|
+
|
5
|
+
require 'open-uri'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
SOURCES = {
|
9
|
+
cloudflare: "https://www.cloudflare.com/ips-v4",
|
10
|
+
fastly: "https://api.fastly.com/public-ip-list"
|
11
|
+
}
|
12
|
+
|
13
|
+
SOURCES.each do |source, url|
|
14
|
+
file = "config/#{source}-ips.txt"
|
15
|
+
puts "Fetching #{url}..."
|
16
|
+
data = open(url).read
|
17
|
+
data = JSON.parse(data)["addresses"].join("\n") if source == :fastly
|
18
|
+
File.write(file, data)
|
19
|
+
`git add --verbose #{file}`
|
20
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: github-pages-health-check
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitHub, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: net-dns
|
@@ -164,10 +164,13 @@ files:
|
|
164
164
|
- LICENSE.md
|
165
165
|
- README.md
|
166
166
|
- config/cloudflare-ips.txt
|
167
|
+
- config/fastly-ips.txt
|
167
168
|
- github-pages-health-check.gemspec
|
168
169
|
- lib/github-pages-health-check.rb
|
170
|
+
- lib/github-pages-health-check/cdn.rb
|
171
|
+
- lib/github-pages-health-check/cdns/cloudflare.rb
|
172
|
+
- lib/github-pages-health-check/cdns/fastly.rb
|
169
173
|
- lib/github-pages-health-check/checkable.rb
|
170
|
-
- lib/github-pages-health-check/cloudflare.rb
|
171
174
|
- lib/github-pages-health-check/domain.rb
|
172
175
|
- lib/github-pages-health-check/error.rb
|
173
176
|
- lib/github-pages-health-check/errors.rb
|
@@ -186,12 +189,12 @@ files:
|
|
186
189
|
- lib/github-pages-health-check/version.rb
|
187
190
|
- script/bootstrap
|
188
191
|
- script/check
|
189
|
-
- script/check-
|
192
|
+
- script/check-cdn-ips
|
190
193
|
- script/cibuild
|
191
194
|
- script/console
|
192
195
|
- script/release
|
193
196
|
- script/test
|
194
|
-
- script/update-
|
197
|
+
- script/update-cdn-ips
|
195
198
|
homepage: https://github.com/github/github-pages-health-check
|
196
199
|
licenses:
|
197
200
|
- MIT
|
@@ -212,7 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
212
215
|
version: '0'
|
213
216
|
requirements: []
|
214
217
|
rubyforge_project:
|
215
|
-
rubygems_version: 2.
|
218
|
+
rubygems_version: 2.2.5
|
216
219
|
signing_key:
|
217
220
|
specification_version: 4
|
218
221
|
summary: Checks your GitHub Pages site for commons DNS configuration issues
|
data/script/check-cloudflare-ips
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
#!/bin/bash -e
|
2
|
-
|
3
|
-
script/update-cloudflare-ips >/dev/null 2>&1
|
4
|
-
|
5
|
-
# `git diff --quiet` suppresses output and sets a return code
|
6
|
-
# 0 - no changes
|
7
|
-
# 1 - changes
|
8
|
-
if git diff -w --quiet --cached config/cloudflare-ips.txt
|
9
|
-
then
|
10
|
-
echo CloudFlare IP list is up-to-date.
|
11
|
-
exit 0
|
12
|
-
else
|
13
|
-
echo git reset config/cloudflare-ips.txt
|
14
|
-
git reset --quiet config/cloudflare-ips.txt
|
15
|
-
echo '*** CloudFlare IP list is out of date! Run script/update-cloudflare-ips!'
|
16
|
-
exit 1
|
17
|
-
fi
|
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/bin/bash -e
|
2
|
-
#/ Usage script/update-cloudflare-ips
|
3
|
-
#/ updates config/cloudflare-ips.txt
|
4
|
-
|
5
|
-
source=https://www.cloudflare.com/ips-v4
|
6
|
-
dest=config/cloudflare-ips.txt
|
7
|
-
|
8
|
-
echo '====>' Downloading $source
|
9
|
-
curl --silent --fail $source | tee $dest
|
10
|
-
echo # cover for a missing newline
|
11
|
-
|
12
|
-
echo '====>' git add $dest
|
13
|
-
git diff -w $dest
|
14
|
-
git add --verbose $dest
|