diff --git a/docs/design/panel-de-firma.md b/docs/design/panel-de-firma.md index 273005f9..2bd42536 100644 --- a/docs/design/panel-de-firma.md +++ b/docs/design/panel-de-firma.md @@ -82,7 +82,7 @@ Cada uno tiene su historia en «Flujos/Firma/SigningPanel», salvo que se diga o | Sin certificados | `NoCertificates` | El selector se queda en su sitio, desactivado y diciendo «Sin certificados»; debajo, «Añadir un certificado…» (primario, el ancho que sobra) y «Volver a buscar» (secundario); el pie deja solo «Firmar», desactivado | | Sin certificados, con lector | `NoCertificatesWithReader` | La misma forma, con la línea del lector entre el selector desactivado y las salidas | | Búsqueda fallida | `SearchFailed` | La misma forma, con el error clasificado debajo de las salidas; la caja dice que no se pudo buscar, no que no haya ninguno | -| Lector sin tarjeta, leyendo, tarjeta lista e ilegible | `ReaderWithoutCard`, `ReadingTheCard`, `DnieReady`, `CardReady`, `UnreadableCardOnWindows`, `UnreadableCardOnLinux` | La línea del lector bajo el selector; sin lector (`Ready`), no hay línea. Ilegible, añade la ayuda de la plataforma: Windows Update o la página de la DGP en Windows, OpenSC en Linux. Mientras se lee, los demás certificados se siguen pudiendo elegir | +| Lector sin tarjeta, leyendo, tarjeta lista e ilegible | `ReaderWithoutCard`, `ReadingTheCard`, `DnieReady`, `CardReady`, `UnreadableCardOnWindows`, `UnreadableCardOnMacos`, `UnreadableCardOnLinux` | La línea del lector bajo el selector; sin lector (`Ready`), no hay línea. Ilegible, añade la ayuda de la plataforma: Windows Update o la página de la DGP en Windows, OpenSC o la página de la DGP en macOS, OpenSC en Linux. Mientras se lee, los demás certificados se siguen pudiendo elegir | | Varios certificados | `SeveralCertificates` | El desplegable los lista todos al abrirse | | Certificados abiertos | `Open` de «Dominio/Firma/CertificateSelect» | El buscador en lugar de la caja y la lista flotando | | Firma visible | `VisibleSignature*` | Una página, varias, todas, otra página a la vista y sin colocar | diff --git a/rfirma-app/po/ca.po b/rfirma-app/po/ca.po index b51258b4..4ce9c35d 100644 --- a/rfirma-app/po/ca.po +++ b/rfirma-app/po/ca.po @@ -533,6 +533,9 @@ msgstr "" msgid "panel.certificate.reader.unreadableHelp.linux" msgstr "Instal·la OpenSC perquè l'rFirma la pugui llegir." +msgid "panel.certificate.reader.unreadableHelp.macos" +msgstr "Instal·la OpenSC o el mòdul de la DGP perquè l'rFirma la pugui llegir." + #. {{issuer}} es el nombre de la entidad emisora del certificado. msgid "panel.certificate.issuer" msgstr "Emès per {{issuer}}" diff --git a/rfirma-app/po/en.po b/rfirma-app/po/en.po index b045a3f8..cb91dc21 100644 --- a/rfirma-app/po/en.po +++ b/rfirma-app/po/en.po @@ -533,6 +533,9 @@ msgstr "" msgid "panel.certificate.reader.unreadableHelp.linux" msgstr "Install OpenSC so that rFirma can read it." +msgid "panel.certificate.reader.unreadableHelp.macos" +msgstr "Install OpenSC or the DGP module so that rFirma can read it." + #. {{issuer}} es el nombre de la entidad emisora del certificado. msgid "panel.certificate.issuer" msgstr "Issued by {{issuer}}" diff --git a/rfirma-app/po/es.po b/rfirma-app/po/es.po index 887a98ea..67ecdc03 100644 --- a/rfirma-app/po/es.po +++ b/rfirma-app/po/es.po @@ -533,6 +533,9 @@ msgstr "" msgid "panel.certificate.reader.unreadableHelp.linux" msgstr "Instala OpenSC para que rFirma pueda leerla." +msgid "panel.certificate.reader.unreadableHelp.macos" +msgstr "Instala OpenSC o el módulo de la DGP para que rFirma pueda leerla." + #. {{issuer}} es el nombre de la entidad emisora del certificado. msgid "panel.certificate.issuer" msgstr "Emitido por {{issuer}}" diff --git a/rfirma-app/po/eu.po b/rfirma-app/po/eu.po index 00a4e188..b7d80fb7 100644 --- a/rfirma-app/po/eu.po +++ b/rfirma-app/po/eu.po @@ -534,6 +534,9 @@ msgstr "" msgid "panel.certificate.reader.unreadableHelp.linux" msgstr "Instalatu OpenSC rFirmak txartela irakur dezan." +msgid "panel.certificate.reader.unreadableHelp.macos" +msgstr "Instalatu OpenSC edo DGPren modulua rFirmak txartela irakur dezan." + #. {{issuer}} es el nombre de la entidad emisora del certificado. msgid "panel.certificate.issuer" msgstr "Jaulkitzailea: {{issuer}}" diff --git a/rfirma-app/po/gl.po b/rfirma-app/po/gl.po index a080228c..eab79cbb 100644 --- a/rfirma-app/po/gl.po +++ b/rfirma-app/po/gl.po @@ -531,6 +531,9 @@ msgstr "" msgid "panel.certificate.reader.unreadableHelp.linux" msgstr "Instala OpenSC para que rFirma poida lela." +msgid "panel.certificate.reader.unreadableHelp.macos" +msgstr "Instala OpenSC ou o módulo da DGP para que rFirma poida lela." + #. {{issuer}} es el nombre de la entidad emisora del certificado. msgid "panel.certificate.issuer" msgstr "Emitido por {{issuer}}" diff --git a/rfirma-app/po/messages.pot b/rfirma-app/po/messages.pot index 934330c3..196de416 100644 --- a/rfirma-app/po/messages.pot +++ b/rfirma-app/po/messages.pot @@ -521,6 +521,9 @@ msgstr "" msgid "panel.certificate.reader.unreadableHelp.linux" msgstr "" +msgid "panel.certificate.reader.unreadableHelp.macos" +msgstr "" + #. {{issuer}} es el nombre de la entidad emisora del certificado. msgid "panel.certificate.issuer" msgstr "" diff --git a/rfirma-app/src/signing/ReaderLine.test.tsx b/rfirma-app/src/signing/ReaderLine.test.tsx index 10c62db2..d1e64d84 100644 --- a/rfirma-app/src/signing/ReaderLine.test.tsx +++ b/rfirma-app/src/signing/ReaderLine.test.tsx @@ -32,6 +32,13 @@ describe("the reader line under the certificate selector", () => { expect(screen.getByRole("status")).toHaveTextContent(/OpenSC/); }); + it("points to OpenSC and the DGP page on macOS", () => { + renderWithCatalog(); + + expect(screen.getByRole("status")).toHaveTextContent(/OpenSC/); + expect(screen.getByRole("status")).toHaveTextContent(/DGP/); + }); + it("offers nothing on a platform it has no advice for", () => { renderWithCatalog(); diff --git a/rfirma-app/src/signing/ReaderLine.tsx b/rfirma-app/src/signing/ReaderLine.tsx index eae42cbb..22c79278 100644 --- a/rfirma-app/src/signing/ReaderLine.tsx +++ b/rfirma-app/src/signing/ReaderLine.tsx @@ -7,11 +7,12 @@ import { hasAReader, type ReaderStatus } from "./certificate"; import "./ReaderLine.css"; /** La plataforma de la que depende la ayuda para una tarjeta ilegible. */ -export type CardHelpPlatform = "windows" | "linux" | "other"; +export type CardHelpPlatform = "windows" | "macos" | "linux" | "other"; /** La plataforma que corresponde al `userAgent` del WebView. */ function cardHelpPlatformFor(userAgent: string): CardHelpPlatform { if (/windows/i.test(userAgent)) return "windows"; + if (/macintosh|mac os x/i.test(userAgent)) return "macos"; if (/linux/i.test(userAgent) && !/android/i.test(userAgent)) return "linux"; return "other"; } @@ -69,11 +70,16 @@ function readerText( function CardHelp({ platform }: { platform: CardHelpPlatform }) { const { t } = useTranslation(); if (platform === "other") return null; - return ( - - {platform === "windows" - ? t("panel.certificate.reader.unreadableHelp.windows") - : t("panel.certificate.reader.unreadableHelp.linux")} - - ); + return {cardHelpText(platform, t)}; +} + +function cardHelpText(platform: Exclude, t: TFunction): string { + switch (platform) { + case "windows": + return t("panel.certificate.reader.unreadableHelp.windows"); + case "macos": + return t("panel.certificate.reader.unreadableHelp.macos"); + case "linux": + return t("panel.certificate.reader.unreadableHelp.linux"); + } } diff --git a/rfirma-app/src/signing/SigningPanel.presentation.test.tsx b/rfirma-app/src/signing/SigningPanel.presentation.test.tsx index 0d6c583f..4e9ebf61 100644 --- a/rfirma-app/src/signing/SigningPanel.presentation.test.tsx +++ b/rfirma-app/src/signing/SigningPanel.presentation.test.tsx @@ -41,6 +41,7 @@ const { CardReady, UnreadableCardOnLinux, UnreadableCardOnWindows, + UnreadableCardOnMacos, NoCertificatesWithReader, } = composed; @@ -135,6 +136,7 @@ describe("the signing panel, by state", () => { { Story: CardReady, said: "Tarjeta lista" }, { Story: UnreadableCardOnWindows, said: "rFirma no puede leer la tarjeta del lector" }, { Story: UnreadableCardOnLinux, said: "rFirma no puede leer la tarjeta del lector" }, + { Story: UnreadableCardOnMacos, said: "rFirma no puede leer la tarjeta del lector" }, ] as const; for (const { Story, said } of cases) { diff --git a/rfirma-app/src/signing/SigningPanel.stories.tsx b/rfirma-app/src/signing/SigningPanel.stories.tsx index 6389f5a9..67880b1f 100644 --- a/rfirma-app/src/signing/SigningPanel.stories.tsx +++ b/rfirma-app/src/signing/SigningPanel.stories.tsx @@ -138,6 +138,10 @@ export const UnreadableCardOnLinux: Story = { args: { certificate: withReader({ kind: "unreadable" }), platform: "linux" }, }; +export const UnreadableCardOnMacos: Story = { + args: { certificate: withReader({ kind: "unreadable" }), platform: "macos" }, +}; + export const NoCertificatesWithReader: Story = { args: { certificate: withReader({ kind: "noCard" }, { kind: "empty" }) }, };