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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# -*- 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
|