From a6ed3149413a728bc69897ed838272a3557623f8 Mon Sep 17 00:00:00 2001 From: "W. Martin Borgert" Date: Sat, 12 Jan 2019 21:00:43 +0100 Subject: [PATCH] [anti_spam] add domain blocking to plugin (#380) --- anti_spam/anti_spam.py | 29 +++++++++++++++++++++++++++-- anti_spam/config_dialog.ui | 29 +++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/anti_spam/anti_spam.py b/anti_spam/anti_spam.py index 77eef58..7bcdb34 100644 --- a/anti_spam/anti_spam.py +++ b/anti_spam/anti_spam.py @@ -69,6 +69,7 @@ class AntiSpamPlugin(GajimPlugin): 'msgtxt_answer': ('', ''), 'antispam_for_conference': (False, ''), 'conference_white_list': ([], ''), # conference private chat jid's + 'block_domains': ('', ''), # comma separated list of domain names to block } # List of outgoing jid's @@ -76,6 +77,8 @@ class AntiSpamPlugin(GajimPlugin): # Contain all jid's where are you initiate a chat self.outgoing_jids = [] + self.block_domains = [h.strip() for h in self.config['block_domains'].split(",") if len(h.strip())] + @log_calls('AntiSpamPlugin') def _nec_atom_entry_received(self, obj): if self.config['block_pubsub_messages']: @@ -89,12 +92,22 @@ class AntiSpamPlugin(GajimPlugin): if self.config['disable_xhtml_pm'] and obj.gc_control and \ obj.resource and obj.mtype == 'chat': self.remove_xhtml(obj) + + if obj.jid.split("@", 1)[1] in self.block_domains: + log.info('discarding message from %s, domain is blocked', obj.jid) + return True + return False @log_calls('AntiSpamPlugin') def _nec_decrypted_message_received_received(self, obj): if not obj.msgtxt: return False + + if obj.jid.split("@", 1)[1] in self.block_domains: + log.info('discarding message from %s, domain is blocked', obj.jid) + return True + if self._nec_decrypted_message_received_question(obj): return True limit = self.config['msgtxt_limit'] @@ -106,7 +119,11 @@ class AntiSpamPlugin(GajimPlugin): def _nec_subscribe_presence_received(self, obj): if self.config['block_subscription_requests'] and \ not app.contacts.get_contacts(obj.conn.name, obj.jid): - log.info('discarding subscription request from %s' % obj.jid) + log.info('discarding subscription request from %s', obj.jid) + return True + + if obj.jid.split("@", 1)[1] in self.block_domains: + log.info('discarding subscription request from %s, domain is blocked', obj.jid) return True @log_calls('AntiSpamPlugin') @@ -217,6 +234,8 @@ class AntiSpamPluginConfigDialog(GajimPluginConfigDialog): widget.set_text(str(self.plugin.config['msgtxt_answer'])) widget = self.xml.get_object('antispam_for_conference') widget.set_active(self.plugin.config['antispam_for_conference']) + widget = self.xml.get_object('block_domains_entry') + widget.set_text(str(self.plugin.config['block_domains'])) def on_block_pubsub_messages_checkbutton_toggled(self, button): self.plugin.config['block_pubsub_messages'] = button.get_active() @@ -250,4 +269,10 @@ class AntiSpamPluginConfigDialog(GajimPluginConfigDialog): def on_antispam_for_conference_checkbutton_toggled(self, button): self.plugin.config['antispam_for_conference'] = button.get_active() - + + def on_block_domains_entry_changed(self, entry): + try: + block_domains = self.plugin.config['block_domains'] = entry.get_text() + self.plugin.block_domains = [h.strip() for h in block_domains.split(",") if len(h.strip())] + except Exception as e: + log.debug(str(e)) diff --git a/anti_spam/config_dialog.ui b/anti_spam/config_dialog.ui index 8f12f96..5d99c70 100644 --- a/anti_spam/config_dialog.ui +++ b/anti_spam/config_dialog.ui @@ -193,6 +193,35 @@ 7 + + + True + False + 6 + + + True + False + Block Domains: + + + False + 0 + + + + + True + True + + + + False + 1 + + + + Enable for conferences