From a2e1f5c8826b1b040025a70cedcbb062e0618a0e Mon Sep 17 00:00:00 2001 From: Holger Weiss Date: Tue, 3 Apr 2018 00:12:43 +0200 Subject: [PATCH] Move ejabberd_http:url_encode/1 to 'misc' module --- src/ejabberd_http.erl | 37 +------------------------------------ src/ejabberd_web_admin.erl | 4 ++-- src/misc.erl | 37 ++++++++++++++++++++++++++++++++++++- src/mod_http_upload.erl | 2 +- src/rest.erl | 2 +- 5 files changed, 41 insertions(+), 41 deletions(-) diff --git a/src/ejabberd_http.erl b/src/ejabberd_http.erl index 474304a5d..babf742c8 100644 --- a/src/ejabberd_http.erl +++ b/src/ejabberd_http.erl @@ -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(<>, 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, <>); -url_encode(<>, Acc) -> - case integer_to_hex(H) of - [X, Y] -> url_encode(T, <>); - [X] -> url_encode(T, <>) - 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; diff --git a/src/ejabberd_web_admin.erl b/src/ejabberd_web_admin.erl index 20c630df1..524c80f50 100644 --- a/src/ejabberd_web_admin.erl +++ b/src/ejabberd_web_admin.erl @@ -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, diff --git a/src/misc.erl b/src/misc.erl index 9f3210d5e..b4396e97b 100644 --- a/src/misc.erl +++ b/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(<>, 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, <>); +url_encode(<>, Acc) -> + case integer_to_hex(H) of + [X, Y] -> url_encode(T, <>); + [X] -> url_encode(T, <>) + 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( diff --git a/src/mod_http_upload.erl b/src/mod_http_upload.erl index 9a5952926..0a087124a 100644 --- a/src/mod_http_upload.erl +++ b/src/mod_http_upload.erl @@ -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">>). diff --git a/src/rest.erl b/src/rest.erl index 16cf09a34..7e509dec8 100644 --- a/src/rest.erl +++ b/src/rest.erl @@ -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(<>).