Skip to content

Commit bdf472c

Browse files
committed
Merge pull request #14 from github/jdennes-add-check-pages-ip
Support checking whether a domain points at a GitHub Pages IP address
2 parents a496512 + b04446f commit bdf472c

File tree

7 files changed

+53
-26
lines changed

7 files changed

+53
-26
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,13 @@
5252
:apex_domain?=>true,
5353
:should_be_a_record?=>true,
5454
:pointed_to_github_user_domain?=>false,
55+
:pointed_to_github_pages_ip?=>false,
5556
:pages_domain?=>false,
5657
:valid?=>true
5758
}
58-
> require 'json'
59+
> require "json"
5960
> check.to_json
60-
=> "{\"cloudflare_ip?\":false,\"old_ip_address?\":false,\"a_record?\":true,\"cname_record?\":false,\"valid_domain?\":true,\"apex_domain?\":true,\"should_be_a_record?\":true,\"pointed_to_github_user_domain?\":false,\"pages_domain?\":false,\"valid?\":true}"
61+
=> "{\"cloudflare_ip?\":false,\"old_ip_address?\":false,\"a_record?\":true,\"cname_record?\":false,\"valid_domain?\":true,\"apex_domain?\":true,\"should_be_a_record?\":true,\"pointed_to_github_user_domain?\":false,\"pointed_to_github_pages_ip?\":false,\"pages_domain?\":false,\"valid?\":true}"
6162
```
6263

6364
### Getting the reason a domain is invalid

github-pages-health-check.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
require File.expand_path('../lib/github-pages-health-check/version', __FILE__)
1+
require File.expand_path("../lib/github-pages-health-check/version", __FILE__)
22

33
Gem::Specification.new do |s|
44
s.required_ruby_version = ">= 1.9.3"

lib/github-pages-health-check.rb

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
require 'net/dns'
2-
require 'net/dns/resolver'
3-
require 'ipaddr'
4-
require 'public_suffix'
5-
require 'singleton'
6-
require 'net/http'
7-
require_relative 'github-pages-health-check/version'
8-
require_relative 'github-pages-health-check/cloudflare'
9-
require_relative 'github-pages-health-check/error'
10-
require_relative 'github-pages-health-check/errors/deprecated_ip'
11-
require_relative 'github-pages-health-check/errors/invalid_a_record'
12-
require_relative 'github-pages-health-check/errors/invalid_cname'
13-
require_relative 'github-pages-health-check/errors/not_served_by_pages'
1+
require "net/dns"
2+
require "net/dns/resolver"
3+
require "ipaddr"
4+
require "public_suffix"
5+
require "singleton"
6+
require "net/http"
7+
require_relative "github-pages-health-check/version"
8+
require_relative "github-pages-health-check/cloudflare"
9+
require_relative "github-pages-health-check/error"
10+
require_relative "github-pages-health-check/errors/deprecated_ip"
11+
require_relative "github-pages-health-check/errors/invalid_a_record"
12+
require_relative "github-pages-health-check/errors/invalid_cname"
13+
require_relative "github-pages-health-check/errors/not_served_by_pages"
1414

1515
class GitHubPages
1616
class HealthCheck
@@ -23,6 +23,11 @@ class HealthCheck
2323
199.27.73.133
2424
]
2525

26+
CURRENT_IP_ADDRESSES = %w[
27+
192.30.252.153
28+
192.30.252.154
29+
]
30+
2631
def initialize(domain)
2732
@domain = domain
2833
end
@@ -76,6 +81,11 @@ def pointed_to_github_user_domain?
7681
dns.first.class == Net::DNS::RR::CNAME && pages_domain?(dns.first.cname.to_s)
7782
end
7883

84+
# Is the domain's first response an A record to a valid GitHub Pages IP?
85+
def pointed_to_github_pages_ip?
86+
dns.first.class == Net::DNS::RR::A && CURRENT_IP_ADDRESSES.include?(dns.first.value)
87+
end
88+
7989
# Is the given cname a pages domain?
8090
#
8191
# domain - the domain to check, generaly the target of a cname
@@ -98,6 +108,7 @@ def to_hash
98108
:apex_domain? => apex_domain?,
99109
:should_be_a_record? => should_be_a_record?,
100110
:pointed_to_github_user_domain? => pointed_to_github_user_domain?,
111+
:pointed_to_github_pages_ip? => pointed_to_github_pages_ip?,
101112
:pages_domain? => pages_domain?,
102113
:served_by_pages? => served_by_pages?,
103114
:valid? => valid?,
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
class GitHubPages
22
class HealthCheck
3-
VERSION = '0.2.2'
3+
VERSION = "0.2.2"
44
end
55
end

spec/github_pages_health_check_cloudflare_spec.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
require 'spec_helper'
2-
require 'json'
3-
require 'tempfile'
4-
require 'ipaddr'
1+
require "spec_helper"
2+
require "json"
3+
require "tempfile"
4+
require "ipaddr"
55

66
describe(GitHubPages::HealthCheck::CloudFlare) do
77

@@ -11,7 +11,7 @@
1111

1212
context "default" do
1313
let(:instance) { GitHubPages::HealthCheck::CloudFlare.instance }
14-
14+
1515
it "loads the default config" do
1616
path = File.expand_path(instance.path)
1717
expected = File.expand_path("../config/cloudflare-ips.txt", File.dirname(__FILE__))

spec/github_pages_health_check_spec.rb

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
require 'spec_helper'
2-
require 'json'
1+
require "spec_helper"
2+
require "json"
33

44
describe(GitHubPages::HealthCheck) do
55
let(:health_check) { GitHubPages::HealthCheck.new("foo.github.io") }
@@ -89,6 +89,21 @@ def cname_packet(domain)
8989
end
9090
end
9191

92+
it "can determine when an apex domain is pointed at a GitHub Pages IP address" do
93+
allow(health_check).to receive(:domain) { "getbootstrap.com" }
94+
expect(health_check.pointed_to_github_pages_ip?).to be(true)
95+
end
96+
97+
it "can determine when an apex domain is not pointed at a GitHub Pages IP address" do
98+
allow(health_check).to receive(:domain) { "example.com" }
99+
expect(health_check.pointed_to_github_pages_ip?).to be(false)
100+
end
101+
102+
it "can determine that a subdomain with a CNAME record is not pointed at a GitHub Pages IP address" do
103+
allow(health_check).to receive(:domain) { "pages.github.com" }
104+
expect(health_check.pointed_to_github_pages_ip?).to be(false)
105+
end
106+
92107
it "retrieves a site's dns record" do
93108
allow(health_check).to receive(:domain) { "pages.github.com" }
94109
expect(health_check.dns.first.class).to eql(Net::DNS::RR::CNAME)
@@ -123,7 +138,7 @@ def cname_packet(domain)
123138

124139
it "returns valid json" do
125140
data = JSON.parse GitHubPages::HealthCheck.new("benbalter.com").to_json
126-
expect(data.length).to eql(12)
141+
expect(data.length).to eql(13)
127142
data.each { |key, value| expect([true,false,nil].include?(value)).to eql(true) }
128143
end
129144

spec/spec_helper.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
# order dependency and want to debug it, you can fix the order by providing
1010
# the seed, which is printed after each run.
1111
# --seed 1234
12-
config.order = 'random'
12+
config.order = "random"
1313
end

0 commit comments

Comments
 (0)