github-pages-health-check 1.9.0 → 1.10.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 +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
|