mirror of
https://github.com/processone/ejabberd.git
synced 2024-12-24 17:29:28 +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
|
||||
-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]).
|
||||
|
||||
-export([init/2, opt_type/1]).
|
||||
@ -822,41 +822,6 @@ parse_urlencoded(<<>>, Last, Cur, _State) ->
|
||||
[{Last, Cur}];
|
||||
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
|
||||
|
||||
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(<<"td">>,
|
||||
[?AC((URLFunc({user, Prefix,
|
||||
ejabberd_http:url_encode(User),
|
||||
misc:url_encode(User),
|
||||
Server})),
|
||||
(us_to_list(US)))]),
|
||||
?XE(<<"td">>, FQueueLen),
|
||||
@ -1319,7 +1319,7 @@ list_online_users(Host, _Lang) ->
|
||||
SUsers = lists:usort(Users),
|
||||
lists:flatmap(fun ({_S, U} = SU) ->
|
||||
[?AC(<<"../user/",
|
||||
(ejabberd_http:url_encode(U))/binary, "/">>,
|
||||
(misc:url_encode(U))/binary, "/">>,
|
||||
(su_to_list(SU))),
|
||||
?BR]
|
||||
end,
|
||||
|
37
src/misc.erl
37
src/misc.erl
@ -29,7 +29,7 @@
|
||||
|
||||
%% API
|
||||
-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,
|
||||
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,
|
||||
@ -105,6 +105,10 @@ hex_to_bin([H1, H2 | T], Acc) ->
|
||||
hex_to_base64(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().
|
||||
expand_keyword(Keyword, Input, Replacement) ->
|
||||
Parts = binary:split(Input, Keyword, [global]),
|
||||
@ -262,6 +266,37 @@ read_js(File) ->
|
||||
%%%===================================================================
|
||||
%%% 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().
|
||||
set_node_id(PidStr, NodeBin) ->
|
||||
ExtPidStr = erlang:pid_to_list(
|
||||
|
@ -31,7 +31,7 @@
|
||||
-define(SERVICE_REQUEST_TIMEOUT, 5000). % 5 seconds.
|
||||
-define(SLOT_TIMEOUT, 18000000). % 5 hours.
|
||||
-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(STR_TO_INT(Str, B), binary_to_integer(iolist_to_binary(Str), B)).
|
||||
-define(DEFAULT_CONTENT_TYPE, <<"application/octet-stream">>).
|
||||
|
@ -172,7 +172,7 @@ url(Server, Path, Params) ->
|
||||
Base = base_url(Server, Path),
|
||||
[<<$&, ParHead/binary>> | ParTail] =
|
||||
[<<"&", (iolist_to_binary(Key))/binary, "=",
|
||||
(ejabberd_http:url_encode(Value))/binary>>
|
||||
(misc:url_encode(Value))/binary>>
|
||||
|| {Key, Value} <- Params],
|
||||
Tail = iolist_to_binary([ParHead | ParTail]),
|
||||
binary_to_list(<<Base/binary, $?, Tail/binary>>).
|
||||
|
Loading…
Reference in New Issue
Block a user