summaryrefslogtreecommitdiff
path: root/src/mod_mam.erl
diff options
context:
space:
mode:
authorPaweł Chmielowski <pchmielowski@process-one.net>2018-04-20 13:27:39 +0200
committerPaweł Chmielowski <pchmielowski@process-one.net>2018-04-20 13:27:46 +0200
commit5be49cc0facd841a016f8565053eb7133583b13d (patch)
treefbab05b98ef1f97d06fd8ed2d211cf072333cf9d /src/mod_mam.erl
parentFix type of rest:url/2 (diff)
Add commands for cleaning up mam archive
Diffstat (limited to 'src/mod_mam.erl')
-rw-r--r--src/mod_mam.erl55
1 files changed, 53 insertions, 2 deletions
diff --git a/src/mod_mam.erl b/src/mod_mam.erl
index ac88c82c..7912be30 100644
--- a/src/mod_mam.erl
+++ b/src/mod_mam.erl
@@ -40,7 +40,7 @@
muc_process_iq/2, muc_filter_message/3, message_is_archived/3,
delete_old_messages/2, get_commands_spec/0, msg_to_el/4,
get_room_config/4, set_room_option/3, offline_message/1, export/1,
- mod_options/1]).
+ mod_options/1, remove_mam_for_user_with_peer/3, remove_mam_for_user/2]).
-include("xmpp.hrl").
-include("logger.hrl").
@@ -69,6 +69,7 @@
{[{binary(), non_neg_integer(), xmlel()}], boolean(), non_neg_integer()}.
-callback use_cache(binary()) -> boolean().
-callback cache_nodes(binary()) -> [node()].
+-callback remove_from_archive(binary(), binary(), jid() | none) -> ok | {error, any()}.
-optional_callbacks([use_cache/1, cache_nodes/1]).
@@ -258,6 +259,37 @@ remove_room(LServer, Name, Host) ->
Mod:remove_room(LServer, LName, LHost),
ok.
+remove_mam_for_user(User, Server) ->
+ LUser = jid:nodeprep(User),
+ LServer = jid:nameprep(Server),
+ Mod = gen_mod:db_mod(LServer, ?MODULE),
+ case Mod:remove_from_archive(LUser, LServer, none) of
+ ok ->
+ {ok, <<"MAM archive removed">>};
+ {error, Bin} when is_binary(Bin) ->
+ {error, Bin};
+ {error, _} ->
+ {error, <<"Db returned error">>}
+ end.
+
+remove_mam_for_user_with_peer(User, Server, Peer) ->
+ LUser = jid:nodeprep(User),
+ LServer = jid:nameprep(Server),
+ try jid:decode(Peer) of
+ Jid ->
+ Mod = gen_mod:db_mod(LUser, ?MODULE),
+ case Mod:remove_from_archive(LUser, LServer, Jid) of
+ ok ->
+ {ok, <<"MAM archive removed">>};
+ {error, Bin} when is_binary(Bin) ->
+ {error, Bin};
+ {error, _} ->
+ {error, <<"Db returned error">>}
+ end
+ catch _:_ ->
+ {error, <<"Invalid peer JID">>}
+ end.
+
-spec get_room_config([muc_roomconfig:property()], mod_muc_room:state(),
jid(), binary()) -> [muc_roomconfig:property()].
get_room_config(Fields, RoomState, _From, _Lang) ->
@@ -1080,7 +1112,26 @@ get_commands_spec() ->
"Days to keep messages"],
args_example = [<<"all">>, 31],
args = [{type, binary}, {days, integer}],
- result = {res, rescode}}].
+ result = {res, rescode}},
+ #ejabberd_commands{name = remove_mam_for_user, tags = [mam],
+ desc = "Remove mam archive for user",
+ module = ?MODULE, function = remove_mam_for_user,
+ args = [{user, binary}, {server, binary}],
+ args_desc = ["Username", "Server"],
+ args_example = [<<"bob">>, <<"example.com">>],
+ result = {res, restuple},
+ result_desc = "Result tuple",
+ result_example = {ok, <<"MAM archive removed">>}},
+ #ejabberd_commands{name = remove_mam_for_user_with_peer, tags = [mam],
+ desc = "Remove mam archive for user with peer",
+ module = ?MODULE, function = remove_mam_for_user_with_peer,
+ args = [{user, binary}, {server, binary}, {with, binary}],
+ args_desc = ["Username", "Server", "Peer"],
+ args_example = [<<"bob">>, <<"example.com">>, <<"anne@example.com">>],
+ result = {res, restuple},
+ result_desc = "Result tuple",
+ result_example = {ok, <<"MAM archive removed">>}}
+ ].
mod_opt_type(assume_mam_usage) ->
fun (B) when is_boolean(B) -> B end;