feat(bimi): logo studio, certificate upload and a setup check in the console

The console took pasted SVG text and a URL. It now:

- takes a PNG or SVG and makes the logo BIMI accepts (SVG Tiny PS, square,
  at most 32 KB). An SVG has what the format forbids removed and is told what;
  a PNG is traced into vectors in the browser (imagetracerjs, public domain),
  walking down quality presets until it fits. The person positions it as in the
  photo editor: drag, zoom, background colour, preview in a circle or rounded
  square, and downloads the exact SVG to give a certificate authority
- holds the .pem the authority returns, validated against the logo and domain,
  and serves it at /.well-known/bimi/vmc.pem (routed by the webmail)
- shows the DNS record and runs the setup check (logo, DMARC, record, public
  URLs, certificate)
- a golden-file contract: the SVGs the studio produces are validated by the
  server's own validator (Go) and pinned by the studio's tests (TS)
- found by those tests: an element inside a link kept its onclick when the
  link was unwrapped; links are now unwrapped before cleaning
- the BIMI and photo texts are in Brazilian Portuguese with accents (they had
  been written without), and in Spanish with accents

A VMC cannot be generated from an image: it is issued by a certificate
authority. The README and the panel say so.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Lucas RayanandClaude Sonnet 5.5 committed 2026-10-16 17:04:35 -03:00
1 parent 109b8360dd
commit dabd1568d1
15 files changed
+1583 -164

No files matched your search

+73 -8
View File
@@ -115,14 +115,79 @@
"totpRemoved": "Segundo factor removido, com os codigos de recuperacao.",
"tlsaDigest": "Digest para o registo TLSA (DANE 3 1 1)",
"bimiTitle": "BIMI de {domain}",
"bimiExplainer": "O BIMI e o unico mecanismo que mostra uma imagem ao lado do seu correio em clientes externos. E por dominio, nao por utilizador. O Gmail e o Outlook so o desenham quando o registo aponta para um VMC.",
"bimiExplainer": "O BIMI é o único mecanismo que mostra uma imagem ao lado do seu e-mail em clientes externos. Ele vale por domínio, não por usuário. Envie o logotipo em PNG ou SVG e o sistema o converte para o formato do BIMI. O Gmail e o Apple Mail só o mostram com um certificado (VMC ou CMC) emitido por uma autoridade certificadora, que este sistema não consegue criar.",
"bimiConfigured": "Logotipo publicado",
"bimiNotConfigured": "Sem logotipo",
"bimiNoVmc": "Sem VMC: o Gmail e o Outlook nao vao mostrar este logotipo.",
"bimiSvg": "Logotipo (SVG Tiny PS)",
"bimiVmc": "URL do VMC (opcional)",
"bimiRejected": "O logotipo nao cumpre o SVG Tiny Portable/Secure:",
"bimiSaved": "Logotipo guardado."
"bimiNoVmc": "Sem certificado: o Gmail e o Apple Mail não vão mostrar este logotipo.",
"bimiVmc": "URL do certificado (opcional)",
"bimiRejected": "O logotipo não cumpre o SVG Tiny Portable/Secure:",
"bimiSaved": "Logotipo salvo.",
"bimiNone": "Sem logotipo",
"bimiChoose": "Escolher PNG ou SVG",
"bimiReplace": "Trocar logotipo",
"bimiFormatHint": "PNG ou SVG. O resultado é um SVG Tiny PS quadrado, com no máximo 32 KB.",
"bimiDragHint": "Arraste para posicionar. Os clientes de e-mail mostram o logotipo dentro de um círculo ou de um quadrado arredondado.",
"bimiZoom": "Zoom",
"bimiBackground": "Cor de fundo",
"bimiBrandTitle": "Nome da marca (título do SVG)",
"bimiMask": "Pré-visualização",
"bimiMask_circle": "Círculo",
"bimiMask_rounded": "Quadrado arredondado",
"bimiMask_none": "Sem máscara",
"bimiPreset": "Qualidade da conversão",
"bimiPreset_high": "Alta (mais fiel)",
"bimiPreset_balanced": "Equilibrada",
"bimiPreset_compact": "Compacta",
"bimiPreset_tiny": "Mínima",
"bimiTraced": "O PNG foi convertido em vetor, o que perde um pouco de detalhe. Para o resultado mais nítido, envie o SVG original.",
"bimiAutoLowered": "A qualidade foi reduzida automaticamente para caber em 32 KB.",
"bimiSize": "{size} de {max}",
"bimiTooBig": "O arquivo passa de 32 KB. Escolha uma qualidade menor ou simplifique o desenho.",
"bimiRemoved": "Foram removidos do arquivo, porque o BIMI não os permite: {items}.",
"bimiTextWarning": "O logotipo contém texto, que usa a fonte de quem lê a mensagem e pode mudar de aparência. Converta o texto em curvas no seu editor.",
"bimiDownload": "Baixar SVG",
"bimiSaveLogo": "Salvar logotipo",
"bimiCertTitle": "Certificado (VMC ou CMC)",
"bimiCertExplainer": "O Gmail e o Apple Mail só mostram o logotipo com um certificado emitido por uma autoridade certificadora, como DigiCert, Entrust ou SSL.com: VMC, para marca registrada, ou CMC, para marca em uso. O sistema não cria esse certificado. Baixe o SVG acima, envie-o à autoridade e coloque aqui o arquivo .pem que ela devolver. O Gmail aceita os dois tipos; outros clientes podem exigir VMC.",
"bimiCertChoose": "Enviar arquivo .pem",
"bimiCertReplace": "Trocar certificado",
"bimiCertPaste": "Ou cole o conteúdo do .pem",
"bimiCertSave": "Salvar certificado",
"bimiCertValid": "Certificado válido",
"bimiCertInvalid": "Certificado com problemas",
"bimiCertIssued": "Emitido para {organization} por {issuer}",
"bimiCertValidUntil": "Válido até {date}",
"bimiCertDomains": "Domínios: {names}",
"bimiCertMatches": "Contém exatamente este logotipo.",
"bimiCertMismatch": "O logotipo dentro do certificado não é o que está publicado. Envie o SVG para o qual ele foi emitido.",
"bimiCertRemove": "Remover certificado",
"bimiCertSaved": "Certificado salvo.",
"bimiCertRejected": "O certificado foi recusado:",
"bimiRecordTitle": "Registro DNS",
"bimiRecordHint": "Este registro TXT é criado pela reconciliação do DNS. Confira-o, ou crie-o manualmente no seu provedor.",
"bimiCopy": "Copiar",
"bimiCopied": "Copiado",
"bimiCheckTitle": "Verificar configuração",
"bimiCheckExplainer": "Consulta o DNS e as URLs públicas como um servidor de e-mail faria, e diz qual parte está errada.",
"bimiCheckRun": "Verificar agora",
"bimiCheckRunning": "Verificando...",
"bimiCheckReady": "Tudo certo para o BIMI.",
"bimiCheckNotReady": "Há itens a corrigir.",
"bimiCheckStatus_ok": "OK",
"bimiCheckStatus_warn": "Atenção",
"bimiCheckStatus_fail": "Falhou",
"bimiCheckItem_logo": "Arquivo do logotipo",
"bimiCheckItem_dmarc": "Política DMARC",
"bimiCheckItem_record": "Registro BIMI no DNS",
"bimiCheckItem_logoUrl": "URL pública do logotipo",
"bimiCheckItem_certificate": "Certificado",
"bimiCheckItem_certificateUrl": "URL pública do certificado",
"bimiError_notXml": "Esse arquivo não é um SVG válido.",
"bimiError_notSvg": "Esse arquivo não é um SVG.",
"bimiError_noSize": "O SVG não tem tamanho (viewBox, ou width e height), por isso não dá para posicioná-lo.",
"bimiError_empty": "Não foi possível encontrar um desenho nesse arquivo.",
"bimiError_notImage": "Escolha um arquivo PNG ou SVG.",
"bimiError_tooComplex": "O desenho é complexo demais para caber em 32 KB."
},
"auth": {
"adminLoginTitle": "Console de administração",
@@ -455,12 +520,12 @@
},
"avatar": {
"title": "Foto de perfil",
"explainer": "Esta foto aparece dentro do LambdaMail. Servicos externos como Gmail e Outlook nao a leem: para eles, veja BIMI na pagina de dominios.",
"explainer": "Esta foto aparece dentro do LambdaMail. Serviços externos como Gmail e Outlook não a leem: para eles, veja o BIMI na página de domínios.",
"none": "Sem foto",
"choose": "Escolher foto",
"replace": "Trocar foto",
"zoom": "Zoom",
"dragToPosition": "Arraste para posicionar",
"notAnImage": "Nao foi possivel ler esse ficheiro como imagem."
"notAnImage": "Não foi possível ler esse arquivo como imagem."
}
}