123456789_123456789_123456789_123456789_123456789_

Class: Bundler::SSLCerts::CertificateManager

Relationships & Source Files
Inherits: Object
Defined in: lib/bundler/ssl_certs/certificate_manager.rb

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(rubygems_path = nil) ⇒ CertificateManager

[ GitHub ]

  
# File 'lib/bundler/ssl_certs/certificate_manager.rb', line 16

def initialize(rubygems_path = nil)
  if rubygems_path
    rubygems_cert_path = File.join(rubygems_path, "lib/rubygems/ssl_certs")
    @rubygems_certs = certificates_in(rubygems_cert_path)
  end

  @bundler_cert_path = File.expand_path("..", __FILE__)
  @bundler_certs = certificates_in(bundler_cert_path)
end

Class Method Details

.update_from!(rubygems_path)

[ GitHub ]

  
# File 'lib/bundler/ssl_certs/certificate_manager.rb', line 12

def self.update_from!(rubygems_path)
  new(rubygems_path).update!
end

Instance Attribute Details

#bundler_cert_path (readonly)

[ GitHub ]

  
# File 'lib/bundler/ssl_certs/certificate_manager.rb', line 10

attr_reader :bundler_cert_path, :bundler_certs, :rubygems_certs

#bundler_certs (readonly)

[ GitHub ]

  
# File 'lib/bundler/ssl_certs/certificate_manager.rb', line 10

attr_reader :bundler_cert_path, :bundler_certs, :rubygems_certs

#rubygems_certs (readonly)

[ GitHub ]

  
# File 'lib/bundler/ssl_certs/certificate_manager.rb', line 10

attr_reader :bundler_cert_path, :bundler_certs, :rubygems_certs

#up_to_date?Boolean (readonly)

[ GitHub ]

  
# File 'lib/bundler/ssl_certs/certificate_manager.rb', line 26

def up_to_date?
  rubygems_certs.all? do |rc|
    bundler_certs.find do |bc|
      File.basename(bc) == File.basename(rc) && FileUtils.compare_file(bc, rc)
    end
  end
end

Instance Method Details

#certificates_in(path) (private)

[ GitHub ]

  
# File 'lib/bundler/ssl_certs/certificate_manager.rb', line 51

def certificates_in(path)
  Dir[File.join(path, "**/*.pem")].sort
end

#connect_to(host)

[ GitHub ]

  
# File 'lib/bundler/ssl_certs/certificate_manager.rb', line 41

def connect_to(host)
  http = Net::HTTP.new(host, 443)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER
  http.cert_store = store
  http.head("/")
end

#store (private)

[ GitHub ]

  
# File 'lib/bundler/ssl_certs/certificate_manager.rb', line 55

def store
  @store ||= begin
    store = OpenSSL::X509::Store.new
    bundler_certs.each do |cert|
      store.add_file cert
    end
    store
  end
end

#update!

[ GitHub ]

  
# File 'lib/bundler/ssl_certs/certificate_manager.rb', line 34

def update!
  return if up_to_date?

  FileUtils.rm bundler_certs
  FileUtils.cp rubygems_certs, bundler_cert_path
end