linzer 0.7.1 → 0.7.2

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: 9d495888382dc17a4fae60d05b853dd0cbb0036119ae725f960471baa6ff0d4b
4
- data.tar.gz: a6860cf3dcfb586e1591b0b683c883bbf8a42de941f57ec6a2ba6f8574a5a2dd
3
+ metadata.gz: 760341bd66c313c36150f7cb31d741c84252ffe726ecd5bc838928b5f656832f
4
+ data.tar.gz: 6df1c1af21e5fbadc3eb242dc84973251ddc8dd6849606a2bd213ea57ffd9d89
5
5
  SHA512:
6
- metadata.gz: c4d53b9d1102eaa3fc0241938afa86fd194a9ae780233bdabd171190ab9b83958193f5bc28b5bd78fb11a234c3a25c3145ee87e6ac6116f544cb04e73c67a5bd
7
- data.tar.gz: 40e9c1e6bf52d944cd1a82b67502a41ae2939852e723143f1b154bab0b984fb9db6d944ecdf56b6845b6419096f4cbcef01ac545b9b9df73fe8ccc6f0489ace9
6
+ metadata.gz: 899a41a945b59b368110befe463d300445d605483ef64020e1e35c12e71e0945f3b6aeb1774155cbc4919246f88fc0b77175fe16d2f4270e4bc57f861983f145
7
+ data.tar.gz: 8af02940869d0e451a8c45738f943cb32bdc515347d325121cafbb9c49e6e1e601d897749e2a5f9453f7c1f6a98acff59e778a5489ed70a60476f0086ab4bace
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.7.2] - 2025-05-21
4
+
5
+ - Add a few integration tests against CloudFlare test server.
6
+
7
+ - Fix bug when accessing headers in http adapter classes.
8
+ Pull request [#14](https://github.com/nomadium/linzer/pull/14)
9
+ by [oneiros](https://github.com/oneiros).
10
+
3
11
  ## [0.7.1] - 2025-05-18
4
12
 
5
13
  - Introduce specific exception classes for message signing errors
data/Rakefile CHANGED
@@ -7,4 +7,10 @@ RSpec::Core::RakeTask.new(:spec)
7
7
 
8
8
  require "standard/rake"
9
9
 
10
+ desc "Run RSpec integration examples"
11
+ task :integration do
12
+ sh "bundle exec rspec -t integration spec/integration/**"
13
+ end
14
+
10
15
  task default: %i[spec standard]
16
+ task all: %i[integration default]
data/lib/linzer/http.rb CHANGED
@@ -65,6 +65,7 @@ module Linzer
65
65
  end
66
66
 
67
67
  def build_headers(headers)
68
+ return headers if headers.transform_keys(&:downcase).key?("user-agent")
68
69
  headers.merge({"user-agent" => "Linzer/#{Linzer::VERSION}"})
69
70
  end
70
71
 
@@ -37,7 +37,7 @@ module Linzer
37
37
  end
38
38
  end
39
39
 
40
- def headers
40
+ def header(name)
41
41
  raise Linzer::Error, "Sub-classes are required to implement this method!"
42
42
  end
43
43
 
@@ -5,8 +5,8 @@ module Linzer
5
5
  module Adapter
6
6
  module HTTPGem
7
7
  class Request < Linzer::Message::Adapter::NetHTTP::Request
8
- def headers
9
- @operation.headers.to_h
8
+ def header(name)
9
+ @operation[name]
10
10
  end
11
11
 
12
12
  private
@@ -14,8 +14,8 @@ module Linzer
14
14
  freeze
15
15
  end
16
16
 
17
- def headers
18
- @operation.headers
17
+ def header(name)
18
+ @operation[name]
19
19
  end
20
20
 
21
21
  # XXX: this implementation is incomplete, e.g.: ;tr parameter is not supported yet
@@ -12,8 +12,8 @@ module Linzer
12
12
  freeze
13
13
  end
14
14
 
15
- def headers
16
- @operation.each_header.to_h
15
+ def header(name)
16
+ @operation[name]
17
17
  end
18
18
 
19
19
  def attach!(signature)
@@ -13,8 +13,8 @@ module Linzer
13
13
  freeze
14
14
  end
15
15
 
16
- def headers
17
- @operation.each_header.to_h
16
+ def header(name)
17
+ @operation[name]
18
18
  end
19
19
 
20
20
  # XXX: this implementation is incomplete, e.g.: ;tr parameter is not supported yet
@@ -74,11 +74,9 @@ module Linzer
74
74
  if has_tr
75
75
  value = tr(name)
76
76
  else
77
- if request?
78
- rack_header_name = rack_header_name(name.value.to_s)
79
- value = @operation.env[rack_header_name]
80
- end
81
- value = @operation.headers[name.value.to_s] if response?
77
+ rack_header_name = rack_header_name(name.value.to_s)
78
+ value = @operation.env[rack_header_name] if request?
79
+ value = @operation.get_header(rack_header_name) if response?
82
80
  end
83
81
  value.dup&.strip
84
82
  end
@@ -13,8 +13,8 @@ module Linzer
13
13
  freeze
14
14
  end
15
15
 
16
- def headers
17
- rack_request_headers(@operation)
16
+ def header(name)
17
+ @operation.get_header(rack_header_name(name))
18
18
  end
19
19
 
20
20
  def attach!(signature)
@@ -16,12 +16,14 @@ module Linzer
16
16
  freeze
17
17
  end
18
18
 
19
- def headers
20
- @operation.headers
19
+ def header(name)
20
+ @operation.get_header(rack_header_name(name))
21
21
  end
22
22
 
23
23
  def attach!(signature)
24
- signature.to_h.each { |h, v| @operation[h] = v }
24
+ signature.to_h.each do |h, v|
25
+ @operation.set_header(rack_header_name(h), v)
26
+ end
25
27
  @operation
26
28
  end
27
29
  end
@@ -15,7 +15,7 @@ module Linzer
15
15
  def_delegators :@adapter, :request?, :response?, :attached_request?
16
16
 
17
17
  # fields look up
18
- def_delegators :@adapter, :headers, :field?, :[]
18
+ def_delegators :@adapter, :header, :field?, :[]
19
19
 
20
20
  # to attach a signature to the underlying HTTP message
21
21
  def_delegators :@adapter, :attach!
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Linzer
4
- VERSION = "0.7.1"
4
+ VERSION = "0.7.2"
5
5
  end
data/lib/linzer.rb CHANGED
@@ -59,7 +59,12 @@ module Linzer
59
59
 
60
60
  def verify!(request_or_response, key: nil, no_older_than: 900)
61
61
  message = Message.new(request_or_response)
62
- signature = Signature.build(message.headers.slice("signature", "signature-input"))
62
+ signature_headers = {}
63
+ %w[signature-input signature].each do |name|
64
+ value = message.header(name)
65
+ signature_headers[name] = value if value
66
+ end
67
+ signature = Signature.build(signature_headers)
63
68
  keyid = signature.parameters["keyid"]
64
69
  raise Linzer::Error, "key not found" if !key && !keyid
65
70
  verify_key = block_given? ? (yield keyid) : key
@@ -67,7 +67,12 @@ module Rack
67
67
  signature_opts[:label] = label if label
68
68
 
69
69
  @message = Linzer::Message.new(request)
70
- signature = Linzer::Signature.build(@message.headers, **signature_opts)
70
+ signature_headers = {}
71
+ %w[signature-input signature].each do |name|
72
+ value = @message.header(name)
73
+ signature_headers[name] = value if value
74
+ end
75
+ signature = Linzer::Signature.build(signature_headers, **signature_opts)
71
76
  request.env["rack.signature"] = signature
72
77
  signature
73
78
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: linzer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Landaeta