summaryrefslogtreecommitdiff
path: root/slixmpp/plugins/xep_0356/stanza.py
blob: 46f1523af79f85129065c73d5a5970ddbdeb139f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from slixmpp.stanza import Message
from slixmpp.xmlstream import (
    ElementBase,
    register_stanza_plugin,
)
from slixmpp.plugins.xep_0297 import Forwarded


class Privilege(ElementBase):
    namespace = "urn:xmpp:privilege:2"
    name = "privilege"
    plugin_attrib = "privilege"

    def permission(self, access):
        for perm in self["perms"]:
            if perm["access"] == access:
                return perm["type"]

    def roster(self):
        return self.permission("roster")

    def message(self):
        return self.permission("message")

    def presence(self):
        return self.permission("presence")

    def iq(self):
        return self.permission("iq")

    def add_perm(self, access, type):
        # This should only be needed for servers, so maybe out of scope for slixmpp
        perm = Perm()
        perm["type"] = type
        perm["access"] = access
        self.append(perm)


class Perm(ElementBase):
    namespace = "urn:xmpp:privilege:2"
    name = "perm"
    plugin_attrib = "perm"
    plugin_multi_attrib = "perms"
    interfaces = {"type", "access"}


def register():
    register_stanza_plugin(Message, Privilege)
    register_stanza_plugin(Privilege, Forwarded)
    register_stanza_plugin(Privilege, Perm, iterable=True)