From ae615bf7fac61a78e5782200e4f79e02da079093 Mon Sep 17 00:00:00 2001 From: Ben Lee Date: Wed, 29 Mar 2023 12:21:01 -0700 Subject: [PATCH 1/4] fix occasional errors we see when generating a uuid using uuid library by switching to securerandom --- emailage.gemspec | 1 - lib/emailage/client.rb | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/emailage.gemspec b/emailage.gemspec index afab9cb..e5f1e2a 100644 --- a/emailage.gemspec +++ b/emailage.gemspec @@ -26,6 +26,5 @@ Gem::Specification.new do |spec| spec.add_development_dependency "redcarpet", "~> 3.3" spec.add_dependency "typhoeus", "~> 1.0" - spec.add_dependency "uuid", "~> 2.3" spec.add_dependency "json", "~> 2.3" end diff --git a/lib/emailage/client.rb b/lib/emailage/client.rb index b3f9839..e018a2f 100644 --- a/lib/emailage/client.rb +++ b/lib/emailage/client.rb @@ -1,5 +1,5 @@ require 'typhoeus' -require 'uuid' +require 'securerandom' require 'json' module Emailage @@ -38,7 +38,7 @@ def request(endpoint, params) params = { :format => 'json', :oauth_consumer_key => @secret, - :oauth_nonce => UUID.new.generate, + :oauth_nonce => SecureRandom.uuid, :oauth_signature_method => 'HMAC-SHA1', :oauth_timestamp => Time.now.to_i, :oauth_version => 1.0 From b0ec4520ecbc6f51cde7f334c7a1ea187ce1e3de Mon Sep 17 00:00:00 2001 From: Ben Lee Date: Tue, 4 Apr 2023 11:49:26 -0700 Subject: [PATCH 2/4] raise TemporaryError if we do not receive a 200 response code and the body is blank bc we see this happen occasionally and want to be able to catch this particular scenario --- .ruby-version | 1 + lib/emailage.rb | 1 + lib/emailage/client.rb | 6 +++++- spec/client_spec.rb | 13 +++++++++++-- 4 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 .ruby-version diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 0000000..a4dd9db --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +2.7.4 diff --git a/lib/emailage.rb b/lib/emailage.rb index f506e54..b550b13 100644 --- a/lib/emailage.rb +++ b/lib/emailage.rb @@ -19,4 +19,5 @@ module Emailage } class Error < StandardError; end + class TemporaryError < Error; end end diff --git a/lib/emailage/client.rb b/lib/emailage/client.rb index e018a2f..783ef00 100644 --- a/lib/emailage/client.rb +++ b/lib/emailage/client.rb @@ -47,7 +47,11 @@ def request(endpoint, params) res = Typhoeus.get url, :params => params.merge(:oauth_signature => Signature.create('GET', url, params, @hmac_key)) json = res.body.sub(/^[^{]+/, '') - JSON.parse json + if res.code == 200 + return JSON.parse json + elsif json.empty? + raise TemporaryError + end end public diff --git a/spec/client_spec.rb b/spec/client_spec.rb index d469b86..235c35d 100644 --- a/spec/client_spec.rb +++ b/spec/client_spec.rb @@ -4,9 +4,10 @@ let(:t) {spy :typhoeus} let(:email) {'test+emailage@example.com'} let(:ip) {'1.234.56.7'} - + let(:response) { double :response, :body => "\xEF\xBB\xBF{\"success\":[true]}", :code => 200 } + before { - allow(t).to receive(:get) {double :response, :body => "\xEF\xBB\xBF{\"success\":[true]}"} + allow(t).to receive(:get) {response} stub_const 'Typhoeus', t } @@ -33,6 +34,14 @@ it 'parses response body as JSON' do expect(request).to eq 'success' => [true] end + + context 'empty string returned' do + let(:response) { double :response, :body => "", :code => 503 } + + it 'raises TemporaryError' do + expect { request }.to raise_error(Emailage::TemporaryError) + end + end end describe '#query' do From 287f0dcc3dbfd54f768ef9da7da93cced6e35fd9 Mon Sep 17 00:00:00 2001 From: Bharath Mylarappa Date: Wed, 3 May 2023 17:46:56 -0700 Subject: [PATCH 3/4] Add customised exception if response is empty from emailage. --- lib/emailage.rb | 2 +- lib/emailage/client.rb | 7 +++---- spec/client_spec.rb | 10 +++++++++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/emailage.rb b/lib/emailage.rb index b550b13..d67ddd2 100644 --- a/lib/emailage.rb +++ b/lib/emailage.rb @@ -19,5 +19,5 @@ module Emailage } class Error < StandardError; end - class TemporaryError < Error; end + class Failure < StandardError; end end diff --git a/lib/emailage/client.rb b/lib/emailage/client.rb index 783ef00..35eb587 100644 --- a/lib/emailage/client.rb +++ b/lib/emailage/client.rb @@ -47,11 +47,10 @@ def request(endpoint, params) res = Typhoeus.get url, :params => params.merge(:oauth_signature => Signature.create('GET', url, params, @hmac_key)) json = res.body.sub(/^[^{]+/, '') - if res.code == 200 - return JSON.parse json - elsif json.empty? - raise TemporaryError + if json.empty? + raise Failure, "Body length: #{res.body&.length} Code: #{res.code} " end + return JSON.parse json end public diff --git a/spec/client_spec.rb b/spec/client_spec.rb index 235c35d..784abc1 100644 --- a/spec/client_spec.rb +++ b/spec/client_spec.rb @@ -39,7 +39,15 @@ let(:response) { double :response, :body => "", :code => 503 } it 'raises TemporaryError' do - expect { request }.to raise_error(Emailage::TemporaryError) + expect { request }.to raise_error(Emailage::Failure) + end + end + + context 'error string is returned' do + let(:response) { double :response, :body => "dummy body }", :code => 503 } + + it 'raises TemporaryError' do + expect { request }.to raise_error(Emailage::Failure) end end end From 7c430a47842be3c99f1c72124d09d69058ec6b3a Mon Sep 17 00:00:00 2001 From: "arnav.vaid" Date: Mon, 8 May 2023 11:07:28 -0700 Subject: [PATCH 4/4] Log body if emailage api returns no json body --- lib/emailage/client.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/emailage/client.rb b/lib/emailage/client.rb index 35eb587..cd3d7c1 100644 --- a/lib/emailage/client.rb +++ b/lib/emailage/client.rb @@ -48,7 +48,7 @@ def request(endpoint, params) json = res.body.sub(/^[^{]+/, '') if json.empty? - raise Failure, "Body length: #{res.body&.length} Code: #{res.code} " + raise Failure, "Received Body: '#{res.body}' with Code: #{res.code}" end return JSON.parse json end