3
3
require "base64"
4
4
require_relative "core_ext/object/blank"
5
5
require_relative "security_utils"
6
+ require_relative "messages/metadata"
6
7
7
8
module ActiveSupport
8
9
# +MessageVerifier+ makes it easy to generate and verify messages which are
@@ -79,11 +80,11 @@ def valid_message?(signed_message)
79
80
#
80
81
# incompatible_message = "test--dad7b06c94abba8d46a15fafaef56c327665d5ff"
81
82
# verifier.verified(incompatible_message) # => TypeError: incompatible marshal file format
82
- def verified ( signed_message )
83
+ def verified ( signed_message , purpose : nil )
83
84
if valid_message? ( signed_message )
84
85
begin
85
86
data = signed_message . split ( "--" . freeze ) [ 0 ]
86
- @serializer . load ( decode ( data ) )
87
+ Messages :: Metadata . verify ( @serializer . load ( decode ( data ) ) , purpose )
87
88
rescue ArgumentError => argument_error
88
89
return if argument_error . message . include? ( "invalid base64" )
89
90
raise
@@ -103,8 +104,8 @@ def verified(signed_message)
103
104
#
104
105
# other_verifier = ActiveSupport::MessageVerifier.new 'd1ff3r3nt-s3Krit'
105
106
# other_verifier.verify(signed_message) # => ActiveSupport::MessageVerifier::InvalidSignature
106
- def verify ( signed_message )
107
- verified ( signed_message ) || raise ( InvalidSignature )
107
+ def verify ( signed_message , purpose : nil )
108
+ verified ( signed_message , purpose : purpose ) || raise ( InvalidSignature )
108
109
end
109
110
110
111
# Generates a signed message for the provided value.
@@ -114,8 +115,8 @@ def verify(signed_message)
114
115
#
115
116
# verifier = ActiveSupport::MessageVerifier.new 's3Krit'
116
117
# verifier.generate 'a private message' # => "BAhJIhRwcml2YXRlLW1lc3NhZ2UGOgZFVA==--e2d724331ebdee96a10fb99b089508d1c72bd772"
117
- def generate ( value )
118
- data = encode ( @serializer . dump ( value ) )
118
+ def generate ( value , expires_at : nil , expires_in : nil , purpose : nil )
119
+ data = encode ( @serializer . dump ( Messages :: Metadata . wrap ( value , expires_at : expires_at , expires_in : expires_in , purpose : purpose ) ) )
119
120
"#{ data } --#{ generate_digest ( data ) } "
120
121
end
121
122
0 commit comments