aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2005-11-22 18:25:02 +0000
committerAlexey Shchepin <alexey@process-one.net>2005-11-22 18:25:02 +0000
commit3fdf05a507ae0d8f1b2dfd3eccd6c729bc78821f (patch)
treebb69932d8a553c20da1c0d95788c8019821ea763 /src
parent* src/ejabberd_c2s.erl: Send stream error when connection is (diff)
* src/web/ejabberd_web_admin.erl: Fixed encoding of user names in
URLs * src/web/ejabberd_http.erl: Added url_encode function from yaws SVN Revision: 441
Diffstat (limited to 'src')
-rw-r--r--src/web/ejabberd_http.erl43
-rw-r--r--src/web/ejabberd_web_admin.erl11
2 files changed, 50 insertions, 4 deletions
diff --git a/src/web/ejabberd_http.erl b/src/web/ejabberd_http.erl
index 7b6c65645..550f3e0e4 100644
--- a/src/web/ejabberd_http.erl
+++ b/src/web/ejabberd_http.erl
@@ -13,7 +13,8 @@
%% External exports
-export([start/2,
start_link/2,
- receive_headers/1]).
+ receive_headers/1,
+ url_encode/1]).
-include("ejabberd.hrl").
-include("jlib.hrl").
@@ -652,6 +653,46 @@ parse_urlencoded(undefined, _, _, _) ->
[].
+url_encode([H|T]) ->
+ if
+ H >= $a, $z >= H ->
+ [H|url_encode(T)];
+ H >= $A, $Z >= H ->
+ [H|url_encode(T)];
+ H >= $0, $9 >= H ->
+ [H|url_encode(T)];
+ H == $_; H == $.; H == $-; H == $/; H == $: -> % FIXME: more..
+ [H|url_encode(T)];
+ true ->
+ case integer_to_hex(H) of
+ [X, Y] ->
+ [$%, X, Y | url_encode(T)];
+ [X] ->
+ [$%, $0, X | url_encode(T)]
+ end
+ end;
+
+url_encode([]) ->
+ [].
+
+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
parse_request(State, Data) ->
diff --git a/src/web/ejabberd_web_admin.erl b/src/web/ejabberd_web_admin.erl
index 0ed317a0c..460b0c28d 100644
--- a/src/web/ejabberd_web_admin.erl
+++ b/src/web/ejabberd_web_admin.erl
@@ -1343,8 +1343,11 @@ list_given_users(Users, Prefix, Lang, URLFunc) ->
?T("Online")
end,
?XE("tr",
- [?XE("td", [?AC(URLFunc({user, Prefix, User, Server}),
- us_to_list(US))]),
+ [?XE("td",
+ [?AC(URLFunc({user, Prefix,
+ ejabberd_http:url_encode(User),
+ Server}),
+ us_to_list(US))]),
?XE("td", FQueueLen),
?XC("td", FLast)])
end, Users)
@@ -1397,7 +1400,9 @@ list_online_users(Host, _Lang) ->
SUsers = lists:usort(Users),
lists:flatmap(
fun({S, U} = SU) ->
- [?AC("../user/" ++ U ++ "/", su_to_list(SU)), ?BR]
+ [?AC("../user/" ++ ejabberd_http:url_encode(U) ++ "/",
+ su_to_list(SU)),
+ ?BR]
end, SUsers).
user_info(User, Server, Query, Lang) ->