提交 df40d79f 编写于 作者: P Piotr Sarnacki

Don't raise an error if http auth token isn't well formatted

When someone sends malformed authorization header, like:

    Authorization: Token foobar

given token should be just ignored and resource should not be authorized,
instead of raising error. Before this patch controller would return 401 header
only for well formed tokens, like:

    Authorization: Token token=foobar

and would return 500 in former case.
上级 afa68eb1
......@@ -436,10 +436,12 @@ def token_and_options(request)
values = Hash[$1.split(',').map do |value|
value.strip! # remove any spaces between commas and values
key, value = value.split(/\=\"?/) # split key=value pairs
value.chomp!('"') # chomp trailing " in value
value.gsub!(/\\\"/, '"') # unescape remaining quotes
[key, value]
end]
if value
value.chomp!('"') # chomp trailing " in value
value.gsub!(/\\\"/, '"') # unescape remaining quotes
[key, value]
end
end.compact]
[values.delete("token"), values.with_indifferent_access]
end
end
......
......@@ -79,6 +79,14 @@ def authenticate_long_credentials
end
end
test "authentication request with badly formatted header" do
@request.env['HTTP_AUTHORIZATION'] = "Token foobar"
get :index
assert_response :unauthorized
assert_equal "HTTP Token: Access denied.\n", @response.body, "Authentication header was not properly parsed"
end
test "authentication request without credential" do
get :display
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册