Add simple error page and email alerts.
Add error testing page. Fix email fallback. Fix some routing issues.
This commit is contained in:
parent
fa11e38c6f
commit
0b6738aad1
|
@ -3,10 +3,12 @@
|
|||
import os
|
||||
import sys
|
||||
|
||||
from flask import Flask
|
||||
from flask import Flask, Response, make_response, render_template
|
||||
from flask_minify import Minify
|
||||
from werkzeug.exceptions import HTTPException
|
||||
|
||||
import undercover.routes
|
||||
import undercover.email
|
||||
|
||||
|
||||
def create_app(test_config=None) -> Flask:
|
||||
|
@ -28,6 +30,18 @@ def create_app(test_config=None) -> Flask:
|
|||
|
||||
os.makedirs(app.instance_path, exist_ok=True)
|
||||
|
||||
@app.errorhandler(Exception)
|
||||
def internal_error(e) -> HTTPException | Response:
|
||||
if isinstance(e, HTTPException):
|
||||
return e
|
||||
print(str(e))
|
||||
email.exception_alert(e)
|
||||
return make_response(render_template('error.jinja2', status=500, error_text='Internal error occurred.', extra_text="We're looking into it!"), 500)
|
||||
|
||||
app.register_blueprint(routes.writing_blueprint)
|
||||
|
||||
@app.errorhandler(404)
|
||||
def not_found(e) -> Response:
|
||||
return make_response(render_template('error.jinja2', status=404, error_text='Page not found!'), 404)
|
||||
|
||||
return app
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import traceback
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
@ -44,5 +45,24 @@ Or copy and paste this link into your browser: {reset_link}
|
|||
return 200 <= result.status_code <= 299
|
||||
|
||||
|
||||
def exception_alert(e: Exception):
|
||||
data = {
|
||||
'Messages': [
|
||||
{
|
||||
"From": {
|
||||
"Email": "ErrorReporting@undercover.cafe",
|
||||
"Name": "UnderCover"
|
||||
},
|
||||
"To": [{"Email": "sage@sagev.space"}],
|
||||
"Subject": "UnderCover Internal Error",
|
||||
"TextPart": str(e) + '\n' + ''.join(traceback.format_exception(None, e, e.__traceback__)),
|
||||
"CustomID": "InternalServerError"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
mailjet.send.create(data=data)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
send_password_reset('sage@sagev.space', 'https://sagev.space/')
|
||||
|
|
|
@ -31,5 +31,5 @@ class MockCreator:
|
|||
|
||||
|
||||
mock_sender = types.SimpleNamespace()
|
||||
mock_sender.send = lambda self: MockCreator()
|
||||
mock_sender.send = MockCreator()
|
||||
|
||||
|
|
|
@ -106,16 +106,19 @@ def render_index(
|
|||
), status)
|
||||
|
||||
|
||||
@writing_blueprint.route('/login', methods=['POST', 'GET'])
|
||||
@writing_blueprint.route('/login', methods=['POST'])
|
||||
def login() -> Response | str:
|
||||
if request.method == 'POST':
|
||||
username = request.form['login']
|
||||
if db.login(username, request.form['password']):
|
||||
session['username'] = username
|
||||
return redirect('/')
|
||||
return render_index(error="Invalid username or password", status=401)
|
||||
username = request.form['login']
|
||||
if db.login(username, request.form['password']):
|
||||
session['username'] = username
|
||||
return redirect('/')
|
||||
|
||||
return render_index(status=404)
|
||||
return render_index(error="Invalid username or password", status=401)
|
||||
|
||||
|
||||
@writing_blueprint.route('/test_error', methods=['GET'])
|
||||
def error_test() -> Response:
|
||||
raise Exception("Test error")
|
||||
|
||||
|
||||
@writing_blueprint.route('/create_account', methods=['GET'])
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
{% from "_formhelpers.jinja2" import modal %}
|
||||
|
||||
<head>
|
||||
<title>{% block title %}UnderCover{% endblock title %}</title>
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
{% extends "base.jinja2" %}
|
||||
{% from "_formhelpers.jinja2" import render_field, render_label, render_input %}
|
||||
|
||||
{% block title %}UnderCover - {{ status }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>{{ error_text }}</h1>
|
||||
{% if extra_text %}
|
||||
<h2>{{ extra_text }}</h2>
|
||||
{% endif %}
|
||||
{% endblock content %}
|
|
@ -1,5 +1,5 @@
|
|||
{% extends "base.jinja2" %}
|
||||
{% from "_formhelpers.jinja2" import render_field, render_label, render_input, modal %}
|
||||
{% from "_formhelpers.jinja2" import render_field, render_label, render_input %}
|
||||
|
||||
{% block title %}UnderCover{% endblock %}
|
||||
|
||||
|
|
Loading…
Reference in New Issue