From 26d57fd35f6815ea2140602293f6732e1807aa18 Mon Sep 17 00:00:00 2001
From: Alex Reisner <alex@alexreisner.com>
Date: Mon, 12 Mar 2018 20:19:22 -0700
Subject: [PATCH] Allow HTTP protocol for Nominatim lookup

but default to HTTPS (custom hosts may not support HTTPS).
This partially reverts 7cb0acc985ccb49c65c0529dab1d111165e8a1b9.
---
 lib/geocoder/lookups/location_iq.rb | 10 +++++-----
 lib/geocoder/lookups/nominatim.rb   | 18 +++++++++++++-----
 test/unit/lookups/nominatim_test.rb |  2 +-
 3 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/lib/geocoder/lookups/location_iq.rb b/lib/geocoder/lookups/location_iq.rb
index 3773d406..d9fb0659 100644
--- a/lib/geocoder/lookups/location_iq.rb
+++ b/lib/geocoder/lookups/location_iq.rb
@@ -13,15 +13,15 @@ module Geocoder::Lookup
     
     def query_url(query)
       method = query.reverse_geocode? ? "reverse" : "search"
-      "#{protocol}://locationiq.org/v1/#{method}.php?key=#{configuration.api_key}&" + url_query_string(query)
-    end
-
-    def supported_protocols
-      [:http, :https]
+      "#{protocol}://#{configured_host}/v1/#{method}.php?key=#{configuration.api_key}&" + url_query_string(query)
     end
 
     private
 
+    def configured_host
+      configuration[:host] || "locationiq.org"
+    end
+
     def results(query)
       return [] unless doc = fetch_data(query)
 
diff --git a/lib/geocoder/lookups/nominatim.rb b/lib/geocoder/lookups/nominatim.rb
index 18a20300..cee363a5 100644
--- a/lib/geocoder/lookups/nominatim.rb
+++ b/lib/geocoder/lookups/nominatim.rb
@@ -14,15 +14,23 @@ module Geocoder::Lookup
 
     def query_url(query)
       method = query.reverse_geocode? ? "reverse" : "search"
-      host = configuration[:host] || "nominatim.openstreetmap.org"
-      "#{protocol}://#{host}/#{method}?" + url_query_string(query)
+      "#{protocol}://#{configured_host}/#{method}?" + url_query_string(query)
     end
 
-    def supported_protocols
-      [:https]
+    private # ---------------------------------------------------------------
+
+    def configured_host
+      configuration[:host] || "nominatim.openstreetmap.org"
     end
 
-    private # ---------------------------------------------------------------
+    def use_ssl?
+      # nominatim.openstreetmap.org redirects HTTP requests to HTTPS
+      if configured_host == "nominatim.openstreetmap.org"
+        true
+      else
+        super
+      end
+    end
 
     def results(query)
       return [] unless doc = fetch_data(query)
diff --git a/test/unit/lookups/nominatim_test.rb b/test/unit/lookups/nominatim_test.rb
index c75cf458..27d2d1d7 100644
--- a/test/unit/lookups/nominatim_test.rb
+++ b/test/unit/lookups/nominatim_test.rb
@@ -37,7 +37,7 @@ class NominatimTest < GeocoderTestCase
   def test_host_configuration
     Geocoder.configure(nominatim: {host: "local.com"})
     query = Geocoder::Query.new("Bluffton, SC")
-    assert_match %r(https://local\.com), query.url
+    assert_match %r(http://local\.com), query.url
   end
 
   def test_raises_exception_when_over_query_limit
-- 
GitLab