def retrievedirectory(user, args, socket): channame = args # Check if channel exists if channel_controller.channel_getChannel(channame) == None: user_controller.user_sendSocketMessage(socket, "notice", "document,retrievedirectory", channame + " does not exist.") return channel = channel_controller.channel_getChannel(channame) # Check access level if(channel.accesscontrollist.get(user.ivleid) < channel.permissionlist.get("download")): user_controller.user_sendSocketMessage(socket, "notice", "document,retrievedirectory", "Permission denied.") return # Get folder items channelfolder = document_getChannelFolder(channel.name) files = [] for filename in sorted(channelfolder.iterkeys()): files.append(channelfolder[filename].toObject()) # Send results output = {} output['files'] = files output['channame'] = channame user_controller.user_sendSocketMessage(socket, "document", "retrieveddirectory", json.dumps(output)) return
def retrievedirectory(user, args, socket): channame = args # Check if channel exists if channel_controller.channel_getChannel(channame) == None: user_controller.user_sendSocketMessage(socket, "notice", "document,retrievedirectory", channame + " does not exist.") return channel = channel_controller.channel_getChannel(channame) # Check access level if (channel.accesscontrollist.get(user.ivleid) < channel.permissionlist.get("download")): user_controller.user_sendSocketMessage(socket, "notice", "document,retrievedirectory", "Permission denied.") return # Get folder items channelfolder = document_getChannelFolder(channel.name) files = [] for filename in sorted(channelfolder.iterkeys()): files.append(channelfolder[filename].toObject()) # Send results output = {} output['files'] = files output['channame'] = channame user_controller.user_sendSocketMessage(socket, "document", "retrieveddirectory", json.dumps(output)) return
def deletefile(user, args, socket): comma = args.find(",") channame = args[:comma] filename = args[(comma+1):] # Check if channel exists if channel_controller.channel_getChannel(channame) == None: user_controller.user_sendSocketMessage(socket, "notice", "document,deletefile", "Channel " + channame + " does not exist.") return else: channel = channel_controller.channel_getChannel(channame) # Check access level if(channel.accesscontrollist.get(user.ivleid) < channel.permissionlist.get("download")): user_controller.user_sendSocketMessage(socket, "notice", "document,deletefile", "Permission denied.") return # Check if file exists if filename not in document_getChannelFolder(channame): user_controller.user_sendSocketMessage(socket, "notice", "document,deletefile", "File " + filename + " does not exist.") return # Get file curfile = document_getChannelFolder(channame)[filename] # Delete file bucket.delete_key(curfile.url[len(bucketurl):]) db.removeDocument(curfile) del document_getChannelFolder(channame)[filename] # Send results for u in channel.joined: if channel.accesscontrollist.get(u) >= channel.permissionlist.get("download"): user_controller.user_send(channel.joined[u], "document", "deletedfile", json.dumps(curfile.toObject())) return
def prepareupload(user, args, socket): comma = args.find(",") channame = args[:comma] filename = args[(comma+1):] # Check if channel exists if channel_controller.channel_getChannel(channame) == None: user_controller.user_sendSocketMessage(socket, "notice", "document,prepareupload", channame + " does not exist.") return channel = channel_controller.channel_getChannel(channame) channelfolder = document_getChannelFolder(channel.name) # Check access level if(channel.accesscontrollist.get(user.ivleid) < channel.permissionlist.get("upload")): user_controller.user_sendSocketMessage(socket, "notice", "document,prepareupload", "Permission denied.") return # Check file length if (len(filename) <= 0 or len(filename) > 200): user_controller.user_sendSocketMessage(socket, "notice", "document,prepareupload", "The length of file name is invalid.") return # Clean preparelist if (channame+ "/" + filename) in preparelistname: if int(preparelistname[channame+ "/" + filename].time) + 600 < time.time()*1000: sesskey = preparelistname[channame+ "/" + filename].url.replace(bucketurl, "", 1) del preparelist[sesskey] del preparelistname[channame+ "/" + filename] # Check if filename is unique if filename in channelfolder or (channame+ "/" + filename) in preparelistname: user_controller.user_sendSocketMessage(socket, "notice", "document,prepareupload", "The file name is already used.") return # Create document document = Document.Document(channame, filename, user.ivleid, str(time.time()*1000), mimetypes.guess_type(filename)[0]) m = hashlib.new(masterseed) m.update(document.channame) m.update("/") m.update(document.filename) m.update("/") m.update(document.uploaderivleid) m.update("/") m.update(document.time) sessionkey = m.hexdigest() document.url = bucketurl + sessionkey preparelist[sessionkey] = document preparelistname[document.channame + "/" + document.filename] = document # Send results user_controller.user_sendSocketMessage(socket, "document", "preparedupload", sessionkey) return
def deleteautojoin(user, args, socket): if not args and len(args) > 0: return channame = args # Check if channel is in autojoin list if channame not in user.autojoin: user_sendSocketMessage(socket, "notice", "user,deleteautojoin", channame + " is not in your autojoin list.") return # Check if channel exist chan = channel_controller.channel_getChannel(channame) if chan is None: user_sendSocketMessage(socket, "notice", "user,deleteautojoin", args + " does not exist.") return # Update db.deleteAJChannel(user, chan) del user.autojoin[channame] # Notify user_send(user, "user", "deletedautojoin", channame)
def deletefile(user, args, socket): comma = args.find(",") channame = args[:comma] filename = args[(comma + 1):] # Check if channel exists if channel_controller.channel_getChannel(channame) == None: user_controller.user_sendSocketMessage( socket, "notice", "document,deletefile", "Channel " + channame + " does not exist.") return else: channel = channel_controller.channel_getChannel(channame) # Check access level if (channel.accesscontrollist.get(user.ivleid) < channel.permissionlist.get("download")): user_controller.user_sendSocketMessage(socket, "notice", "document,deletefile", "Permission denied.") return # Check if file exists if filename not in document_getChannelFolder(channame): user_controller.user_sendSocketMessage( socket, "notice", "document,deletefile", "File " + filename + " does not exist.") return # Get file curfile = document_getChannelFolder(channame)[filename] # Delete file bucket.delete_key(curfile.url[len(bucketurl):]) db.removeDocument(curfile) del document_getChannelFolder(channame)[filename] # Send results for u in channel.joined: if channel.accesscontrollist.get(u) >= channel.permissionlist.get( "download"): user_controller.user_send(channel.joined[u], "document", "deletedfile", json.dumps(curfile.toObject())) return
def document_upload(sessionkey, data): try: # Check if document exists if (preparelist.has_key(sessionkey) == False): return False # Get document document = preparelist[sessionkey] # Set file data k = Key(bucket) k.key = sessionkey k.set_metadata("Content-Type", document.contenttype) k.set_metadata("Content-Disposition", str('attachment; filename="' + document.filename + '"')) k.set_contents_from_string( str( base64.decodestring(data[data.find("base64,") + len("base64,"):]))) k.set_acl('public-read') # Update del preparelist[sessionkey] del preparelistname[document.channame + "/" + document.filename] channelfolder = document_getChannelFolder(document.channame) channelfolder[document.filename] = document db.createDocument(document) except: print "error uploading" try: bucket.delete_key(sessionkey) except: pass # Send results channel = channel_controller.channel_getChannel(document.channame) for u in channel.joined: if channel.accesscontrollist.get(u) >= channel.permissionlist.get( "download"): user_controller.user_send(channel.joined[u], "document", "uploadedfile", json.dumps(document.toObject())) user_controller.user_send( user_controller.user_getUser(document.uploaderivleid), "document", "useruploaded", json.dumps(document.toObject()))
def addautojoin(user, args, socket): if not args and len(args) > 0: return chan = channel_controller.channel_getChannel(args) if chan is None: user_sendSocketMessage(socket, "notice", "user,addautojoin", args + " does not exist."); return # Update if chan.name not in user.autojoin: user.autojoin[chan.name] = chan db.addAJChannel(user, chan) else: user_sendSocketMessage(socket, "notice", "user,addautojoin", chan.name + " is already in your autojoin list."); return # Notify user_send(user, "user", "addedautojoin", chan.name);
def addautojoin(user, args, socket): if not args and len(args) > 0: return chan = channel_controller.channel_getChannel(args) if chan is None: user_sendSocketMessage(socket, "notice", "user,addautojoin", args + " does not exist.") return # Update if chan.name not in user.autojoin: user.autojoin[chan.name] = chan db.addAJChannel(user, chan) else: user_sendSocketMessage( socket, "notice", "user,addautojoin", chan.name + " is already in your autojoin list.") return # Notify user_send(user, "user", "addedautojoin", chan.name)
def deleteautojoin(user, args, socket): if not args and len(args) > 0: return channame = args # Check if channel is in autojoin list if channame not in user.autojoin: user_sendSocketMessage(socket, "notice", "user,deleteautojoin", channame + " is not in your autojoin list.") return # Check if channel exist chan = channel_controller.channel_getChannel(channame) if chan is None: user_sendSocketMessage(socket, "notice", "user,deleteautojoin", args + " does not exist."); return # Update db.deleteAJChannel(user, chan) del user.autojoin[channame] # Notify user_send(user, "user", "deletedautojoin", channame);
def document_upload(sessionkey, data): try: # Check if document exists if (preparelist.has_key(sessionkey) == False): return False # Get document document = preparelist[sessionkey] # Set file data k = Key(bucket) k.key = sessionkey k.set_metadata("Content-Type", document.contenttype) k.set_metadata("Content-Disposition", str('attachment; filename="'+document.filename+'"')) k.set_contents_from_string(str(base64.decodestring(data[data.find("base64,")+len("base64,"):]))) k.set_acl('public-read') # Update del preparelist[sessionkey] del preparelistname[document.channame + "/" + document.filename] channelfolder = document_getChannelFolder(document.channame) channelfolder[document.filename] = document db.createDocument(document) except: print "error uploading" try: bucket.delete_key(sessionkey) except: pass # Send results channel = channel_controller.channel_getChannel(document.channame) for u in channel.joined: if channel.accesscontrollist.get(u) >= channel.permissionlist.get("download"): user_controller.user_send(channel.joined[u], "document", "uploadedfile", json.dumps(document.toObject())) user_controller.user_send(user_controller.user_getUser(document.uploaderivleid), "document", "useruploaded", json.dumps(document.toObject()))
def prepareupload(user, args, socket): comma = args.find(",") channame = args[:comma] filename = args[(comma + 1):] # Check if channel exists if channel_controller.channel_getChannel(channame) == None: user_controller.user_sendSocketMessage(socket, "notice", "document,prepareupload", channame + " does not exist.") return channel = channel_controller.channel_getChannel(channame) channelfolder = document_getChannelFolder(channel.name) # Check access level if (channel.accesscontrollist.get(user.ivleid) < channel.permissionlist.get("upload")): user_controller.user_sendSocketMessage(socket, "notice", "document,prepareupload", "Permission denied.") return # Check file length if (len(filename) <= 0 or len(filename) > 200): user_controller.user_sendSocketMessage( socket, "notice", "document,prepareupload", "The length of file name is invalid.") return # Clean preparelist if (channame + "/" + filename) in preparelistname: if int(preparelistname[channame + "/" + filename].time) + 600 < time.time() * 1000: sesskey = preparelistname[channame + "/" + filename].url.replace( bucketurl, "", 1) del preparelist[sesskey] del preparelistname[channame + "/" + filename] # Check if filename is unique if filename in channelfolder or (channame + "/" + filename) in preparelistname: user_controller.user_sendSocketMessage( socket, "notice", "document,prepareupload", "The file name is already used.") return # Create document document = Document.Document(channame, filename, user.ivleid, str(time.time() * 1000), mimetypes.guess_type(filename)[0]) m = hashlib.new(masterseed) m.update(document.channame) m.update("/") m.update(document.filename) m.update("/") m.update(document.uploaderivleid) m.update("/") m.update(document.time) sessionkey = m.hexdigest() document.url = bucketurl + sessionkey preparelist[sessionkey] = document preparelistname[document.channame + "/" + document.filename] = document # Send results user_controller.user_sendSocketMessage(socket, "document", "preparedupload", sessionkey) return