25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-11-24 16:23:40 +01:00

Move ejabberd_http:url_encode/1 to 'misc' module

This commit is contained in:
Holger Weiss 2018-04-03 00:12:43 +02:00
parent 7f5796fe31
commit a2e1f5c882
5 changed files with 41 additions and 41 deletions

View File

@ -31,7 +31,7 @@
%% External exports %% External exports
-export([start/2, start_link/2, become_controller/1, -export([start/2, start_link/2, become_controller/1,
socket_type/0, receive_headers/1, url_encode/1, socket_type/0, receive_headers/1,
transform_listen_option/2, listen_opt_type/1]). transform_listen_option/2, listen_opt_type/1]).
-export([init/2, opt_type/1]). -export([init/2, opt_type/1]).
@ -822,41 +822,6 @@ parse_urlencoded(<<>>, Last, Cur, _State) ->
[{Last, Cur}]; [{Last, Cur}];
parse_urlencoded(undefined, _, _, _) -> []. parse_urlencoded(undefined, _, _, _) -> [].
url_encode(A) ->
url_encode(A, <<>>).
url_encode(<<H:8, T/binary>>, Acc) when
(H >= $a andalso H =< $z) orelse
(H >= $A andalso H =< $Z) orelse
(H >= $0 andalso H =< $9) orelse
H == $_ orelse
H == $. orelse
H == $- orelse
H == $/ orelse
H == $: ->
url_encode(T, <<Acc/binary, H>>);
url_encode(<<H:8, T/binary>>, Acc) ->
case integer_to_hex(H) of
[X, Y] -> url_encode(T, <<Acc/binary, $%, X, Y>>);
[X] -> url_encode(T, <<Acc/binary, $%, $0, X>>)
end;
url_encode(<<>>, Acc) ->
Acc.
integer_to_hex(I) ->
case catch erlang:integer_to_list(I, 16) of
{'EXIT', _} -> old_integer_to_hex(I);
Int -> Int
end.
old_integer_to_hex(I) when I < 10 -> integer_to_list(I);
old_integer_to_hex(I) when I < 16 -> [I - 10 + $A];
old_integer_to_hex(I) when I >= 16 ->
N = trunc(I / 16),
old_integer_to_hex(N) ++ old_integer_to_hex(I rem 16).
% The following code is mostly taken from yaws_ssl.erl % The following code is mostly taken from yaws_ssl.erl
toupper(C) when C >= $a andalso C =< $z -> C - 32; toupper(C) when C >= $a andalso C =< $z -> C - 32;

View File

@ -1240,7 +1240,7 @@ list_given_users(Host, Users, Prefix, Lang, URLFunc) ->
?XE(<<"tr">>, ?XE(<<"tr">>,
[?XE(<<"td">>, [?XE(<<"td">>,
[?AC((URLFunc({user, Prefix, [?AC((URLFunc({user, Prefix,
ejabberd_http:url_encode(User), misc:url_encode(User),
Server})), Server})),
(us_to_list(US)))]), (us_to_list(US)))]),
?XE(<<"td">>, FQueueLen), ?XE(<<"td">>, FQueueLen),
@ -1319,7 +1319,7 @@ list_online_users(Host, _Lang) ->
SUsers = lists:usort(Users), SUsers = lists:usort(Users),
lists:flatmap(fun ({_S, U} = SU) -> lists:flatmap(fun ({_S, U} = SU) ->
[?AC(<<"../user/", [?AC(<<"../user/",
(ejabberd_http:url_encode(U))/binary, "/">>, (misc:url_encode(U))/binary, "/">>,
(su_to_list(SU))), (su_to_list(SU))),
?BR] ?BR]
end, end,

View File

@ -29,7 +29,7 @@
%% API %% API
-export([tolower/1, term_to_base64/1, base64_to_term/1, ip_to_list/1, -export([tolower/1, term_to_base64/1, base64_to_term/1, ip_to_list/1,
hex_to_bin/1, hex_to_base64/1, expand_keyword/3, hex_to_bin/1, hex_to_base64/1, url_encode/1, expand_keyword/3,
atom_to_binary/1, binary_to_atom/1, tuple_to_binary/1, atom_to_binary/1, binary_to_atom/1, tuple_to_binary/1,
l2i/1, i2l/1, i2l/2, expr_to_term/1, term_to_expr/1, l2i/1, i2l/1, i2l/2, expr_to_term/1, term_to_expr/1,
now_to_usec/1, usec_to_now/1, encode_pid/1, decode_pid/2, now_to_usec/1, usec_to_now/1, encode_pid/1, decode_pid/2,
@ -105,6 +105,10 @@ hex_to_bin([H1, H2 | T], Acc) ->
hex_to_base64(Hex) -> hex_to_base64(Hex) ->
base64:encode(hex_to_bin(Hex)). base64:encode(hex_to_bin(Hex)).
-spec url_encode(binary()) -> binary().
url_encode(A) ->
url_encode(A, <<>>).
-spec expand_keyword(binary(), binary(), binary()) -> binary(). -spec expand_keyword(binary(), binary(), binary()) -> binary().
expand_keyword(Keyword, Input, Replacement) -> expand_keyword(Keyword, Input, Replacement) ->
Parts = binary:split(Input, Keyword, [global]), Parts = binary:split(Input, Keyword, [global]),
@ -262,6 +266,37 @@ read_js(File) ->
%%%=================================================================== %%%===================================================================
%%% Internal functions %%% Internal functions
%%%=================================================================== %%%===================================================================
-spec url_encode(binary(), binary()) -> binary().
url_encode(<<H:8, T/binary>>, Acc) when
(H >= $a andalso H =< $z) orelse
(H >= $A andalso H =< $Z) orelse
(H >= $0 andalso H =< $9) orelse
H == $_ orelse
H == $. orelse
H == $- orelse
H == $/ orelse
H == $: ->
url_encode(T, <<Acc/binary, H>>);
url_encode(<<H:8, T/binary>>, Acc) ->
case integer_to_hex(H) of
[X, Y] -> url_encode(T, <<Acc/binary, $%, X, Y>>);
[X] -> url_encode(T, <<Acc/binary, $%, $0, X>>)
end;
url_encode(<<>>, Acc) ->
Acc.
integer_to_hex(I) ->
case catch erlang:integer_to_list(I, 16) of
{'EXIT', _} -> old_integer_to_hex(I);
Int -> Int
end.
old_integer_to_hex(I) when I < 10 -> integer_to_list(I);
old_integer_to_hex(I) when I < 16 -> [I - 10 + $A];
old_integer_to_hex(I) when I >= 16 ->
N = trunc(I / 16),
old_integer_to_hex(N) ++ old_integer_to_hex(I rem 16).
-spec set_node_id(string(), binary()) -> pid(). -spec set_node_id(string(), binary()) -> pid().
set_node_id(PidStr, NodeBin) -> set_node_id(PidStr, NodeBin) ->
ExtPidStr = erlang:pid_to_list( ExtPidStr = erlang:pid_to_list(

View File

@ -31,7 +31,7 @@
-define(SERVICE_REQUEST_TIMEOUT, 5000). % 5 seconds. -define(SERVICE_REQUEST_TIMEOUT, 5000). % 5 seconds.
-define(SLOT_TIMEOUT, 18000000). % 5 hours. -define(SLOT_TIMEOUT, 18000000). % 5 hours.
-define(FORMAT(Error), file:format_error(Error)). -define(FORMAT(Error), file:format_error(Error)).
-define(URL_ENC(URL), binary_to_list(ejabberd_http:url_encode(URL))). -define(URL_ENC(URL), binary_to_list(misc:url_encode(URL))).
-define(ADDR_TO_STR(IP), ejabberd_config:may_hide_data(misc:ip_to_list(IP))). -define(ADDR_TO_STR(IP), ejabberd_config:may_hide_data(misc:ip_to_list(IP))).
-define(STR_TO_INT(Str, B), binary_to_integer(iolist_to_binary(Str), B)). -define(STR_TO_INT(Str, B), binary_to_integer(iolist_to_binary(Str), B)).
-define(DEFAULT_CONTENT_TYPE, <<"application/octet-stream">>). -define(DEFAULT_CONTENT_TYPE, <<"application/octet-stream">>).

View File

@ -172,7 +172,7 @@ url(Server, Path, Params) ->
Base = base_url(Server, Path), Base = base_url(Server, Path),
[<<$&, ParHead/binary>> | ParTail] = [<<$&, ParHead/binary>> | ParTail] =
[<<"&", (iolist_to_binary(Key))/binary, "=", [<<"&", (iolist_to_binary(Key))/binary, "=",
(ejabberd_http:url_encode(Value))/binary>> (misc:url_encode(Value))/binary>>
|| {Key, Value} <- Params], || {Key, Value} <- Params],
Tail = iolist_to_binary([ParHead | ParTail]), Tail = iolist_to_binary([ParHead | ParTail]),
binary_to_list(<<Base/binary, $?, Tail/binary>>). binary_to_list(<<Base/binary, $?, Tail/binary>>).