Esempio n. 1
0
def index():
    """
    example action using the internationalization operator T and flash
    rendered by views/default/index.html or views/generic.html
    """
    form=FORM(T('Search:'),
              INPUT( _name='filesearch', requires=IS_LENGTH(minsize=3)),
              INPUT(_type='submit'))

    filesearch=None
    if form.accepts(request,session):
        filesearch=request.vars['filesearch']
        if not request.env.web2py_runtime_gae:
            rows= db(db.ddl.filename.contains(filesearch.replace("%", "_").replace(" ","%"))).select(orderby=db.ddl.filename, limitby=(0,100))
        else:
#            query = like_query(filesearch.replace(" ","%"), db.ddl.filename)
#            rows = db(query).select()
            from google.appengine.ext.db import GqlQuery
            query = filesearch
            queryEnd = query+"\xEF\xBF\xBD".decode('utf-8')
            rows = GqlQuery("SELECT * FROM ddl WHERE filename>=:1 AND filename<=:2 ORDER BY filename DESC", query, queryEnd)
    else:
        rows= db(db.ddl.id>0).select(orderby=~db.ddl.date_added, limitby=(0,20))
    ddlz=[]

    for row in rows:
        if not request.env.web2py_runtime_gae:
            date_added=row['date_added']
        else:
            date_added=row.date_added
        difference = datetime.now()-date_added
        weeks, days = divmod(difference.days, 7)
        minutes, seconds = divmod(difference.seconds, 60)
        hours, minutes = divmod(minutes, 60)
        if not request.env.web2py_runtime_gae:
            row['timedelta']= getTimeDelta(weeks, days, hours, minutes, seconds)
            row['nickname']= row['uploader']['nickname']
        else:
            row.timedelta= getTimeDelta(weeks, days, hours, minutes, seconds)
            if type(row.uploader) is long:
                row.nickname = row.uploader
                row.id = 0
            else:
                row.nickname= row.uploader.nickname
                
        ddlz.append(row)

    loggedIn = True if auth.is_logged_in() else False

    return dict(message=T('Hello World'),ddlz=ddlz, form=form, filesearch=filesearch, loggedIn=loggedIn)
Esempio n. 2
0
def ddl(id="", filename=""):
    # find the record
    ddl= db((db.ddl.filename_url==filename) & (db.ddl.id==id)).select().first()
    if not ddl:
        return "404 - File not found."
    else:
        # prepare the file
        ddlJ = {
            'id':ddl.id,
            'author':ddl.author,
            'filename':ddl.filename,
            'description':ddl.description,
            'uploader':ddl.uploader,
            'size':ddl.size,
            'hash':ddl.hash,
            'parts':ddl.parts,
            'service':ddl.service,
            'links':ddl.links.split("|"),
            'version':ddl.version,
            'time':int(mktime(ddl.date_added.timetuple()))
        }
        ddlJson = json.dumps(ddlJ, sort_keys=True, indent=4)
        public_ddl = {
            "e": 65537,
            "n": 138699374543223257537557103176001704226735255147448649583225017098287197630734176291676474096655313606555548753275002732095146725547697816211326459323755204828036245647843790985208692060549009977103102474302073609652750671753426409739287485014860128030833183117757223967930924686377060843991855851119927153483
        }
        encryptedMsg = encryptForClient(public_ddl['n'],public_ddl['e'],ddlJson)
        #response.headers['Content-Type'] = 'application/ddl'
        #response.headers['Content-Disposition'] = 'attachment; filename=test.ddl'
        #return response.stream(ddlFile, request=request)
#        request.args[0] = ddlFile.name
#        return response.download(request, ddlFile)
        response.headers['Content-Type'] = "application/octet-stream"
        response.headers['Content-Disposition'] = 'attachment; filename=%s.ddl' % ddl.filename
        return encryptedMsg
Esempio n. 3
0
def loginTest(nickname, uploaderKey):
    returnCode = -1
    message = ""
    uploaderID = -1
    try:
        record = db(db.auth_user.nickname==nickname).select().first()
    except:
        pass
    else:
        if not record:
            returnCode= -1
            message= "Who is %s?" % nickname
        else:
            if not record.uploader_key==uploaderKey:
                returnCode= -1
                message= "Wrong API Key"
            else:
                if record.is_uploader:
                    # login the user
                    #session.nickname= nickname
                    uploaderID = record.id
                    returnCode=0
                else:
                    returnCode= -1
                    message= "You are not allowed to upload"
    return returnCode, message, uploaderID
Esempio n. 4
0
def receiveDDL(encryptedText):
    returnCode=-1
    message="Unknown Error"
    try:
        decryptedMsg= decryptFromClient(encryptedText)
    except:
        returnCode=-1
        message= "Error decrypting the DDL"
    else:
        try:
            dataFromClient = json.loads(decryptedMsg)
        except :
            returnCode= -1
            message="Error reading the DDL"
        else:
            # prepare a DDL from the received information
            if 'uploaderID' in dataFromClient:
                uploader= db(db.auth_user.id==dataFromClient['uploaderID']).select().first()
            else:
                uploader= db(db.auth_user.nickname==dataFromClient['nickname']).select().first()
            ddl = dataFromClient['ddl']
            # remove previous DDL, if present
            #db((db.ddl.filename==ddl['filename']) & (db.ddl.uploader==uploader.id)).delete()
            db.ddl.update_or_insert(
                (db.ddl.filename==ddl['filename']) & (db.ddl.uploader==uploader.id)
                ,  author=ddl['author']
                , uploader=uploader.id
                , filename=ddl['filename']
                , description=ddl['description'],
                size=ddl['size'],
                hash=ddl['hash'],
                parts=ddl['parts'],
                service=ddl['service'],
                links="|".join(ddl['links']),
                version=ddl['version'],
                date_added=datetime.now()
                #, date_created=datetime.fromtimestamp(ddl['time'])
            )
            returnCode= 0
            message="Upload done!"
    dataToSend = {
        'returnCode' : returnCode,
        'message' : message
    }
    return json.dumps(dataToSend, sort_keys=True, indent=4)
Esempio n. 5
0
def downloaded(encryptedText):
    # Requires:
    # id
    # filename
    # uploader
    # returnCode
    # message
    returnCode= -1
    message= "Unknown Error"
    try:
        decryptedMsg= decryptFromClient(encryptedText)
    except:
        returnCode=-1
        message= "Error decrypting the message"
    else:
        try:
            dataFromClient = json.loads(decryptedMsg)
        except :
            returnCode= -1
            message= "Error reading the message"
        else:
            if 'id' in dataFromClient:
                now= datetime.now()
                # update ddl
                ddl= db(db.ddl.id==dataFromClient['id']).select().first()
                if 'returnCode' in dataFromClient and dataFromClient['returnCode']==-1:
                    ddl.times_error      += 1
                else:
                    ddl.times_downloaded += 1
                ddl.last_time_downloaded = now
                ddl.update_record()
                # update log
                db.downloads_log.insert(
                    ddl=dataFromClient['id'],
                    downloader_ip= request.env["remote_addr"],
                    download_time= now,
                    message=dataFromClient['message']
                )
                returnCode= 0
                message="Download done!"
            else:
                returnCode= -1
                message= "Which file did you download?"
    dataToSend = {
        'returnCode' : returnCode,
        'message' : message
    }
    return json.dumps(dataToSend, sort_keys=True, indent=4)