# -*- 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): with open(self.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(self.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(self.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: 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: 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 : logging.error("User {} doesn't have read access to object {}" .format(user, self.hash)) raise PermissionError file = open(self.path + "object", 'r') content = file.read() file.close() return content, key if __name__ == '__main__': pass