Add a plugin for XEP-0377: spam reporting

This commit is contained in:
mathieui 2020-05-24 13:33:51 +02:00
parent 04df50feac
commit 2e31de3f45
4 changed files with 120 additions and 0 deletions

View file

@ -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
]

View file

@ -0,0 +1,15 @@
"""
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)

View file

@ -0,0 +1,41 @@
"""
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)

View file

@ -0,0 +1,63 @@
"""
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"