aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorZaran <zaran.krleza@gmail.com>2011-01-29 23:59:55 +0100
committerZaran <zaran.krleza@gmail.com>2011-01-29 23:59:55 +0100
commit995686b5ff272fb1fe0e78c087d6855ea93ae85e (patch)
tree2189ec380146661973b47bbdeb598eb047443312 /server
parent1b5acc0c20a0f233b52a63b1f17ea0b3a7587e58 (diff)
downloadalias-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.
Diffstat (limited to 'server')
-rw-r--r--server/object.py68
-rw-r--r--server/plugin.py14
2 files changed, 42 insertions, 40 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: