github-pages-health-check 1.9.0 → 1.10.0
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 +4 -4
- data/lib/github-pages-health-check.rb +13 -12
- data/lib/github-pages-health-check/caa.rb +9 -4
- data/lib/github-pages-health-check/domain.rb +12 -9
- data/lib/github-pages-health-check/redundant_check.rb +40 -0
- data/lib/github-pages-health-check/repository.rb +1 -1
- data/lib/github-pages-health-check/resolver.rb +27 -24
- data/lib/github-pages-health-check/site.rb +1 -1
- data/lib/github-pages-health-check/version.rb +1 -1
- data/script/cibuild +2 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad338ea604a8549ea8d86009de6cdd7d8c578eb81d14d2f2ebf96b5fc7791cbe
|
4
|
+
data.tar.gz: 1241ab1285cf8d4e15cc9e56ee701b40241eede4740ce4090deb055c3b460ef0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aff974999ece850cf655e4cd1234806ddc8974c30e3b70eb1c3d8095d716c4be27ba23d343436bf28fd04f6ac3c9da0de676d079e25b0fc6d68b2e848b289c08
|
7
|
+
data.tar.gz: 44d14037c06a29e2be93da02040464894eedb72fa33b704a96dff152d31e438863e10fad54c69877182267e0f53949ee4d64e3e414a3748785c915e14f73cadf
|
@@ -19,18 +19,19 @@ end
|
|
19
19
|
|
20
20
|
module GitHubPages
|
21
21
|
module HealthCheck
|
22
|
-
autoload :CDN,
|
23
|
-
autoload :CloudFlare,
|
24
|
-
autoload :Fastly,
|
25
|
-
autoload :Error,
|
26
|
-
autoload :Errors,
|
27
|
-
autoload :CAA,
|
28
|
-
autoload :Checkable,
|
29
|
-
autoload :Domain,
|
30
|
-
autoload :
|
31
|
-
autoload :
|
32
|
-
autoload :
|
33
|
-
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"
|
25
|
+
autoload :Error, "github-pages-health-check/error"
|
26
|
+
autoload :Errors, "github-pages-health-check/errors"
|
27
|
+
autoload :CAA, "github-pages-health-check/caa"
|
28
|
+
autoload :Checkable, "github-pages-health-check/checkable"
|
29
|
+
autoload :Domain, "github-pages-health-check/domain"
|
30
|
+
autoload :RedundantCheck, "github-pages-health-check/redundant_check"
|
31
|
+
autoload :Repository, "github-pages-health-check/repository"
|
32
|
+
autoload :Resolver, "github-pages-health-check/resolver"
|
33
|
+
autoload :Site, "github-pages-health-check/site"
|
34
|
+
autoload :Printer, "github-pages-health-check/printer"
|
34
35
|
|
35
36
|
# DNS and HTTP timeout, in seconds
|
36
37
|
TIMEOUT = 7
|
@@ -2,17 +2,18 @@
|
|
2
2
|
|
3
3
|
require "dnsruby"
|
4
4
|
require "public_suffix"
|
5
|
+
require "github-pages-health-check/resolver"
|
5
6
|
|
6
7
|
module GitHubPages
|
7
8
|
module HealthCheck
|
8
9
|
class CAA
|
9
|
-
attr_reader :host
|
10
|
-
attr_reader :error
|
10
|
+
attr_reader :host, :error, :nameservers
|
11
11
|
|
12
|
-
def initialize(host)
|
12
|
+
def initialize(host, nameservers: nil)
|
13
13
|
raise ArgumentError, "host cannot be nil" if host.nil?
|
14
14
|
|
15
15
|
@host = host
|
16
|
+
@nameservers = nameservers
|
16
17
|
end
|
17
18
|
|
18
19
|
def errored?
|
@@ -47,11 +48,15 @@ module GitHubPages
|
|
47
48
|
end
|
48
49
|
|
49
50
|
def query(domain)
|
50
|
-
|
51
|
+
resolver(domain).query(Dnsruby::Types::CAA)
|
51
52
|
rescue Dnsruby::ResolvError, Dnsruby::ResolvTimeout => e
|
52
53
|
@error = e
|
53
54
|
[]
|
54
55
|
end
|
56
|
+
|
57
|
+
def resolver(domain)
|
58
|
+
GitHubPages::HealthCheck::Resolver.new(domain, :nameservers => nameservers)
|
59
|
+
end
|
55
60
|
end
|
56
61
|
end
|
57
62
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module GitHubPages
|
4
4
|
module HealthCheck
|
5
5
|
class Domain < Checkable
|
6
|
-
attr_reader :host
|
6
|
+
attr_reader :host, :resolver, :nameservers
|
7
7
|
|
8
8
|
LEGACY_IP_ADDRESSES = [
|
9
9
|
# Legacy GitHub Datacenter
|
@@ -85,16 +85,23 @@ module GitHubPages
|
|
85
85
|
valid_domain? apex_domain? should_be_a_record?
|
86
86
|
cname_to_github_user_domain? cname_to_pages_dot_github_dot_com?
|
87
87
|
cname_to_fastly? pointed_to_github_pages_ip? pages_domain?
|
88
|
-
served_by_pages?
|
89
|
-
https_eligible? caa_error
|
88
|
+
served_by_pages? valid? reason valid_domain?
|
89
|
+
https? enforces_https? https_error https_eligible? caa_error
|
90
90
|
].freeze
|
91
91
|
|
92
|
-
def
|
92
|
+
def self.redundant(host)
|
93
|
+
GitHubPages::HealthCheck::RedundantCheck.new(host).check
|
94
|
+
end
|
95
|
+
|
96
|
+
def initialize(host, nameservers: :default)
|
93
97
|
unless host.is_a? String
|
94
98
|
raise ArgumentError, "Expected string, got #{host.class}"
|
95
99
|
end
|
96
100
|
|
97
101
|
@host = normalize_host(host)
|
102
|
+
@nameservers = nameservers
|
103
|
+
@resolver = GitHubPages::HealthCheck::Resolver.new(host,
|
104
|
+
:nameservers => nameservers)
|
98
105
|
end
|
99
106
|
|
100
107
|
# Runs all checks, raises an error if invalid
|
@@ -269,10 +276,6 @@ module GitHubPages
|
|
269
276
|
@dns = nil
|
270
277
|
end
|
271
278
|
|
272
|
-
def resolver
|
273
|
-
@resolver ||= GitHubPages::HealthCheck::Resolver.new(absolute_domain)
|
274
|
-
end
|
275
|
-
|
276
279
|
# Are we even able to get the DNS record?
|
277
280
|
def dns?
|
278
281
|
!(dns.nil? || dns.empty?)
|
@@ -371,7 +374,7 @@ module GitHubPages
|
|
371
374
|
private
|
372
375
|
|
373
376
|
def caa
|
374
|
-
@caa ||= GitHubPages::HealthCheck::CAA.new(host)
|
377
|
+
@caa ||= GitHubPages::HealthCheck::CAA.new(host, :nameservers => nameservers)
|
375
378
|
end
|
376
379
|
|
377
380
|
# The domain's response to HTTP(S) requests, following redirects
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GitHubPages
|
4
|
+
module HealthCheck
|
5
|
+
class RedundantCheck
|
6
|
+
extend Forwardable
|
7
|
+
|
8
|
+
TIMEOUT = 5 # seconds
|
9
|
+
|
10
|
+
attr_reader :domain
|
11
|
+
|
12
|
+
def initialize(domain)
|
13
|
+
@domain = domain
|
14
|
+
end
|
15
|
+
|
16
|
+
def check
|
17
|
+
@check ||= (checks.find(&:valid?) || check_with_default_nameservers)
|
18
|
+
end
|
19
|
+
|
20
|
+
def_delegator :check, :reason, :reason
|
21
|
+
def_delegator :check, :valid?, :valid?
|
22
|
+
|
23
|
+
def https_eligible?
|
24
|
+
checks.any?(&:https_eligible?)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def checks
|
30
|
+
@checks ||= %i[default authoritative].map do |ns|
|
31
|
+
GitHubPages::HealthCheck::Domain.new(domain, :nameservers => ns)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def check_with_default_nameservers
|
36
|
+
@check_with_default_nameservers ||= checks.find { |c| c.nameservers == :default }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -4,50 +4,53 @@ module GitHubPages
|
|
4
4
|
module HealthCheck
|
5
5
|
class Resolver
|
6
6
|
DEFAULT_RESOLVER_OPTIONS = {
|
7
|
-
:retry_times
|
7
|
+
:retry_times => 2,
|
8
8
|
:query_timeout => 5,
|
9
|
-
:dnssec
|
9
|
+
:dnssec => false
|
10
10
|
}.freeze
|
11
11
|
|
12
|
-
PREFERS_AUTHORITATIVE_ANSWER = [
|
13
|
-
Dnsruby::Types::A,
|
14
|
-
Dnsruby::Types::CAA,
|
15
|
-
Dnsruby::Types::MX
|
16
|
-
].freeze
|
17
|
-
|
18
12
|
class << self
|
19
13
|
def default_resolver
|
20
14
|
@default_resolver ||= Dnsruby::Resolver.new(DEFAULT_RESOLVER_OPTIONS)
|
21
15
|
end
|
22
16
|
end
|
23
17
|
|
24
|
-
attr_reader :domain
|
18
|
+
attr_reader :domain, :nameservers
|
25
19
|
|
26
|
-
|
20
|
+
# Create a new resolver.
|
21
|
+
#
|
22
|
+
# domain - the domain we're getting answers for
|
23
|
+
# nameserver - (optional) a case
|
24
|
+
def initialize(domain, nameservers: :default)
|
27
25
|
@domain = domain
|
26
|
+
@nameservers = nameservers
|
28
27
|
end
|
29
28
|
|
30
29
|
def query(type)
|
31
|
-
|
32
|
-
answer = authoritative_resolver.query(domain, type).answer
|
33
|
-
return answer unless answer.empty?
|
34
|
-
end
|
35
|
-
|
36
|
-
self.class.default_resolver.query(domain, type).answer
|
37
|
-
rescue Dnsruby::ResolvTimeout, Dnsruby::ResolvError
|
38
|
-
self.class.default_resolver.query(domain, type).answer
|
30
|
+
resolver.query(domain, type).answer
|
39
31
|
end
|
40
32
|
|
41
33
|
private
|
42
34
|
|
43
|
-
def
|
44
|
-
|
45
|
-
|
46
|
-
|
35
|
+
def resolver
|
36
|
+
@resolver ||= case nameservers
|
37
|
+
when :default
|
38
|
+
self.class.default_resolver
|
39
|
+
when :authoritative
|
40
|
+
Dnsruby::Resolver.new(DEFAULT_RESOLVER_OPTIONS.merge(
|
41
|
+
:nameservers => authoritative_nameservers
|
42
|
+
))
|
43
|
+
when Array
|
44
|
+
Dnsruby::Resolver.new(DEFAULT_RESOLVER_OPTIONS.merge(
|
45
|
+
:nameservers => nameservers
|
46
|
+
))
|
47
|
+
else
|
48
|
+
raise "Invalid nameserver type: #{nameservers.inspect}"
|
49
|
+
end
|
47
50
|
end
|
48
51
|
|
49
|
-
def
|
50
|
-
@
|
52
|
+
def authoritative_nameservers
|
53
|
+
@authoritative_nameservers ||= begin
|
51
54
|
self.class.default_resolver.query(domain, Dnsruby::Types::NS).answer.map do |rr|
|
52
55
|
next rr.nsdname.to_s if rr.type == Dnsruby::Types::NS
|
53
56
|
end.compact
|
@@ -10,7 +10,7 @@ module GitHubPages
|
|
10
10
|
@domain = @repository.domain
|
11
11
|
rescue GitHubPages::HealthCheck::Errors::InvalidRepositoryError
|
12
12
|
@repository = nil
|
13
|
-
@domain = Domain.
|
13
|
+
@domain = Domain.redundant(repository_or_domain)
|
14
14
|
end
|
15
15
|
|
16
16
|
def check!
|
data/script/cibuild
CHANGED
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.10.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: 2018-05-
|
11
|
+
date: 2018-05-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -200,6 +200,7 @@ files:
|
|
200
200
|
- lib/github-pages-health-check/errors/missing_access_token_error.rb
|
201
201
|
- lib/github-pages-health-check/errors/not_served_by_pages_error.rb
|
202
202
|
- lib/github-pages-health-check/printer.rb
|
203
|
+
- lib/github-pages-health-check/redundant_check.rb
|
203
204
|
- lib/github-pages-health-check/repository.rb
|
204
205
|
- lib/github-pages-health-check/resolver.rb
|
205
206
|
- lib/github-pages-health-check/site.rb
|