mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-28 16:34:13 +01:00
Move ejabberd_http:url_encode/1 to 'misc' module
This commit is contained in:
parent
7f5796fe31
commit
a2e1f5c882
@ -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;
|
||||||
|
@ -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,
|
||||||
|
37
src/misc.erl
37
src/misc.erl
@ -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(
|
||||||
|
@ -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">>).
|
||||||
|
@ -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>>).
|
||||||
|
Loading…
Reference in New Issue
Block a user