parent
e0808a3937
commit
366a078dee
@ -0,0 +1,47 @@ |
||||
require 'timeout' |
||||
|
||||
module CryptCheck |
||||
module Tls |
||||
class AnalysisFailure |
||||
attr_reader :error |
||||
|
||||
def initialize(error) |
||||
@error = error |
||||
end |
||||
|
||||
def to_s |
||||
@error.to_s |
||||
end |
||||
end |
||||
|
||||
class TooLongAnalysis < AnalysisFailure |
||||
def initialize |
||||
super "Too long analysis (max #{Host::MAX_ANALYSIS_DURATION.humanize})" |
||||
end |
||||
end |
||||
|
||||
class Host |
||||
MAX_ANALYSIS_DURATION = 600 |
||||
|
||||
attr_reader :servers |
||||
|
||||
def initialize |
||||
first = true |
||||
@servers = resolve.collect do |args| |
||||
first ? (first = false) : Logger.info { '' } |
||||
result = begin |
||||
server = ::Timeout.timeout MAX_ANALYSIS_DURATION do |
||||
server(*args) |
||||
end |
||||
grade(server) |
||||
rescue Engine::TLSException => e |
||||
AnalysisFailure.new e |
||||
rescue ::Timeout::Error |
||||
TooLongAnalysis.new |
||||
end |
||||
[args, result] |
||||
end.to_h |
||||
end |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,31 @@ |
||||
module CryptCheck |
||||
module Tls |
||||
module Https |
||||
class Host < Tls::Host |
||||
def initialize(hostname, port=443) |
||||
@hostname, @port = hostname, port |
||||
super() |
||||
end |
||||
|
||||
private |
||||
def resolve |
||||
begin |
||||
ip = IPAddr.new @hostname |
||||
return [[nil, ip.to_s, ip.family]] |
||||
rescue IPAddr::InvalidAddressError |
||||
end |
||||
::Addrinfo.getaddrinfo(@hostname, nil, nil, :STREAM) |
||||
.collect { |a| [@hostname, a.ip_address, a.afamily] } |
||||
end |
||||
|
||||
def server(hostname, ip, family) |
||||
Https::Server.new hostname, ip, family, @port |
||||
end |
||||
|
||||
def grade(server) |
||||
Https::Grade.new server |
||||
end |
||||
end |
||||
end |
||||
end |
||||
end |
Loading…
Reference in new issue