Skip to content

Commit 10fcbee

Browse files
Document MessageVerifier method options [ci-skip]
This documents the options on the methods themselves, so that the reader does not have to scan the class summary documentation for a specific option.
1 parent c7792a0 commit 10fcbee

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

activesupport/lib/active_support/message_verifier.rb

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,22 @@ def valid_message?(signed_message)
178178
#
179179
# incompatible_message = "test--dad7b06c94abba8d46a15fafaef56c327665d5ff"
180180
# verifier.verified(incompatible_message) # => TypeError: incompatible marshal file format
181+
#
182+
# ==== Options
183+
#
184+
# [+:purpose+]
185+
# The purpose that the message was generated with. If the purpose does not
186+
# match, +verified+ will return +nil+.
187+
#
188+
# message = verifier.generate("hello", purpose: "greeting")
189+
# verifier.verified(message, purpose: "greeting") # => "hello"
190+
# verifier.verified(message, purpose: "chatting") # => nil
191+
# verifier.verified(message) # => nil
192+
#
193+
# message = verifier.generate("bye")
194+
# verifier.verified(message) # => "bye"
195+
# verifier.verified(message, purpose: "greeting") # => nil
196+
#
181197
def verified(signed_message, purpose: nil, **)
182198
data, digest = get_data_and_digest_from(signed_message)
183199
if digest_matches_data?(digest, data)
@@ -203,6 +219,22 @@ def verified(signed_message, purpose: nil, **)
203219
#
204220
# other_verifier = ActiveSupport::MessageVerifier.new("different_secret")
205221
# other_verifier.verify(signed_message) # => ActiveSupport::MessageVerifier::InvalidSignature
222+
#
223+
# ==== Options
224+
#
225+
# [+:purpose+]
226+
# The purpose that the message was generated with. If the purpose does not
227+
# match, +verify+ will raise ActiveSupport::MessageVerifier::InvalidSignature.
228+
#
229+
# message = verifier.generate("hello", purpose: "greeting")
230+
# verifier.verify(message, purpose: "greeting") # => "hello"
231+
# verifier.verify(message, purpose: "chatting") # => raises InvalidSignature
232+
# verifier.verify(message) # => raises InvalidSignature
233+
#
234+
# message = verifier.generate("bye")
235+
# verifier.verify(message) # => "bye"
236+
# verifier.verify(message, purpose: "greeting") # => raises InvalidSignature
237+
#
206238
def verify(*args, **options)
207239
verified(*args, **options) || raise(InvalidSignature)
208240
end
@@ -214,6 +246,33 @@ def verify(*args, **options)
214246
#
215247
# verifier = ActiveSupport::MessageVerifier.new("secret")
216248
# verifier.generate("signed message") # => "BAhJIhNzaWduZWQgbWVzc2FnZQY6BkVU--f67d5f27c3ee0b8483cebf2103757455e947493b"
249+
#
250+
# ==== Options
251+
#
252+
# [+:expires_at+]
253+
# The datetime at which the message expires. After this datetime,
254+
# verification of the message will fail.
255+
#
256+
# message = verifier.generate("hello", expires_at: Time.now.tomorrow)
257+
# verifier.verified(message) # => "hello"
258+
# # 24 hours later...
259+
# verifier.verified(message) # => nil
260+
# verifier.verify(message) # => raises ActiveSupport::MessageVerifier::InvalidSignature
261+
#
262+
# [+:expires_in+]
263+
# The duration for which the message is valid. After this duration has
264+
# elapsed, verification of the message will fail.
265+
#
266+
# message = verifier.generate("hello", expires_in: 24.hours)
267+
# verifier.verified(message) # => "hello"
268+
# # 24 hours later...
269+
# verifier.verified(message) # => nil
270+
# verifier.verify(message) # => raises ActiveSupport::MessageVerifier::InvalidSignature
271+
#
272+
# [+:purpose+]
273+
# The purpose of the message. If specified, the same purpose must be
274+
# specified when verifying the message; otherwise, verification will fail.
275+
# (See #verified and #verify.)
217276
def generate(value, expires_at: nil, expires_in: nil, purpose: nil)
218277
data = encode(Messages::Metadata.wrap(@serializer.dump(value), expires_at: expires_at, expires_in: expires_in, purpose: purpose))
219278
"#{data}#{SEPARATOR}#{generate_digest(data)}"

0 commit comments

Comments
 (0)