modified: web/blueprints/group_admin.py

modified:   web/blueprints/site_admin.py
	modified:   web/config.py
	new file:   web/mailer.py
	modified:   web/panel_db.py
	modified:   web/templates/admin/base.html
	modified:   web/templates/admin/dashboard.html
	new file:   web/templates/admin/mail_settings.html
This commit is contained in:
simon
2026-04-13 10:29:48 +02:00
parent 6b13ea5c22
commit 63ce0f9c5b
8 changed files with 296 additions and 2 deletions

View File

@@ -130,6 +130,19 @@ CREDS_SCHEMA = [
enc_database TEXT NOT NULL,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4""",
"""CREATE TABLE IF NOT EXISTS site_mail_settings (
id INT AUTO_INCREMENT PRIMARY KEY,
config_key VARCHAR(50) UNIQUE NOT NULL,
enc_host TEXT NOT NULL,
enc_port TEXT NOT NULL,
enc_username TEXT NOT NULL,
enc_password TEXT NOT NULL,
enc_from_email TEXT NOT NULL,
enc_from_name TEXT,
enc_use_tls TEXT NOT NULL,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4""",
]
@@ -494,3 +507,48 @@ def has_db_configured(group_id: int) -> bool:
(group_id,), fetchone=True
)
return row is not None
def set_site_mail_settings(host: str, port: int, username: str, password: str, from_email: str, from_name: str, use_tls: bool):
_creds_query(
"INSERT INTO site_mail_settings (config_key, enc_host, enc_port, enc_username, enc_password, enc_from_email, enc_from_name, enc_use_tls) "
"VALUES (%s,%s,%s,%s,%s,%s,%s,%s) "
"ON DUPLICATE KEY UPDATE enc_host=VALUES(enc_host), enc_port=VALUES(enc_port), enc_username=VALUES(enc_username), "
"enc_password=VALUES(enc_password), enc_from_email=VALUES(enc_from_email), enc_from_name=VALUES(enc_from_name), enc_use_tls=VALUES(enc_use_tls)",
(
"primary",
encrypt_str(host),
encrypt_str(str(port)),
encrypt_str(username),
encrypt_str(password),
encrypt_str(from_email),
encrypt_str(from_name or ""),
encrypt_str("1" if use_tls else "0"),
),
write=True,
)
def get_site_mail_settings() -> dict | None:
row = _creds_query("SELECT * FROM site_mail_settings WHERE config_key=%s", ("primary",), fetchone=True)
if not row:
return None
return {
"host": decrypt_str(row["enc_host"]),
"port": int(decrypt_str(row["enc_port"])),
"username": decrypt_str(row["enc_username"]),
"password": decrypt_str(row["enc_password"]),
"from_email": decrypt_str(row["enc_from_email"]),
"from_name": decrypt_str(row["enc_from_name"]) if row.get("enc_from_name") else "",
"use_tls": decrypt_str(row["enc_use_tls"]) == "1",
"updated_at": row["updated_at"],
}
def delete_site_mail_settings():
_creds_query("DELETE FROM site_mail_settings WHERE config_key=%s", ("primary",), write=True)
def has_site_mail_settings() -> bool:
row = _creds_query("SELECT id FROM site_mail_settings WHERE config_key=%s", ("primary",), fetchone=True)
return row is not None