@@ -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