from flask import Blueprint, abort, current_app, redirect, render_template, request, url_for from ...services import mock_mail bp = Blueprint("settings", __name__, template_folder="../../templates") @bp.route("/") def index(): return redirect(url_for("admin.index")) @bp.route("/sessions", methods=["GET", "POST"]) def sessions_view(): from flask import g from ...services import sessions as sess if request.method == "POST": action = request.form.get("action") if action == "revoke": tok = request.form.get("token", "") if tok and tok != g.session_token: sess.revoke(tok) sess.audit("session_revoke", g.user_email, "", "", extra=f"token={tok[:8]}…") elif action == "revoke_others": n = sess.revoke_all_for(g.user_email, except_token=g.session_token) sess.audit("session_revoke_others", g.user_email, "", "", extra=f"count={n}") return redirect(url_for("settings.sessions_view")) items = sess.list_for(g.user_email) return render_template("settings/sessions.html", items=items, current=g.session_token) @bp.route("/signatures") def signatures(): return render_template("settings/signatures.html", signatures=mock_mail.list_signatures()) @bp.route("/signatures/new", methods=["GET", "POST"]) def signature_new(): if request.method == "POST": mock_mail.add_signature( name=request.form.get("name", ""), body_md=request.form.get("body_md", ""), is_default=bool(request.form.get("is_default")), ) return redirect(url_for("settings.signatures")) return render_template("settings/signature_edit.html", signature=None) @bp.route("/signatures//edit", methods=["GET", "POST"]) def signature_edit(sid: int): sig = mock_mail.get_signature(sid) if not sig: abort(404) if request.method == "POST": mock_mail.update_signature( sid, name=request.form.get("name", ""), body_md=request.form.get("body_md", ""), is_default=bool(request.form.get("is_default")), ) return redirect(url_for("settings.signatures")) return render_template("settings/signature_edit.html", signature=sig) @bp.route("/signatures//delete", methods=["POST"]) def signature_delete(sid: int): mock_mail.delete_signature(sid) return redirect(url_for("settings.signatures")) @bp.route("/autoreply", methods=["GET", "POST"]) def autoreply(): if request.method == "POST": mock_mail.update_autoreply( enabled=bool(request.form.get("enabled")), subject=request.form.get("subject", "").strip(), body_md=request.form.get("body_md", ""), date_from=request.form.get("date_from", "").strip(), date_to=request.form.get("date_to", "").strip(), only_contacts=bool(request.form.get("only_contacts")), reply_once_per_day=bool(request.form.get("reply_once_per_day")), ) return redirect(url_for("settings.autoreply")) return render_template("settings/autoreply.html", ar=mock_mail.get_autoreply())