# -*- coding: utf-8 -*- import StringIO 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 * from config import config class ObjectError(Exception): pass; class Object: def __init__(self, owner, hash = None): self.owner = owner if hash is None: hash = hashlib.sha1(owner).hexdigest() 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:]) class ObjectReader(Object): def __init__(self, owner, hash = None): Object.__init__(self, owner, hash) if not os.path.exists(self.object_path): logger.error("Object {} can't be found for user {}".format(self.hash, self.owner)) raise ObjectError def get_permission(self, user): with open(os.path.join(self.object_path, 'permissions'), 'r') as file: for line in file: name, perm, key = line.split() if name == user: return int(perm) return None def get_key(self, user): with open(os.path.join(self.object_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(os.path.join(self.object_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: logger.error("User {} doesn't have the list permission for object {}" .format(user, self.hash)) raise PermissionError file = open(os.path.join(self.object_path, 'childs'), 'r') result = [] for line in file: name = line.rstrip('\n') try: child = ObjectReader(self.owner, name) except ObjectError: logger.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, 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 file = open(os.path.join(self.path, "object"), 'r') content = file.read() file.close() return content, key def get_registration_data(self): pass 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