github-pages-health-check 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/github-pages-health-check.rb +35 -4
- data/lib/github-pages-health-check/version.rb +1 -1
- metadata +38 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac3f04f1179ebe2da4aba38ad08dfd5939855fb6
|
4
|
+
data.tar.gz: cc6745a890b982f0a6e6b066760177e512d23b3a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03633518d82ee979a23eaa4c10ec36a2e55771bbeaf3af5074f784b89a096c9ce3979c33aeaf6bb04f87621eb65aa302d0743d626457d1c1eff3be3fefe05a4f
|
7
|
+
data.tar.gz: 7c04a0b9cd18c6d89a1bc1b539377867f350019beb6239a6a78fb69ba47931f70eb0d29e895788418375feb14134d969887f4f2edd6174b60fa64e175e2f5da5
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require "net/dns"
|
2
2
|
require "net/dns/resolver"
|
3
|
+
require "addressable/uri"
|
3
4
|
require "ipaddr"
|
4
5
|
require "public_suffix"
|
5
6
|
require "singleton"
|
@@ -29,6 +30,16 @@ class GitHubPages
|
|
29
30
|
192.30.252.154
|
30
31
|
]
|
31
32
|
|
33
|
+
TYPHOEUS_OPTIONS = {
|
34
|
+
:followlocation => true,
|
35
|
+
:timeout => 10,
|
36
|
+
:accept_encoding => "gzip",
|
37
|
+
:method => :head,
|
38
|
+
:headers => {
|
39
|
+
"User-Agent" => "Mozilla/5.0 (compatible; GitHub Pages Health Check/#{VERSION}; +https://github.com/github/pages-health-check)"
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
32
43
|
def initialize(domain)
|
33
44
|
@domain = domain
|
34
45
|
end
|
@@ -37,9 +48,21 @@ class GitHubPages
|
|
37
48
|
dns.all? { |answer| answer.class == Net::DNS::RR::A && CloudFlare.controls_ip?(answer.address) }
|
38
49
|
end
|
39
50
|
|
51
|
+
# Does this non-GitHub-pages domain proxy a GitHub Pages site?
|
52
|
+
#
|
53
|
+
# This can be:
|
54
|
+
# 1. A Cloudflare-owned IP address
|
55
|
+
# 2. A site that returns GitHub.com server headers, but isn't CNAME'd to a GitHub domain
|
56
|
+
# 3. A site that returns GitHub.com server headers, but isn't CNAME'd to a GitHub IP
|
57
|
+
def proxied?
|
58
|
+
return true if cloudflare_ip?
|
59
|
+
return false if pointed_to_github_pages_ip? || pointed_to_github_user_domain?
|
60
|
+
served_by_pages?
|
61
|
+
end
|
62
|
+
|
40
63
|
# Returns an array of DNS answers
|
41
64
|
def dns
|
42
|
-
@dns ||= without_warnings { Net::DNS::Resolver.start(absolute_domain).answer
|
65
|
+
@dns ||= without_warnings { Net::DNS::Resolver.start(absolute_domain).answer } if domain
|
43
66
|
rescue Exception
|
44
67
|
false
|
45
68
|
end
|
@@ -101,6 +124,8 @@ class GitHubPages
|
|
101
124
|
|
102
125
|
def to_hash
|
103
126
|
{
|
127
|
+
:uri => uri.to_s,
|
128
|
+
:proxied? => proxied?,
|
104
129
|
:cloudflare_ip? => cloudflare_ip?,
|
105
130
|
:old_ip_address? => old_ip_address?,
|
106
131
|
:a_record? => a_record?,
|
@@ -116,9 +141,15 @@ class GitHubPages
|
|
116
141
|
:reason => reason
|
117
142
|
}
|
118
143
|
end
|
144
|
+
alias_method :to_h, :to_hash
|
119
145
|
|
120
146
|
def served_by_pages?
|
121
|
-
response = Typhoeus.head(uri,
|
147
|
+
response = Typhoeus.head(uri, TYPHOEUS_OPTIONS)
|
148
|
+
# Workaround for webmock not playing nicely with Typhoeus redirects
|
149
|
+
# See https://github.com/bblimke/webmock/issues/237
|
150
|
+
if response.mock? && response.headers["Location"]
|
151
|
+
response = Typhoeus.head(response.headers["Location"], TYPHOEUS_OPTIONS)
|
152
|
+
end
|
122
153
|
response.success? && response.headers["Server"] == "GitHub.com"
|
123
154
|
end
|
124
155
|
|
@@ -129,7 +160,7 @@ class GitHubPages
|
|
129
160
|
# Runs all checks, raises an error if invalid
|
130
161
|
def check!
|
131
162
|
return unless dns
|
132
|
-
return if
|
163
|
+
return if proxied?
|
133
164
|
raise DeprecatedIP if a_record? && old_ip_address?
|
134
165
|
raise InvalidARecord if valid_domain? && a_record? && !should_be_a_record?
|
135
166
|
raise InvalidCNAME if valid_domain? && !github_domain? && !apex_domain? && !pointed_to_github_user_domain?
|
@@ -187,7 +218,7 @@ class GitHubPages
|
|
187
218
|
end
|
188
219
|
|
189
220
|
def uri
|
190
|
-
@uri ||= URI(
|
221
|
+
@uri ||= Addressable::URI.new(:host => domain, :scheme => scheme, :path => "/").normalize
|
191
222
|
end
|
192
223
|
end
|
193
224
|
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: 0.
|
4
|
+
version: 0.4.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: 2015-08-
|
11
|
+
date: 2015-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: net-dns
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.7'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: addressable
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.3'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.3'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rspec
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,30 +84,44 @@ dependencies:
|
|
70
84
|
name: pry
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- - "
|
87
|
+
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
89
|
+
version: '0.10'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- - "
|
94
|
+
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
96
|
+
version: '0.10'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: gem-release
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- - "
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.7'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.7'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: webmock
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
88
116
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
117
|
+
version: '1.21'
|
90
118
|
type: :development
|
91
119
|
prerelease: false
|
92
120
|
version_requirements: !ruby/object:Gem::Requirement
|
93
121
|
requirements:
|
94
|
-
- - "
|
122
|
+
- - "~>"
|
95
123
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
124
|
+
version: '1.21'
|
97
125
|
description: Checks your GitHub Pages site for commons DNS configuration issues.
|
98
126
|
email: support@github.com
|
99
127
|
executables: []
|