cryptcheck/sslcheck-all

67 lines
1.4 KiB
Ruby
Executable File

#!/usr/bin/env ruby
require 'erb'
require 'yaml'
require 'thread'
require 'parallel'
require 'logging'
$:.unshift 'lib'
require 'sslcheck'
#Logging.logger.root.appenders = Logging.appenders.stdout
#Logging.logger.root.level = :info
SCORES = %w(A+ A A- B C D E F T M)
def score(a); SCORES.index a.grade; end
def check(hostname)
hostname.strip!
#print ' ', hostname, ' : '
begin
server = SSLCheck::Server.new hostname
note = SSLCheck::Grade.new server
#puts note.grade
note
rescue => e
puts e
raise
end
end
config = YAML.load_file 'hosts.yml'
results = Hash[config.collect { |c| [c['description'], []] }]
tests = []
config.each do |c|
description, hosts = c['description'], c['hostnames']
hosts.each { |host| tests << [description, host] }
end
# tests.each do |description, host|
# results[description] << check(host)
# end
semaphore = Mutex.new
Parallel.each tests, progress: 'Testing', in_threads: 8 do |description, host|
begin
result = check host
semaphore.synchronize do
results[description] << result
end
rescue SSLCheck::Server::TLSNotAvailableException
rescue Exception => e
p host, e
raise
end
end
results.each do |d, _|
results[d].sort! do |a, b|
cmp = score(a) <=> score(b)
cmp != 0 ? cmp : a.server.hostname <=> b.server.hostname
end
end
puts 'Generate results'
File.write 'output/index.html', ERB.new(File.read('index2.erb')).result(binding)