akami 1.3.2 → 1.3.3

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: 20bb54b460119624acb0737c62c1c0b82825ace9886a239e2a3cefd8461635c7
4
- data.tar.gz: c5fb01bbaf55b70be8627e2f9ee6a40cd2e6680ee2b0cee65d38eedd78961a48
3
+ metadata.gz: c1103cb0692c129241fbfd8360ab1dcfc96157c9ad7f2a28987ea3848ec06ab2
4
+ data.tar.gz: d2e9cfc6c384c697be541aceda1bb3a4dc5e9654db159eca3fbc795dfc5d2671
5
5
  SHA512:
6
- metadata.gz: 787c578411ef161d8109708b1d498743b9bf7a24e840566209f946179b9ffe4ce0d20ce2236a615973108ffb578423bad481cc0d11301ee4617762d19cc24308
7
- data.tar.gz: 6a421ce03eda89cf332b767e76d2c89dbd5577ecc36dc08d4d696f3ee8e1f84a6160bfd4fdba32f6bd30d3aaacc62cb3f7d07e7c0b7363bce389a198455a7a8e
6
+ metadata.gz: c3bd5f7aa12bc379c4434dc880a23f9897a722ae2dd09352fb50a0bf807e932abc26d2703dfd2bcea463216fb746d499ce2eb80cff978b1feeb23404749a0253
7
+ data.tar.gz: 84f9de77fef2521fa98df2c52f5e32b71f72b909da82f77a586e3aa746f8883610983b712c7ba11ff7833c409e72d243762358dfd6a46eead757ec9938b607e7
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 1.3.3 (2024-02-13)
2
+
3
+ * Explicitly declare base64 dep in gemfile (useful for testing against ruby-head).
4
+
1
5
  ## 1.3.2 (2024-01-09)
2
6
 
3
7
  * Stop patching Hash [#35](https://github.com/savonrb/akami/pull/35)
data/lib/akami/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Akami
2
2
 
3
- VERSION = '1.3.2'
3
+ VERSION = '1.3.3'
4
4
 
5
5
  end
data/lib/akami/wsse.rb CHANGED
@@ -90,25 +90,24 @@ module Akami
90
90
 
91
91
  # Returns the XML for a WSSE header.
92
92
  def to_xml
93
- if signature? and signature.have_document?
94
- Gyoku.xml wsse_signature.merge!(hash)
95
- elsif username_token? && timestamp?
96
- Gyoku.xml wsse_username_token.merge!(wsu_timestamp) {
97
- |key, v1, v2| v1.merge!(v2) {
98
- |key, v1, v2| v1.merge!(v2)
99
- }
100
- }
101
- elsif username_token?
102
- Gyoku.xml wsse_username_token.merge!(hash)
103
- elsif timestamp?
104
- Gyoku.xml wsu_timestamp.merge!(hash)
105
- else
106
- ""
107
- end
93
+ h = wsse_signature if signature? && signature.have_document?
94
+ h = merge_hashes_with_keys(h, wsu_timestamp) if timestamp?
95
+ h = merge_hashes_with_keys(h, wsse_username_token) if username_token?
96
+
97
+ return '' unless h
98
+ Gyoku.xml h
108
99
  end
109
100
 
110
101
  private
111
102
 
103
+ def merge_hashes_with_keys(hash_one, hash_two)
104
+ return hash_two unless hash_one
105
+ keys = hash_one["wsse:Security"][:order!] | hash_two["wsse:Security"][:order!]
106
+ Akami::HashHelper.deep_merge!(hash_one, hash_two)
107
+ hash_one["wsse:Security"][:order!] = keys
108
+ hash_one
109
+ end
110
+
112
111
  # Returns a Hash containing wsse:UsernameToken details.
113
112
  def wsse_username_token
114
113
  if digest?
@@ -135,7 +134,7 @@ module Akami
135
134
  # First key/value is tag/hash
136
135
  tag, hash = signature_hash.shift
137
136
 
138
- security_hash nil, tag, hash, signature_hash
137
+ security_hash nil, tag, hash, signature_hash, true
139
138
  end
140
139
 
141
140
  # Returns a Hash containing wsu:Timestamp details.
@@ -147,21 +146,20 @@ module Akami
147
146
 
148
147
  # Returns a Hash containing wsse/wsu Security details for a given
149
148
  # +namespace+, +tag+ and +hash+.
150
- def security_hash(namespace, tag, hash, extra_info = {})
149
+ def security_hash(namespace, tag, hash, extra_info = {}, signature_request=false)
151
150
  key = [namespace, tag].compact.join(":")
152
151
 
153
152
  sec_hash = {
154
153
  "wsse:Security" => {
155
- key => hash
154
+ key => hash,
155
+ :order! => [key]
156
156
  },
157
157
  :attributes! => { "wsse:Security" => { "xmlns:wsse" => WSE_NAMESPACE } }
158
158
  }
159
159
 
160
- unless extra_info.empty?
161
- sec_hash["wsse:Security"].merge!(extra_info)
162
- end
160
+ sec_hash["wsse:Security"].merge!(extra_info) unless extra_info.empty?
163
161
 
164
- if signature?
162
+ if signature_request
165
163
  sec_hash[:attributes!].merge!("soapenv:mustUnderstand" => "1")
166
164
  else
167
165
  sec_hash["wsse:Security"].merge!(:attributes! => { key => { "wsu:Id" => "#{tag}-#{count}", "xmlns:wsu" => WSU_NAMESPACE } })
@@ -201,6 +199,5 @@ module Akami
201
199
  def hash
202
200
  @hash ||= Hash.new { |h, k| h[k] = Hash.new(&h.default_proc) }
203
201
  end
204
-
205
202
  end
206
203
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: akami
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Harrington
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-10 00:00:00.000000000 Z
11
+ date: 2024-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gyoku
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: base64
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -112,7 +126,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
112
126
  requirements:
113
127
  - - ">="
114
128
  - !ruby/object:Gem::Version
115
- version: 2.7.0
129
+ version: 3.0.0
116
130
  required_rubygems_version: !ruby/object:Gem::Requirement
117
131
  requirements:
118
132
  - - ">="