class CertCheck::CLI

Cert-check's command line interface

Public Instance Methods

info(*files) click to toggle source
# File lib/cert_check/cli.rb, line 8
def info(*files)
  if files.empty?
    say_status :error,
               'Pass one or more certificate file paths as arguments.',
               :red
    exit(1)
  end

  files.each do |file|
    puts "CertFile:   #{file}"

    begin
      @cert = OpenSSL::X509::Certificate.new File.read file
    rescue OpenSSL::X509::CertificateError => e
      say_status :error,
                 "Certificate file is incorrect. (#{e.class}: #{e.message})\n\n",
                 :red
      next
    rescue StandardError => e
      say_status :error, "#{e.class}: #{e.message}\n\n", :red
      next
    end

    resources
    puts template
  end
end

Private Instance Methods

array_to_hash(arr) click to toggle source
# File lib/cert_check/cli.rb, line 46
def array_to_hash(arr)
  Hash[*arr.flatten.reject { |a| a.is_a?(Integer) }]
end
resources() click to toggle source
# File lib/cert_check/cli.rb, line 38
def resources
  @subject    = array_to_hash(@cert.subject.to_a)
  @issuer     = array_to_hash(@cert.issuer.to_a)
  @not_before = @cert.not_before.getlocal
  @not_after  = @cert.not_after.getlocal
  @sans       = sans_to_array
end
sans_to_array() click to toggle source
# File lib/cert_check/cli.rb, line 50
def sans_to_array
  @cert.to_text.scan(/Subject Alternative Name:\s*([^\n\r]*)/).join(',')
       .scan(/DNS:([^,]*)/).flatten
end
template() click to toggle source
# File lib/cert_check/cli.rb, line 55
    def template
      <<~OUT
        Issuer:     #{@issuer['CN']}
        NotBefore:  #{@not_before}
        NotAfter:   #{@not_after}
        CommonName: #{@subject['CN']}
        SANs:       [#{@sans.join(' ')}]\n
      OUT
    end