simple_oauth 0.5.3 → 0.5.4
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 +6 -0
- data/lib/simple_oauth/signature.rb +27 -5
- data/lib/simple_oauth/version.rb +1 -1
- data/sig/simple_oauth/signature.rbs +6 -0
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8245692f23124570c69c39922493673741d0b63805aa68bad6bc36a10dfc873d
|
|
4
|
+
data.tar.gz: 371f536fbc9ce63a659b359887800b44aca7736f91720a3a17d1688c4afd9132
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 73639dcce60dff2674874af945f5c8f710475b6a18c5842fb14dd4ac0eb180659e885a8e4e2f3c7593b4de0d6aa7c46ce951f22f2af8ca23358e4580f2150383
|
|
7
|
+
data.tar.gz: 4dacc0d32fa47802f531c1f2b25ab6ec4d669ce1d6e3f31973194f05e8f1ea45982a380b52ae78e0d8cd6c523df94ad855aef781d08529728a332ae6c4876cdd
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [0.5.4] - 2026-11-14
|
|
2
|
+
|
|
3
|
+
### Changed
|
|
4
|
+
|
|
5
|
+
* Look up a signature method by the name it was registered under without allocating, so signing a request allocates at least 4 fewer objects and verifying one at least 6 fewer. Verifying without a `signature_method` now allocates fewer objects than in 0.5.1
|
|
6
|
+
|
|
1
7
|
## [0.5.3] - 2026-11-14
|
|
2
8
|
|
|
3
9
|
### Fixed
|
|
@@ -26,6 +26,10 @@ module SimpleOAuth
|
|
|
26
26
|
# Registry of signature method implementations
|
|
27
27
|
@registry = {}
|
|
28
28
|
|
|
29
|
+
# The registry key of each name a signature method was registered under, so a lookup by that
|
|
30
|
+
# name, as nearly every lookup is, needs no normalizing and allocates nothing
|
|
31
|
+
@names = {}
|
|
32
|
+
|
|
29
33
|
class << self
|
|
30
34
|
# Registers a custom signature method
|
|
31
35
|
#
|
|
@@ -47,7 +51,9 @@ module SimpleOAuth
|
|
|
47
51
|
# )
|
|
48
52
|
# end
|
|
49
53
|
def register(name, rsa: false, verify: nil, digest: DEFAULT_DIGEST, &block)
|
|
50
|
-
|
|
54
|
+
key = normalize_name(name)
|
|
55
|
+
@names[name] = key
|
|
56
|
+
@registry[key] = {implementation: block, rsa: rsa, verifier: verify, digest: digest}
|
|
51
57
|
end
|
|
52
58
|
|
|
53
59
|
# Checks if a signature method is registered
|
|
@@ -58,7 +64,7 @@ module SimpleOAuth
|
|
|
58
64
|
# @example
|
|
59
65
|
# SimpleOAuth::Signature.registered?("HMAC-SHA1") # => true
|
|
60
66
|
def registered?(name)
|
|
61
|
-
@registry.key?(
|
|
67
|
+
@registry.key?(registry_key(name))
|
|
62
68
|
end
|
|
63
69
|
|
|
64
70
|
# Returns list of registered signature method names
|
|
@@ -80,7 +86,7 @@ module SimpleOAuth
|
|
|
80
86
|
# SimpleOAuth::Signature.rsa?("RSA-SHA1") # => true
|
|
81
87
|
# SimpleOAuth::Signature.rsa?("HMAC-SHA1") # => false
|
|
82
88
|
def rsa?(name)
|
|
83
|
-
@registry.dig(
|
|
89
|
+
@registry.dig(registry_key(name), :rsa) || false
|
|
84
90
|
end
|
|
85
91
|
|
|
86
92
|
# Returns the hash algorithm a signature method signs with
|
|
@@ -136,7 +142,9 @@ module SimpleOAuth
|
|
|
136
142
|
# @example
|
|
137
143
|
# SimpleOAuth::Signature.unregister("HMAC-SHA512")
|
|
138
144
|
def unregister(name)
|
|
139
|
-
|
|
145
|
+
key = registry_key(name)
|
|
146
|
+
@names.delete_if { |_, registered| registered.eql?(key) }
|
|
147
|
+
@registry.delete(key)
|
|
140
148
|
end
|
|
141
149
|
|
|
142
150
|
# Resets the registry to only built-in methods (useful for testing)
|
|
@@ -147,6 +155,7 @@ module SimpleOAuth
|
|
|
147
155
|
# SimpleOAuth::Signature.reset!
|
|
148
156
|
def reset!
|
|
149
157
|
@registry.clear
|
|
158
|
+
@names.clear
|
|
150
159
|
register_builtin_methods
|
|
151
160
|
end
|
|
152
161
|
|
|
@@ -183,12 +192,25 @@ module SimpleOAuth
|
|
|
183
192
|
# @return [Hash] the registry entry
|
|
184
193
|
# @raise [ArgumentError] if the signature method is not registered
|
|
185
194
|
def fetch(name)
|
|
186
|
-
@registry.fetch(
|
|
195
|
+
@registry.fetch(registry_key(name)) do
|
|
187
196
|
raise ArgumentError, "Unknown signature method: #{name}. " \
|
|
188
197
|
"Registered methods: #{@registry.keys.join(", ")}"
|
|
189
198
|
end
|
|
190
199
|
end
|
|
191
200
|
|
|
201
|
+
# Finds the registry key for a signature method name
|
|
202
|
+
#
|
|
203
|
+
# A name a method was registered under is found in the index of those names. Any other
|
|
204
|
+
# spelling is normalized, without being added to the index, so names from received headers
|
|
205
|
+
# cannot grow it.
|
|
206
|
+
#
|
|
207
|
+
# @api private
|
|
208
|
+
# @param name [String] the signature method name
|
|
209
|
+
# @return [String] the registry key (lowercase, dashes to underscores)
|
|
210
|
+
def registry_key(name)
|
|
211
|
+
@names[name] || normalize_name(name)
|
|
212
|
+
end
|
|
213
|
+
|
|
192
214
|
# Normalizes signature method name for registry lookup
|
|
193
215
|
#
|
|
194
216
|
# @api private
|
data/lib/simple_oauth/version.rb
CHANGED
|
@@ -19,6 +19,9 @@ module SimpleOAuth
|
|
|
19
19
|
# Registry of signature method implementations (class-level instance variable)
|
|
20
20
|
self.@registry: Hash[String, registry_entry]
|
|
21
21
|
|
|
22
|
+
# The registry key of each name a signature method was registered under
|
|
23
|
+
self.@names: Hash[String | Symbol, String]
|
|
24
|
+
|
|
22
25
|
# Registers a custom signature method
|
|
23
26
|
def self.register: (String | Symbol name, ?rsa: bool, ?verify: verifier_block?, ?digest: String) { (untyped, String) -> String } -> void
|
|
24
27
|
|
|
@@ -57,6 +60,9 @@ module SimpleOAuth
|
|
|
57
60
|
# Looks up a registered signature method
|
|
58
61
|
def self.fetch: (String | Symbol name) -> registry_entry
|
|
59
62
|
|
|
63
|
+
# Finds the registry key for a signature method name
|
|
64
|
+
def self.registry_key: (String | Symbol name) -> String
|
|
65
|
+
|
|
60
66
|
# Normalizes signature method name for registry lookup
|
|
61
67
|
def self.normalize_name: (String | Symbol name) -> String
|
|
62
68
|
|