aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuillaume Horel <guillaume.horel@gmail.com>2011-04-13 01:17:58 -0400
committerGuillaume Horel <guillaume.horel@gmail.com>2011-04-13 01:17:58 -0400
commitf8933f67e9f08fd96a67031e675e422dbeea5c87 (patch)
treeb6750e25d657bb7d82a40f06173553f2acba0486
parent3b8849a0437b56454a71b60976d9eb040235c242 (diff)
downloadalias-f8933f67e9f08fd96a67031e675e422dbeea5c87.tar.gz
Rewrite of the object classes and various fixes
- splitted the Object class into ObjectWriter and ObjectReader - in the UserHandler class, the root object is now automatically created when registering with the component server. - use of os.join.path everywhere to make the code more robust
-rw-r--r--server/object.py43
-rw-r--r--server/plugin.py9
-rw-r--r--server/user.py12
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)