aboutsummaryrefslogtreecommitdiffstats
path: root/server/object.py
blob: 73bd96eec633f893e2da587ab063ddc59a3d96cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# -*- 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, sep, perm = line.rstrip('\n').partition(' ')
            if name == user:
                return int(perm)

        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)
                    if permission > 0:
                        result.append((name, permission))

        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