9
0
mirror of https://github.com/donlon/cloudflare-error-page.git synced 2025-12-19 14:59:28 +00:00

miscellaneous updates

This commit is contained in:
Anthony Donlon
2025-12-09 22:17:34 +08:00
parent 46b4c99e72
commit d1dc6b3bc2
5 changed files with 19 additions and 26 deletions

View File

@@ -28,8 +28,8 @@
<meta name="viewport" content="width=device-width,initial-scale=1" /> <meta name="viewport" content="width=device-width,initial-scale=1" />
<script src="https://cdn.jsdelivr.net/npm/ejs@3.1.10/ejs.min.js"></script> <script src="https://virt.moe/assets/cloudflare-error-page/ejs.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"> <link href="https://virt.moe/assets/cloudflare-error-page/bootstrap.min.css" rel="stylesheet">
<script> <script>
(async function () { (async function () {
@@ -331,6 +331,8 @@
doc.write(pageHtml); doc.write(pageHtml);
doc.close(); doc.close();
updateStatusBlockStyles();
// store last rendered HTML for "open in new tab" // store last rendered HTML for "open in new tab"
lastRenderedHtml = pageHtml; lastRenderedHtml = pageHtml;
} }
@@ -426,7 +428,6 @@
inp.addEventListener('input', debounce(() => { inp.addEventListener('input', debounce(() => {
// Update status block color classes for quick visual feedback in the editor // Update status block color classes for quick visual feedback in the editor
render(); render();
updateStatusBlockStyles();
}, 200)); }, 200));
// for radio change events (error_source) // for radio change events (error_source)
if (inp.type === 'radio') inp.addEventListener('change', () => { render(); }); if (inp.type === 'radio') inp.addEventListener('change', () => { render(); });
@@ -595,7 +596,7 @@
<div class="form-row mb-3"> <div class="form-row mb-3">
<label for="presetSelect">Preset</label> <label for="presetSelect">Preset</label>
<select id="presetSelect" class="form-select form-select-sm"> <select id="presetSelect" class="form-select form-select-sm">
<option value="default">Default</option> <option value="default">Internal server error (Default)</option>
<option value="empty">Empty</option> <option value="empty">Empty</option>
<option value="catastrophic">Catastrophic failure</option> <option value="catastrophic">Catastrophic failure</option>
<option value="working">Server working</option> <option value="working">Server working</option>
@@ -838,10 +839,10 @@
</div> </div>
<div class="mt-2 text-center">&gt;&gt; Star this project on <div class="mt-2 text-center">&gt;&gt; Star this project on
<a href="https://github.com/donlon/cloudflare-error-page" target="_blank">Github</a> <a href="https://github.com/donlon/cloudflare-error-page" target="_blank">GitHub</a>
</div> </div>
<div class="mt-2" style="font-size: 0.9em;">You can also embed the error page into your own website. See <div class="mt-2" style="font-size: 0.9em;">You can also embed this error page into your own website. See
<a href="https://github.com/donlon/cloudflare-error-page#quickstart-for-programmers" <a href="https://github.com/donlon/cloudflare-error-page#quickstart-for-programmers"
target="_blank">Quickstart</a> in the target="_blank">Quickstart</a> in the
homepage for steps. homepage for steps.
@@ -862,10 +863,5 @@
</div> </div>
</div> </div>
<!-- JS: Bootstrap bundle -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body> </body>
</html>
</html>

View File

@@ -7,7 +7,7 @@ BEHIND_PROXY = true
# Some random secret, will be auto-generated if empty # Some random secret, will be auto-generated if empty
SECRET_KEY = '' SECRET_KEY = ''
# Main database URL # Main database URI
SQLALCHEMY_DATABASE_URI = 'sqlite:///database.db' SQLALCHEMY_DATABASE_URI = 'sqlite:///database.db'
# Rate limit storage for Flask-Limiter # Rate limit storage for Flask-Limiter

View File

@@ -0,0 +1,3 @@
Flask
Flask-Limiter
Flask-SqlAlchemy

View File

@@ -113,7 +113,7 @@ def get(name: str):
params['creator_info'] = { params['creator_info'] = {
'hidden': False, 'hidden': False,
'text': 'CF Error Page Editor', 'text': 'CF Error Page Editor',
'link': f'https://virt.moe/cloudflare-error-page/editor/#from={name}', 'link': request.host_url[:-1] + url_for('editor.index') + f'#from={name}',
} }
# Always escape HTML # Always escape HTML
params['what_happened'] = html.escape(params.get('what_happened', '')) # TODO: common render function? params['what_happened'] = html.escape(params.get('what_happened', '')) # TODO: common render function?

View File

@@ -18,10 +18,10 @@ from cloudflare_error_page import get_resources_folder, render as render_cf_erro
app = Flask(__name__) app = Flask(__name__)
# You can **use resources from Cloudflare CDN. But in case of changing, you can set use_cdn = False to use bundled resources. # Resources required for the error page can be loaded from Cloudflare CDN. But in case of changes, you can set use_cdn = False to use bundled resources.
use_cdn = True use_cdn = True
if use_cdn: if not use_cdn:
res_folder = get_resources_folder() res_folder = get_resources_folder()
# This handler is used to provide stylesheet and icon resources for the error page. If you pass use_cdn=True to render_cf_error_page # This handler is used to provide stylesheet and icon resources for the error page. If you pass use_cdn=True to render_cf_error_page
@@ -52,10 +52,10 @@ def index():
"what_can_i_do": "<p>Please try again in a few minutes.</p>" "what_can_i_do": "<p>Please try again in a few minutes.</p>"
} }
# Get real Ray ID from Cloudflare header # Get the real Ray ID from Cloudflare header
ray_id = request.headers.get('Cf-Ray', '')[:16] ray_id = request.headers.get('Cf-Ray', '')[:16]
# Get real client ip from Cloudflare header or request.remote_addr # Get the real client ip from Cloudflare header or request.remote_addr
client_ip = request.headers.get('X-Forwarded-For') client_ip = request.headers.get('X-Forwarded-For')
if not client_ip: if not client_ip:
client_ip = request.remote_addr client_ip = request.remote_addr
@@ -70,13 +70,7 @@ def index():
if __name__ == '__main__': if __name__ == '__main__':
if len(sys.argv) > 1: host = sys.argv[1] if len(sys.argv) > 1 else None
host = sys.argv[1] port = int(sys.argv[2]) if len(sys.argv) > 2 else None
else:
host = None
if len(sys.argv) > 2:
port = int(sys.argv[2])
else:
port = None
app.run(debug=True, host=host, port=port) app.run(debug=True, host=host, port=port)