def post(): try: # authenticate user user = User.validate_auth_key(username=request.form.get("username"), api_key=request.form.get("api_key")) if user is None: return "API Auth Failed: Post" # decode the json payload data = json.loads(request.form.get("ebooks")) except KeyError: return "Bad Request" # stats log the upload Log.create(user.id, "CONNECT", request.form.get("total"), request.form.get("api_key")) # update the library ds = DataStore(user) new_ebook_count = ds.update_library(data) Log.create(user.id, "NEW", new_ebook_count, request.form.get("api_key")) # handle badge and reputation changes r = Reputation(user) r.new_ebooks(new_ebook_count) r.earn_badges() msgs = r.get_new_badges() # query books missing from S3 and supply back to the client rs = ds.find_missing_books() return json.dumps({'ebooks_to_upload': rs, 'messages': msgs})
def store_ebook(self, sdbkey, filehash, filepath): # connect to S3 bucket = Factory.connect_s3() k = Factory.get_key(bucket) k.key = sdbkey # calculate uploaded file md5 f = open(filepath, "rb") md5_tup = k.compute_md5(f) f.close() # error check uploaded file if filehash != md5_tup[0]: # TODO logging print 'upload corrupt!' else: try: # check for DeDRM meta tag meta = subprocess.Popen(['ebook-meta', filepath], stdout=subprocess.PIPE).communicate()[0] if "Tags : DeDRM" in meta: Log.create(self.user.id, "DEDRM", 1) self.set_dedrm_flag(sdbkey) # push file to S3 k.set_contents_from_filename(filepath, None, False, None, 10, None, md5_tup) # mark ebook as saved self.set_uploaded(sdbkey) except S3ResponseError as e: # TODO log print 'MD5 error at S3' # always delete local file os.remove(filepath)
def upload(): user = User.validate_auth_key( username=request.form.get("username"), api_key=request.form.get("api_key") ) if user is None: return "API Auth Failed: Upload" # stats log the upload Log.create(user.id, "UPLOAD", 1, request.form.get("api_key")) uploads.save(request.files['ebook'], None, "%s%s" % (request.form.get("filehash"), request.form.get("format"))) res = store_ebook.apply_async((user.id, request.form.get("sdbkey"), request.form.get("filehash"), request.form.get("format"))) return res.task_id
def upload(): user = User.validate_auth_key(username=request.form.get("username"), api_key=request.form.get("api_key")) if user is None: return "API Auth Failed: Upload" # stats log the upload Log.create(user.id, "UPLOAD", 1, request.form.get("api_key")) uploads.save( request.files['ebook'], None, "%s%s" % (request.form.get("filehash"), request.form.get("format"))) res = store_ebook.apply_async( (user.id, request.form.get("sdbkey"), request.form.get("filehash"), request.form.get("format"))) return res.task_id
def store_ebook(self, sdbkey, filehash, filepath): # connect to S3 bucket = Factory.connect_s3() k = Factory.get_key(bucket) k.key = sdbkey # calculate uploaded file md5 f = open(filepath, "rb") md5_tup = k.compute_md5(f) f.close() # error check uploaded file if filehash != md5_tup[0]: # TODO logging print 'upload corrupt!' else: try: # check for DeDRM meta tag meta = subprocess.Popen( ['ebook-meta', filepath], stdout=subprocess.PIPE).communicate()[0] if "Tags : DeDRM" in meta: Log.create(self.user.id, "DEDRM", 1) self.set_dedrm_flag(sdbkey) # push file to S3 k.set_contents_from_filename(filepath, None, False, None, 10, None, md5_tup) # mark ebook as saved self.set_uploaded(sdbkey) except S3ResponseError as e: # TODO log print 'MD5 error at S3' # always delete local file os.remove(filepath)
def post(): try: # authenticate user user = User.validate_auth_key( username=request.form.get("username"), api_key=request.form.get("api_key") ) if user is None: return "API Auth Failed: Post" # decode the json payload data = json.loads(request.form.get("ebooks")) except KeyError: return "Bad Request" # stats log the upload Log.create(user.id, "CONNECT", request.form.get("total"), request.form.get("api_key")) # update the library ds = DataStore(user) new_ebook_count = ds.update_library(data) Log.create(user.id, "NEW", new_ebook_count, request.form.get("api_key")) # handle badge and reputation changes r = Reputation(user) r.new_ebooks(new_ebook_count) r.earn_badges() msgs = r.get_new_badges() # query books missing from S3 and supply back to the client rs = ds.find_missing_books() return json.dumps({ 'ebooks_to_upload': rs, 'messages': msgs })