mirror of
https://github.com/donlon/cloudflare-error-page.git
synced 2025-12-19 14:59:28 +00:00
editor: support shortened share URLs
This commit is contained in:
@@ -92,9 +92,11 @@ def create_app(test_config=None) -> Flask:
|
|||||||
return '', 204
|
return '', 204
|
||||||
|
|
||||||
url_prefix = app.config.get('URL_PREFIX', '')
|
url_prefix = app.config.get('URL_PREFIX', '')
|
||||||
|
short_share_url = app.config.get('SHORT_SHARE_URL', False)
|
||||||
app.register_blueprint(editor.bp, url_prefix=f'{url_prefix}/editor')
|
app.register_blueprint(editor.bp, url_prefix=f'{url_prefix}/editor')
|
||||||
app.register_blueprint(examples.bp, url_prefix=f'{url_prefix}/examples')
|
app.register_blueprint(examples.bp, url_prefix=f'{url_prefix}/examples')
|
||||||
app.register_blueprint(share.bp, url_prefix=f'{url_prefix}/s')
|
app.register_blueprint(share.bp, url_prefix=f'{url_prefix}/s')
|
||||||
|
app.register_blueprint(share.bp_short, url_prefix=f'{url_prefix}' + ('' if short_share_url else '/s'))
|
||||||
|
|
||||||
return app
|
return app
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
# Url prefix for app urls
|
# Url prefix for app urls
|
||||||
URL_PREFIX = ''
|
URL_PREFIX = ''
|
||||||
|
|
||||||
|
# Digits of item name in shared links
|
||||||
|
SHARE_LINK_DIGITS = 7
|
||||||
|
|
||||||
|
# Use short share url (without '/s' path)
|
||||||
|
SHORT_SHARE_URL = false
|
||||||
|
|
||||||
# Set to true if trust X-Forwarded-For/X-Forwarded-Proto header
|
# Set to true if trust X-Forwarded-For/X-Forwarded-Proto header
|
||||||
BEHIND_PROXY = true
|
BEHIND_PROXY = true
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,11 @@ import string
|
|||||||
|
|
||||||
from flask import (
|
from flask import (
|
||||||
Blueprint,
|
Blueprint,
|
||||||
|
current_app,
|
||||||
request,
|
request,
|
||||||
abort,
|
abort,
|
||||||
jsonify,
|
jsonify,
|
||||||
|
redirect,
|
||||||
url_for,
|
url_for,
|
||||||
)
|
)
|
||||||
from jinja2 import Environment, select_autoescape
|
from jinja2 import Environment, select_autoescape
|
||||||
@@ -51,6 +53,7 @@ template = env.from_string('''
|
|||||||
''')
|
''')
|
||||||
|
|
||||||
bp = Blueprint('share', __name__, url_prefix='/')
|
bp = Blueprint('share', __name__, url_prefix='/')
|
||||||
|
bp_short = Blueprint('share_short', __name__, url_prefix='/')
|
||||||
|
|
||||||
|
|
||||||
rand_charset = string.ascii_lowercase + string.digits
|
rand_charset = string.ascii_lowercase + string.digits
|
||||||
@@ -81,7 +84,8 @@ def create():
|
|||||||
# TODO: strip unused params
|
# TODO: strip unused params
|
||||||
try:
|
try:
|
||||||
item = models.Item()
|
item = models.Item()
|
||||||
item.name = get_rand_name()
|
digits = current_app.config.get('SHARE_LINK_DIGITS', 7)
|
||||||
|
item.name = get_rand_name(digits)
|
||||||
item.params = params
|
item.params = params
|
||||||
db.session.add(item)
|
db.session.add(item)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
@@ -93,12 +97,12 @@ def create():
|
|||||||
return jsonify({
|
return jsonify({
|
||||||
'status': 'ok',
|
'status': 'ok',
|
||||||
'name': item.name,
|
'name': item.name,
|
||||||
'url': request.host_url[:-1] + url_for('share.get', name=item.name),
|
'url': request.host_url[:-1] + url_for('share_short.get', name=item.name),
|
||||||
# TODO: better way to handle this
|
# TODO: better way to handle this
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@bp.get('/<name>')
|
@bp_short.get('/<name>')
|
||||||
def get(name: str):
|
def get(name: str):
|
||||||
accept = request.headers.get('Accept', '')
|
accept = request.headers.get('Accept', '')
|
||||||
is_json = 'application/json' in accept
|
is_json = 'application/json' in accept
|
||||||
@@ -136,3 +140,12 @@ def get(name: str):
|
|||||||
base=cf_template,
|
base=cf_template,
|
||||||
url=request.url,
|
url=request.url,
|
||||||
description='Cloudflare error page')
|
description='Cloudflare error page')
|
||||||
|
|
||||||
|
|
||||||
|
@bp.get('/<name>')
|
||||||
|
def get_redir(name: str):
|
||||||
|
short_share_url = current_app.config.get('SHORT_SHARE_URL', False)
|
||||||
|
if short_share_url:
|
||||||
|
return redirect(f'../{name}', code=308)
|
||||||
|
else:
|
||||||
|
return get(name=name)
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export default defineConfig(({ mode }) => {
|
|||||||
server: {
|
server: {
|
||||||
port: 3000,
|
port: 3000,
|
||||||
proxy: {
|
proxy: {
|
||||||
'/s': {
|
'/s/': {
|
||||||
target: 'http://localhost:5000',
|
target: 'http://localhost:5000',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user