86 lines
3.1 KiB
Python
86 lines
3.1 KiB
Python
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/<int:sid>/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/<int:sid>/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())
|