class Bundler::PersistentHTTP

Public Instance Methods

connection_for(uri) { |connection| ... } click to toggle source
# File bundler/vendored_persistent.rb, line 22
def connection_for(uri)
  super(uri) do |connection|
    result = yield connection
    warn_old_tls_version_rubygems_connection(uri, connection)
    result
  end
end
warn_old_tls_version_rubygems_connection(uri, connection) click to toggle source
# File bundler/vendored_persistent.rb, line 30
def warn_old_tls_version_rubygems_connection(uri, connection)
  return unless connection.http.use_ssl?
  return unless (uri.host || "").end_with?("rubygems.org")

  socket = connection.instance_variable_get(:@socket)
  return unless socket
  socket_io = socket.io
  return unless socket_io.respond_to?(:ssl_version)
  ssl_version = socket_io.ssl_version

  case ssl_version
  when /TLSv([\d\.]+)/
    version = Gem::Version.new($1)
    if version < Gem::Version.new("1.2")
      Bundler.ui.warn \
        "Warning: Your Ruby version is compiled against a copy of OpenSSL that is very old. " \
        "Starting in January 2018, RubyGems.org will refuse connection requests from these " \
        "very old versions of OpenSSL. If you will need to continue installing gems after " \
        "January 2018, please follow this guide to upgrade: http://ruby.to/tls-outdated.",
        :wrap => true
    end
  end
end