aboutsummaryrefslogtreecommitdiffstats
path: root/server/object.py
diff options
context:
space:
mode:
authorGuillaume Horel <guillaume.horel@gmail.com>2011-05-03 03:03:27 -0400
committerGuillaume Horel <guillaume.horel@gmail.com>2011-05-03 03:03:27 -0400
commit76ae36901e9fb7bd9cc07162afd05ba41242fc1c (patch)
tree3d18338c0527f523293d214d3fae08ab09147947 /server/object.py
parent1bf4b8e5506c1b76fa453e1ae645410a09934c76 (diff)
downloadalias-76ae36901e9fb7bd9cc07162afd05ba41242fc1c.tar.gz
More fixes for the alias registration.
- registration info saved on the hard drive - doesn't return registration info for an already registered user
Diffstat (limited to 'server/object.py')
-rw-r--r--server/object.py95
1 files changed, 62 insertions, 33 deletions
diff --git a/server/object.py b/server/object.py
index 5773f4f..91ec3c7 100644
--- a/server/object.py
+++ b/server/object.py
@@ -4,11 +4,8 @@ import hashlib
import sys
import os
import os.path
-import zlib
-import datetime
import fileinput
import logging
-import pickle
logger = logging.getLogger(__name__)
from permission import *
@@ -18,18 +15,17 @@ class ObjectError(Exception):
pass;
class Object:
- def __init__(self, owner, hash = None):
- self.owner = owner
- if hash is None:
- hash = hashlib.sha1(owner).hexdigest()
+ def __init__(self, hash):
self.hash = hash
- self.owner_path = os.path.join(config.root, owner)
- self.object_path = os.path.join(self.owner_path, hash[:2], hash[2:])
-
+ self.object_path = os.path.join(config.root, hash[:2], hash[2:])
+
+ def exists(self):
+ return os.path.exists(self.object_path)
+
class ObjectReader(Object):
- def __init__(self, owner, hash = None):
- Object.__init__(self, owner, hash)
- if not os.path.exists(self.object_path):
+ def __init__(self, hash):
+ Object.__init__(self, hash)
+ if not self.exists():
logger.error("Object {} can't be found for user {}".format(self.hash,
self.owner))
raise ObjectError
@@ -70,10 +66,9 @@ class ObjectReader(Object):
for line in file:
name = line.rstrip('\n')
try:
- child = ObjectReader(self.owner, name)
+ child = ObjectReader(name)
except ObjectError:
- logger.error("Object {} can't be find for user {}".format(self.hash,
- self.owner))
+ logger.error('Object {} doesn\'t exist'.format(name))
else:
perm, key = child.get_permission_key(user)
if perm > 0:
@@ -83,31 +78,65 @@ class ObjectReader(Object):
return result
def get_content(self, user):
+ """Return object content and the user key to decrypt it."""
perm, key = self.get_permission_key(user)
if not perm & READ :
logger.error("User {} doesn't have read access to object {}"
.format(user, self.hash))
raise PermissionError
+ with open(os.path.join(self.object_path, 'object'), 'r') as file:
+ content = {}
+ for line in file:
+ k, v = line.split()
+ content[k] = v
- file = open(os.path.join(self.path, "object"), 'r')
- content = file.read()
- file.close()
- return content, key
+ #return content, key
+ return content
+
+
+class ObjectWriter(ObjectReader):
- def get_registration_data(self):
- pass
+ def __init__(self, hash):
+ Object.__init__(self, hash)
+ #new object
+ if not self.exists():
+ os.makedirs(self.object_path)
+ for filename in ['permissions', 'children', 'object']:
+ file=open(os.path.join(self.object_path, filename), "w")
+ file.close()
+
+ def write(self, user, content):
+ perm = self.get_permission(user)
+ if not perm & MODIFY:
+ logger.error("User {} doesn't have the modify permission for object {}"
+ .format(user, self.hash))
+ raise PermissionError
+ with open(os.path.join(self.object_path, 'object'), "w") as file:
+ for k, v in content:
+ file.write('{} {}'.format(k,v))
+
+ def append(self, user, content, parent):
+ parent_object = ObjectReader(parent)
+ perm = parent_object.get_permission(user)
+ if not perm & APPEND:
+ logger.error("User {} doesn't have the modify permission for object {}"
+ .format(user, parent))
+ raise PermissionError
+ with open(os.path.join(self.object_path, 'object'), "w") as file:
+ for k, v in content:
+ file.write('{} {}\n'.format(k,v))
+ #add the child hash to the parent
+ with open(os.path.join(parent_object.object_path, 'children'), "a") as file:
+ file.write('{}\n'.format(self.hash))
+
+ def create_root_object(self, user, content):
+ with open(os.path.join(self.object_path, 'object'), "w") as file:
+ for k, v in content.iteritems():
+ file.write('{} {}\n'.format(k,v))
+ #give all the permissions to the user
+ with open(os.path.join(self.object_path, 'permissions'), "a") as file:
+ file.write('{} 15 xxxxxx\n'.format(user,v))
-class ObjectWriter(Object):
- def __init__(self, owner, hash = None):
- Object.__init__(self, owner, hash)
- if not os.path.exists(self.owner_path):
- logger.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