# -*- coding: utf-8 -*- ## This file is part of Gajim. ## ## Gajim is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published ## by the Free Software Foundation; version 3 only. ## ## Gajim is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gajim. If not, see . ## ''' Block some incoming messages :author: Yann Leboulanger :since: 16 August 2012 :copyright: Copyright (2012) Yann Leboulanger :license: GPLv3 ''' from gi.repository import Gtk from common import ged from plugins import GajimPlugin from plugins.helpers import log, log_calls from plugins.gui import GajimPluginConfigDialog class AntiSpamPlugin(GajimPlugin): @log_calls('AntiSpamPlugin') def init(self): self.description = _('Allows to block some kind of incoming messages') self.config_dialog = AntiSpamPluginConfigDialog(self) self.gui_extension_points = { } self.events_handlers = { 'atom-entry-received': (ged.POSTCORE, self._nec_atom_entry_received), 'message-received': (ged.PRECORE, self._nec_decrypted_message_received_received), 'subscribe-presence-received': (ged.POSTCORE, self._nec_subscribe_presence_received), } self.config_default_values = { 'block_pubsub_messages': (False, 'If True, Gajim will block incoming messages from pubsub.'), 'disable_xhtml_muc': (False, ''), 'disable_xhtml_pm': (False, ''), 'block_subscription_requests': (False, ''), } @log_calls('AntiSpamPlugin') def _nec_atom_entry_received(self, obj): if self.config['block_pubsub_messages']: log.info('discarding pubdubd message') return True @log_calls('AntiSpamPlugin') def _nec_decrypted_message_received_received(self, obj): if self.config['disable_xhtml_muc'] and obj.mtype == 'groupchat': self.remove_xhtml(obj) if self.config['disable_xhtml_pm'] and obj.gc_control and \ obj.resource and obj.mtype == 'chat': self.remove_xhtml(obj) return False @log_calls('AntiSpamPlugin') def _nec_subscribe_presence_received(self, obj): if self.config['block_subscription_requests'] and \ not gajim.contacts.get_contacts(obj.conn.name, obj.jid): log.info('discarding subscription request from %s' % obj.jid) return True def remove_xhtml(self, obj): html_node = obj.stanza.getTag('html') if html_node: obj.stanza.delChild(html_node) class AntiSpamPluginConfigDialog(GajimPluginConfigDialog): def init(self): self.GTK_BUILDER_FILE_PATH = self.plugin.local_file_path( 'config_dialog.ui') self.xml = Gtk.Builder() self.xml.set_translation_domain('gajim_plugins') self.xml.add_objects_from_file(self.GTK_BUILDER_FILE_PATH, ['anti_spam_config_vbox']) self.config_vbox = self.xml.get_object('anti_spam_config_vbox') self.get_child().pack_start(self.config_vbox, True, True, 0) self.block_pubsub_messages_checkbutton = self.xml.get_object( 'block_pubsub_messages_checkbutton') self.xml.connect_signals(self) def on_run(self): self.block_pubsub_messages_checkbutton.set_active(self.plugin.config[ 'block_pubsub_messages']) widget = self.xml.get_object('disable_xhtml_muc_checkbutton') widget.set_active(self.plugin.config['disable_xhtml_muc']) widget = self.xml.get_object('disable_xhtml_pm_checkbutton') widget.set_active(self.plugin.config['disable_xhtml_pm']) widget = self.xml.get_object('block_subscription_requests_checkbutton') widget.set_active(self.plugin.config['block_subscription_requests']) def on_block_pubsub_messages_checkbutton_toggled(self, button): self.plugin.config['block_pubsub_messages'] = button.get_active() def on_disable_xhtml_muc_checkbutton_toggled(self, button): self.plugin.config['disable_xhtml_muc'] = button.get_active() def on_disable_xhtml_pm_checkbutton_toggled(self, button): self.plugin.config['disable_xhtml_pm'] = button.get_active() def on_block_subscription_requests_checkbutton_toggled(self, button): self.plugin.config['block_subscription_requests'] = button.get_active()