mail/app/blueprints/shared/__init__.py
deeily 5024bf9a8d init: full mail stack — phases 0..8 (web client, admin, IMAP/SMTP,
sieve, search, sessions, dramatiq, deploy/install, ELK, monitoring)
2026-04-29 16:30:43 +03:00

55 lines
2.0 KiB
Python

from flask import Blueprint, abort, redirect, render_template, request, url_for
from ...services import mock_mail
bp = Blueprint("shared", __name__, template_folder="../../templates")
# ── Пользовательский просмотр общего ящика ─────────────────────────────────
@bp.route("/<int:sid>")
def view(sid: int):
sm = mock_mail.get_shared(sid)
if not sm or mock_mail.CURRENT_USER_EMAIL not in sm.user_emails:
abort(404)
return render_template("shared/view.html", sm=sm)
# ── Админка: CRUD общих ящиков ─────────────────────────────────────────────
@bp.route("/admin/")
def admin_index():
return render_template("shared/admin_index.html", shared=mock_mail.list_shared())
@bp.route("/admin/new", methods=["GET", "POST"])
def admin_new():
if request.method == "POST":
mock_mail.add_shared(
name=request.form.get("name", ""),
email=request.form.get("email", ""),
user_emails=request.form.get("users", "").splitlines(),
)
return redirect(url_for("shared.admin_index"))
return render_template("shared/admin_edit.html", sm=None)
@bp.route("/admin/<int:sid>/edit", methods=["GET", "POST"])
def admin_edit(sid: int):
sm = mock_mail.get_shared(sid)
if not sm:
abort(404)
if request.method == "POST":
mock_mail.update_shared(
sid,
name=request.form.get("name", ""),
email=request.form.get("email", ""),
user_emails=request.form.get("users", "").splitlines(),
)
return redirect(url_for("shared.admin_index"))
return render_template("shared/admin_edit.html", sm=sm)
@bp.route("/admin/<int:sid>/delete", methods=["POST"])
def admin_delete(sid: int):
mock_mail.delete_shared(sid)
return redirect(url_for("shared.admin_index"))