From c2d4f738933e31f29588cbfbf9a80287e9a3c099 Mon Sep 17 00:00:00 2001 From: Badlop Date: Mon, 16 Sep 2024 17:09:01 +0200 Subject: [PATCH] Move some modules webadmin pages to their modules --- src/mod_admin_extra.erl | 69 +---------------------------------------- src/mod_privacy.erl | 26 ++++++++++++++++ src/mod_private.erl | 23 ++++++++++++++ src/mod_vcard.erl | 64 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 114 insertions(+), 68 deletions(-) diff --git a/src/mod_admin_extra.erl b/src/mod_admin_extra.erl index 0c761cc8d..2612e7a71 100644 --- a/src/mod_admin_extra.erl +++ b/src/mod_admin_extra.erl @@ -2206,13 +2206,7 @@ web_page_host(Acc, _, _) -> %%% HostUser web_menu_hostuser(Acc, _Host, _Username, _Lang) -> - Acc - ++ [{<<"auth">>, <<"Authentication">>}, - {<<"mam">>, <<"MAM">>}, - {<<"privacy">>, <<"Privacy Lists">>}, - {<<"private">>, <<"Private XML Storage">>}, - {<<"session">>, <<"Sessions">>}, - {<<"vcard">>, <<"vCard">>}]. + Acc ++ [{<<"auth">>, <<"Authentication">>}, {<<"session">>, <<"Sessions">>}]. web_page_hostuser(_, Host, User, #request{path = [<<"auth">>]} = R) -> Ban = make_command(ban_account, @@ -2242,26 +2236,6 @@ web_page_hostuser(_, Host, User, #request{path = [<<"auth">>]} = R) -> [{<<"user">>, User}, {<<"host">>, Host}], [{style, danger}])], {stop, Res}; -web_page_hostuser(_, Host, User, #request{path = [<<"mam">>]} = R) -> - Res = ?H1GL(<<"MAM">>, <<"modules/#mod_mam">>, <<"mod_mam">>) - ++ [make_command(remove_mam_for_user, - R, - [{<<"user">>, User}, {<<"host">>, Host}], - [{style, danger}]), - make_command(remove_mam_for_user_with_peer, - R, - [{<<"user">>, User}, {<<"host">>, Host}], - [{style, danger}])], - {stop, Res}; -web_page_hostuser(_, Host, User, #request{path = [<<"privacy">>]} = R) -> - Res = ?H1GL(<<"Privacy Lists">>, <<"modules/#mod_privacy">>, <<"mod_privacy">>) - ++ [make_command(privacy_set, R, [{<<"user">>, User}, {<<"host">>, Host}], [])], - {stop, Res}; -web_page_hostuser(_, Host, User, #request{path = [<<"private">>]} = R) -> - Res = ?H1GL(<<"Private XML Storage">>, <<"modules/#mod_private">>, <<"mod_private">>) - ++ [make_command(private_set, R, [{<<"user">>, User}, {<<"host">>, Host}], []), - make_command(private_get, R, [{<<"user">>, User}, {<<"host">>, Host}], [])], - {stop, Res}; web_page_hostuser(_, Host, User, #request{path = [<<"session">>]} = R) -> Head = [?XC(<<"h1">>, <<"Sessions">>), ?BR], Set = [make_command(resource_num, R, [{<<"user">>, User}, {<<"host">>, Host}], []), @@ -2280,47 +2254,6 @@ web_page_hostuser(_, Host, User, #request{path = [<<"session">>]} = R) -> make_command(get_presence, R, [{<<"user">>, User}, {<<"host">>, Host}], []), make_command(num_resources, R, [{<<"user">>, User}, {<<"host">>, Host}], [])], {stop, Head ++ Get ++ Set}; -web_page_hostuser(_, Host, User, #request{path = [<<"vcard">>]} = R) -> - Head = ?H1GL(<<"vCard">>, <<"modules/#mod_vcard">>, <<"mod_vcard">>), - Set = [make_command(set_nickname, R, [{<<"user">>, User}, {<<"host">>, Host}], []), - make_command(set_vcard, R, [{<<"user">>, User}, {<<"host">>, Host}], []), - make_command(set_vcard2, R, [{<<"user">>, User}, {<<"host">>, Host}], []), - make_command(set_vcard2_multi, R, [{<<"user">>, User}, {<<"host">>, Host}], [])], - timer:sleep(100), % setting vcard takes a while, let's delay the get commands - FieldNames = [<<"VERSION">>, <<"FN">>, <<"NICKNAME">>, <<"BDAY">>], - FieldNames2 = - [{<<"N">>, <<"FAMILY">>}, - {<<"N">>, <<"GIVEN">>}, - {<<"N">>, <<"MIDDLE">>}, - {<<"ADR">>, <<"CTRY">>}, - {<<"ADR">>, <<"LOCALITY">>}, - {<<"EMAIL">>, <<"USERID">>}], - Get = [make_command(get_vcard, R, [{<<"user">>, User}, {<<"host">>, Host}], []), - ?XE(<<"blockquote">>, - [make_table([<<"name">>, <<"value">>], - [{?C(FieldName), - make_command(get_vcard, - R, - [{<<"user">>, User}, - {<<"host">>, Host}, - {<<"name">>, FieldName}], - [{only, value}])} - || FieldName <- FieldNames])]), - make_command(get_vcard2, R, [{<<"user">>, User}, {<<"host">>, Host}], []), - ?XE(<<"blockquote">>, - [make_table([<<"name">>, <<"subname">>, <<"value">>], - [{?C(FieldName), - ?C(FieldSubName), - make_command(get_vcard2, - R, - [{<<"user">>, User}, - {<<"host">>, Host}, - {<<"name">>, FieldName}, - {<<"subname">>, FieldSubName}], - [{only, value}])} - || {FieldName, FieldSubName} <- FieldNames2])]), - make_command(get_vcard2_multi, R, [{<<"user">>, User}, {<<"host">>, Host}], [])], - {stop, Head ++ Get ++ Set}; web_page_hostuser(Acc, _, _, _) -> Acc. diff --git a/src/mod_privacy.erl b/src/mod_privacy.erl index e5c69844d..eda9ac4ab 100644 --- a/src/mod_privacy.erl +++ b/src/mod_privacy.erl @@ -40,8 +40,14 @@ import_start/2, import_stop/2, import/5, import_info/0, mod_opt_type/1, mod_options/1, depends/2]). +-export([webadmin_menu_hostuser/4, webadmin_page_hostuser/4]). + +-import(ejabberd_web_admin, [make_command/4, make_command/2]). + -include("logger.hrl"). -include_lib("xmpp/include/xmpp.hrl"). +-include("ejabberd_http.hrl"). +-include("ejabberd_web_admin.hrl"). -include("mod_privacy.hrl"). -include("translate.hrl"). @@ -78,6 +84,8 @@ start(Host, Opts) -> {hook, user_send_packet, user_send_packet, 50}, {hook, privacy_check_packet, check_packet, 50}, {hook, remove_user, remove_user, 50}, + {hook, webadmin_menu_hostuser, webadmin_menu_hostuser, 50}, + {hook, webadmin_page_hostuser, webadmin_page_hostuser, 50}, {iq_handler, ejabberd_sm, ?NS_PRIVACY, process_iq}]}. stop(_Host) -> @@ -840,6 +848,24 @@ export(LServer) -> Mod = gen_mod:db_mod(LServer, ?MODULE), Mod:export(LServer). +%%% +%%% WebAdmin +%%% + +webadmin_menu_hostuser(Acc, _Host, _Username, _Lang) -> + Acc ++ [{<<"privacy">>, <<"Privacy Lists">>}]. + +webadmin_page_hostuser(_, Host, User, + #request{us = _US, path = [<<"privacy">>]} = R) -> + Res = ?H1GL(<<"Privacy Lists">>, <<"modules/#mod_privacy">>, <<"mod_privacy">>) + ++ [make_command(privacy_set, R, [{<<"user">>, User}, {<<"host">>, Host}], [])], + {stop, Res}; +webadmin_page_hostuser(Acc, _, _, _) -> Acc. + +%%% +%%% Documentation +%%% + depends(_Host, _Opts) -> []. diff --git a/src/mod_private.erl b/src/mod_private.erl index 9e25dbf7e..4554dbeca 100644 --- a/src/mod_private.erl +++ b/src/mod_private.erl @@ -41,10 +41,16 @@ -export([get_commands_spec/0, bookmarks_to_pep/2]). +-export([webadmin_menu_hostuser/4, webadmin_page_hostuser/4]). + +-import(ejabberd_web_admin, [make_command/4, make_command/2]). + -include("logger.hrl"). -include_lib("xmpp/include/xmpp.hrl"). -include("mod_private.hrl"). -include("ejabberd_commands.hrl"). +-include("ejabberd_http.hrl"). +-include("ejabberd_web_admin.hrl"). -include("translate.hrl"). -include("pubsub.hrl"). @@ -71,6 +77,8 @@ start(Host, Opts) -> {hook, pubsub_publish_item, pubsub_publish_item, 50}, {hook, pubsub_delete_item, pubsub_delete_item, 50}, {hook, pubsub_tree_call, pubsub_tree_call, 50}, + {hook, webadmin_menu_hostuser, webadmin_menu_hostuser, 50}, + {hook, webadmin_page_hostuser, webadmin_page_hostuser, 50}, {iq_handler, ejabberd_sm, ?NS_PRIVATE, process_sm_iq}]}. stop(Host) -> @@ -544,6 +552,21 @@ bookmarks_to_pep(User, Server) -> {error, <<"Cannot retrieve bookmarks from private XML storage">>} end. +%%%=================================================================== +%%% WebAdmin +%%%=================================================================== + +webadmin_menu_hostuser(Acc, _Host, _Username, _Lang) -> + Acc ++ [{<<"private">>, <<"Private XML Storage">>}]. + +webadmin_page_hostuser(_, Host, User, + #request{path = [<<"private">>]} = R) -> + Res = ?H1GL(<<"Private XML Storage">>, <<"modules/#mod_private">>, <<"mod_private">>) + ++ [make_command(private_set, R, [{<<"user">>, User}, {<<"host">>, Host}], []), + make_command(private_get, R, [{<<"user">>, User}, {<<"host">>, Host}], [])], + {stop, Res}; +webadmin_page_hostuser(Acc, _, _, _) -> Acc. + %%%=================================================================== %%% Cache %%%=================================================================== diff --git a/src/mod_vcard.erl b/src/mod_vcard.erl index 15f0cd590..6316ce537 100644 --- a/src/mod_vcard.erl +++ b/src/mod_vcard.erl @@ -43,12 +43,17 @@ -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). -export([route/1]). +-export([webadmin_menu_hostuser/4, webadmin_page_hostuser/4]). + +-import(ejabberd_web_admin, [make_command/4, make_command/2, make_table/2]). -include("logger.hrl"). -include_lib("xmpp/include/xmpp.hrl"). -include("mod_vcard.hrl"). -include("translate.hrl"). -include("ejabberd_stacktrace.hrl"). +-include("ejabberd_http.hrl"). +-include("ejabberd_web_admin.hrl"). -define(VCARD_CACHE, vcard_cache). @@ -98,6 +103,8 @@ init([Host|_]) -> ejabberd_hooks:add(disco_sm_features, Host, ?MODULE, get_sm_features, 50), ejabberd_hooks:add(vcard_iq_set, Host, ?MODULE, vcard_iq_set, 50), + ejabberd_hooks:add(webadmin_menu_hostuser, Host, ?MODULE, webadmin_menu_hostuser, 50), + ejabberd_hooks:add(webadmin_page_hostuser, Host, ?MODULE, webadmin_page_hostuser, 50), MyHosts = gen_mod:get_opt_hosts(Opts), Search = mod_vcard_opt:search(Opts), if Search -> @@ -161,6 +168,8 @@ terminate(_Reason, #state{hosts = MyHosts, server_host = Host}) -> gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_VCARD), ejabberd_hooks:delete(disco_sm_features, Host, ?MODULE, get_sm_features, 50), ejabberd_hooks:delete(vcard_iq_set, Host, ?MODULE, vcard_iq_set, 50), + ejabberd_hooks:delete(webadmin_menu_hostuser, Host, ?MODULE, webadmin_menu_hostuser, 50), + ejabberd_hooks:delete(webadmin_page_hostuser, Host, ?MODULE, webadmin_page_hostuser, 50), Mod = gen_mod:db_mod(Host, ?MODULE), Mod:stop(Host), lists:foreach( @@ -554,6 +563,61 @@ export(LServer) -> Mod = gen_mod:db_mod(LServer, ?MODULE), Mod:export(LServer). +%%% +%%% WebAdmin +%%% + +webadmin_menu_hostuser(Acc, _Host, _Username, _Lang) -> + Acc ++ [{<<"vcard">>, <<"vCard">>}]. + +webadmin_page_hostuser(_, Host, User, + #request{path = [<<"vcard">>]} = R) -> + Head = ?H1GL(<<"vCard">>, <<"modules/#mod_vcard">>, <<"mod_vcard">>), + Set = [make_command(set_nickname, R, [{<<"user">>, User}, {<<"host">>, Host}], []), + make_command(set_vcard, R, [{<<"user">>, User}, {<<"host">>, Host}], []), + make_command(set_vcard2, R, [{<<"user">>, User}, {<<"host">>, Host}], []), + make_command(set_vcard2_multi, R, [{<<"user">>, User}, {<<"host">>, Host}], [])], + timer:sleep(100), % setting vcard takes a while, let's delay the get commands + FieldNames = [<<"VERSION">>, <<"FN">>, <<"NICKNAME">>, <<"BDAY">>], + FieldNames2 = + [{<<"N">>, <<"FAMILY">>}, + {<<"N">>, <<"GIVEN">>}, + {<<"N">>, <<"MIDDLE">>}, + {<<"ADR">>, <<"CTRY">>}, + {<<"ADR">>, <<"LOCALITY">>}, + {<<"EMAIL">>, <<"USERID">>}], + Get = [make_command(get_vcard, R, [{<<"user">>, User}, {<<"host">>, Host}], []), + ?XE(<<"blockquote">>, + [make_table([<<"name">>, <<"value">>], + [{?C(FieldName), + make_command(get_vcard, + R, + [{<<"user">>, User}, + {<<"host">>, Host}, + {<<"name">>, FieldName}], + [{only, value}])} + || FieldName <- FieldNames])]), + make_command(get_vcard2, R, [{<<"user">>, User}, {<<"host">>, Host}], []), + ?XE(<<"blockquote">>, + [make_table([<<"name">>, <<"subname">>, <<"value">>], + [{?C(FieldName), + ?C(FieldSubName), + make_command(get_vcard2, + R, + [{<<"user">>, User}, + {<<"host">>, Host}, + {<<"name">>, FieldName}, + {<<"subname">>, FieldSubName}], + [{only, value}])} + || {FieldName, FieldSubName} <- FieldNames2])]), + make_command(get_vcard2_multi, R, [{<<"user">>, User}, {<<"host">>, Host}], [])], + {stop, Head ++ Get ++ Set}; +webadmin_page_hostuser(Acc, _, _, _) -> Acc. + +%%% +%%% Documentation +%%% + depends(_Host, _Opts) -> [].