diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2014-12-04 13:28:47 -0200 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2014-12-04 13:28:47 -0200 |
commit | fc3dbf452e60aa919db77806a50318193469c9c4 (patch) | |
tree | fd0944ce25958fbf9567df5b2c3cf8afdeeffbce | |
parent | 28beb286b374cd706e5d847b7980d2d44f3d1a45 (diff) | |
parent | 9fd4fbd1fb74f1eafed456875e39164ae0f6d7c8 (diff) | |
download | rails-fc3dbf452e60aa919db77806a50318193469c9c4.tar.gz rails-fc3dbf452e60aa919db77806a50318193469c9c4.tar.bz2 rails-fc3dbf452e60aa919db77806a50318193469c9c4.zip |
Merge pull request #17905 from claudiob/add-doc-to-message-verifier
Add documentation to MessageVerifier
-rw-r--r-- | activesupport/lib/active_support/message_verifier.rb | 54 |
1 files changed, 50 insertions, 4 deletions
diff --git a/activesupport/lib/active_support/message_verifier.rb b/activesupport/lib/active_support/message_verifier.rb index 2c86190e7f..4ff7cf9617 100644 --- a/activesupport/lib/active_support/message_verifier.rb +++ b/activesupport/lib/active_support/message_verifier.rb @@ -34,7 +34,15 @@ module ActiveSupport @serializer = options[:serializer] || Marshal end - # FIXME: Document this method + # Checks if a signed message could have been generated by signing an object + # with the +MessageVerifier+'s secret. + # + # verifier = ActiveSupport::MessageVerifier.new 's3Krit' + # signed_message = verifier.generate 'a private message' + # verifier.valid_message?(signed_message) # => true + # + # tampered_message = signed_message.chop # editing the message invalidates the signature + # verifier.valid_message?(tampered_message) # => false def valid_message?(signed_message) return if signed_message.blank? @@ -42,7 +50,28 @@ module ActiveSupport data.present? && digest.present? && ActiveSupport::SecurityUtils.secure_compare(digest, generate_digest(data)) end - # FIXME: Document this method + # Decodes the signed message using the +MessageVerifier+'s secret. + # + # verifier = ActiveSupport::MessageVerifier.new 's3Krit' + # + # signed_message = verifier.generate 'a private message' + # verifier.verified(signed_message) #=> 'a private message' + # + # Returns +nil+ if the message was not signed with the same secret. + # + # other_verifier = ActiveSupport::MessageVerifier.new 'd1ff3r3nt-s3Krit' + # other_verifier.verified(signed_message) #=> nil + # + # Returns +nil+ if the message is not Base64-encoded. + # + # invalid_message = "f--46a0120593880c733a53b6dad75b42ddc1c8996d" + # verifier.verified(invalid_message) #=> nil + # + # Raises any error raised while decoding the signed message. + # + # incompatible_message = "test--dad7b06c94abba8d46a15fafaef56c327665d5ff" + # verifier.verified(incompatible_message) #=> TypeError: incompatible marshal file format + # def verified(signed_message) if valid_message?(signed_message) begin @@ -55,12 +84,29 @@ module ActiveSupport end end - # FIXME: Document this method + # Decodes the signed message using the +MessageVerifier+'s secret. + # + # verifier = ActiveSupport::MessageVerifier.new 's3Krit' + # signed_message = verifier.generate 'a private message' + # + # verifier.verify(signed_message) #=> 'a private message' + # + # Raises +InvalidSignature+ if the message was not signed with the same + # secret or was not Base64-encoded. + # + # other_verifier = ActiveSupport::MessageVerifier.new 'd1ff3r3nt-s3Krit' + # other_verifier.verified(signed_message) #=> ActiveSupport::MessageVerifier::InvalidSignature def verify(signed_message) verified(signed_message) || raise(InvalidSignature) end - # FIXME: Document this method + # Generates a signed message for the provided value. + # + # The message is signed with the +MessageVerifier+'s secret. Without knowing + # the secret, the original value cannot be extracted from the message. + # + # verifier = ActiveSupport::MessageVerifier.new 's3Krit' + # verifier.generate 'a private message' # => "BAhJIhRwcml2YXRlLW1lc3NhZ2UGOgZFVA==--e2d724331ebdee96a10fb99b089508d1c72bd772" def generate(value) data = encode(@serializer.dump(value)) "#{data}--#{generate_digest(data)}" |