def confirm(): subtitle = "Transfer books to Internet Archive" form = ConfirmForm(request.form) if form.validate(): uuid = request.cookies.get("bub_session") if uuid == None: flash(error_msg(6)) return redirect("/") md5_uuid = hashlib.md5(uuid).hexdigest() stored_request = models.Request.query.filter_by(md5_uuid=md5_uuid).first() if stored_request == None: flash(error_msg(6)) return redirect("/") stored_request.confirmed = 1 db.session.commit() redundant_book = models.Request.query.filter_by( md5_book=stored_request.md5_book, confirmed=1, job_submitted=1 ).first() if redundant_book == None: store_book_metadata(stored_request.library, stored_request.book_id, stored_request.sno) submit_job(stored_request) flash(error_msg(100, email=stored_request.email)) return redirect( url_for("progress", subtitle=subtitle, book_id="%s:%s" % (stored_request.library, stored_request.book_id)) ) else: return redirect("/")
def index(): subtitle = "Transfer books to Internet Archive" form = UploadForm(request.form) if request.method == "POST": if form.validate(): book_id = html_escape(form.book_id.data) email = html_escape(form.email.data) if form.email.data not in (None, "") else "" book = bridge.fields(form.library_id.data, book_id, email) book_id = book.Id if book.Id not in (None, "") else book_id redis = redis_py.Redis() redis_key3 = keys.redis_key3 book_key = "%s:%s:%s" % (redis_key3, form.library_id.data, book_id) library_url_key = book_key + ":library_url" redis_py.set(library_url_key, form.book_id.data, True) redis.expire(library_url_key, 60 * 15) verification_status_no = book.verify_fields() if verification_status_no != 0: flash(error_msg(verification_status_no, book)) return render_template("index.html", subtitle=subtitle, libraries=libraries, form=form) else: if redundant_request(book) == True: flash(error_msg(50)) return render_template("index.html", subtitle=subtitle, libraries=libraries, form=form) book_info = bridge.book_info(form.library_id.data, book_id) if isinstance(book_info, (int, long, float, complex)): flash(error_msg(book_info)) return render_template("index.html", subtitle=subtitle, libraries=libraries, form=form) confirm_resp = make_response(minify(render_template("confirm.html", book_info=book_info, form=form))) uuid = urandom(32).encode("hex") confirm_resp.set_cookie("bub_session", uuid) store_request(book, uuid) return confirm_resp return render_template("index.html", subtitle=subtitle, libraries=libraries, form=form) else: return render_template("index.html", subtitle=subtitle, libraries=libraries, form=form)
def mass_upload(): subtitle = "Upload several books to Internet Archive" form = MassUpload(request.form) if form.validate(): if form.email.data: if validate_email(form.email.data) != True: flash(error_msg(5)) session["timestamp"] = datetime.now() return render_template("mass_upload.html", subtitle=subtitle, form=form, _errorNo=5) redis = redis_py.Redis() redis_key4 = keys.redis_key4 q = redis_py.Queue(redis_key4) q.add(json.dumps((form.ids.data, form.email.data, form.language.data))) session["timestamp"] = datetime.now() flash(error_msg(100, email=form.email.data)) return render_template("mass_upload.html", subtitle=subtitle, form=form) return render_template("mass_upload.html", subtitle=subtitle, form=form, _errorNo=0)
def f_retry(*args, **kwargs): if not session.has_key("timestamp"): return redirect("/bub/admin") elif session.has_key("timestamp"): if (datetime.now() - session["timestamp"]) > timedelta(minutes=15): flash(error_msg(6)) return redirect("/bub/admin") return f(*args, **kwargs)
def admin(): subtitle = "Login for administrative tasks" form = AdminLogin(request.form) if form.validate(): if form.password.data == keys.admin_password: session["timestamp"] = datetime.now() return redirect("/bub/admin/mass-upload") else: flash(error_msg(500)) return render_template("admin_login.html", form=form, _errorNo=500) return render_template("admin_login.html", subtitle=subtitle, form=form)
def admin(): subtitle = "Login for administrative tasks" form = AdminLogin(request.form) if form.validate(): if form.password.data == keys.admin_password: session['timestamp'] = datetime.now() return redirect('/bub/admin/mass-upload') else: flash(error_msg(500)) return render_template('admin_login.html', form=form, _errorNo=500) return render_template('admin_login.html', subtitle=subtitle, form=form)
def reupload(book_id, email="", key=""): subtitle = "Reupload book to Internet Archive" form = ReUpload() if email in (None, "") and key not in (None, ""): return render_template('reupload.html', subtitle=subtitle, form=form) if key != hashlib.md5(str(email) + str(keys.flask_app_secret)).hexdigest( ) and key not in (None, ""): return render_template('reupload.html', subtitle=subtitle, form=form) form = ReUpload() if form.validate() or key not in (None, ""): book_values = re.search("(.*):(.*)", book_id) library = book_values.group(1) Id = book_values.group(2) ia_identifier_suffix = get_valid_identifier_suffix(library, Id) reset_book_progress(library, ia_identifier_suffix) redis = redis_py.Redis() redis_key3 = keys.redis_key3 book_metadata = redis_py.get(redis_key3 + ":" + book_id + ":meta_data", True) book_key = "%s:%s:%s" % (redis_key3, library, ia_identifier_suffix) metadata_key = book_key + ":meta_data" book_request_key = book_key + ":requests" redis_py.set(metadata_key, book_metadata, True) request = dict(email=form.email.data) redis_py.sadd(book_request_key, json.dumps(request), request_cache=True) book = models.Book(book_id=ia_identifier_suffix, library=library, requests=json.dumps(request), meta_data=book_metadata) db.session.add(book) db.session.commit() redis_key1 = keys.redis_key1 q_global_job = redis_py.Queue(redis_key1 + "global") q_global_job.add( json.dumps(dict(library=library, book_id=ia_identifier_suffix))) q = redis_py.Queue(redis_key1) q.add( json.dumps( dict(library=library, Id=Id, ia_identifier_suffix=ia_identifier_suffix))) flash(error_msg(100, email=form.email.data)) return redirect( url_for('progress', book_id=library + ":" + ia_identifier_suffix)) else: return render_template('reupload.html', subtitle=subtitle, form=form)
def reupload(book_id, email="", key=""): subtitle = "Reupload book to Internet Archive" form = ReUpload() if email in (None, "") and key not in (None, ""): return render_template("reupload.html", subtitle=subtitle, form=form) if key != hashlib.md5(str(email) + str(keys.flask_app_secret)).hexdigest() and key not in (None, ""): return render_template("reupload.html", subtitle=subtitle, form=form) form = ReUpload() if form.validate() or key not in (None, ""): book_values = re.search("(.*):(.*)", book_id) library = book_values.group(1) Id = book_values.group(2) ia_identifier_suffix = get_valid_identifier_suffix(library, Id) reset_book_progress(library, ia_identifier_suffix) redis = redis_py.Redis() redis_key3 = keys.redis_key3 book_metadata = redis_py.get(redis_key3 + ":" + book_id + ":meta_data", True) book_key = "%s:%s:%s" % (redis_key3, library, ia_identifier_suffix) metadata_key = book_key + ":meta_data" book_request_key = book_key + ":requests" redis_py.set(metadata_key, book_metadata, True) request = dict(email=form.email.data) redis_py.sadd(book_request_key, json.dumps(request), request_cache=True) book = models.Book( book_id=ia_identifier_suffix, library=library, requests=json.dumps(request), meta_data=book_metadata ) db.session.add(book) db.session.commit() redis_key1 = keys.redis_key1 q_global_job = redis_py.Queue(redis_key1 + "global") q_global_job.add(json.dumps(dict(library=library, book_id=ia_identifier_suffix))) q = redis_py.Queue(redis_key1) q.add(json.dumps(dict(library=library, Id=Id, ia_identifier_suffix=ia_identifier_suffix))) flash(error_msg(100, email=form.email.data)) return redirect(url_for("progress", book_id=library + ":" + ia_identifier_suffix)) else: return render_template("reupload.html", subtitle=subtitle, form=form)
def manual(): subtitle = "Upload using wildcards" try: form = WildcardForm(request.form) except UnboundLocalError: form = WildcardForm() return render_template("wildcard.html", subtitle=subtitle, form=form) if request.method == "POST": if form.validate(): if form.book_url.data in (None, "") and form.book_pdf_url.data in (None, ""): return render_template("wildcard.html", subtitle=subtitle, form=form) if form.link_type.data == "wildcard": book_url = form.book_url.data if form.book_url.data not in (None, "") else "" from_no = html_escape(form.from_no.data) if form.from_no.data not in (None, "") else "" to_no = html_escape(form.to_no.data) if form.to_no.data not in (None, "") else "" info_url = re.sub("\(\*\)", str(from_no), book_url) book_url = book_url + ":" + str(from_no) + "," + str(to_no) book_url = book_url + ":" + "wildcard" elif form.link_type.data == "pdf": book_url = form.book_pdf_url.data if form.book_pdf_url.data not in (None, "") else "" info_url = book_url book_url = book_url + ":" + "pdf" library = "man" Id = hashlib.md5(book_url).hexdigest() email = html_escape(form.email.data) if form.email.data not in (None, "") else "" book = bridge.fields(library, book_url, email) verification_status_no = book.verify_fields() if verification_status_no != 0: flash(error_msg(verification_status_no, book)) return render_template("wildcard.html", subtitle=subtitle, form=form) tld = extract_base_domain(book_url) book_metadata = dict( image_url="", thumbnail_url="", printType="BOOK", subtitle="", infoLink=info_url, publicDomain=True, scanner=tld, sponser=tld, title=form.title.data if form.title.data not in (None, "") else "", author=form.author.data if form.author.data not in (None, "") else "", publisher=form.publisher.data if form.publisher.data not in (None, "") else "", publishedDate=form.date.data if form.date.data not in (None, "") else "", description=form.desc.data if form.desc.data not in (None, "") else "", language=form.language.data if form.language.data not in (None, "") else "", ) ia_identifier_suffix = get_valid_identifier_suffix(library, Id) redis = redis_py.Redis() redis_key3 = keys.redis_key3 redis_key1 = keys.redis_key1 book_key = "%s:%s:%s" % (redis_key3, library, ia_identifier_suffix) metadata_key = book_key + ":meta_data" redis_py.set(metadata_key, json.dumps(book_metadata), True) book_request_key = book_key + ":requests" request_details = dict(email=email) redis_py.sadd(book_request_key, json.dumps(request_details), request_cache=True) md5_book = hashlib.md5(ia_identifier_suffix + library).hexdigest() meta_data = json.dumps(book_metadata) book = models.Book( book_id=ia_identifier_suffix, library=library, requests=json.dumps(request_details), meta_data=meta_data, md5_book=md5_book, ) db.session.add(book) db.session.commit() q_global_job = redis_py.Queue(redis_key1 + "global") q_global_job.add(json.dumps(dict(library=library, book_id=ia_identifier_suffix))) q = redis_py.Queue(redis_key1) q.add(json.dumps(dict(library=library, Id=book_url, ia_identifier_suffix=ia_identifier_suffix))) flash(error_msg(100, email=email)) return redirect(url_for("progress", book_id=library + ":" + ia_identifier_suffix)) else: return render_template("wildcard.html", subtitle=subtitle, form=form) else: return render_template("wildcard.html", subtitle=subtitle, form=form)
def manual(): subtitle = "Upload using wildcards" try: form = WildcardForm(request.form) except UnboundLocalError: form = WildcardForm() return render_template("wildcard.html", subtitle=subtitle, form=form) if request.method == 'POST': if form.validate(): if form.book_url.data in (None, "") and form.book_pdf_url.data in (None, ""): return render_template("wildcard.html", subtitle=subtitle, form=form) if form.link_type.data == 'wildcard': book_url = form.book_url.data if form.book_url.data not in ( None, "") else "" from_no = html_escape( form.from_no.data) if form.from_no.data not in (None, "") else "" to_no = html_escape( form.to_no.data) if form.to_no.data not in (None, "") else "" info_url = re.sub('\(\*\)', str(from_no), book_url) book_url = book_url + ":" + str(from_no) + "," + str(to_no) book_url = book_url + ":" + 'wildcard' elif form.link_type.data == 'pdf': book_url = form.book_pdf_url.data if form.book_pdf_url.data not in ( None, "") else "" info_url = book_url book_url = book_url + ":" + 'pdf' library = 'man' Id = hashlib.md5(book_url).hexdigest() email = html_escape( form.email.data) if form.email.data not in (None, "") else "" book = bridge.fields(library, book_url, email) verification_status_no = book.verify_fields() if verification_status_no != 0: flash(error_msg(verification_status_no, book)) return render_template("wildcard.html", subtitle=subtitle, form=form) tld = extract_base_domain(book_url) book_metadata = dict( image_url="", thumbnail_url="", printType="BOOK", subtitle="", infoLink=info_url, publicDomain=True, scanner=tld, sponser=tld, title=form.title.data if form.title.data not in (None, "") else "", author=form.author.data if form.author.data not in (None, "") else "", publisher=form.publisher.data if form.publisher.data not in (None, "") else "", publishedDate=form.date.data if form.date.data not in (None, "") else "", description=form.desc.data if form.desc.data not in (None, "") else "", language=form.language.data if form.language.data not in (None, "") else "") ia_identifier_suffix = get_valid_identifier_suffix(library, Id) redis = redis_py.Redis() redis_key3 = keys.redis_key3 redis_key1 = keys.redis_key1 book_key = "%s:%s:%s" % (redis_key3, library, ia_identifier_suffix) metadata_key = book_key + ":meta_data" redis_py.set(metadata_key, json.dumps(book_metadata), True) book_request_key = book_key + ":requests" request_details = dict(email=email) redis_py.sadd(book_request_key, json.dumps(request_details), request_cache=True) md5_book = hashlib.md5(ia_identifier_suffix + library).hexdigest() meta_data = json.dumps(book_metadata) book = models.Book(book_id=ia_identifier_suffix, library=library, requests=json.dumps(request_details), meta_data=meta_data, md5_book=md5_book) db.session.add(book) db.session.commit() q_global_job = redis_py.Queue(redis_key1 + "global") q_global_job.add( json.dumps(dict(library=library, book_id=ia_identifier_suffix))) q = redis_py.Queue(redis_key1) q.add( json.dumps( dict(library=library, Id=book_url, ia_identifier_suffix=ia_identifier_suffix))) flash(error_msg(100, email=email)) return redirect( url_for('progress', book_id=library + ":" + ia_identifier_suffix)) else: return render_template("wildcard.html", subtitle=subtitle, form=form) else: return render_template("wildcard.html", subtitle=subtitle, form=form)