processone / ejabberd-contrib

Growing and curated ejabberd contributions repository - PR or ask to join !

Home Page:http://ejabberd.im

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Support for blocking invites in mod_spam_filter?

poVoq opened this issue · comments

Given the recent abuse of invites to MUCs, would it be possible to add support for blocking invites to mod_spam_filter?

I guess it would have to be based on the MUC JID if MUC mediated invites are used to spam others.

Thanks!

Just for playing, I applied some minor changes like this:

From 79031b050892eb5115ee6f278b8999e7a358ebfc Mon Sep 17 00:00:00 2001
From: Badlop <badlop@process-one.net>
Date: Tue, 7 May 2024 18:21:32 +0200
Subject: [PATCH] mod_spam_filter: Filter also local stanzas (#333)
 EXPERIMENTAL!!

---
 mod_spam_filter/src/mod_spam_filter.erl | 32 ++++++++++++++++---------
 1 file changed, 21 insertions(+), 11 deletions(-)

diff --git a/mod_spam_filter/src/mod_spam_filter.erl b/mod_spam_filter/src/mod_spam_filter.erl
index 013426c..c0b6c45 100644
--- a/mod_spam_filter/src/mod_spam_filter.erl
+++ b/mod_spam_filter/src/mod_spam_filter.erl
@@ -49,6 +49,7 @@
 %% ejabberd_hooks callbacks.
 -export([s2s_in_handle_info/2,
 	 s2s_receive_packet/1,
+	 sm_receive_packet/1,
 	 reopen_log/0]).
 
 %% ejabberd_commands callbacks.
@@ -148,6 +149,8 @@ init([Host, Opts]) ->
 			       s2s_in_handle_info, 90),
 	    ejabberd_hooks:add(s2s_receive_packet, Host, ?MODULE,
 			       s2s_receive_packet, 50),
+	    ejabberd_hooks:add(sm_receive_packet, Host, ?MODULE,
+			       sm_receive_packet, 50),
 	    ejabberd_hooks:add(reopen_log_hook, ?MODULE,
 			       reopen_log, 50),
 	    DumpFd = if DumpFile == none ->
@@ -262,6 +265,8 @@ terminate(Reason, #state{host = Host} = State) ->
     close_dump_file(DumpFile1, State),
     ejabberd_hooks:delete(s2s_receive_packet, Host, ?MODULE,
 			  s2s_receive_packet, 50),
+    ejabberd_hooks:delete(sm_receive_packet, Host, ?MODULE,
+			  sm_receive_packet, 50),
     ejabberd_hooks:delete(s2s_in_handle_info, Host, ?MODULE,
 			  s2s_in_handle_info, 90),
     case gen_mod:is_loaded_elsewhere(Host, ?MODULE) of
@@ -281,13 +286,18 @@ code_change(_OldVsn, #state{host = Host} = State, _Extra) ->
 %% Hook callbacks.
 %%--------------------------------------------------------------------
 -spec s2s_receive_packet({stanza() | drop, s2s_in_state()})
-      -> {stanza(), s2s_in_state()} | {stop, {drop, s2s_in_state()}}.
-s2s_receive_packet({drop, _State} = Acc) ->
+      -> {stanza() | drop, s2s_in_state()}.
+s2s_receive_packet({A, State}) ->
+    {sm_receive_packet(A), State}.
+
+-spec sm_receive_packet(stanza() | drop)
+      -> stanza() | stop.
+sm_receive_packet(drop = Acc) ->
     Acc;
-s2s_receive_packet({#message{from = From,
+sm_receive_packet(#message{from = From,
 			     to = #jid{lserver = LServer} = To,
-			     type = Type, body = Body} = Msg,
-		    State} = Acc) when Type /= groupchat,
+			     type = Type, body = Body} = Msg
+		    = Acc) when Type /= groupchat,
 				       Type /= error ->
     case needs_checking(From, To) of
 	true ->
@@ -298,18 +308,18 @@ s2s_receive_packet({#message{from = From,
 			    Acc;
 			spam ->
 			    reject(Msg),
-			    {drop, State}
+			    drop
 		    end;
 		spam ->
 		    reject(Msg),
-		    {drop, State}
+		    drop
 	    end;
 	false ->
 	    Acc
     end;
-s2s_receive_packet({#presence{from = From,
+sm_receive_packet(#presence{from = From,
 			      to = #jid{lserver = LServer} = To,
-			      type = subscribe} = Presence, State} = Acc) ->
+			      type = subscribe} = Presence = Acc) ->
     case needs_checking(From, To) of
 	true ->
 	    case check_from(LServer, From) of
@@ -317,12 +327,12 @@ s2s_receive_packet({#presence{from = From,
 		    Acc;
 		spam ->
 		    reject(Presence),
-		    {drop, State}
+		    drop
 	    end;
 	false ->
 	    Acc
     end;
-s2s_receive_packet({_Stanza, _State} = Acc) ->
+sm_receive_packet(Acc) ->
     Acc.
 
 -spec s2s_in_handle_info(s2s_in_state(), any())
-- 
2.43.0

And now the module filters mediated MUC invitations, and logs:

2024-05-07 18:03:54.544974+02:00 [info] Caching spam JID: sala1@conference.localhost
2024-05-07 18:03:54.545133+02:00 [info] Rejecting unsolicited message from sala1@conference.localhost to admin@localhost