class Gem::Request
Public Class Methods
Source
# File lib/rubygems/request.rb, line 52defself.configure_connection_for_https(connection,cert_files)raiseGem::Exception.new("OpenSSL is not available. Install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources")unlessGem::HAVE_OPENSSLconnection.use_ssl =trueconnection.verify_mode =Gem.configuration.ssl_verify_mode||OpenSSL::SSL::VERIFY_PEERstore =OpenSSL::X509::Store.newifGem.configuration.ssl_client_certpem =File.readGem.configuration.ssl_client_certconnection.cert =OpenSSL::X509::Certificate.newpemconnection.key =OpenSSL::PKey::RSA.newpemendstore.set_default_pathscert_files.eachdo|ssl_cert_file|store.add_filessl_cert_fileendifGem.configuration.ssl_ca_certifFile.directory?Gem.configuration.ssl_ca_certstore.add_pathGem.configuration.ssl_ca_certelsestore.add_fileGem.configuration.ssl_ca_certendendconnection.cert_store =storeconnection.verify_callback =procdo|preverify_ok,store_context|verify_certificatestore_contextunlesspreverify_okpreverify_okendconnectionend
Source
# File lib/rubygems/request.rb, line 47defself.get_cert_filespattern =File.expand_path("./ssl_certs/*/*.pem",__dir__)Dir.glob(pattern)end
Source
# File lib/rubygems/request.rb, line 167defself.get_proxy_from_env(scheme ="http")downcase_scheme =scheme.downcaseupcase_scheme =scheme.upcaseenv_proxy =ENV["#{downcase_scheme}_proxy"]||ENV["#{upcase_scheme}_PROXY"]no_env_proxy =env_proxy.nil?||env_proxy.empty?ifno_env_proxyreturn ["https","http"].include?(downcase_scheme)?:no_proxy:get_proxy_from_env("http")endrequire"uri"uri =Gem::URI(Gem::UriFormatter.new(env_proxy).normalize)ifuri&&uri.user.nil?&&uri.password.nil?user =ENV["#{downcase_scheme}_proxy_user"]||ENV["#{upcase_scheme}_PROXY_USER"]password =ENV["#{downcase_scheme}_proxy_pass"]||ENV["#{upcase_scheme}_PROXY_PASS"]uri.user =Gem::UriFormatter.new(user).escapeuri.password =Gem::UriFormatter.new(password).escapeenduriend
Returns a proxyURI for the givenscheme if one is set in the environment variables.
Source
# File lib/rubygems/request.rb, line 29definitialize(uri,request_class,last_modified,pool)@uri =uri@request_class =request_class@last_modified =last_modified@requests =Hash.new(0).compare_by_identity@user_agent =user_agent@connection_pool =poolend
Source
# File lib/rubygems/request.rb, line 88defself.verify_certificate(store_context)depth =store_context.error_deptherror =store_context.error_stringnumber =store_context.errorcert =store_context.current_certui.alert_error"SSL verification error at depth #{depth}: #{error} (#{number})"extra_message =verify_certificate_messagenumber,certui.alert_errorextra_messageifextra_messageend
Source
# File lib/rubygems/request.rb, line 101defself.verify_certificate_message(error_number,cert)returnunlesscertcaseerror_numberwhenOpenSSL::X509::V_ERR_CERT_HAS_EXPIREDthenrequire"time""Certificate #{cert.subject} expired at #{cert.not_after.iso8601}"whenOpenSSL::X509::V_ERR_CERT_NOT_YET_VALIDthenrequire"time""Certificate #{cert.subject} not valid until #{cert.not_before.iso8601}"whenOpenSSL::X509::V_ERR_CERT_REJECTEDthen"Certificate #{cert.subject} is rejected"whenOpenSSL::X509::V_ERR_CERT_UNTRUSTEDthen"Certificate #{cert.subject} is not trusted"whenOpenSSL::X509::V_ERR_DEPTH_ZERO_SELF_SIGNED_CERTthen"Certificate #{cert.issuer} is not trusted"whenOpenSSL::X509::V_ERR_INVALID_CAthen"Certificate #{cert.subject} is an invalid CA certificate"whenOpenSSL::X509::V_ERR_INVALID_PURPOSEthen"Certificate #{cert.subject} has an invalid purpose"whenOpenSSL::X509::V_ERR_SELF_SIGNED_CERT_IN_CHAINthen"Root certificate is not trusted (#{cert.subject})"whenOpenSSL::X509::V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLYthen"You must add #{cert.issuer} to your local trusted store"whenOpenSSL::X509::V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATUREthen"Cannot verify certificate issued by #{cert.issuer}"endend
Public Instance Methods
Source
# File lib/rubygems/request.rb, line 43defcert_files@connection_pool.cert_filesend
Source
# File lib/rubygems/request.rb, line 134defconnection_for(uri)@connection_pool.checkoutrescueGem::HAVE_OPENSSL?OpenSSL::SSL::SSLError:Errno::EHOSTDOWN,Errno::EHOSTDOWN=>eraiseGem::RemoteFetcher::FetchError.new(e.message,uri)end
Creates or an HTTP connection based onuri, or retrieves an existing connection, using a proxy if needed.
Source
# File lib/rubygems/request.rb, line 141deffetchrequest =@request_class.new@uri.request_uriunless@uri.nil?||@uri.user.nil?||@uri.user.empty?request.basic_authGem::UriFormatter.new(@uri.user).unescape,Gem::UriFormatter.new(@uri.password).unescapeendrequest.add_field"User-Agent",@user_agentrequest.add_field"Connection","keep-alive"request.add_field"Keep-Alive","30"if@last_modifiedrequire"time"request.add_field"If-Modified-Since",@last_modified.httpdateendyieldrequestifblock_given?perform_requestrequestend
Source
# File lib/rubygems/request.rb, line 269defreset(connection)@requests.deleteconnectionconnection.finishconnection.startend
Resets HTTP connectionconnection.
Source
# File lib/rubygems/request.rb, line 276defuser_agentua ="RubyGems/#{Gem::VERSION} #{Gem::Platform.local}".dupruby_version =RUBY_VERSIONruby_version+="dev"ifRUBY_PATCHLEVEL==-1ua<<" Ruby/#{ruby_version} (#{RUBY_RELEASE_DATE}"ifRUBY_PATCHLEVEL>=0ua<<" patchlevel #{RUBY_PATCHLEVEL}"elseua<<" revision #{RUBY_REVISION}"endua<<")"ua<<" #{RUBY_ENGINE}"ifRUBY_ENGINE!="ruby"uaend