diff --git a/cloudflare_error_page/__init__.py b/cloudflare_error_page/__init__.py
index 8e30edb..28895a7 100644
--- a/cloudflare_error_page/__init__.py
+++ b/cloudflare_error_page/__init__.py
@@ -3,7 +3,7 @@ import os
import secrets
from datetime import datetime, timezone
-from jinja2 import Environment, PackageLoader, select_autoescape
+from jinja2 import Environment, PackageLoader, Template, select_autoescape
env = Environment(
loader=PackageLoader("cloudflare_error_page"),
@@ -12,6 +12,7 @@ env = Environment(
lstrip_blocks=True,
)
+default_template = env.get_template("error.html")
def get_resources_folder() -> str:
"""
@@ -21,19 +22,22 @@ def get_resources_folder() -> str:
return os.path.join(os.path.dirname(os.path.abspath(__file__)), 'resources')
-def render(params: dict, allow_html: bool=True, use_cdn: bool=True) -> str:
- """
- Render a customized Cloudflare error page.
- """
- params = {**params}
+def fill_params(params: dict):
if not params.get('time'):
utc_now = datetime.now(timezone.utc)
params['time'] = utc_now.strftime("%Y-%m-%d %H:%M:%S UTC")
if not params.get('ray_id'):
params['ray_id'] = secrets.token_hex(8)
+
+
+def render(params: dict, allow_html: bool=True, use_cdn: bool=True) -> str:
+ """
+ Render a customized Cloudflare error page.
+ """
+ params = {**params}
+ fill_params(params)
if not allow_html:
params['what_happened'] = html.escape(params.get('what_happened', ''))
params['what_can_i_do'] = html.escape(params.get('what_can_i_do', ''))
- template = env.get_template("error.html")
return template.render(params=params, resources_use_cdn=use_cdn)
diff --git a/cloudflare_error_page/templates/error.html b/cloudflare_error_page/templates/error.html
index ce42991..fe4bf59 100644
--- a/cloudflare_error_page/templates/error.html
+++ b/cloudflare_error_page/templates/error.html
@@ -8,12 +8,14 @@
{% set error_code = params.error_code or 500 %}
{% set title = params.title or 'Internal server error' %}
-{{ params.html_title or ((error_code | string) + ': ' + title) }}
+{% set html_title = params.html_title or ((error_code | string) + ': ' + title) %}
+{{ html_title }}
+{% block header %}{% endblock %}
diff --git a/editor/server/__init__.py b/editor/server/__init__.py
index 68134c3..441de34 100644
--- a/editor/server/__init__.py
+++ b/editor/server/__init__.py
@@ -14,7 +14,6 @@ from sqlalchemy.orm import DeclarativeBase
root_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../../')
sys.path.append(root_dir)
-from cloudflare_error_page import render as render_cf_error_page
class Base(DeclarativeBase):
pass
diff --git a/editor/server/editor.py b/editor/server/editor.py
index 788d9b1..6041e91 100644
--- a/editor/server/editor.py
+++ b/editor/server/editor.py
@@ -7,8 +7,6 @@ from flask import (
send_from_directory,
)
-from . import get_common_cf_template_params, render_cf_error_page
-
root_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../../')
res_folder = os.path.join(root_dir, 'editor/resources')
diff --git a/editor/server/examples.py b/editor/server/examples.py
index 5faec38..d5ae820 100644
--- a/editor/server/examples.py
+++ b/editor/server/examples.py
@@ -10,7 +10,8 @@ from flask import (
redirect,
)
-from . import get_common_cf_template_params, render_cf_error_page
+from . import get_common_cf_template_params
+from cloudflare_error_page import render as render_cf_error_page
root_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../../')
examples_dir = os.path.join(root_dir, 'examples')
diff --git a/editor/server/share.py b/editor/server/share.py
index f0166a1..b89e2d2 100644
--- a/editor/server/share.py
+++ b/editor/server/share.py
@@ -1,5 +1,6 @@
# SPDX-License-Identifier: MIT
+import html
import random
import string
@@ -10,14 +11,38 @@ from flask import (
jsonify,
url_for,
)
+from jinja2 import Environment, select_autoescape
-from . import get_common_cf_template_params, render_cf_error_page
+from cloudflare_error_page import render as render_cf_error_page, fill_params, default_template as cf_template
+
+from . import get_common_cf_template_params
from . import db
from . import limiter
from . import models
# root_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../../')
# examples_dir = os.path.join(root_dir, 'examples')
+env = Environment(
+ autoescape=select_autoescape(),
+ trim_blocks=True,
+ lstrip_blocks=True,
+)
+template = env.from_string('''
+{% extends base %}
+
+{% block header %}
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+''')
bp = Blueprint('share', __name__, url_prefix='/')
@@ -68,19 +93,10 @@ def get(name: str):
})
else:
return abort(404)
- params = item.params
- params = {
- **params,
- **get_common_cf_template_params(),
- }
+ params: dict = item.params
params.pop('time')
params.pop('ray_id')
params.pop('client_ip')
- params['creator_info'] = {
- 'hidden': False,
- 'text': 'CF Error Page Editor',
- 'link': f'https://virt.moe/cloudflare-error-page/editor/#from={name}',
- }
if is_json:
return jsonify({
@@ -88,4 +104,22 @@ def get(name: str):
'parameters': params,
})
else:
- return render_cf_error_page(params=params, allow_html=False, use_cdn=True), 200
+ params = {
+ **params,
+ **get_common_cf_template_params(),
+ }
+ params['creator_info'] = {
+ 'hidden': False,
+ 'text': 'CF Error Page Editor',
+ 'link': f'https://virt.moe/cloudflare-error-page/editor/#from={name}',
+ }
+ fill_params(params)
+ params['what_happened'] = html.escape(params.get('what_happened', '')) # TODO: common render function?
+ params['what_can_i_do'] = html.escape(params.get('what_can_i_do', ''))
+
+ return template.render(base=cf_template,
+ params=params,
+ url=request.url,
+ description='Cloudflare error page',
+ resources_use_cdn=True)
+ # return render_cf_error_page(params=params, allow_html=False, use_cdn=True), 200