diff options
Diffstat (limited to 'server')
| -rw-r--r-- | server/object.py | 62 | ||||
| -rw-r--r-- | server/plugin.py | 7 | ||||
| -rwxr-xr-x | server/server.py | 2 |
3 files changed, 35 insertions, 36 deletions
diff --git a/server/object.py b/server/object.py index 7209cd2..d9cdc92 100644 --- a/server/object.py +++ b/server/object.py @@ -10,19 +10,15 @@ import fileinput import logging from permission import * -from config import config class Object: def __get_path(self): - return self.name[:2] + '/' + self.name[2:] + return self.root + self.owner + '/' + self.name[:2] + '/' + self.name[2:] def __create_dir(self): - if (not os.path.exists(self.name[:2])): - os.mkdir(self.name[:2]) - - if (not os.path.exists(self.path)): - os.mkdir(self.path) + if (not os.path.exists(self.__get_path())): + os.mkdirs(self.__get_path()) ## # Save the object on the disk. @@ -35,7 +31,7 @@ class Object: header += "#\n" #end of header store = header + self.data['content'] - file = open(self.path + "/object", 'w') + file = open(self.__get_path() + "/object", 'w') file.write(zlib.compress(store)) file.close() os.mknod(self.path + "/childs") @@ -44,8 +40,9 @@ class Object: ## # Class constructor. - def __init__(self, init): - + def __init__(self, root, owner, init): + + self.root = root if isinstance(init, dict): if 'author' not in init: init['author'] = 'None' @@ -57,14 +54,12 @@ class Object: self.data = init self.data['created'] = str(datetime.datetime.now()) self.name = hashlib.sha1(str(self.data)).hexdigest() - self.path = self.__get_path() self.saved = False elif isinstance(init, str): self.name = init - self.path = self.__get_path() - if (os.path.exists(self.path)): - file = open(self.path + '/object', 'r') + if (os.path.exists(self.__get_path())): + file = open(self.__get_path() + '/object', 'r') contentStream = StringIO.StringIO(zlib.decompress(file.read())) data = {} @@ -108,7 +103,7 @@ class Object: return 0 def get_permission(self, user): - file = open(self.path + '/permissions', 'r') + file = open(self.__get_path() + '/permissions', 'r') for line in file: name, sep, perm = line.rstrip('\n').partition(' ') if name == user: @@ -121,7 +116,7 @@ class Object: self.save() sentinel = False - for line in fileinput.input(self.path + "/permissions", inplace = 1): + for line in fileinput.input(self.__get_path() + "/permissions", inplace = 1): name, sep, perm = line.rstrip('\n').partition(' ') if name == user: sys.stdout.write(name + ' ' + str(permission) + '\n') @@ -130,34 +125,35 @@ class Object: sys.stdout.write(line) if not sentinel: - file = open(self.path + '/permissions', 'a') + file = open(self.__get_path() + '/permissions', 'a') file.write(user + ' ' + str(permission) + '\n') file.close() class ObjectHandler: - def __init__(self, root, user): - self.user = user - self.root_object = hashlib.sha1(user).hexdigest() - - if not os.path.exists(root + '/' + self.user): - logging.error("User {} root doesn't exist".format(self.user)) + def __init__(self, root, owner): + self.root = root + self.owner = owner + + def get_user_directory(self): + if os.path.exists(self.root + '/' + self.owner): + return self.root + '/' + self.owner + else: + logging.error("User {} root doesn't exist".format(self.owner)) def get_object_directory(self, hash): - directory = self.user + '/' + hash[:2] + '/' + hash[2:] + directory = self.get_user_directory() + hash[:2] + '/' + hash[2:] if (os.path.exists(directory)): return directory else: - return None + logging.error("Object {} directory doesn't exist".format(hash)) def get_object(self, hash): - os.chdir(self.user) - temp = Object(hash) - os.chdir('..') - return temp + return Object(self.root, self.owner, hash) - #return a list of hash,permission pairs - def get_child_list(self, hash, user): + #return a list of hash, permission pairs + #for the objects the queryer has permissions on + def get_child_list(self, hash, queryer): directory = self.get_object_directory(hash) if directory: result = [] @@ -167,14 +163,14 @@ class ObjectHandler: result.append(name) file.close() return result - else : + else: return None def create_home_node(self): pass def get_home_node(self): - return self.root_object + return hashlib.sha1(self.owner).hexdigest() if __name__ == '__main__': config.root = os.path.abspath('object_tests') diff --git a/server/plugin.py b/server/plugin.py index df05908..62ae958 100644 --- a/server/plugin.py +++ b/server/plugin.py @@ -44,9 +44,12 @@ class AliasPlugin(base.base_plugin): self.xmpp.plugin['xep_0030'].add_feature("alias:query") def handle_alias_query(self, iq): - callee = base64.b64decode(iq['to'].user) + try: + callee = base64.b64decode(iq['to'].user) + except TypeError: + logging.error("callee field not base64 encoded") caller = iq['alias']['from'] - handler = object.ObjectHandler(callee) + handler = object.ObjectHandler(self.config['root'],callee) node = iq['alias']['node'] if not node: node = handler.get_home_node() diff --git a/server/server.py b/server/server.py index c6ddf2b..fcddfe8 100755 --- a/server/server.py +++ b/server/server.py @@ -13,7 +13,7 @@ class ObjectComponent(ComponentXMPP): def __init__(self, jid, secret, server, port, root): ComponentXMPP.__init__(self, jid, secret, server, port) self.register_plugin('xep_0030') - self.register_plugin("AliasPlugin", module = "plugin") + self.register_plugin("AliasPlugin", module = "plugin", pconfig={'root': root}) self.add_event_handler("session_start", self.start) self.add_event_handler("presence_probe", self.presence_probe) self.add_event_handler("message", self.message) |
