From 33b99172296340939683a57ea8a40c8b5f685350 Mon Sep 17 00:00:00 2001 From: George Litos Date: Mon, 19 Feb 2024 08:58:27 +0200 Subject: [PATCH] fix: locales in account totp page --- src/account/TemplateProps.ts | 8 +- src/account/kcContext/KcContext.ts | 2 + src/account/kcContext/kcContextMocks.ts | 4 +- src/account/lib/useGetClassName.ts | 8 +- src/account/pages/Totp.tsx | 101 ++++++++++++------------ 5 files changed, 68 insertions(+), 55 deletions(-) diff --git a/src/account/TemplateProps.ts b/src/account/TemplateProps.ts index 1f20c599..c19f3312 100644 --- a/src/account/TemplateProps.ts +++ b/src/account/TemplateProps.ts @@ -18,4 +18,10 @@ export type ClassKey = | "kcButtonPrimaryClass" | "kcButtonLargeClass" | "kcButtonDefaultClass" - | "kcContentWrapperClass"; + | "kcContentWrapperClass" + | "kcFormClass" + | "kcFormGroupClass" + | "kcInputWrapperClass" + | "kcLabelClass" + | "kcInputClass" + | "kcInputErrorMessageClass"; diff --git a/src/account/kcContext/KcContext.ts b/src/account/kcContext/KcContext.ts index 9b8a75cd..ca356144 100644 --- a/src/account/kcContext/KcContext.ts +++ b/src/account/kcContext/KcContext.ts @@ -160,6 +160,8 @@ export declare namespace KcContext { totpSecret: string; otpCredentials: { id: string; userLabel: string }[]; }; + mode?: "qr" | "manual" | undefined | null; + isAppInitiatedAction: boolean; url: { accountUrl: string; passwordUrl: string; diff --git a/src/account/kcContext/kcContextMocks.ts b/src/account/kcContext/kcContextMocks.ts index 0d85c572..0c7b7c52 100644 --- a/src/account/kcContext/kcContextMocks.ts +++ b/src/account/kcContext/kcContextMocks.ts @@ -211,7 +211,7 @@ export const kcContextMocks: KcContext[] = [ manualUrl: "#", totpSecret: "G4nsI8lQagRMUchH8jEG", otpCredentials: [], - supportedApplications: ["FreeOTP", "Google Authenticator"], + supportedApplications: ["totpAppFreeOTPName", "totpAppMicrosoftAuthenticatorName", "totpAppGoogleName"], policy: { algorithm: "HmacSHA1", digits: 6, @@ -220,6 +220,8 @@ export const kcContextMocks: KcContext[] = [ period: 30 } }, + mode: "qr", + isAppInitiatedAction: false, "stateChecker": "" }) ]; diff --git a/src/account/lib/useGetClassName.ts b/src/account/lib/useGetClassName.ts index f0ee87af..15397ade 100644 --- a/src/account/lib/useGetClassName.ts +++ b/src/account/lib/useGetClassName.ts @@ -9,6 +9,12 @@ export const { useGetClassName } = createUseClassName({ "kcContentWrapperClass": "row", "kcButtonPrimaryClass": "btn-primary", "kcButtonLargeClass": "btn-lg", - "kcButtonDefaultClass": "btn-default" + "kcButtonDefaultClass": "btn-default", + "kcFormClass": "form-horizontal", + "kcFormGroupClass": "form-group", + "kcInputWrapperClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12", + "kcLabelClass": "control-label", + "kcInputClass": "form-control", + "kcInputErrorMessageClass": "pf-c-form__helper-text pf-m-error required kc-feedback-text" } }); diff --git a/src/account/pages/Totp.tsx b/src/account/pages/Totp.tsx index 66c0594a..8ce4eb15 100644 --- a/src/account/pages/Totp.tsx +++ b/src/account/pages/Totp.tsx @@ -3,6 +3,7 @@ import type { PageProps } from "keycloakify/account/pages/PageProps"; import { useGetClassName } from "keycloakify/account/lib/useGetClassName"; import type { KcContext } from "../kcContext"; import type { I18n } from "../i18n"; +import { MessageKey } from "keycloakify/account/i18n/i18n"; export default function Totp(props: PageProps, I18n>) { const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; @@ -11,7 +12,7 @@ export default function Totp(props: PageProps <> +
+
+

{msg("changePasswordHtmlTitle")}

+
+
+ {msg("allFieldsRequired")} +
+
  1. -

    {msg("loginTotpStep1")}

    +

    {msg("totpStep1")}

      {totp.supportedApplications.map(app => ( -
    • {msg(app as MessageKey)}
    • +
    • {msg(app as MessageKey)}
    • ))}
  2. @@ -38,36 +47,36 @@ export default function Totp(props: PageProps
  3. -

    {msg("loginTotpManualStep2")}

    +

    {msg("totpManualStep2")}

    {totp.totpSecretEncoded}

    - {msg("loginTotpScanBarcode")} + {msg("totpScanBarcode")}

  4. -

    {msg("loginTotpManualStep3")}

    +

    {msg("totpManualStep3")}

    • - {msg("loginTotpType")}: {msg(`loginTotp.${totp.policy.type}`)} + {msg("totpType")}: {msg(`totp.${totp.policy.type}`)}
    • - {msg("loginTotpAlgorithm")}: {algToKeyUriAlg?.[totp.policy.algorithm] ?? totp.policy.algorithm} + {msg("totpAlgorithm")}: {algToKeyUriAlg?.[totp.policy.algorithm] ?? totp.policy.algorithm}
    • - {msg("loginTotpDigits")}: {totp.policy.digits} + {msg("totpDigits")}: {totp.policy.digits}
    • {totp.policy.type === "totp" ? (
    • - {msg("loginTotpInterval")}: {totp.policy.period} + {msg("totpInterval")}: {totp.policy.period}
    • ) : (
    • - {msg("loginTotpCounter")}: {totp.policy.initialCounter} + {msg("totpCounter")}: {totp.policy.initialCounter}
    • )}
    @@ -76,31 +85,32 @@ export default function Totp(props: PageProps ) : (
  5. -

    {msg("loginTotpStep2")}

    +

    {msg("totpStep2")}

    Figure: Barcode

    - {msg("loginTotpUnableToScan")} + {msg("totpUnableToScan")}

  6. )}
  7. -

    {msg("loginTotpStep3")}

    -

    {msg("loginTotpStep3DeviceName")}

    +

    {msg("totpStep3")}

    +

    {msg("totpStep3DeviceName")}

+ {/*
*/} - +
-
-