# -*- coding: utf-8 -*- import StringIO import hashlib import sys import os import os.path import zlib import datetime import fileinput import logging from permission import * from config import config class ObjectError(Exception): pass; class Object: def __init__(self, owner, hash): self.owner = owner 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) : logging.error("Object {} can't be found for user {}".format(self.hash, self.owner)) raise ObjectError def get_permission(self, user): file = open(self.path + 'permissions', 'r') for line in file: name, perm, None = line.split() if name == user: return int(perm) 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 def get_child_list(self, user): perm = self.get_permission(user) if not perm & LIST: logging.error("User {} doesn't have the list permission for object {}" .format(user, self.hash)) raise PermissionError 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)) file.close() return result def get_content(self, user): perm = self.get_permission(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() file.close() return result if __name__ == '__main__': pass