aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2022-06-13 13:28:10 +0200
committerbadlop <badlop@gmail.com>2022-06-28 22:15:04 +0200
commite10c67a74a7611ba097a3097872efa6c5c08e990 (patch)
treea307747d3ba5ec061b039adff92169ccccbfe2f2 /src
parentFix error reporting in 'make options' on OTP24+ (diff)
mod_mix_pam: Display joined channels on webadmin page
Diffstat (limited to 'src')
-rw-r--r--src/mod_mix_pam.erl67
1 files changed, 66 insertions, 1 deletions
diff --git a/src/mod_mix_pam.erl b/src/mod_mix_pam.erl
index 1fa5c1861..e67ae2c80 100644
--- a/src/mod_mix_pam.erl
+++ b/src/mod_mix_pam.erl
@@ -31,11 +31,15 @@
-export([bounce_sm_packet/1,
disco_sm_features/5,
remove_user/2,
- process_iq/1]).
+ process_iq/1,
+ webadmin_user/4,
+ webadmin_page/3]).
-include_lib("xmpp/include/xmpp.hrl").
-include("logger.hrl").
-include("translate.hrl").
+-include("ejabberd_http.hrl").
+-include("ejabberd_web_admin.hrl").
-define(MIX_PAM_CACHE, mix_pam_cache).
@@ -61,6 +65,8 @@ start(Host, Opts) ->
ejabberd_hooks:add(bounce_sm_packet, Host, ?MODULE, bounce_sm_packet, 50),
ejabberd_hooks:add(disco_sm_features, Host, ?MODULE, disco_sm_features, 50),
ejabberd_hooks:add(remove_user, Host, ?MODULE, remove_user, 50),
+ ejabberd_hooks:add(webadmin_user, Host, ?MODULE, webadmin_user, 50),
+ ejabberd_hooks:add(webadmin_page_host, Host, ?MODULE, webadmin_page, 50),
gen_iq_handler:add_iq_handler(ejabberd_sm, Host, ?NS_MIX_PAM_0,
?MODULE, process_iq);
Err ->
@@ -71,6 +77,8 @@ stop(Host) ->
ejabberd_hooks:delete(bounce_sm_packet, Host, ?MODULE, bounce_sm_packet, 50),
ejabberd_hooks:delete(disco_sm_features, Host, ?MODULE, disco_sm_features, 50),
ejabberd_hooks:delete(remove_user, Host, ?MODULE, remove_user, 50),
+ ejabberd_hooks:delete(webadmin_user, Host, ?MODULE, webadmin_user, 50),
+ ejabberd_hooks:delete(webadmin_page_host, Host, ?MODULE, webadmin_page, 50),
gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_MIX_PAM_0).
reload(Host, NewOpts, OldOpts) ->
@@ -339,6 +347,11 @@ get_channel(JID, Channel) ->
end
end.
+get_channels(JID) ->
+ {_, LServer, _} = jid:tolower(JID),
+ Mod = gen_mod:db_mod(LServer, ?MODULE),
+ Mod:get_channels(JID).
+
add_channel(JID, Channel, ID) ->
Mod = gen_mod:db_mod(JID#jid.lserver, ?MODULE),
case Mod:add_channel(JID, Channel, ID) of
@@ -399,3 +412,55 @@ delete_cache(Mod, JID, Channel) ->
false ->
ok
end.
+
+%%%===================================================================
+%%% Webadmin interface
+%%%===================================================================
+webadmin_user(Acc, User, Server, Lang) ->
+ QueueLen = case get_channels({jid:nodeprep(User), jid:nameprep(Server), <<>>}) of
+ {ok, Channels} -> length(Channels);
+ error -> -1
+ end,
+ FQueueLen = ?C(integer_to_binary(QueueLen)),
+ FQueueView = ?AC(<<"mix_channels/">>, ?T("View joined MIX channels")),
+ Acc ++
+ [?XCT(<<"h3">>, ?T("Joined MIX channels:")),
+ FQueueLen,
+ ?C(<<" | ">>),
+ FQueueView].
+
+webadmin_page(_, Host,
+ #request{us = _US, path = [<<"user">>, U, <<"mix_channels">>],
+ lang = Lang} = _Request) ->
+ Res = web_mix_channels(U, Host, Lang),
+ {stop, Res};
+webadmin_page(Acc, _, _) -> Acc.
+
+web_mix_channels(User, Server, Lang) ->
+ LUser = jid:nodeprep(User),
+ LServer = jid:nameprep(Server),
+ US = {LUser, LServer},
+ Items = case get_channels({jid:nodeprep(User), jid:nameprep(Server), <<>>}) of
+ {ok, Channels} -> Channels;
+ error -> []
+ end,
+ SItems = lists:sort(Items),
+ FItems = case SItems of
+ [] -> [?CT(?T("None"))];
+ _ ->
+ THead = ?XE(<<"thead">>, [?XE(<<"tr">>, [?XCT(<<"td">>, ?T("Channel JID")),
+ ?XCT(<<"td">>, ?T("Participant ID"))])]),
+ Entries = lists:map(fun ({JID, ID}) ->
+ ?XE(<<"tr">>, [
+ ?XAC(<<"td">>, [{<<"class">>, <<"valign">>}], jid:encode(JID)),
+ ?XAC(<<"td">>, [{<<"class">>, <<"valign">>}], ID)
+ ])
+ end, SItems),
+ [?XE(<<"table">>, [THead, ?XE(<<"tbody">>, Entries)])]
+ end,
+ PageTitle = str:translate_and_format(Lang, ?T("Joined MIX channels of ~ts"), [us_to_list(US)]),
+ (?H1GL(PageTitle, <<"modules/#mod-mix-pam">>, <<"mod_mix_pam">>))
+ ++ FItems.
+
+us_to_list({User, Server}) ->
+ jid:encode({User, Server, <<"">>}).