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
Esempio n. 5
0
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()))
Esempio n. 8
0
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);
Esempio n. 9
0
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)
Esempio n. 10
0
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);
Esempio n. 11
0
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()))
Esempio n. 12
0
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