diff --git a/lib/web_push.rb b/lib/web_push.rb index 80ccaf6..93d1e13 100644 --- a/lib/web_push.rb +++ b/lib/web_push.rb @@ -56,10 +56,6 @@ def encode64(bytes) end def decode64(str) - # For Ruby < 2.3, Base64.urlsafe_decode64 strict decodes and will raise errors if encoded value is not properly padded - # Implementation: http://ruby-doc.org/stdlib-2.3.0/libdoc/base64/rdoc/Base64.html#method-i-urlsafe_decode64 - str = str.ljust((str.length + 3) & ~3, '=') if !str.end_with?('=') && str.length % 4 != 0 - Base64.urlsafe_decode64(str) end diff --git a/spec/web_push_spec.rb b/spec/web_push_spec.rb index 42d806c..f915b61 100644 --- a/spec/web_push_spec.rb +++ b/spec/web_push_spec.rb @@ -5,6 +5,18 @@ expect(WebPush::VERSION).not_to be nil end + describe '.decode64' do + let(:a_padded_key) { "YWJjZGU=" } + + it 'urlsafe decodes padded base64 string' do + expect(WebPush.decode64(a_padded_key)).to eq("abcde") + end + + it 'urlsafe decodes unpadded base64 string' do + expect(WebPush.decode64(a_padded_key.delete("="))).to eq("abcde") + end + end + shared_examples 'web push protocol standard error handling' do it 'raises InvalidSubscription if the API returns a 404 Error' do stub_request(:post, expected_endpoint)