Module: PactBroker::Certificates::Service

Extended by:
Service, Logging
Includes:
Logging
Included in:
Service
Defined in:
lib/pact_broker/certificates/service.rb

Instance Method Summary collapse

Methods included from Logging

included, log_error, log_with_tag

Instance Method Details

#cert_storeObject



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/pact_broker/certificates/service.rb', line 13

def cert_store
  cert_store = OpenSSL::X509::Store.new
  cert_store.set_default_paths
  find_all_certificates.each do | certificate |
    begin
      logger.debug("Loading certificate for subject #{certificate.subject} and issuer #{certificate.issuer} in to cert store")
      cert_store.add_cert(certificate)
    rescue StandardError => e
      logger.warn("Error adding certificate object #{certificate} to store", e)
    end
  end
  cert_store
end

#certificates_from_configObject



44
45
46
47
48
# File 'lib/pact_broker/certificates/service.rb', line 44

def certificates_from_config
  PactBroker.configuration.webhook_certificates.select{| c| c[:content] || c[:path] }.collect.with_index do | certificate_config, i |
    load_certificate_config(certificate_config, i)
  end.flatten.compact
end

#certificates_from_databaseObject



31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/pact_broker/certificates/service.rb', line 31

def certificates_from_database
  Certificate.collect do | certificate |
    split_certificate_chain(certificate.content).collect do |c|
      begin
        OpenSSL::X509::Certificate.new(c)
      rescue StandardError => e
        logger.warn("Error creating certificate object from certificate #{certificate.uuid} '#{certificate.description}'", e)
        nil
      end
    end
  end.flatten.compact
end

#find_all_certificatesObject



27
28
29
# File 'lib/pact_broker/certificates/service.rb', line 27

def find_all_certificates
  certificates_from_database + certificates_from_config
end

#load_certificate_config(certificate_config, i) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/pact_broker/certificates/service.rb', line 50

def load_certificate_config(certificate_config, i)
  begin
    content = certificate_config[:content] || File.read(certificate_config[:path])
    split_certificate_chain(content).collect do |c|
      begin
        OpenSSL::X509::Certificate.new(c)
      rescue StandardError => e
        logger.warn("Error creating certificate object from webhook_certificates at index #{i} with description #{certificate_config[:description]}", e)
        nil
      end
    end
  rescue StandardError => e
    logger.warn("Error loading webhook_certificate at index #{i} with description #{certificate_config[:description]}", e)
    nil
  end
end

#split_certificate_chain(content) ⇒ Object



67
68
69
# File 'lib/pact_broker/certificates/service.rb', line 67

def split_certificate_chain(content)
  content.split(/(-----END [^\-]+-----)/).each_slice(2).map(&:join).map(&:strip).select{|s| !s.empty?}
end