105 lines
2.8 KiB
Python
105 lines
2.8 KiB
Python
"""Desk-internal tickets (registration, infra ops)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import sqlite3
|
|
from datetime import datetime, timezone
|
|
|
|
DESK_SOURCE = "desk-registration"
|
|
OPS_TENANT_ID = 1
|
|
|
|
|
|
def _now() -> str:
|
|
return datetime.now(timezone.utc).isoformat()
|
|
|
|
|
|
def create_ticket(
|
|
conn: sqlite3.Connection,
|
|
*,
|
|
subject: str,
|
|
event: str,
|
|
email: str,
|
|
data: dict,
|
|
assigned_to: str | None = None,
|
|
) -> int:
|
|
payload = {
|
|
"event": event,
|
|
"source": DESK_SOURCE,
|
|
"domain": email,
|
|
"data": data,
|
|
}
|
|
cur = conn.execute(
|
|
"""
|
|
INSERT INTO tickets (tenant_id, subject, status, payload, created_at, assigned_to, assigned_at)
|
|
VALUES (?, ?, 'open', ?, ?, ?, ?)
|
|
""",
|
|
(
|
|
OPS_TENANT_ID,
|
|
subject,
|
|
json.dumps(payload),
|
|
_now(),
|
|
assigned_to,
|
|
_now() if assigned_to else None,
|
|
),
|
|
)
|
|
conn.commit()
|
|
return int(cur.lastrowid)
|
|
|
|
|
|
def ticket_registration_pending(conn: sqlite3.Connection, request_id: int, email: str, display_name: str | None) -> int:
|
|
name = display_name or email
|
|
return create_ticket(
|
|
conn,
|
|
subject=f"[cadastro pendente] {email} — {name}",
|
|
event="desk.registration.pending",
|
|
email=email,
|
|
data={
|
|
"request_id": request_id,
|
|
"display_name": display_name,
|
|
"status": "pending",
|
|
"message": "Novo pedido de acesso ao Ligbox Ops Desk. Aprovar em Mensagens.",
|
|
},
|
|
assigned_to="root",
|
|
)
|
|
|
|
|
|
def ticket_registration_approved(
|
|
conn: sqlite3.Connection,
|
|
request_id: int,
|
|
email: str,
|
|
role: str,
|
|
activation_url: str,
|
|
display_name: str | None,
|
|
) -> int:
|
|
name = display_name or email
|
|
return create_ticket(
|
|
conn,
|
|
subject=f"[ativar conta] {email} — {name}",
|
|
event="desk.registration.approved",
|
|
email=email,
|
|
data={
|
|
"request_id": request_id,
|
|
"role": role,
|
|
"status": "approved",
|
|
"activation_url": activation_url,
|
|
"message": "Conta aprovada. Complete 2 de 3 fatores (e-mail, telefone ou app 2FA) no link abaixo.",
|
|
},
|
|
assigned_to=email,
|
|
)
|
|
|
|
|
|
def ticket_postfix_ready(conn: sqlite3.Connection, pending_activations: list[dict]) -> int:
|
|
return create_ticket(
|
|
conn,
|
|
subject="[infra] Postfix VM122 ativo — e-mails Desk operacionais",
|
|
event="desk.infra.postfix",
|
|
email="ligbox-ops@itecnologys.com",
|
|
data={
|
|
"status": "completed",
|
|
"relayhost": "10.10.10.112",
|
|
"pending_activations": pending_activations,
|
|
"message": "Postfix instalado na VM122 (relay interno VM112). E-mails de cadastro/OTP ativos.",
|
|
},
|
|
assigned_to="root",
|
|
)
|