Skip to content

Commit 3cd2fdf

Browse files
committed
Merge pull request #19 from github/follow-redirects
Follow redirects when checking served_by_pages?
2 parents 859931b + e5d8de8 commit 3cd2fdf

File tree

3 files changed

+23
-18
lines changed

3 files changed

+23
-18
lines changed

github-pages-health-check.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
2626

2727
s.add_dependency("net-dns", "~> 0.6")
2828
s.add_dependency("public_suffix", "~> 1.4")
29+
s.add_dependency("typhoeus", "~> 0.7")
2930
s.add_development_dependency("rspec", "~> 3.0")
3031
s.add_development_dependency("pry")
3132
s.add_development_dependency("gem-release")

lib/github-pages-health-check.rb

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
require "public_suffix"
55
require "singleton"
66
require "net/http"
7+
require 'typhoeus'
78
require_relative "github-pages-health-check/version"
89
require_relative "github-pages-health-check/cloudflare"
910
require_relative "github-pages-health-check/error"
@@ -117,18 +118,8 @@ def to_hash
117118
end
118119

119120
def served_by_pages?
120-
scheme = github_domain? ? "https" : "http"
121-
uri = URI("#{scheme}://#{domain}")
122-
response = Net::HTTP.get_response(uri)
123-
if response.is_a? Net::HTTPRedirection
124-
for t in 1..3
125-
response = Net::HTTP.get_response(uri)
126-
break if response.is_a? Net::HTTPSuccess
127-
end
128-
end
129-
response.to_hash["server"] == ["GitHub.com"]
130-
rescue
131-
false
121+
response = Typhoeus.head(uri, followlocation: true)
122+
response.success? && response.headers["Server"] == "GitHub.com"
132123
end
133124

134125
def to_json
@@ -190,5 +181,13 @@ def without_warnings(&block)
190181
def absolute_domain
191182
domain.end_with?(".") ? domain : "#{domain}."
192183
end
184+
185+
def scheme
186+
@scheme ||= github_domain? ? "https" : "http"
187+
end
188+
189+
def uri
190+
@uri ||= URI("#{scheme}://#{domain}")
191+
end
193192
end
194193
end

spec/github_pages_health_check_spec.rb

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,13 @@ def cname_packet(domain)
150150
end
151151

152152
it "knows when a domain is served by pages" do
153-
check = GitHubPages::HealthCheck.new "chooosealicense.com"
154-
expect(check.valid?).to eql(true)
153+
check = GitHubPages::HealthCheck.new "choosealicense.com"
154+
expect(check.served_by_pages?).to eql(true)
155155
end
156156

157157
it "knows when a GitHub domain is served by pages" do
158158
check = GitHubPages::HealthCheck.new "mac.github.com"
159-
expect(check.valid?).to eql(true)
159+
expect(check.served_by_pages?).to eql(true)
160160
end
161161

162162
it "knows when an apex domain using A records is served by pages" do
@@ -165,12 +165,17 @@ def cname_packet(domain)
165165
# HTTP/1.1 302 Found
166166
# Location: /
167167
check = GitHubPages::HealthCheck.new "getbootstrap.com"
168-
expect(check.valid?).to eql(true)
168+
expect(check.served_by_pages?).to eql(true)
169+
end
170+
171+
it "knows when a domain with a redirect is served by pages" do
172+
check = GitHubPages::HealthCheck.new "management.cio.gov"
173+
expect(check.served_by_pages?).to eql(true)
169174
end
170175

171176
it "knows when a domain isn't served by pages" do
172-
check = GitHubPages::HealthCheck.new "github.com"
173-
expect(check.valid?).to eql(false)
177+
check = GitHubPages::HealthCheck.new "google.com"
178+
expect(check.served_by_pages?).to eql(false)
174179
expect(check.reason.class).to eql(GitHubPages::HealthCheck::NotServedByPages)
175180
expect(check.reason.message).to eql("Domain does not resolve to the GitHub Pages server")
176181
end

0 commit comments

Comments
 (0)