From 5e5dfcd523b4cd99f22ef67208e31bba5a8dcdea Mon Sep 17 00:00:00 2001
From: Robert Schaefer <robert.schaefer@student.hpi.de>
Date: Thu, 11 Jan 2018 23:46:46 +0100
Subject: [PATCH] Check HTTP 403 error on missing api keys

---
 lib/geocoder/lookups/ipdata_co.rb   | 9 +++++++++
 test/unit/lookups/ipdata_co_test.rb | 8 ++++++++
 2 files changed, 17 insertions(+)

diff --git a/lib/geocoder/lookups/ipdata_co.rb b/lib/geocoder/lookups/ipdata_co.rb
index a5fa295c..04e38fa4 100644
--- a/lib/geocoder/lookups/ipdata_co.rb
+++ b/lib/geocoder/lookups/ipdata_co.rb
@@ -43,5 +43,14 @@ module Geocoder::Lookup
     def host
       "api.ipdata.co"
     end
+
+    def check_response_for_errors!(response)
+      if response.code.to_i == 403
+        raise_error(Geocoder::RequestDenied) ||
+          Geocoder.log(:warn, "Geocoding API error: 403 API key does not exist")
+      else
+        super(response)
+      end
+    end
   end
 end
diff --git a/test/unit/lookups/ipdata_co_test.rb b/test/unit/lookups/ipdata_co_test.rb
index 3811a13c..5acdcf72 100644
--- a/test/unit/lookups/ipdata_co_test.rb
+++ b/test/unit/lookups/ipdata_co_test.rb
@@ -24,4 +24,12 @@ class IpdataCoTest < GeocoderTestCase
     assert_equal "Jersey City, NJ 07302, United States", result.address
   end
 
+  def test_not_authorized
+    Geocoder.configure(always_raise: [Geocoder::RequestDenied])
+    lookup = Geocoder::Lookup.get(:ipdata_co)
+      assert_raises Geocoder::RequestDenied do
+        response = MockHttpResponse.new(code: 403)
+        lookup.send(:check_response_for_errors!, response)
+    end
+  end
 end
-- 
GitLab