Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
3bf3653a
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
3bf3653a
编写于
7月 19, 2017
作者:
A
Assain
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add metadata support to message verifier
上级
5c16dd35
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
48 addition
and
6 deletion
+48
-6
activesupport/lib/active_support/message_verifier.rb
activesupport/lib/active_support/message_verifier.rb
+7
-6
activesupport/test/message_verifier_test.rb
activesupport/test/message_verifier_test.rb
+41
-0
未找到文件。
activesupport/lib/active_support/message_verifier.rb
浏览文件 @
3bf3653a
...
...
@@ -3,6 +3,7 @@
require
"base64"
require_relative
"core_ext/object/blank"
require_relative
"security_utils"
require_relative
"messages/metadata"
module
ActiveSupport
# +MessageVerifier+ makes it easy to generate and verify messages which are
...
...
@@ -79,11 +80,11 @@ def valid_message?(signed_message)
#
# incompatible_message = "test--dad7b06c94abba8d46a15fafaef56c327665d5ff"
# verifier.verified(incompatible_message) # => TypeError: incompatible marshal file format
def
verified
(
signed_message
)
def
verified
(
signed_message
,
purpose:
nil
)
if
valid_message?
(
signed_message
)
begin
data
=
signed_message
.
split
(
"--"
.
freeze
)[
0
]
@serializer
.
load
(
decode
(
data
)
)
Messages
::
Metadata
.
verify
(
@serializer
.
load
(
decode
(
data
)),
purpose
)
rescue
ArgumentError
=>
argument_error
return
if
argument_error
.
message
.
include?
(
"invalid base64"
)
raise
...
...
@@ -103,8 +104,8 @@ def verified(signed_message)
#
# other_verifier = ActiveSupport::MessageVerifier.new 'd1ff3r3nt-s3Krit'
# other_verifier.verify(signed_message) # => ActiveSupport::MessageVerifier::InvalidSignature
def
verify
(
signed_message
)
verified
(
signed_message
)
||
raise
(
InvalidSignature
)
def
verify
(
signed_message
,
purpose:
nil
)
verified
(
signed_message
,
purpose:
purpose
)
||
raise
(
InvalidSignature
)
end
# Generates a signed message for the provided value.
...
...
@@ -114,8 +115,8 @@ def verify(signed_message)
#
# verifier = ActiveSupport::MessageVerifier.new 's3Krit'
# verifier.generate 'a private message' # => "BAhJIhRwcml2YXRlLW1lc3NhZ2UGOgZFVA==--e2d724331ebdee96a10fb99b089508d1c72bd772"
def
generate
(
value
)
data
=
encode
(
@serializer
.
dump
(
value
))
def
generate
(
value
,
expires_at:
nil
,
expires_in:
nil
,
purpose:
nil
)
data
=
encode
(
@serializer
.
dump
(
Messages
::
Metadata
.
wrap
(
value
,
expires_at:
expires_at
,
expires_in:
expires_in
,
purpose:
purpose
)
))
"
#{
data
}
--
#{
generate_digest
(
data
)
}
"
end
...
...
activesupport/test/message_verifier_test.rb
浏览文件 @
3bf3653a
...
...
@@ -4,6 +4,7 @@
require
"openssl"
require
"active_support/time"
require
"active_support/json"
require_relative
"metadata/shared_metadata_tests"
class
MessageVerifierTest
<
ActiveSupport
::
TestCase
class
JSONSerializer
...
...
@@ -84,4 +85,44 @@ def test_raise_error_when_secret_is_nil
end
assert_equal
"Secret should not be nil."
,
exception
.
message
end
def
test_backward_compatibility_messages_signed_without_metadata
signed_message
=
"BAh7BzoJc29tZUkiCWRhdGEGOgZFVDoIbm93SXU6CVRpbWUNIIAbgAAAAAAHOgtvZmZzZXRpADoJem9uZUkiCFVUQwY7BkY=--d03c52c91dfe4ccc5159417c660461bcce005e96"
assert_equal
@data
,
@verifier
.
verify
(
signed_message
)
end
end
class
MessageVerifierMetadataTest
<
ActiveSupport
::
TestCase
include
SharedMessageMetadataTests
setup
do
@verifier
=
ActiveSupport
::
MessageVerifier
.
new
(
"Hey, I'm a secret!"
,
verifier_options
)
end
private
def
generate
(
message
,
**
options
)
@verifier
.
generate
(
message
,
options
)
end
def
parse
(
message
,
**
options
)
@verifier
.
verified
(
message
,
options
)
end
def
verifier_options
Hash
.
new
end
end
class
MessageVerifierMetadataMarshalTest
<
MessageVerifierMetadataTest
private
def
verifier_options
{
serializer:
Marshal
}
end
end
class
MessageVerifierMetadataJSONTest
<
MessageVerifierMetadataTest
private
def
verifier_options
{
serializer:
MessageVerifierTest
::
JSONSerializer
.
new
}
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录