73 Zeilen
1.6 KiB
Ruby
73 Zeilen
1.6 KiB
Ruby
module CryptCheck
|
|
module Tls
|
|
class Grade
|
|
attr_reader :server, :grade, :states
|
|
|
|
def initialize(server)
|
|
@server = server
|
|
@checks = checks
|
|
@states = calculate_states
|
|
@grade = calculate_grade
|
|
end
|
|
|
|
def display
|
|
color = case @grade
|
|
when 'A', 'A+'
|
|
:best
|
|
when 'B', 'B+'
|
|
:perfect
|
|
when 'C', 'C+'
|
|
:good
|
|
when 'E'
|
|
:warning
|
|
when 'F'
|
|
:error
|
|
when 'G'
|
|
:critical
|
|
when 'M', 'T'
|
|
:unknown
|
|
end
|
|
|
|
Logger.info { "Grade : #{self.grade.colorize color }" }
|
|
Logger.info { '' }
|
|
Status.each do |color|
|
|
states = @states[color]
|
|
Logger.info { "#{color.to_s.capitalize} : #{states.collect { |s| s.to_s.colorize color }.join ' '}" } unless states.empty?
|
|
end
|
|
end
|
|
|
|
private
|
|
def calculate_grade
|
|
case
|
|
when !@states[:critical].empty?
|
|
return 'G'
|
|
when !@states[:error].empty?
|
|
return 'F'
|
|
when !@states[:warning].empty?
|
|
return 'E'
|
|
end
|
|
|
|
goods = @checks.select { |c| c.last == :good }.collect &:first
|
|
unless goods.empty?
|
|
return 'D' if @states[:good].empty?
|
|
return 'C' if @states[:good] != goods
|
|
end
|
|
|
|
perfects = @checks.select { |c| c.last == :perfect }.collect &:first
|
|
unless perfects.empty?
|
|
return 'C+' if @states[:perfect].empty?
|
|
return 'B' if @states[:perfect] != perfects
|
|
end
|
|
|
|
bests = @checks.select { |c| c.last == :best }.collect &:first
|
|
unless bests.empty?
|
|
return 'B+' if @states[:best].empty?
|
|
return 'A' if @states[:best] != bests
|
|
end
|
|
|
|
'A+'
|
|
end
|
|
end
|
|
end
|
|
end
|