0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 12:20:24 +00:00

URL decode paths

This fixes issue #33.
This commit is contained in:
Loïc Hoguin 2011-07-20 22:07:35 +02:00
parent fa20273b37
commit 503a0c7662

View file

@ -56,10 +56,11 @@ split_path(Path) ->
-spec do_split_path(binary(), <<_:8>>) -> path_tokens(). -spec do_split_path(binary(), <<_:8>>) -> path_tokens().
do_split_path(RawPath, Separator) -> do_split_path(RawPath, Separator) ->
case binary:split(RawPath, Separator, [global, trim]) of EncodedPath = case binary:split(RawPath, Separator, [global, trim]) of
[<<>>|Path] -> Path; [<<>>|Path] -> Path;
Path -> Path Path -> Path
end. end,
[quoted:from_url(Token) || Token <- EncodedPath].
%% @doc Match hostname tokens and path tokens against dispatch rules. %% @doc Match hostname tokens and path tokens against dispatch rules.
%% %%
@ -214,7 +215,10 @@ split_path_test_() ->
{<<"/users?a">>, [<<"users">>], <<"/users">>, <<"a">>}, {<<"/users?a">>, [<<"users">>], <<"/users">>, <<"a">>},
{<<"/users/42/friends?a=b&c=d&e=notsure?whatever">>, {<<"/users/42/friends?a=b&c=d&e=notsure?whatever">>,
[<<"users">>, <<"42">>, <<"friends">>], [<<"users">>, <<"42">>, <<"friends">>],
<<"/users/42/friends">>, <<"a=b&c=d&e=notsure?whatever">>} <<"/users/42/friends">>, <<"a=b&c=d&e=notsure?whatever">>},
{<<"/users/a+b/c%21d?e+f=g+h">>,
[<<"users">>, <<"a b">>, <<"c!d">>],
<<"/users/a+b/c%21d">>, <<"e+f=g+h">>}
], ],
[{P, fun() -> {R, RawP, Qs} = split_path(P) end} [{P, fun() -> {R, RawP, Qs} = split_path(P) end}
|| {P, R, RawP, Qs} <- Tests]. || {P, R, RawP, Qs} <- Tests].