ligbox-ops-platform/postfix-activate-desk.py
Ligbox Spec Hub 3a2c64834b Initial import: ligbox-ops-platform + specs + LAPTOP + obsidian merge (CT130)
Source: VM122 /opt + obsidian-infra + LAPTOP
Hub: CT130 spec-hub 10.10.10.130
2026-06-19 17:26:41 +00:00

57 lines
1.9 KiB
Python

#!/usr/bin/env python3
"""Post-install: tickets + resend activation emails for approved registrations."""
import json
import sys
sys.path.insert(0, "/app")
from app import auth, desk_tickets, mail_notify, registration_store
DESK_URL = mail_notify.DESK_PUBLIC_URL
def main() -> None:
with auth.db() as conn:
rows = conn.execute(
"SELECT * FROM desk_registration_requests WHERE status = 'approved' ORDER BY id"
).fetchall()
pending = []
for row in rows:
r = dict(row)
token = r.get("activation_token")
url = f"{DESK_URL}/activate.html?token={token}" if token else None
pending.append({"id": r["id"], "email": r["email"], "role": r.get("role"), "url": url})
existing = conn.execute(
"SELECT id FROM tickets WHERE payload LIKE ? LIMIT 1",
(f'%"request_id": {r["id"]},%',),
).fetchone()
if not existing and url:
desk_tickets.ticket_registration_approved(
conn,
r["id"],
r["email"],
r["role"] or "technician",
url,
r.get("display_name"),
)
print(f"ticket activar: {r['email']}")
if url:
ok = mail_notify.notify_candidate_approved(r["email"], url, r["role"] or "technician")
print(f"email {r['email']}: {'OK' if ok else 'FAIL'}")
desk_tickets.ticket_postfix_ready(conn, pending)
print("ticket root: Postfix VM122 activo")
# Test SMTP
ok = mail_notify.send_email(
mail_notify.ROOT_NOTIFY_EMAIL,
"[Ligbox Ops] Postfix VM122 activo",
"Postfix na VM122 configurado. Relay interno VM112. Emails Desk operacionais.",
)
print(f"test email root: {'OK' if ok else 'FAIL'}")
if __name__ == "__main__":
main()