Commit 2e31de3f authored by mathieui's avatar mathieui

Add a plugin for XEP-0377: spam reporting

parent 04df50fe
......@@ -85,6 +85,7 @@ __all__ = [
'xep_0323', # IoT Systems Sensor Data
'xep_0325', # IoT Systems Control
'xep_0332', # HTTP Over XMPP Transport
'xep_0377', # Spam reporting
'protoxep_reactions', # https://dino.im/xeps/reactions.html
'protoxep_occupantid', # https://dino.im/xeps/occupant-id.html
]
"""
Slixmpp: The Slick XMPP Library
Copyright (C) 2020 Mathieu Pasquet
This file is part of Slixmpp.
See the file LICENSE for copying permission.
"""
from slixmpp.plugins.base import register_plugin
from slixmpp.plugins.xep_0377.stanza import Report
from slixmpp.plugins.xep_0377.spam_reporting import XEP_0377
register_plugin(XEP_0377)
"""
Slixmpp: The Slick XMPP Library
Copyright (C) 2020 Mathieu Pasquet
This file is part of Slixmpp.
See the file LICENSE for copying permission.
"""
import logging
import slixmpp
from slixmpp import Message
from slixmpp.plugins import BasePlugin
from slixmpp.xmlstream import register_stanza_plugin
from slixmpp.xmlstream.handler import Callback
from slixmpp.xmlstream.matcher import StanzaPath
from slixmpp.plugins.xep_0377 import stanza
from slixmpp.plugins.xep_0191 import Block
log = logging.getLogger(__name__)
class XEP_0377(BasePlugin):
"""XEP-0377: Spam reporting"""
name = 'xep_0377'
description = 'XEP-0377: Spam Reporting'
dependencies = {'xep_0030', 'xep_0191'}
stanza = stanza
def plugin_init(self):
register_stanza_plugin(Block, stanza.Report)
register_stanza_plugin(stanza.Report, stanza.Text)
def plugin_end(self):
self.xmpp['xep_0030'].del_feature(feature=stanza.Report.namespace)
def session_bind(self, jid):
self.xmpp['xep_0030'].add_feature(stanza.Report.namespace)
"""
Slixmpp: The Slick XMPP Library
Copyright (C) 2020 Mathieu Pasquet
This file is part of Slixmpp.
See the file LICENSE for copying permission.
"""
from slixmpp.xmlstream import ET, ElementBase
class Report(ElementBase):
"""
A spam/abuse report.
Example sub stanza:
<report xmlns="urn:xmpp:reporting:0">
<text xml:lang="en">
Never came trouble to my house like this.
</text>
<spam/>
</report>
Stanza Interface:
abuse -- Flag the report as abuse
spam -- Flag the report as spam
text -- Add a reason to the report
"""
name = "report"
namespace = "urn:xmpp:reporting:0"
plugin_attrib = "report"
interfaces = ("spam", "abuse", "text")
sub_interfaces = {'text'}
def get_spam(self):
return self.xml.find('{%s}spam' % self.namespace) is not None
def set_spam(self, value):
if bool(value) and not self.get_spam():
self.xml.append(ET.Element('{%s}spam' % self.namespace))
elif not bool(value):
found = self.xml.findall('{%s}spam' % self.namespace)
if elm:
for item in found:
self.xml.remove(item)
def get_abuse(self):
return self.xml.find('{%s}abuse' % self.namespace) is not None
def set_abuse(self, value):
if bool(value) and not self.get_abuse():
self.xml.append(ET.Element('{%s}abuse' % self.namespace))
elif not bool(value):
found = self.xml.findall('{%s}abuse' % self.namespace)
if elm:
for item in found:
self.xml.remove(item)
class Text(ElementBase):
name = "text"
plugin_attrib = "text"
namespace = "urn:xmpp:reporting:0"
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment