Пример #1
0
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("/")
Пример #2
0
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)
Пример #3
0
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)
Пример #4
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)
Пример #5
0
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)
Пример #6
0
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)
Пример #7
0
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)
Пример #8
0
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)
Пример #9
0
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)
Пример #10
0
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)