fix(tls): sem watcher nao ha veredito, e o README passa a explicar os modos
Com TLS_MODE=acme o certificado e emitido por este servico, nao vigiado em disco, portanto nao ha watcher para estar saudavel. O painel reportava false e mostrava "indisponivel" em permanencia, ao lado de um certificado perfeitamente valido. Passa a ser null, e a pagina nao mostra veredito nenhum. O README ganha uma seccao sobre os dois modos de certificado. O modo traefik falha de duas maneiras silenciosas -- sem router para o PRIMARY_MAIL_HOST o nome nunca chega ao acme.json, e o acme.json fica em 600 do root, ilegivel para o utilizador nao-root do contentor. Nos dois casos o HTTPS continua a funcionar porque quem o serve e o proxy, enquanto as portas de correio caem no autoassinado e sao recusadas por qualquer cliente que verifique. Foi exactamente o que aconteceu nesta instalacao. Actualizado tambem o que ja nao esta por acabar: a resposta de ausencia, a assinatura e as regras Sieve sao consumidas, e a reconciliacao de DNS conduz o estado em vez de o relatar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1e7c6a118c
commit
7f8d9b7ff1
7 files changed
+119
-29
No files matched your search
@@ -161,7 +161,8 @@
|
||||
"search": "Search",
|
||||
"status": "Status",
|
||||
"unavailable": "Unavailable",
|
||||
"userPortal": "Webmail"
|
||||
"userPortal": "Webmail",
|
||||
"notApplicable": "Not applicable"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "You do not have access to this",
|
||||
|
||||
@@ -161,7 +161,8 @@
|
||||
"search": "Buscar",
|
||||
"status": "Estado",
|
||||
"unavailable": "No disponible",
|
||||
"userPortal": "Webmail"
|
||||
"userPortal": "Webmail",
|
||||
"notApplicable": "No aplicable"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "No tiene acceso a esto",
|
||||
|
||||
@@ -161,7 +161,8 @@
|
||||
"search": "Buscar",
|
||||
"status": "Status",
|
||||
"unavailable": "Indisponível",
|
||||
"userPortal": "Webmail"
|
||||
"userPortal": "Webmail",
|
||||
"notApplicable": "Nao aplicavel"
|
||||
},
|
||||
"errors": {
|
||||
"forbidden": "Você não tem acesso a isto",
|
||||
|
||||
@@ -318,12 +318,23 @@ export default function AdminSecurityPage() {
|
||||
|
||||
<div className="flex flex-col gap-1 rounded-xl bg-dark-card p-3.5 shadow-edge">
|
||||
<div className="text-xs text-slate-400">{t("admin.watcherHealthy")}</div>
|
||||
{/* Null means there is no watcher to judge - the certificate
|
||||
is issued by this server rather than read from disk - so no
|
||||
verdict is shown instead of a standing false alarm. */}
|
||||
<div
|
||||
className={`text-[15px] font-medium ${
|
||||
tlsStatus.watcher_healthy ? "text-indigo-400" : "text-amber-400"
|
||||
tlsStatus.watcher_healthy === null || tlsStatus.watcher_healthy === undefined
|
||||
? "text-slate-400"
|
||||
: tlsStatus.watcher_healthy
|
||||
? "text-indigo-400"
|
||||
: "text-amber-400"
|
||||
}`}
|
||||
>
|
||||
{tlsStatus.watcher_healthy ? t("ui.healthy") : t("common.unavailable")}
|
||||
{tlsStatus.watcher_healthy === null || tlsStatus.watcher_healthy === undefined
|
||||
? t("common.notApplicable")
|
||||
: tlsStatus.watcher_healthy
|
||||
? t("ui.healthy")
|
||||
: t("common.unavailable")}
|
||||
</div>
|
||||
<div className="text-[11.5px] text-slate-500">
|
||||
{t("admin.lastReload")}:{" "}
|
||||
|
||||
Reference in new issue
Block a user