Skip to content
Snippets Groups Projects
Commit 8ff8f078 authored by Alex Reisner's avatar Alex Reisner
Browse files

Merge pull request #1035 from jlhonora/master

Disable SSL v2 and v3 if ssl enabled
parents 771b1d0b 539e911b
No related branches found
No related tags found
No related merge requests found
...@@ -24,6 +24,7 @@ end ...@@ -24,6 +24,7 @@ end
group :test do group :test do
gem 'sqlite3', :platform => [:ruby, :mswin, :mingw] gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]
gem 'webmock'
platforms :ruby do platforms :ruby do
gem 'pg' gem 'pg'
......
...@@ -24,6 +24,7 @@ end ...@@ -24,6 +24,7 @@ end
group :test do group :test do
gem 'sqlite3', :platform => [:ruby, :mswin, :mingw] gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]
gem 'webmock'
platforms :ruby do platforms :ruby do
gem 'pg' gem 'pg'
......
...@@ -24,6 +24,7 @@ end ...@@ -24,6 +24,7 @@ end
group :test do group :test do
gem 'sqlite3', :platform => [:ruby, :mswin, :mingw] gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]
gem 'webmock'
platforms :ruby do platforms :ruby do
gem 'pg' gem 'pg'
......
...@@ -16,6 +16,7 @@ group :development, :test do ...@@ -16,6 +16,7 @@ group :development, :test do
gem 'test-unit' # install newer version with omit() method gem 'test-unit' # install newer version with omit() method
gem 'debugger' gem 'debugger'
gem 'webmock'
platforms :jruby do platforms :jruby do
gem 'jruby-openssl' gem 'jruby-openssl'
......
...@@ -274,6 +274,7 @@ module Geocoder ...@@ -274,6 +274,7 @@ module Geocoder
uri = URI.parse(query_url(query)) uri = URI.parse(query_url(query))
Geocoder.log(:debug, "Geocoder: HTTP request being made for #{uri.to_s}") Geocoder.log(:debug, "Geocoder: HTTP request being made for #{uri.to_s}")
http_client.start(uri.host, uri.port, use_ssl: use_ssl?, open_timeout: configuration.timeout, read_timeout: configuration.timeout) do |client| http_client.start(uri.host, uri.port, use_ssl: use_ssl?, open_timeout: configuration.timeout, read_timeout: configuration.timeout) do |client|
configure_ssl!(client) if use_ssl?
req = Net::HTTP::Get.new(uri.request_uri, configuration.http_headers) req = Net::HTTP::Get.new(uri.request_uri, configuration.http_headers)
if configuration.basic_auth[:user] and configuration.basic_auth[:password] if configuration.basic_auth[:user] and configuration.basic_auth[:password]
req.basic_auth( req.basic_auth(
...@@ -297,6 +298,8 @@ module Geocoder ...@@ -297,6 +298,8 @@ module Geocoder
end end
end end
def configure_ssl!(client); end
def check_api_key_configuration!(query) def check_api_key_configuration!(query)
key_parts = query.lookup.required_api_key_parts key_parts = query.lookup.required_api_key_parts
if key_parts.size > Array(configuration.api_key).size if key_parts.size > Array(configuration.api_key).size
......
...@@ -27,6 +27,17 @@ module Geocoder::Lookup ...@@ -27,6 +27,17 @@ module Geocoder::Lookup
private # --------------------------------------------------------------- private # ---------------------------------------------------------------
def configure_ssl!(client)
client.instance_eval {
@ssl_context = OpenSSL::SSL::SSLContext.new
options = OpenSSL::SSL::OP_NO_SSLv2 | OpenSSL::SSL::OP_NO_SSLv3
if OpenSSL::SSL.const_defined?('OP_NO_COMPRESSION')
options |= OpenSSL::SSL::OP_NO_COMPRESSION
end
@ssl_context.set_params({options: options})
}
end
def valid_response?(response) def valid_response?(response)
json = parse_json(response.body) json = parse_json(response.body)
status = json["status"] if json status = json["status"] if json
......
...@@ -120,6 +120,9 @@ module Geocoder ...@@ -120,6 +120,9 @@ module Geocoder
fixture_exists?(filename) ? filename : default_fixture_filename fixture_exists?(filename) ? filename : default_fixture_filename
end end
# This alias allows us to use this method in further tests
# to actually test http requests
alias_method :actual_make_api_request, :make_api_request
remove_method(:make_api_request) remove_method(:make_api_request)
def make_api_request(query) def make_api_request(query)
......
...@@ -111,4 +111,19 @@ class GoogleTest < GeocoderTestCase ...@@ -111,4 +111,19 @@ class GoogleTest < GeocoderTestCase
query = Geocoder::Query.new("Madison Square Garden, New York, NY") query = Geocoder::Query.new("Madison Square Garden, New York, NY")
assert_match(/^https:/, query.url) assert_match(/^https:/, query.url)
end end
def test_actual_make_api_request_with_https
Geocoder.configure(use_https: true, lookup: :google)
require 'webmock/test_unit'
WebMock.enable!
stub_all = WebMock.stub_request(:any, /.*/).to_return(status: 200)
g = Geocoder::Lookup::Google.new
g.send(:actual_make_api_request, Geocoder::Query.new('test location'))
assert_requested(stub_all)
WebMock.reset!
WebMock.disable!
end
end end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment