blck

ephemeral pastebin/url shortener
git clone https://git.parazyd.org/blck
Log | Files | Refs | README | LICENSE

commit 02b7e9b121521058d1984279ea1f58040ad654c8
parent ce6b469c3e0cb8645083d84e8b6f4025f3c79d98
Author: parazyd <parazyd@dyne.org>
Date:   Tue,  9 Feb 2021 06:29:05 +0100

Support blueprint for running in a path that is not "/".

Diffstat:
Mblck.py | 27++++++++++++++-------------
Mtemplates/index.html | 2+-
2 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/blck.py b/blck.py @@ -1,28 +1,25 @@ #!/usr/bin/env python3 # copyleft (c) 2017-2021 parazyd <parazyd@dyne.org> # see LICENSE file for copyright and license details. -""" -main blck module -""" from random import choice from os import remove from string import ascii_uppercase, ascii_lowercase -from flask import Flask, render_template, redirect, request +from flask import Flask, Blueprint, render_template, redirect, request -APP = Flask(__name__) +bp = Blueprint('blck', __name__, template_folder='templates') -@APP.route("/", methods=['GET', 'POST']) +@bp.route("/", methods=['GET', 'POST']) def main(): """ main routine """ try: return short(request.form['url']) except: - return render_template("index.html", pastebin=PASTEBIN) + return render_template("index.html", pastebin=PASTEBIN, root=args.r) -@APP.route("/<urlshort>") +@bp.route("/<urlshort>") def urlget(urlshort): """ returns a paste if it exists """ try: @@ -33,7 +30,7 @@ def urlget(urlshort): except FileNotFoundError: return "could not find paste\n" - cliagents = ['curl', 'Wget'] + cliagents = ['curl', 'Wget', ''] if request.headers.get('User-Agent').split('/')[0] not in cliagents \ and not PASTEBIN: return redirect(realurl.rstrip('\n'), code=301) @@ -64,9 +61,9 @@ def short(url): paste.write(url + '\n') if request.headers.get('X-Forwarded-Proto') == 'https': - return request.url_root.replace('http://', 'https://') + urlshort + '\n' + return request.url_root.replace('http://', 'https://') + args.r.lstrip('/') + urlshort + '\n' - return request.url_root + urlshort + '\n' + return request.url_root + args.r.lstrip('/') + urlshort + '\n' def genid(size=4, chars=ascii_uppercase + ascii_lowercase): @@ -81,6 +78,7 @@ if __name__ == '__main__': help='Use as pastebin rather than URL shortener') parser.add_argument('--noephemeral', default=False, action='store_true', help='Do not run in ephemeral mode') + parser.add_argument('-r', default='/', help='Application root') parser.add_argument('-l', default='localhost', help='Listen host') parser.add_argument('-p', default=5000, help='Listen port') parser.add_argument('-d', default=False, action='store_true', help='Debug') @@ -91,8 +89,11 @@ if __name__ == '__main__': if not PASTEBIN: import re + app = Flask(__name__) + app.register_blueprint(bp, url_prefix=args.r) + if args.d: - APP.run(host=args.l, port=args.p, threaded=True, debug=args.d) + app.run(host=args.l, port=args.p, threaded=True, debug=args.d) else: from bjoern import run - run(APP, args.l, args.p) + run(app, args.l, int(args.p)) diff --git a/templates/index.html b/templates/index.html @@ -16,7 +16,7 @@ {% endif %} </p> <div class="form"> - <form method="post" action="/"> + <form method="post" action="{{ r }}"> {% if not pastebin %} <input type="url" name="url" id="url" class="inputbox" placeholder="http://blck.cf" required autofocus></input> {% else %}