diff options
| author | Zaran <zaran.krleza@gmail.com> | 2011-01-29 23:59:55 +0100 |
|---|---|---|
| committer | Zaran <zaran.krleza@gmail.com> | 2011-01-29 23:59:55 +0100 |
| commit | 995686b5ff272fb1fe0e78c087d6855ea93ae85e (patch) | |
| tree | 2189ec380146661973b47bbdeb598eb047443312 | |
| parent | 1b5acc0c20a0f233b52a63b1f17ea0b3a7587e58 (diff) | |
| download | alias-995686b5ff272fb1fe0e78c087d6855ea93ae85e.tar.gz | |
Retrieve both the key and perm at the same time for performance reason.
Also make the key a subitem (instead of an attribute) of the result stanza.
| -rw-r--r-- | server/object.py | 68 | ||||
| -rw-r--r-- | server/plugin.py | 14 | ||||
| -rw-r--r-- | webclient/lib/basic.js | 2 |
3 files changed, 43 insertions, 41 deletions
diff --git a/server/object.py b/server/object.py index 541fa95..6723481 100644 --- a/server/object.py +++ b/server/object.py @@ -34,26 +34,29 @@ class Object: raise ObjectError def get_permission(self, user): - file = open(self.path + 'permissions', 'r') - for line in file: - name, perm, key = line.split() - if name == user: - return int(perm) + with open(self.path + 'permissions', 'r') as file: + for line in file: + name, perm, key = line.split() + if name == user: + return int(perm) + return None - return 0 - def get_key(self, user): - file = open(self.path + 'permissions', 'r') - for line in file: - name, perm, key = line.split() - if name == user: - if not int(perm) & READ: - logging.error("User {} doesn't have read access to object {}" - .format(user, self.hash)) - raise PermissionError - return key - return 0 - + with open(self.path + 'permissions', 'r') as file: + for line in file: + name, perm, key = line.split() + if name == user: + return key + return None + + def get_permission_key(self, user): + with open(self.path + 'permissions', 'r') as file: + for line in file: + name, perm, key = line.split() + if name == user: + return (int(perm), key) + return (None, None) + def get_child_list(self, user): perm = self.get_permission(user) if not perm & LIST: @@ -64,32 +67,31 @@ class Object: file = open(self.path + "childs", 'r') result = [] for line in file: - name = line.rstrip('\n') - try: - child = Object(self.owner, name) - except ObjectError: - logging.error("Object {} can't be find for user {}".format(self.hash, - self.owner)) - else: - permission = child.get_permission(user) - key = child.get_key(user) - if permission > 0: - result.append((name, permission, key)) + name = line.rstrip('\n') + try: + child = Object(self.owner, name) + except ObjectError: + logging.error("Object {} can't be find for user {}".format(self.hash, + self.owner)) + else: + perm, key = child.get_permission_key(user) + if perm > 0: + result.append((name, perm, key)) file.close() return result def get_content(self, user): - perm = self.get_permission(user) - if not perm & READ: + perm, key = self.get_permission_key(user) + if not perm & READ : logging.error("User {} doesn't have read access to object {}" .format(user, self.hash)) raise PermissionError file = open(self.path + "object", 'r') - result = file.read() + content = file.read() file.close() - return result + return content, key if __name__ == '__main__': pass diff --git a/server/plugin.py b/server/plugin.py index 80e9863..892977e 100644 --- a/server/plugin.py +++ b/server/plugin.py @@ -9,7 +9,7 @@ from sleekxmpp.xmlstream.handler.callback import Callback from sleekxmpp.xmlstream.matcher.xpath import MatchXPath from sleekxmpp.stanza.iq import Iq -from object import Object +from object import Object, ObjectError from permission import PermissionError class AliasQuery(ElementBase): @@ -17,12 +17,12 @@ class AliasQuery(ElementBase): name = 'query' plugin_attrib = 'alias' interfaces = set(('node', 'type', 'content', 'permission', 'key')) - sub_interfaces = set(('content', 'permission')) + sub_interfaces = set(('content', 'permission', 'key')) def addItem(self, node, key, permission = None): item = AliasItem(None, self) item['node'] = node - item['key']= key + item['key'] = key if permission is not None: item['permission'] = str(permission) @@ -30,7 +30,7 @@ class AliasItem(ElementBase): namespace = 'alias:query' name = 'item' plugin_attrib = 'item' - interfaces = set(('node', 'permission', 'key' )) + interfaces = set(('node', 'permission', 'key')) class AliasPlugin(base.base_plugin): @@ -63,8 +63,9 @@ class AliasPlugin(base.base_plugin): node = iq['alias']['node'] if not node: node = hashlib.sha1(callee).hexdigest() + node = Object(callee, node) - + if iq['alias']['type'] == 'items': try: childs = node.get_child_list(caller) @@ -80,8 +81,7 @@ class AliasPlugin(base.base_plugin): if iq['alias']['type'] == 'content': try: - content = node.get_content(caller) - key = node.get_key(caller) + content, key = node.get_content(caller) except PermissionError: self.send_permission_error(iq, 'Permission') else: diff --git a/webclient/lib/basic.js b/webclient/lib/basic.js index bdcf5f7..eb65ecf 100644 --- a/webclient/lib/basic.js +++ b/webclient/lib/basic.js @@ -1,5 +1,5 @@ var BOSH_SERVICE = 'http://alias.fr.nf/http-bind'; -var server_component = 'object.alias.fr.nf' +var server_component = 'object.alias.fr.nf'; var connection = null; jQuery.expr[':'].Contains = function(a,i,m){ |
