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)
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
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
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)
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)