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

+71 -6
View File
@@ -115,14 +115,79 @@
"totpRemoved": "Segundo factor eliminado, con sus codigos de recuperacion.",
"tlsaDigest": "Digest para el registro TLSA (DANE 3 1 1)",
"bimiTitle": "BIMI de {domain}",
"bimiExplainer": "BIMI es el unico mecanismo que muestra una imagen junto a su correo en clientes externos. Es por dominio, no por usuario. Gmail y Outlook solo lo dibujan cuando el registro apunta a un VMC.",
"bimiExplainer": "BIMI es el único mecanismo que muestra una imagen junto a su correo en clientes externos. Es por dominio, no por usuario. Suba el logotipo en PNG o SVG y el sistema lo convierte al formato de BIMI. Gmail y Apple Mail solo lo muestran con un certificado (VMC o CMC) emitido por una autoridad certificadora, que este sistema no puede crear.",
"bimiConfigured": "Logotipo publicado",
"bimiNotConfigured": "Sin logotipo",
"bimiNoVmc": "Sin VMC: Gmail y Outlook no mostraran este logotipo.",
"bimiSvg": "Logotipo (SVG Tiny PS)",
"bimiVmc": "URL del VMC (opcional)",
"bimiNoVmc": "Sin certificado: Gmail y Apple Mail no mostrarán este logotipo.",
"bimiVmc": "URL del certificado (opcional)",
"bimiRejected": "El logotipo no cumple SVG Tiny Portable/Secure:",
"bimiSaved": "Logotipo guardado."
"bimiSaved": "Logotipo guardado.",
"bimiNone": "Sin logotipo",
"bimiChoose": "Elegir PNG o SVG",
"bimiReplace": "Cambiar logotipo",
"bimiFormatHint": "PNG o SVG. El resultado es un SVG Tiny PS cuadrado de como máximo 32 KB.",
"bimiDragHint": "Arrastre para colocar. Los clientes de correo muestran el logotipo dentro de un círculo o de un cuadrado redondeado.",
"bimiZoom": "Zoom",
"bimiBackground": "Color de fondo",
"bimiBrandTitle": "Nombre de la marca (título del SVG)",
"bimiMask": "Vista previa",
"bimiMask_circle": "Círculo",
"bimiMask_rounded": "Cuadrado redondeado",
"bimiMask_none": "Sin máscara",
"bimiPreset": "Calidad de la conversión",
"bimiPreset_high": "Alta (más fiel)",
"bimiPreset_balanced": "Equilibrada",
"bimiPreset_compact": "Compacta",
"bimiPreset_tiny": "Mínima",
"bimiTraced": "El PNG se convirtió a vector, lo que pierde algo de detalle. Para el resultado más nítido, suba el SVG original.",
"bimiAutoLowered": "La calidad se redujo automáticamente para caber en 32 KB.",
"bimiSize": "{size} de {max}",
"bimiTooBig": "El archivo supera 32 KB. Elija una calidad menor o simplifique el dibujo.",
"bimiRemoved": "Se quitaron del archivo, porque BIMI no los permite: {items}.",
"bimiTextWarning": "El logotipo contiene texto, que usa la fuente de quien lee el mensaje y puede verse distinto. Convierta el texto en curvas en su editor.",
"bimiDownload": "Descargar SVG",
"bimiSaveLogo": "Guardar logotipo",
"bimiCertTitle": "Certificado (VMC o CMC)",
"bimiCertExplainer": "Gmail y Apple Mail solo muestran el logotipo con un certificado emitido por una autoridad certificadora, como DigiCert, Entrust o SSL.com: VMC, para marca registrada, o CMC, para marca en uso. El sistema no crea ese certificado. Descargue el SVG de arriba, envíelo a la autoridad y ponga aquí el archivo .pem que le devuelva. Gmail acepta los dos tipos; otros clientes pueden exigir VMC.",
"bimiCertChoose": "Subir archivo .pem",
"bimiCertReplace": "Cambiar certificado",
"bimiCertPaste": "O pegue el contenido del .pem",
"bimiCertSave": "Guardar certificado",
"bimiCertValid": "Certificado válido",
"bimiCertInvalid": "Certificado con problemas",
"bimiCertIssued": "Emitido para {organization} por {issuer}",
"bimiCertValidUntil": "Válido hasta {date}",
"bimiCertDomains": "Dominios: {names}",
"bimiCertMatches": "Contiene exactamente este logotipo.",
"bimiCertMismatch": "El logotipo dentro del certificado no es el publicado. Suba el SVG para el que fue emitido.",
"bimiCertRemove": "Quitar certificado",
"bimiCertSaved": "Certificado guardado.",
"bimiCertRejected": "El certificado fue rechazado:",
"bimiRecordTitle": "Registro DNS",
"bimiRecordHint": "Este registro TXT lo crea la reconciliación del DNS. Revíselo, o créelo manualmente en su proveedor.",
"bimiCopy": "Copiar",
"bimiCopied": "Copiado",
"bimiCheckTitle": "Verificar la configuración",
"bimiCheckExplainer": "Consulta el DNS y las URL públicas como lo haría un servidor de correo, y dice qué parte está mal.",
"bimiCheckRun": "Verificar ahora",
"bimiCheckRunning": "Verificando...",
"bimiCheckReady": "Todo listo para BIMI.",
"bimiCheckNotReady": "Hay elementos por corregir.",
"bimiCheckStatus_ok": "OK",
"bimiCheckStatus_warn": "Aviso",
"bimiCheckStatus_fail": "Falló",
"bimiCheckItem_logo": "Archivo del logotipo",
"bimiCheckItem_dmarc": "Política DMARC",
"bimiCheckItem_record": "Registro BIMI en el DNS",
"bimiCheckItem_logoUrl": "URL pública del logotipo",
"bimiCheckItem_certificate": "Certificado",
"bimiCheckItem_certificateUrl": "URL pública del certificado",
"bimiError_notXml": "Ese archivo no es un SVG válido.",
"bimiError_notSvg": "Ese archivo no es un SVG.",
"bimiError_noSize": "El SVG no tiene tamaño (viewBox, o width y height), así que no se puede colocar.",
"bimiError_empty": "No se encontró ningún dibujo en ese archivo.",
"bimiError_notImage": "Elija un archivo PNG o SVG.",
"bimiError_tooComplex": "El dibujo es demasiado complejo para caber en 32 KB."
},
"auth": {
"adminLoginTitle": "Consola de administración",
@@ -455,7 +520,7 @@
},
"avatar": {
"title": "Foto de perfil",
"explainer": "Esta foto aparece dentro de LambdaMail. Servicios externos como Gmail y Outlook no la leen: para eso, vea BIMI en la pagina de dominios.",
"explainer": "Esta foto aparece dentro de LambdaMail. Servicios externos como Gmail y Outlook no la leen: para eso, vea BIMI en la página de dominios.",
"none": "Sin foto",
"choose": "Elegir foto",
"replace": "Cambiar foto",