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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# -*- coding: utf-8 -*-
import StringIO
import hashlib
import sys
import os
import os.path
import zlib
import datetime
import fileinput
import logging
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_private_key(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
|