bunq-client 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9740e877575d04b4f9651481d14ebe99c9e72fa1c84784df9723682c390eb3a6
4
- data.tar.gz: c7917f47979a39be25f38ef56ea76f781209f592b1f519ac770f41784f116d66
3
+ metadata.gz: bd7688576042b6d4767eeb9f3ba6a5571a296070b44cf3da4aabcc221eb83b3c
4
+ data.tar.gz: d81a7e0a729a790315ea24fc630815c2145c89fea9ac577e7ff80e40f1bf4096
5
5
  SHA512:
6
- metadata.gz: f4dd1de0cb4cd712176d715fd4f2b71439c04642ea5b9cc5f4858e8a6e23d84140081fd0bc3bfd56ee024f56d2c031fec96d0fa8effc7c690852859dd65f0ec2
7
- data.tar.gz: 4b224b06310d349d5cc243ed6c1c8b60e5c859d3e58c30627af7986163f7e82a8860d63eb5660626ba3a9631ec681589dd1fc9bcde31d9ede397e72b848ee54f
6
+ metadata.gz: 40cc75610a053e7cf0476ee8f752333041f3e8d777ad58d29632dcfe8ae4a961888e41d4a8cfd9ff9cbbabfd6c4265902d0f787e2fb5628e2f7667c2b568c530
7
+ data.tar.gz: 7c78e3b0840ad09acc5060bb2b509655032c73f39b4fc540b5ba16764413216e8d4a87d4ea362a977eacda744859988a9888848c441e2d4ec142319fdd40746b
data/lib/bunq/errors.rb CHANGED
@@ -26,7 +26,7 @@ module Bunq
26
26
  end
27
27
 
28
28
  class UnexpectedResponse < ResponseError; end
29
- class RequestSignatureRequired < ResponseError; end
29
+ class InvalidResponseSignature < ResponseError; end
30
30
  class AbsentResponseSignature < ResponseError; end
31
31
  class TooManyRequestsResponse < ResponseError; end
32
32
  class UnauthorisedResponse < ResponseError; end
@@ -34,8 +34,8 @@ module Bunq
34
34
  end
35
35
 
36
36
  signature = Base64.strict_decode64(signature_headers_value.first)
37
- unless server_public_key.verify(digest, signature, "#{response.code}\n#{response.body}")
38
- fail RequestSignatureRequired.new(code: response.code, headers: response.raw_headers, body: response.body)
37
+ if !verify_modern(signature, response) && !verify_legacy(signature, response)
38
+ fail InvalidResponseSignature.new(code: response.code, headers: response.raw_headers, body: response.body)
39
39
  end
40
40
  end
41
41
 
@@ -55,5 +55,26 @@ module Bunq
55
55
  def skip_signature_check(responseCode)
56
56
  (Bunq::configuration.sandbox && responseCode == 409) || responseCode == 429
57
57
  end
58
+
59
+ def verify_legacy(signature, response)
60
+ sorted_bunq_headers = response
61
+ .raw_headers
62
+ .select(&method(:verifiable_header?))
63
+ .sort
64
+ .to_h
65
+ .map do |k, v|
66
+ "#{k.to_s.split('-').map(&:capitalize).join('-')}: #{v.first}"
67
+ end
68
+
69
+ verify(signature, %Q{#{response.code}\n#{sorted_bunq_headers.join("\n")}\n\n#{response.body}})
70
+ end
71
+
72
+ def verify_modern(signature, response)
73
+ verify(signature, response.body)
74
+ end
75
+
76
+ def verify(signature, data)
77
+ server_public_key.verify(digest, signature, data)
78
+ end
58
79
  end
59
80
  end
data/lib/bunq/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Bunq
2
- VERSION = "0.6.1"
2
+ VERSION = "0.7.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bunq-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lars Vonk
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2020-03-09 00:00:00.000000000 Z
14
+ date: 2020-03-10 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rest-client