diff options
Diffstat (limited to 'server')
| -rw-r--r-- | server/object.py | 43 | ||||
| -rw-r--r-- | server/plugin.py | 9 | ||||
| -rw-r--r-- | server/user.py | 12 |
3 files changed, 34 insertions, 30 deletions
diff --git a/server/object.py b/server/object.py index c2b5d16..c72a9a0 100644 --- a/server/object.py +++ b/server/object.py @@ -16,28 +16,24 @@ class ObjectError(Exception): pass; class Object: - - def __init__(self, owner, hash): + def __init__(self, owner, hash = None): self.owner = owner if hash is None: hash = hashlib.sha1(owner).hexdigest() - self.hash = hash - owner_path = config.root + self.owner + '/' - - if not os.path.exists(owner_path) : - logging.error("User {} is not registered".format(self.owner)) - raise ObjectError - - self.path = owner_path + self.hash[:2] + '/' + self.hash[2:] + '/' - - if not os.path.exists(self.path) : + self.owner_path = os.path.join(config.root, owner) + self.object_path = os.path.join(self.owner_path, hash[:2], hash[2:]) + +class ObjectReader(Object): + def __init__(self, owner, hash = None): + Object.__init__(self, owner, hash) + if not os.path.exists(self.object_path): logging.error("Object {} can't be found for user {}".format(self.hash, self.owner)) raise ObjectError def get_permission(self, user): - with open(self.path + 'permissions', 'r') as file: + with open(os.path.join(self.object_path, 'permissions'), 'r') as file: for line in file: name, perm, key = line.split() if name == user: @@ -45,7 +41,7 @@ class Object: return None def get_key(self, user): - with open(self.path + 'permissions', 'r') as file: + with open(os.path.join(self.object_path, 'permissions'), 'r') as file: for line in file: name, perm, key = line.split() if name == user: @@ -53,7 +49,7 @@ class Object: return None def get_permission_key(self, user): - with open(self.path + 'permissions', 'r') as file: + with open(os.path.join(self.object_path, 'permissions'), 'r') as file: for line in file: name, perm, key = line.split() if name == user: @@ -67,12 +63,12 @@ class Object: .format(user, self.hash)) raise PermissionError - file = open(self.path + "childs", 'r') + file = open(os.path.join(self.object_path, 'childs'), 'r') result = [] for line in file: name = line.rstrip('\n') try: - child = Object(self.owner, name) + child = ObjectReader(self.owner, name) except ObjectError: logging.error("Object {} can't be find for user {}".format(self.hash, self.owner)) @@ -91,7 +87,7 @@ class Object: .format(user, self.hash)) raise PermissionError - file = open(self.path + "object", 'r') + file = open(os.path.join(self.path, "object"), 'r') content = file.read() file.close() return content, key @@ -99,6 +95,17 @@ class Object: def get_private_key(self): pass +class ObjectWriter(Object): + def __init__(self, owner, hash = None): + Object.__init__(self, owner, hash) + if not os.path.exists(self.owner_path): + logging.error("User {} is not registered".format(self.owner)) + os.makedirs(self.object_path) + for filename in ['permissions', 'childs', 'object']: + file=open(os.path.join(self.object_path, filename), "w") + file.close() + + if __name__ == '__main__': pass diff --git a/server/plugin.py b/server/plugin.py index 393e675..8d2e8c2 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, ObjectError +from object import ObjectReader, ObjectError from permission import PermissionError class AliasQuery(ElementBase): @@ -58,7 +58,7 @@ class AliasPlugin(base.base_plugin): caller = iq['from'].bare if iq['alias']['type'] == 'keys': - key, salt = Object(caller).get_private_key(); + key, salt = ObjectReader(caller).get_private_key(); iq.reply() iq['alias']['type'] = 'keys' iq['alias']['key'] = key @@ -71,10 +71,7 @@ class AliasPlugin(base.base_plugin): logging.error("callee field not base64 encoded") node = iq['alias']['node'] - if not node: - node = hashlib.sha1(callee).hexdigest() - - node = Object(callee, node) + node = ObjectReader(callee, node) if iq['alias']['type'] == 'items': try: diff --git a/server/user.py b/server/user.py index a2ca732..3c47dbe 100644 --- a/server/user.py +++ b/server/user.py @@ -2,6 +2,8 @@ import os import os.path import shutil import hashlib +import logging +from object import ObjectWriter class UserHandler: @@ -10,12 +12,10 @@ class UserHandler: def register(self, name): userDir = self.root + '/' + name - self.hash = hashlib.sha1(name).hexdigest() - root_node = userDir + '/' + self.hash[:2] + '/' + self.hash[2:] - os.makedirs(root_node) - os.utime(root_node + '/permissions') - os.utime(root_node + '/childs') - os.utime(root_node + '/object') + if os.path.exists(userDir): + logging.error("User {} path already exists".format(name)) + os.mkdir(userDir) + ObjectWriter(name) def registered(self, name): return os.path.exists(self.root + '/' + name) |
