diff options
author | mathieui <mathieui@mathieui.net> | 2020-05-24 13:46:47 +0200 |
---|---|---|
committer | mathieui <mathieui@mathieui.net> | 2020-05-24 13:46:47 +0200 |
commit | ef961392beaf3111d01c32e4d183df681b03d492 (patch) | |
tree | e8f08c2c48471577da69373d8afe962cc1de1e37 | |
parent | 2e31de3f456ac2e9e4d2950c04ff3594fe41db65 (diff) | |
download | slixmpp-ef961392beaf3111d01c32e4d183df681b03d492.tar.gz slixmpp-ef961392beaf3111d01c32e4d183df681b03d492.tar.bz2 slixmpp-ef961392beaf3111d01c32e4d183df681b03d492.tar.xz slixmpp-ef961392beaf3111d01c32e4d183df681b03d492.zip |
Enforce <spam/> and <abuse/> quantity constraints
-rw-r--r-- | slixmpp/plugins/xep_0377/stanza.py | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/slixmpp/plugins/xep_0377/stanza.py b/slixmpp/plugins/xep_0377/stanza.py index 89ec66a9..1930c382 100644 --- a/slixmpp/plugins/xep_0377/stanza.py +++ b/slixmpp/plugins/xep_0377/stanza.py @@ -26,6 +26,8 @@ class Report(ElementBase): abuse -- Flag the report as abuse spam -- Flag the report as spam text -- Add a reason to the report + + Only one <spam/> or <abuse/> element can be present at once. """ name = "report" namespace = "urn:xmpp:reporting:0" @@ -33,29 +35,34 @@ class Report(ElementBase): interfaces = ("spam", "abuse", "text") sub_interfaces = {'text'} + def _purge_spam(self): + spam = self.xml.findall('{%s}spam' % self.namespace) + for element in spam: + self.xml.remove(element) + + def _purge_abuse(self): + abuse = self.xml.findall('{%s}abuse' % self.namespace) + for element in abuse: + self.xml.remove(element) + 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._purge_spam() + if bool(value): + self._purge_abuse() 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._purge_abuse() + if bool(value): + self._purge_spam() 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" |