aws-sdk-sns 1.124.1 → 1.125.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 +4 -4
- data/CHANGELOG.md +7 -0
- data/VERSION +1 -1
- data/lib/aws-sdk-sns/client.rb +1 -1
- data/lib/aws-sdk-sns/message_verifier.rb +54 -17
- data/lib/aws-sdk-sns.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8c4de1c6e682bc02fa66c6af6759f14f18ba58cc9a1c1943380e75d26d12db4c
|
|
4
|
+
data.tar.gz: f5f754bdf50a61fe76445323b484ca3a8ee8da26be705d69f1943dd058c0e5cf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 642eaac779964be128f5ab179ef664d9e1330b1a5145d94190062f0a07d36e815206ef3303ec8e8707d8d640ba6b01c8e86dac86c99f868b306989897bef9162
|
|
7
|
+
data.tar.gz: e6318b84a43429767bdd750a7e4b99acda1daa9b814a370a3ee960b57618e12493aac5f2b9cd9663edd88c508b59be51479d5fdc8f6971ae50c48edb84c928c6
|
data/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
Unreleased Changes
|
|
2
2
|
------------------
|
|
3
3
|
|
|
4
|
+
1.125.0 (2026-10-28)
|
|
5
|
+
------------------
|
|
6
|
+
|
|
7
|
+
* Feature - Code Generated Changes, see `./build_tools` or `aws-sdk-core`'s CHANGELOG.md for details.
|
|
8
|
+
|
|
9
|
+
* Issue - Reject SNS messages with an unsupported `Type` or malformed signed fields in `Aws::SNS::MessageVerifier`.
|
|
10
|
+
|
|
4
11
|
1.124.1 (2026-10-26)
|
|
5
12
|
------------------
|
|
6
13
|
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.125.0
|
data/lib/aws-sdk-sns/client.rb
CHANGED
|
@@ -23,17 +23,23 @@ module Aws
|
|
|
23
23
|
|
|
24
24
|
class VerificationError < StandardError; end
|
|
25
25
|
|
|
26
|
+
# Signable fields per message type.
|
|
26
27
|
# @api private
|
|
27
|
-
|
|
28
|
-
'Message
|
|
29
|
-
'
|
|
30
|
-
|
|
31
|
-
'
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
28
|
+
SIGNABLE_KEYS_BY_TYPE = {
|
|
29
|
+
'Notification' => %w[Message MessageId Subject Timestamp TopicArn Type].freeze,
|
|
30
|
+
'SubscriptionConfirmation' =>
|
|
31
|
+
%w[Message MessageId SubscribeURL Timestamp Token TopicArn Type].freeze,
|
|
32
|
+
'UnsubscribeConfirmation' =>
|
|
33
|
+
%w[Message MessageId SubscribeURL Timestamp Token TopicArn Type].freeze
|
|
34
|
+
}.freeze
|
|
35
|
+
|
|
36
|
+
# Metadata fields that must be present as non-empty strings.
|
|
37
|
+
# @api private
|
|
38
|
+
REQUIRED_KEYS = %w[MessageId Timestamp TopicArn].freeze
|
|
39
|
+
|
|
40
|
+
# Only Message may contain the newline used as the field delimiter.
|
|
41
|
+
# @api private
|
|
42
|
+
NEWLINE_SAFE_KEY = 'Message'
|
|
37
43
|
|
|
38
44
|
# @api private
|
|
39
45
|
AWS_HOSTNAMES = [
|
|
@@ -93,6 +99,41 @@ module Aws
|
|
|
93
99
|
unless msg['Signature'].is_a?(String) && msg['SigningCertURL'].is_a?(String)
|
|
94
100
|
raise VerificationError, 'the Signature and SigningCertURL must be strings'
|
|
95
101
|
end
|
|
102
|
+
|
|
103
|
+
verify_signable_fields!(msg)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def verify_signable_fields!(msg)
|
|
107
|
+
keys = SIGNABLE_KEYS_BY_TYPE[msg['Type']]
|
|
108
|
+
unless keys
|
|
109
|
+
raise VerificationError, 'the message Type is not supported'
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
verify_required_keys!(msg)
|
|
113
|
+
verify_field_values!(msg, keys)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def verify_required_keys!(msg)
|
|
117
|
+
REQUIRED_KEYS.each do |key|
|
|
118
|
+
value = msg[key]
|
|
119
|
+
next if value.is_a?(String) && !value.empty?
|
|
120
|
+
|
|
121
|
+
raise VerificationError, "the #{key} must be a non-empty string"
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def verify_field_values!(msg, keys)
|
|
126
|
+
keys.each do |key|
|
|
127
|
+
value = msg[key]
|
|
128
|
+
next if value.nil?
|
|
129
|
+
|
|
130
|
+
unless value.is_a?(String)
|
|
131
|
+
raise VerificationError, "the #{key} must be a string"
|
|
132
|
+
end
|
|
133
|
+
if key != NEWLINE_SAFE_KEY && value.include?("\n")
|
|
134
|
+
raise VerificationError, "the #{key} must not contain newlines"
|
|
135
|
+
end
|
|
136
|
+
end
|
|
96
137
|
end
|
|
97
138
|
|
|
98
139
|
def is_from_lambda(message)
|
|
@@ -130,14 +171,10 @@ module Aws
|
|
|
130
171
|
end
|
|
131
172
|
|
|
132
173
|
def canonical_string(message)
|
|
133
|
-
|
|
134
|
-
SIGNABLE_KEYS.each do |key|
|
|
174
|
+
SIGNABLE_KEYS_BY_TYPE.fetch(message['Type']).filter_map do |key|
|
|
135
175
|
value = message[key]
|
|
136
|
-
unless value.nil?
|
|
137
|
-
|
|
138
|
-
end
|
|
139
|
-
end
|
|
140
|
-
parts.join
|
|
176
|
+
"#{key}\n#{value}\n" unless value.nil? || value.empty?
|
|
177
|
+
end.join
|
|
141
178
|
end
|
|
142
179
|
|
|
143
180
|
def public_key(message)
|
data/lib/aws-sdk-sns.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: aws-sdk-sns
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.125.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Amazon Web Services
|
|
@@ -18,7 +18,7 @@ dependencies:
|
|
|
18
18
|
version: '3'
|
|
19
19
|
- - ">="
|
|
20
20
|
- !ruby/object:Gem::Version
|
|
21
|
-
version: 3.
|
|
21
|
+
version: 3.262.0
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -28,7 +28,7 @@ dependencies:
|
|
|
28
28
|
version: '3'
|
|
29
29
|
- - ">="
|
|
30
30
|
- !ruby/object:Gem::Version
|
|
31
|
-
version: 3.
|
|
31
|
+
version: 3.262.0
|
|
32
32
|
- !ruby/object:Gem::Dependency
|
|
33
33
|
name: aws-sigv4
|
|
34
34
|
requirement: !ruby/object:Gem::Requirement
|