1
2 from utils import elementType, getFirstData
3 from types import MethodType
4
5
7
8
9 actionIdentifier = ""
10 codeText = []
11 hasPermission = None
12
16
18
19 if node.localName == "action":
20
21 self.actionIdentifier = node.getAttributeNS(None, 'identifier')
22 if not self.actionIdentifier:
23 raise ConfigFileException("No action identifier")
24 self.code = [" if "]
25 for c in node.childNodes:
26 if c.nodeType == elementType:
27 self._walkNode(c)
28 self.code.append(":")
29 cstring = " ".join(self.code)
30 fncode = "def handler(self, session, user):\n" + cstring + "\n return True;\n else:\n return False"
31 exec fncode
32 setattr(self, 'hasPermission', MethodType(locals()['handler'], self, self.__class__))
33 elif node.localName in ["all", "any"]:
34 if node.localName == "all":
35 bool = "and"
36 else:
37 bool = "or"
38 self.code.append("(")
39 for c in node.childNodes:
40 if c.nodeType == elementType:
41 self._walkNode(c)
42 self.code.append(bool)
43 self.code.pop()
44 self.code.append(")")
45 elif node.localName == "flag":
46 f = getFirstData(node)
47 self.code.append("user.hasFlag(session, \"%s\", object)" % f)
48 elif node.localName == "environment":
49 e = getFirstData(node)
50 self.code.append("session.environment == \"%s\"" % e)
51 elif node.localName == "hostmask":
52 e = getFirstData(node)
53 self.code.append("user.connectedFrom(session, \"%s\")" % e)
54