clayton/sslcheck

View on GitHub
lib/sslcheck/checker.rb

Summary

Maintainability
A
0 mins
Test Coverage
module SSLCheck
  class Checker
    attr_accessor :peer_cert, :ca_bundle, :host_name
    def initialize(client=nil, validator=nil)
      @client = client || Client.new
      @validator = validator || Validator.new
      @errors = []
      @checked = false
    end

    def check(url)
      fetch(url)
      validate if no_errors?
      @checked = true
      @url = url
      return self
    end

    def errors
      @errors
    end

    def failed?
      return false if no_errors?
      true
    end

    def valid?
      return true if no_errors? && checked?
      false
    end

    def checked?
      return true if @checked
      false
    end

    def url
      @url
    end

  private

    def no_errors?
      @errors.empty?
    end

    def fetch(url)
      response = @client.get(url)

      if response.errors.empty?
        self.peer_cert = response.peer_cert
        self.ca_bundle = response.ca_bundle
        self.host_name = response.host_name
      end

      response.errors.each do |error|
        @errors << error
      end

      true
    end

    def validate
      @validator.validate(host_name, peer_cert, ca_bundle)
      @errors = @errors + @validator.errors
      true
    end
  end
end