From 46c756fd9561f26d9d8a37610ffbeb1f34f90b90 Mon Sep 17 00:00:00 2001 From: Guillaume Bernos Date: Fri, 10 Oct 2025 09:12:24 +0200 Subject: [PATCH 1/3] feat: MFA Enrollment (TOTP) --- .../compose/mfa/MfaEnrollmentContentState.kt | 209 +++++++++ .../ui/auth/compose/mfa/MfaEnrollmentStep.kt | 58 +++ .../auth/compose/mfa/TotpEnrollmentHandler.kt | 151 +++++++ .../ui/auth/compose/mfa/TotpSecret.kt | 104 +++++ .../mfa/MfaEnrollmentContentStateTest.kt | 405 ++++++++++++++++++ .../auth/compose/mfa/MfaEnrollmentStepTest.kt | 51 +++ .../compose/mfa/TotpEnrollmentHandlerTest.kt | 107 +++++ .../ui/auth/compose/mfa/TotpSecretTest.kt | 103 +++++ 8 files changed, 1188 insertions(+) create mode 100644 auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentState.kt create mode 100644 auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentStep.kt create mode 100644 auth/src/main/java/com/firebase/ui/auth/compose/mfa/TotpEnrollmentHandler.kt create mode 100644 auth/src/main/java/com/firebase/ui/auth/compose/mfa/TotpSecret.kt create mode 100644 auth/src/test/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentStateTest.kt create mode 100644 auth/src/test/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentStepTest.kt create mode 100644 auth/src/test/java/com/firebase/ui/auth/compose/mfa/TotpEnrollmentHandlerTest.kt create mode 100644 auth/src/test/java/com/firebase/ui/auth/compose/mfa/TotpSecretTest.kt diff --git a/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentState.kt b/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentState.kt new file mode 100644 index 000000000..4beaab80a --- /dev/null +++ b/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentState.kt @@ -0,0 +1,209 @@ +/* + * Copyright 2025 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.firebase.ui.auth.compose.mfa + +import com.firebase.ui.auth.compose.configuration.MfaFactor +import com.firebase.ui.auth.compose.data.CountryData + +/** + * State class containing all the necessary information to render a custom UI for the + * Multi-Factor Authentication (MFA) enrollment flow. + * + * This class is passed to the content slot of the MfaEnrollmentScreen composable, providing + * access to the current step, user input values, callbacks for actions, and loading/error states. + * + * Use a `when` expression on [step] to determine which UI to render: + * + * ```kotlin + * MfaEnrollmentScreen(user, config, onComplete, onSkip) { state -> + * when (state.step) { + * MfaEnrollmentStep.SelectFactor -> { + * // Render factor selection UI using state.availableFactors + * } + * MfaEnrollmentStep.ConfigureTotp -> { + * // Render TOTP setup UI using state.totpSecret and state.totpQrCodeUrl + * } + * MfaEnrollmentStep.VerifyFactor -> { + * // Render verification UI using state.verificationCode + * } + * // ... other steps + * } + * } + * ``` + * + * @property step The current step in the enrollment flow. Use this to determine which UI to display. + * @property isLoading `true` when an asynchronous operation (like generating a secret or verifying a code) is in progress. Use this to show loading indicators. + * @property error An optional error message to display to the user. Will be `null` if there's no error. + * @property onBackClick Callback to navigate to the previous step in the flow. Invoked when the user clicks a back button. + * + * @property availableFactors (Step: [MfaEnrollmentStep.SelectFactor]) A list of MFA factors the user can choose from (e.g., SMS, TOTP). Determined by [com.firebase.ui.auth.compose.configuration.MfaConfiguration.allowedFactors]. + * @property onFactorSelected (Step: [MfaEnrollmentStep.SelectFactor]) Callback invoked when the user selects an MFA factor. Receives the selected [MfaFactor]. + * @property onSkipClick (Step: [MfaEnrollmentStep.SelectFactor]) Callback for the "Skip" action. Will be `null` if MFA enrollment is required via [com.firebase.ui.auth.compose.configuration.MfaConfiguration.requireEnrollment]. + * + * @property phoneNumber (Step: [MfaEnrollmentStep.ConfigureSms]) The current value of the phone number input field. Does not include country code prefix. + * @property onPhoneNumberChange (Step: [MfaEnrollmentStep.ConfigureSms]) Callback invoked when the phone number input changes. Receives the new phone number string. + * @property selectedCountry (Step: [MfaEnrollmentStep.ConfigureSms]) The currently selected country for phone number formatting. Contains dial code, country code, and flag. + * @property onCountrySelected (Step: [MfaEnrollmentStep.ConfigureSms]) Callback invoked when the user selects a different country. Receives the new [CountryData]. + * @property onSendSmsCodeClick (Step: [MfaEnrollmentStep.ConfigureSms]) Callback to send the SMS verification code to the entered phone number. + * + * @property totpSecret (Step: [MfaEnrollmentStep.ConfigureTotp]) The TOTP secret containing the shared key and configuration. Use this to display the secret key or access the underlying Firebase TOTP secret. + * @property totpQrCodeUrl (Step: [MfaEnrollmentStep.ConfigureTotp]) A URI that can be rendered as a QR code or used as a deep link to open authenticator apps. Generated via [TotpSecret.generateQrCodeUrl]. + * @property onContinueToVerifyClick (Step: [MfaEnrollmentStep.ConfigureTotp]) Callback to proceed to the verification step after the user has scanned the QR code or entered the secret. + * + * @property verificationCode (Step: [MfaEnrollmentStep.VerifyFactor]) The current value of the verification code input field. Should be a 6-digit string. + * @property onVerificationCodeChange (Step: [MfaEnrollmentStep.VerifyFactor]) Callback invoked when the verification code input changes. Receives the new code string. + * @property onVerifyClick (Step: [MfaEnrollmentStep.VerifyFactor]) Callback to verify the entered code and finalize MFA enrollment. + * @property selectedFactor (Step: [MfaEnrollmentStep.VerifyFactor]) The MFA factor being verified (SMS or TOTP). Use this to customize UI messages. + * @property onResendCodeClick (Step: [MfaEnrollmentStep.VerifyFactor], SMS only) Callback to resend the SMS verification code. Will be `null` for TOTP verification. + * + * @property recoveryCodes (Step: [MfaEnrollmentStep.ShowRecoveryCodes]) A list of one-time backup codes the user should save. Only present if [com.firebase.ui.auth.compose.configuration.MfaConfiguration.enableRecoveryCodes] is `true`. + * @property onCodesSavedClick (Step: [MfaEnrollmentStep.ShowRecoveryCodes]) Callback invoked when the user confirms they have saved their recovery codes. Completes the enrollment flow. + * + * @since 10.0.0 + */ +data class MfaEnrollmentContentState( + /** The current step in the enrollment flow. Use this to determine which UI to display. */ + val step: MfaEnrollmentStep, + + /** `true` when an async operation is in progress. Use to show loading indicators. */ + val isLoading: Boolean = false, + + /** Optional error message to display. `null` if no error. */ + val error: String? = null, + + /** Callback to navigate to the previous step. */ + val onBackClick: () -> Unit = {}, + + // SelectFactor step + /** (SelectFactor) List of MFA factors the user can choose from. */ + val availableFactors: List = emptyList(), + + /** (SelectFactor) Callback when user selects an MFA factor. */ + val onFactorSelected: (MfaFactor) -> Unit = {}, + + /** (SelectFactor) Skip callback. `null` if enrollment is required. */ + val onSkipClick: (() -> Unit)? = null, + + // ConfigureSms step + /** (ConfigureSms) Current phone number value (without country code prefix). */ + val phoneNumber: String = "", + + /** (ConfigureSms) Callback when phone number changes. */ + val onPhoneNumberChange: (String) -> Unit = {}, + + /** (ConfigureSms) Currently selected country (dial code, country code, flag). */ + val selectedCountry: CountryData? = null, + + /** (ConfigureSms) Callback when user selects a different country. */ + val onCountrySelected: (CountryData) -> Unit = {}, + + /** (ConfigureSms) Callback to send SMS verification code. */ + val onSendSmsCodeClick: () -> Unit = {}, + + // ConfigureTotp step + /** (ConfigureTotp) TOTP secret containing shared key. Use to display or access Firebase secret. */ + val totpSecret: TotpSecret? = null, + + /** (ConfigureTotp) QR code URI for authenticator apps. */ + val totpQrCodeUrl: String? = null, + + /** (ConfigureTotp) Callback to proceed to verification after QR scan. */ + val onContinueToVerifyClick: () -> Unit = {}, + + // VerifyFactor step + /** (VerifyFactor) Current verification code value (6 digits). */ + val verificationCode: String = "", + + /** (VerifyFactor) Callback when verification code changes. */ + val onVerificationCodeChange: (String) -> Unit = {}, + + /** (VerifyFactor) Callback to verify code and finalize enrollment. */ + val onVerifyClick: () -> Unit = {}, + + /** (VerifyFactor) The factor being verified (SMS or TOTP). Use to customize messages. */ + val selectedFactor: MfaFactor? = null, + + /** (VerifyFactor, SMS only) Callback to resend SMS code. `null` for TOTP. */ + val onResendCodeClick: (() -> Unit)? = null, + + // ShowRecoveryCodes step + /** (ShowRecoveryCodes) One-time backup codes to save. Only if recovery codes are enabled. */ + val recoveryCodes: List? = null, + + /** (ShowRecoveryCodes) Callback when user confirms codes are saved. Completes enrollment. */ + val onCodesSavedClick: () -> Unit = {} +) { + /** + * Returns true if the current state is valid for the current step. + * + * This can be used to enable/disable action buttons in the UI. + */ + val isValid: Boolean + get() = when (step) { + MfaEnrollmentStep.SelectFactor -> availableFactors.isNotEmpty() + MfaEnrollmentStep.ConfigureSms -> phoneNumber.isNotBlank() + MfaEnrollmentStep.ConfigureTotp -> totpSecret != null && totpQrCodeUrl != null + MfaEnrollmentStep.VerifyFactor -> verificationCode.length == 6 + MfaEnrollmentStep.ShowRecoveryCodes -> !recoveryCodes.isNullOrEmpty() + } + + /** + * Returns true if there is an error in the current state. + */ + val hasError: Boolean + get() = !error.isNullOrBlank() + + /** + * Returns true if the skip action is available (only for SelectFactor step when not required). + */ + val canSkip: Boolean + get() = step == MfaEnrollmentStep.SelectFactor && onSkipClick != null + + /** + * Returns true if the back action is available (for all steps except SelectFactor). + */ + val canGoBack: Boolean + get() = step != MfaEnrollmentStep.SelectFactor + + /** + * Returns the title text for the current step. + * + * This is a convenience method for providing default titles in custom UIs. + */ + fun getStepTitle(): String = when (step) { + MfaEnrollmentStep.SelectFactor -> "Choose Authentication Method" + MfaEnrollmentStep.ConfigureSms -> "Set Up SMS Verification" + MfaEnrollmentStep.ConfigureTotp -> "Set Up Authenticator App" + MfaEnrollmentStep.VerifyFactor -> "Verify Your Code" + MfaEnrollmentStep.ShowRecoveryCodes -> "Save Your Recovery Codes" + } + + /** + * Returns helper text for the current step. + * + * This is a convenience method for providing default instructions in custom UIs. + */ + fun getStepHelperText(): String = when (step) { + MfaEnrollmentStep.SelectFactor -> "Select a second authentication method to secure your account" + MfaEnrollmentStep.ConfigureSms -> "Enter your phone number to receive verification codes" + MfaEnrollmentStep.ConfigureTotp -> "Scan the QR code with your authenticator app" + MfaEnrollmentStep.VerifyFactor -> when (selectedFactor) { + MfaFactor.Sms -> "Enter the code sent to your phone" + MfaFactor.Totp -> "Enter the code from your authenticator app" + null -> "Enter your verification code" + } + MfaEnrollmentStep.ShowRecoveryCodes -> "Store these codes in a safe place. You can use them to sign in if you lose access to your authentication method." + } +} diff --git a/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentStep.kt b/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentStep.kt new file mode 100644 index 000000000..672db7554 --- /dev/null +++ b/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentStep.kt @@ -0,0 +1,58 @@ +/* + * Copyright 2025 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.firebase.ui.auth.compose.mfa + +/** + * Represents the different steps in the Multi-Factor Authentication (MFA) enrollment flow. + * + * This enum defines the sequence of UI states that users progress through when enrolling + * in MFA, from selecting a factor to completing the setup with recovery codes. + * + * @since 10.0.0 + */ +enum class MfaEnrollmentStep { + /** + * The user is presented with a selection of available MFA factors to enroll in. + * The available factors are determined by the [com.firebase.ui.auth.compose.configuration.MfaConfiguration]. + */ + SelectFactor, + + /** + * The user is configuring SMS-based MFA by entering their phone number. + * This step prepares to send an SMS verification code to the provided number. + */ + ConfigureSms, + + /** + * The user is configuring TOTP (Time-based One-Time Password) MFA. + * This step presents the TOTP secret (as both text and QR code) for the user + * to scan into their authenticator app. + */ + ConfigureTotp, + + /** + * The user is verifying their chosen MFA factor by entering a verification code. + * For SMS, this is the code received via text message. + * For TOTP, this is the code generated by their authenticator app. + */ + VerifyFactor, + + /** + * The enrollment is complete and recovery codes are displayed to the user. + * These backup codes can be used to sign in if the primary MFA method is unavailable. + * This step only appears if recovery codes are enabled in the configuration. + */ + ShowRecoveryCodes +} diff --git a/auth/src/main/java/com/firebase/ui/auth/compose/mfa/TotpEnrollmentHandler.kt b/auth/src/main/java/com/firebase/ui/auth/compose/mfa/TotpEnrollmentHandler.kt new file mode 100644 index 000000000..9a4d6f8c7 --- /dev/null +++ b/auth/src/main/java/com/firebase/ui/auth/compose/mfa/TotpEnrollmentHandler.kt @@ -0,0 +1,151 @@ +/* + * Copyright 2025 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.firebase.ui.auth.compose.mfa + +import com.google.firebase.auth.FirebaseAuth +import com.google.firebase.auth.FirebaseUser +import com.google.firebase.auth.MultiFactorAssertion +import com.google.firebase.auth.TotpMultiFactorGenerator +import kotlinx.coroutines.tasks.await + +/** + * Handler for TOTP (Time-based One-Time Password) multi-factor authentication enrollment. + * + * This class manages the complete TOTP enrollment flow, including: + * - Generating TOTP secrets + * - Creating QR codes for authenticator apps + * - Verifying TOTP codes with clock drift tolerance + * - Finalizing enrollment with Firebase Authentication + * + * **Usage:** + * ```kotlin + * val handler = TotpEnrollmentHandler(auth, user) + * + * // Step 1: Generate a TOTP secret + * val totpSecret = handler.generateSecret() + * + * // Step 2: Display QR code to user + * val qrCodeUrl = totpSecret.generateQrCodeUrl(user.email, "My App") + * + * // Step 3: Verify the code entered by the user + * val verificationCode = "123456" // From user input + * handler.enrollWithVerificationCode(totpSecret, verificationCode, "My Authenticator") + * ``` + * + * @property auth The [FirebaseAuth] instance + * @property user The [FirebaseUser] to enroll in TOTP MFA + * + * @since 10.0.0 + */ +class TotpEnrollmentHandler( + private val auth: FirebaseAuth, + private val user: FirebaseUser +) { + /** + * Generates a new TOTP secret for the current user. + * + * This method initiates the TOTP enrollment process by creating a new secret that + * can be shared with an authenticator app. The secret must be displayed to the user + * (either as text or a QR code) so they can add it to their authenticator app. + * + * **Important:** The user must re-authenticate before calling this method if their + * session is not recent. Use [FirebaseUser.reauthenticate] if needed. + * + * @return A [TotpSecret] containing the shared secret and configuration parameters + * @throws Exception if the user needs to re-authenticate or if secret generation fails + * + * @see TotpSecret.generateQrCodeUrl + * @see TotpSecret.openInOtpApp + */ + suspend fun generateSecret(): TotpSecret { + // Get the multi-factor session + val multiFactorSession = user.multiFactor.session.await() + + // Generate the TOTP secret + val firebaseTotpSecret = TotpMultiFactorGenerator.generateSecret(multiFactorSession).await() + + return TotpSecret.from(firebaseTotpSecret) + } + + /** + * Verifies a TOTP code and completes the enrollment process. + * + * This method creates a multi-factor assertion using the provided TOTP secret and + * verification code, then enrolls the user in TOTP MFA with Firebase Authentication. + * + * The verification includes clock drift tolerance as configured in your Firebase project, + * allowing codes from adjacent time windows to be accepted. This accommodates minor + * time synchronization differences between the server and the user's device. + * + * @param totpSecret The [TotpSecret] generated in the first step + * @param verificationCode The 6-digit code from the user's authenticator app + * @param displayName Optional friendly name for this MFA factor (e.g., "Google Authenticator") + * @throws Exception if the verification code is invalid or if enrollment fails + * + * @see generateSecret + */ + suspend fun enrollWithVerificationCode( + totpSecret: TotpSecret, + verificationCode: String, + displayName: String? = null + ) { + // Create the multi-factor assertion for enrollment + val multiFactorAssertion: MultiFactorAssertion = + TotpMultiFactorGenerator.getAssertionForEnrollment( + totpSecret.getFirebaseTotpSecret(), + verificationCode + ) + + // Enroll the user with the TOTP factor + user.multiFactor.enroll(multiFactorAssertion, displayName).await() + } + + /** + * Validates that a verification code has the correct format for TOTP. + * + * This method performs basic client-side validation to ensure the code: + * - Is not null or empty + * - Contains only digits + * - Has exactly 6 digits (the standard TOTP code length) + * + * **Note:** This does not verify the code against the TOTP secret. Use + * [enrollWithVerificationCode] to perform actual verification with Firebase. + * + * @param code The verification code to validate + * @return `true` if the code has a valid format, `false` otherwise + */ + fun isValidCodeFormat(code: String): Boolean { + return code.isNotBlank() && + code.length == 6 && + code.all { it.isDigit() } + } + + companion object { + /** + * The standard length for TOTP verification codes. + */ + const val TOTP_CODE_LENGTH = 6 + + /** + * The standard time interval in seconds for TOTP codes. + */ + const val TOTP_TIME_INTERVAL_SECONDS = 30 + + /** + * The Firebase factor ID for TOTP multi-factor authentication. + */ + const val FACTOR_ID = TotpMultiFactorGenerator.FACTOR_ID + } +} diff --git a/auth/src/main/java/com/firebase/ui/auth/compose/mfa/TotpSecret.kt b/auth/src/main/java/com/firebase/ui/auth/compose/mfa/TotpSecret.kt new file mode 100644 index 000000000..878f0759d --- /dev/null +++ b/auth/src/main/java/com/firebase/ui/auth/compose/mfa/TotpSecret.kt @@ -0,0 +1,104 @@ +/* + * Copyright 2025 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.firebase.ui.auth.compose.mfa + +import android.content.Intent +import android.net.Uri +import com.google.firebase.auth.TotpSecret as FirebaseTotpSecret + +/** + * Wrapper class for Firebase TOTP secret that provides additional utility methods + * for enrollment and integration with authenticator apps. + * + * This class encapsulates the Firebase [FirebaseTotpSecret] and provides methods to: + * - Access the shared secret key + * - Generate QR code URLs for easy scanning + * - Open authenticator apps for automatic configuration + * - Generate hashing algorithm and code generation parameters + * + * @property firebaseTotpSecret The underlying Firebase TOTP secret + * + * @since 10.0.0 + */ +class TotpSecret internal constructor( + private val firebaseTotpSecret: FirebaseTotpSecret +) { + /** + * The shared secret key that should be entered into an authenticator app. + * This is a base32-encoded string that can be manually typed if QR scanning is not available. + */ + val sharedSecretKey: String + get() = firebaseTotpSecret.sharedSecretKey + + /** + * Generates a Google Authenticator-compatible URI that can be encoded as a QR code + * or used to automatically configure an authenticator app. + * + * The generated URI follows the format: + * `otpauth://totp/{accountName}?secret={secret}&issuer={issuer}&algorithm={algorithm}&digits={digits}&period={period}` + * + * @param accountName The account identifier, typically the user's email address + * @param issuer The name of your application or service + * @return A URI string that can be converted to a QR code or used as a deep link + * + * @see openInOtpApp + */ + fun generateQrCodeUrl(accountName: String, issuer: String): String { + return firebaseTotpSecret.generateQrCodeUrl(accountName, issuer) + } + + /** + * Attempts to open the device's default authenticator app with the TOTP configuration. + * + * This method creates an Intent with the provided QR code URL and attempts to open + * an authenticator app (such as Google Authenticator) that can handle the + * `otpauth://` URI scheme. If successful, the app will be pre-configured with the + * TOTP secret without requiring the user to manually scan a QR code. + * + * **Note:** This method may fail silently if no compatible authenticator app is installed + * or if the app doesn't support automatic configuration via URI. + * + * @param qrCodeUrl The OTP auth URL generated by [generateQrCodeUrl] + * + * @see generateQrCodeUrl + */ + fun openInOtpApp(qrCodeUrl: String) { + firebaseTotpSecret.openInOtpApp(qrCodeUrl) + } + + /** + * Gets the underlying Firebase TOTP secret for use in enrollment operations. + * + * This method is primarily used internally by the enrollment handler to complete + * the TOTP enrollment with Firebase Authentication. + * + * @return The underlying [FirebaseTotpSecret] instance + */ + internal fun getFirebaseTotpSecret(): FirebaseTotpSecret { + return firebaseTotpSecret + } + + companion object { + /** + * Creates a [TotpSecret] instance from a Firebase TOTP secret. + * + * @param firebaseTotpSecret The Firebase TOTP secret to wrap + * @return A new [TotpSecret] instance + */ + internal fun from(firebaseTotpSecret: FirebaseTotpSecret): TotpSecret { + return TotpSecret(firebaseTotpSecret) + } + } +} diff --git a/auth/src/test/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentStateTest.kt b/auth/src/test/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentStateTest.kt new file mode 100644 index 000000000..61cc8bb9d --- /dev/null +++ b/auth/src/test/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentStateTest.kt @@ -0,0 +1,405 @@ +/* + * Copyright 2025 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.firebase.ui.auth.compose.mfa + +import com.firebase.ui.auth.compose.configuration.MfaFactor +import com.firebase.ui.auth.compose.data.CountryData +import com.google.firebase.auth.TotpSecret as FirebaseTotpSecret +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito.mock +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config + +@RunWith(RobolectricTestRunner::class) +@Config(manifest = Config.NONE) +class MfaEnrollmentContentStateTest { + + @Test + fun `isValid returns true for SelectFactor with available factors`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.SelectFactor, + availableFactors = listOf(MfaFactor.Sms, MfaFactor.Totp) + ) + + // When & Then + assertTrue(state.isValid) + } + + @Test + fun `isValid returns false for SelectFactor with no available factors`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.SelectFactor, + availableFactors = emptyList() + ) + + // When & Then + assertFalse(state.isValid) + } + + @Test + fun `isValid returns true for ConfigureSms with valid phone number`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.ConfigureSms, + phoneNumber = "1234567890" + ) + + // When & Then + assertTrue(state.isValid) + } + + @Test + fun `isValid returns false for ConfigureSms with empty phone number`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.ConfigureSms, + phoneNumber = "" + ) + + // When & Then + assertFalse(state.isValid) + } + + @Test + fun `isValid returns true for ConfigureTotp with secret and QR URL`() { + // Given + val mockFirebaseTotpSecret = mock(FirebaseTotpSecret::class.java) + val mockTotpSecret = TotpSecret.from(mockFirebaseTotpSecret) + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.ConfigureTotp, + totpSecret = mockTotpSecret, + totpQrCodeUrl = "otpauth://totp/test" + ) + + // When & Then + assertTrue(state.isValid) + } + + @Test + fun `isValid returns false for ConfigureTotp without secret`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.ConfigureTotp, + totpSecret = null, + totpQrCodeUrl = "otpauth://totp/test" + ) + + // When & Then + assertFalse(state.isValid) + } + + @Test + fun `isValid returns true for VerifyFactor with 6-digit code`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.VerifyFactor, + verificationCode = "123456" + ) + + // When & Then + assertTrue(state.isValid) + } + + @Test + fun `isValid returns false for VerifyFactor with invalid code length`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.VerifyFactor, + verificationCode = "12345" + ) + + // When & Then + assertFalse(state.isValid) + } + + @Test + fun `isValid returns true for ShowRecoveryCodes with codes`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.ShowRecoveryCodes, + recoveryCodes = listOf("code1", "code2", "code3") + ) + + // When & Then + assertTrue(state.isValid) + } + + @Test + fun `isValid returns false for ShowRecoveryCodes without codes`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.ShowRecoveryCodes, + recoveryCodes = null + ) + + // When & Then + assertFalse(state.isValid) + } + + @Test + fun `hasError returns true when error is present`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.SelectFactor, + error = "Something went wrong" + ) + + // When & Then + assertTrue(state.hasError) + } + + @Test + fun `hasError returns false when error is null`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.SelectFactor, + error = null + ) + + // When & Then + assertFalse(state.hasError) + } + + @Test + fun `hasError returns false when error is blank`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.SelectFactor, + error = " " + ) + + // When & Then + assertFalse(state.hasError) + } + + @Test + fun `canSkip returns true when on SelectFactor step with skip callback`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.SelectFactor, + onSkipClick = {} + ) + + // When & Then + assertTrue(state.canSkip) + } + + @Test + fun `canSkip returns false when skip callback is null`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.SelectFactor, + onSkipClick = null + ) + + // When & Then + assertFalse(state.canSkip) + } + + @Test + fun `canSkip returns false when not on SelectFactor step`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.ConfigureTotp, + onSkipClick = {} + ) + + // When & Then + assertFalse(state.canSkip) + } + + @Test + fun `canGoBack returns false on SelectFactor step`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.SelectFactor + ) + + // When & Then + assertFalse(state.canGoBack) + } + + @Test + fun `canGoBack returns true on other steps`() { + // Given + val steps = listOf( + MfaEnrollmentStep.ConfigureSms, + MfaEnrollmentStep.ConfigureTotp, + MfaEnrollmentStep.VerifyFactor, + MfaEnrollmentStep.ShowRecoveryCodes + ) + + // When & Then + steps.forEach { step -> + val state = MfaEnrollmentContentState(step = step) + assertTrue("Expected canGoBack to be true for step $step", state.canGoBack) + } + } + + @Test + fun `getStepTitle returns correct titles for each step`() { + // Given & When & Then + assertEquals( + "Choose Authentication Method", + MfaEnrollmentContentState(step = MfaEnrollmentStep.SelectFactor).getStepTitle() + ) + assertEquals( + "Set Up SMS Verification", + MfaEnrollmentContentState(step = MfaEnrollmentStep.ConfigureSms).getStepTitle() + ) + assertEquals( + "Set Up Authenticator App", + MfaEnrollmentContentState(step = MfaEnrollmentStep.ConfigureTotp).getStepTitle() + ) + assertEquals( + "Verify Your Code", + MfaEnrollmentContentState(step = MfaEnrollmentStep.VerifyFactor).getStepTitle() + ) + assertEquals( + "Save Your Recovery Codes", + MfaEnrollmentContentState(step = MfaEnrollmentStep.ShowRecoveryCodes).getStepTitle() + ) + } + + @Test + fun `getStepHelperText returns correct text for SelectFactor`() { + // Given + val state = MfaEnrollmentContentState(step = MfaEnrollmentStep.SelectFactor) + + // When & Then + assertEquals( + "Select a second authentication method to secure your account", + state.getStepHelperText() + ) + } + + @Test + fun `getStepHelperText returns correct text for ConfigureSms`() { + // Given + val state = MfaEnrollmentContentState(step = MfaEnrollmentStep.ConfigureSms) + + // When & Then + assertEquals( + "Enter your phone number to receive verification codes", + state.getStepHelperText() + ) + } + + @Test + fun `getStepHelperText returns correct text for ConfigureTotp`() { + // Given + val state = MfaEnrollmentContentState(step = MfaEnrollmentStep.ConfigureTotp) + + // When & Then + assertEquals( + "Scan the QR code with your authenticator app", + state.getStepHelperText() + ) + } + + @Test + fun `getStepHelperText returns correct text for VerifyFactor with SMS`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.VerifyFactor, + selectedFactor = MfaFactor.Sms + ) + + // When & Then + assertEquals( + "Enter the code sent to your phone", + state.getStepHelperText() + ) + } + + @Test + fun `getStepHelperText returns correct text for VerifyFactor with TOTP`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.VerifyFactor, + selectedFactor = MfaFactor.Totp + ) + + // When & Then + assertEquals( + "Enter the code from your authenticator app", + state.getStepHelperText() + ) + } + + @Test + fun `getStepHelperText returns generic text for VerifyFactor with no factor`() { + // Given + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.VerifyFactor, + selectedFactor = null + ) + + // When & Then + assertEquals( + "Enter your verification code", + state.getStepHelperText() + ) + } + + @Test + fun `getStepHelperText returns correct text for ShowRecoveryCodes`() { + // Given + val state = MfaEnrollmentContentState(step = MfaEnrollmentStep.ShowRecoveryCodes) + + // When & Then + assertTrue(state.getStepHelperText().contains("Store these codes in a safe place")) + } + + @Test + fun `data class properties are accessible`() { + // Given + val mockFirebaseTotpSecret = mock(FirebaseTotpSecret::class.java) + val mockTotpSecret = TotpSecret.from(mockFirebaseTotpSecret) + val mockCountry = CountryData("United States", "+1", "us", "🇺🇸") + val state = MfaEnrollmentContentState( + step = MfaEnrollmentStep.ConfigureTotp, + isLoading = true, + error = "Error message", + phoneNumber = "1234567890", + selectedCountry = mockCountry, + totpSecret = mockTotpSecret, + totpQrCodeUrl = "otpauth://totp/test", + verificationCode = "123456", + selectedFactor = MfaFactor.Totp, + recoveryCodes = listOf("code1", "code2"), + availableFactors = listOf(MfaFactor.Sms, MfaFactor.Totp) + ) + + // When & Then + assertEquals(MfaEnrollmentStep.ConfigureTotp, state.step) + assertTrue(state.isLoading) + assertEquals("Error message", state.error) + assertEquals("1234567890", state.phoneNumber) + assertEquals(mockCountry, state.selectedCountry) + assertEquals(mockTotpSecret, state.totpSecret) + assertEquals("otpauth://totp/test", state.totpQrCodeUrl) + assertEquals("123456", state.verificationCode) + assertEquals(MfaFactor.Totp, state.selectedFactor) + assertEquals(listOf("code1", "code2"), state.recoveryCodes) + assertEquals(listOf(MfaFactor.Sms, MfaFactor.Totp), state.availableFactors) + } +} diff --git a/auth/src/test/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentStepTest.kt b/auth/src/test/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentStepTest.kt new file mode 100644 index 000000000..b89f3e8e7 --- /dev/null +++ b/auth/src/test/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentStepTest.kt @@ -0,0 +1,51 @@ +/* + * Copyright 2025 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.firebase.ui.auth.compose.mfa + +import org.junit.Assert.assertEquals +import org.junit.Test + +class MfaEnrollmentStepTest { + + @Test + fun `enum has all expected values`() { + val values = MfaEnrollmentStep.entries.toTypedArray() + + assertEquals(5, values.size) + assertEquals(MfaEnrollmentStep.SelectFactor, values[0]) + assertEquals(MfaEnrollmentStep.ConfigureSms, values[1]) + assertEquals(MfaEnrollmentStep.ConfigureTotp, values[2]) + assertEquals(MfaEnrollmentStep.VerifyFactor, values[3]) + assertEquals(MfaEnrollmentStep.ShowRecoveryCodes, values[4]) + } + + @Test + fun `valueOf works correctly`() { + assertEquals(MfaEnrollmentStep.SelectFactor, MfaEnrollmentStep.valueOf("SelectFactor")) + assertEquals(MfaEnrollmentStep.ConfigureSms, MfaEnrollmentStep.valueOf("ConfigureSms")) + assertEquals(MfaEnrollmentStep.ConfigureTotp, MfaEnrollmentStep.valueOf("ConfigureTotp")) + assertEquals(MfaEnrollmentStep.VerifyFactor, MfaEnrollmentStep.valueOf("VerifyFactor")) + assertEquals(MfaEnrollmentStep.ShowRecoveryCodes, MfaEnrollmentStep.valueOf("ShowRecoveryCodes")) + } + + @Test + fun `enum ordinals are in expected order`() { + assertEquals(0, MfaEnrollmentStep.SelectFactor.ordinal) + assertEquals(1, MfaEnrollmentStep.ConfigureSms.ordinal) + assertEquals(2, MfaEnrollmentStep.ConfigureTotp.ordinal) + assertEquals(3, MfaEnrollmentStep.VerifyFactor.ordinal) + assertEquals(4, MfaEnrollmentStep.ShowRecoveryCodes.ordinal) + } +} diff --git a/auth/src/test/java/com/firebase/ui/auth/compose/mfa/TotpEnrollmentHandlerTest.kt b/auth/src/test/java/com/firebase/ui/auth/compose/mfa/TotpEnrollmentHandlerTest.kt new file mode 100644 index 000000000..d0218d450 --- /dev/null +++ b/auth/src/test/java/com/firebase/ui/auth/compose/mfa/TotpEnrollmentHandlerTest.kt @@ -0,0 +1,107 @@ +/* + * Copyright 2025 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.firebase.ui.auth.compose.mfa + +import com.google.firebase.auth.FirebaseAuth +import com.google.firebase.auth.FirebaseUser +import com.google.firebase.auth.MultiFactor +import com.google.firebase.auth.TotpMultiFactorGenerator +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.`when` +import org.mockito.MockitoAnnotations +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config + +/** + * Unit tests for [TotpEnrollmentHandler]. + * + * Note: Full integration tests for secret generation and enrollment require + * mocking static Firebase methods, which is complex with Mockito. + * These tests focus on validation logic and constants. + */ +@RunWith(RobolectricTestRunner::class) +@Config(manifest = Config.NONE) +class TotpEnrollmentHandlerTest { + + @Mock + private lateinit var mockAuth: FirebaseAuth + @Mock + private lateinit var mockUser: FirebaseUser + @Mock + private lateinit var mockMultiFactor: MultiFactor + private lateinit var handler: TotpEnrollmentHandler + + @Before + fun setUp() { + MockitoAnnotations.openMocks(this) + `when`(mockUser.multiFactor).thenReturn(mockMultiFactor) + handler = TotpEnrollmentHandler(mockAuth, mockUser) + } + + @Test + fun `isValidCodeFormat returns true for valid 6-digit codes`() { + // Valid codes + assertTrue(handler.isValidCodeFormat("123456")) + assertTrue(handler.isValidCodeFormat("000000")) + assertTrue(handler.isValidCodeFormat("999999")) + assertTrue(handler.isValidCodeFormat("123456")) + } + + @Test + fun `isValidCodeFormat returns false for empty or blank codes`() { + assertFalse(handler.isValidCodeFormat("")) + assertFalse(handler.isValidCodeFormat(" ")) + assertFalse(handler.isValidCodeFormat(" ")) + } + + @Test + fun `isValidCodeFormat returns false for codes with wrong length`() { + assertFalse(handler.isValidCodeFormat("12345")) // Too short + assertFalse(handler.isValidCodeFormat("1234567")) // Too long + assertFalse(handler.isValidCodeFormat("1")) // Way too short + assertFalse(handler.isValidCodeFormat("12345678901234567890")) // Way too long + } + + @Test + fun `isValidCodeFormat returns false for codes with non-digit characters`() { + assertFalse(handler.isValidCodeFormat("12345a")) // Contains letter + assertFalse(handler.isValidCodeFormat("12 34 56")) // Contains spaces + assertFalse(handler.isValidCodeFormat("abc123")) // Contains letters + assertFalse(handler.isValidCodeFormat("12-345")) // Contains dash + assertFalse(handler.isValidCodeFormat("12.345")) // Contains dot + assertFalse(handler.isValidCodeFormat("123!56")) // Contains special char + } + + @Test + fun `constants have expected values`() { + assertEquals(6, TotpEnrollmentHandler.TOTP_CODE_LENGTH) + assertEquals(30, TotpEnrollmentHandler.TOTP_TIME_INTERVAL_SECONDS) + assertEquals(TotpMultiFactorGenerator.FACTOR_ID, TotpEnrollmentHandler.FACTOR_ID) + } + + @Test + fun `handler is created with correct auth and user references`() { + // Verify handler can be instantiated + val newHandler = TotpEnrollmentHandler(mockAuth, mockUser) + // Basic smoke test - if we get here, construction succeeded + assertTrue(newHandler.isValidCodeFormat("123456")) + } +} diff --git a/auth/src/test/java/com/firebase/ui/auth/compose/mfa/TotpSecretTest.kt b/auth/src/test/java/com/firebase/ui/auth/compose/mfa/TotpSecretTest.kt new file mode 100644 index 000000000..9a28d5c77 --- /dev/null +++ b/auth/src/test/java/com/firebase/ui/auth/compose/mfa/TotpSecretTest.kt @@ -0,0 +1,103 @@ +/* + * Copyright 2025 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.firebase.ui.auth.compose.mfa + +import com.google.firebase.auth.TotpSecret as FirebaseTotpSecret +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotNull +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mock +import org.mockito.Mockito.verify +import org.mockito.Mockito.`when` +import org.mockito.MockitoAnnotations +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config + +@RunWith(RobolectricTestRunner::class) +@Config(manifest = Config.NONE) +class TotpSecretTest { + + @Mock + private lateinit var mockFirebaseTotpSecret: FirebaseTotpSecret + private lateinit var totpSecret: TotpSecret + + @Before + fun setUp() { + MockitoAnnotations.openMocks(this) + totpSecret = TotpSecret.from(mockFirebaseTotpSecret) + } + + @Test + fun `sharedSecretKey returns value from Firebase TOTP secret`() { + // Given + val expectedSecret = "JBSWY3DPEHPK3PXP" + `when`(mockFirebaseTotpSecret.sharedSecretKey).thenReturn(expectedSecret) + + // When + val result = totpSecret.sharedSecretKey + + // Then + assertEquals(expectedSecret, result) + } + + @Test + fun `generateQrCodeUrl generates correct URL format`() { + // Given + val accountName = "user@example.com" + val issuer = "MyApp" + val expectedUrl = "otpauth://totp/MyApp:user@example.com?secret=JBSWY3DPEHPK3PXP&issuer=MyApp&algorithm=SHA1&digits=6&period=30" + `when`(mockFirebaseTotpSecret.generateQrCodeUrl(accountName, issuer)).thenReturn(expectedUrl) + + // When + val result = totpSecret.generateQrCodeUrl(accountName, issuer) + + // Then + assertEquals(expectedUrl, result) + verify(mockFirebaseTotpSecret).generateQrCodeUrl(accountName, issuer) + } + + @Test + fun `openInOtpApp calls Firebase TOTP secret method`() { + // Given + val qrCodeUrl = "otpauth://totp/MyApp:user@example.com?secret=JBSWY3DPEHPK3PXP" + + // When + totpSecret.openInOtpApp(qrCodeUrl) + + // Then + verify(mockFirebaseTotpSecret).openInOtpApp(qrCodeUrl) + } + + @Test + fun `getFirebaseTotpSecret returns the underlying Firebase TOTP secret`() { + // When + val result = totpSecret.getFirebaseTotpSecret() + + // Then + assertEquals(mockFirebaseTotpSecret, result) + } + + @Test + fun `from creates TotpSecret instance from Firebase TOTP secret`() { + // When + val result = TotpSecret.from(mockFirebaseTotpSecret) + + // Then + assertNotNull(result) + assertEquals(mockFirebaseTotpSecret, result.getFirebaseTotpSecret()) + } +} From 1919056792fa82cb14ee037763a7828f8d87ff70 Mon Sep 17 00:00:00 2001 From: Guillaume Bernos Date: Fri, 10 Oct 2025 09:25:31 +0200 Subject: [PATCH 2/3] remove duplicate doc --- .../compose/mfa/MfaEnrollmentContentState.kt | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentState.kt b/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentState.kt index 4beaab80a..9d633437a 100644 --- a/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentState.kt +++ b/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentState.kt @@ -87,62 +87,44 @@ data class MfaEnrollmentContentState( val onBackClick: () -> Unit = {}, // SelectFactor step - /** (SelectFactor) List of MFA factors the user can choose from. */ val availableFactors: List = emptyList(), - /** (SelectFactor) Callback when user selects an MFA factor. */ val onFactorSelected: (MfaFactor) -> Unit = {}, - /** (SelectFactor) Skip callback. `null` if enrollment is required. */ val onSkipClick: (() -> Unit)? = null, // ConfigureSms step - /** (ConfigureSms) Current phone number value (without country code prefix). */ val phoneNumber: String = "", - /** (ConfigureSms) Callback when phone number changes. */ val onPhoneNumberChange: (String) -> Unit = {}, - /** (ConfigureSms) Currently selected country (dial code, country code, flag). */ val selectedCountry: CountryData? = null, - /** (ConfigureSms) Callback when user selects a different country. */ val onCountrySelected: (CountryData) -> Unit = {}, - /** (ConfigureSms) Callback to send SMS verification code. */ val onSendSmsCodeClick: () -> Unit = {}, // ConfigureTotp step - /** (ConfigureTotp) TOTP secret containing shared key. Use to display or access Firebase secret. */ val totpSecret: TotpSecret? = null, - /** (ConfigureTotp) QR code URI for authenticator apps. */ val totpQrCodeUrl: String? = null, - /** (ConfigureTotp) Callback to proceed to verification after QR scan. */ val onContinueToVerifyClick: () -> Unit = {}, // VerifyFactor step - /** (VerifyFactor) Current verification code value (6 digits). */ val verificationCode: String = "", - /** (VerifyFactor) Callback when verification code changes. */ val onVerificationCodeChange: (String) -> Unit = {}, - /** (VerifyFactor) Callback to verify code and finalize enrollment. */ val onVerifyClick: () -> Unit = {}, - /** (VerifyFactor) The factor being verified (SMS or TOTP). Use to customize messages. */ val selectedFactor: MfaFactor? = null, - /** (VerifyFactor, SMS only) Callback to resend SMS code. `null` for TOTP. */ val onResendCodeClick: (() -> Unit)? = null, // ShowRecoveryCodes step - /** (ShowRecoveryCodes) One-time backup codes to save. Only if recovery codes are enabled. */ val recoveryCodes: List? = null, - /** (ShowRecoveryCodes) Callback when user confirms codes are saved. Completes enrollment. */ val onCodesSavedClick: () -> Unit = {} ) { /** From 52b831e10032a930cfc27251d13dd948e3e15117 Mon Sep 17 00:00:00 2001 From: Guillaume Bernos Date: Fri, 10 Oct 2025 13:08:43 +0200 Subject: [PATCH 3/3] translation --- .../string_provider/AuthUIStringProvider.kt | 38 ++++++ .../DefaultAuthUIStringProvider.kt | 32 +++++ .../compose/mfa/MfaEnrollmentContentState.kt | 30 ----- .../ui/auth/compose/mfa/MfaEnrollmentStep.kt | 40 ++++++ auth/src/main/res/values-ar/strings.xml | 16 +++ auth/src/main/res/values-b+es+419/strings.xml | 16 +++ auth/src/main/res/values-bg/strings.xml | 16 +++ auth/src/main/res/values-bn/strings.xml | 16 +++ auth/src/main/res/values-ca/strings.xml | 16 +++ auth/src/main/res/values-cs/strings.xml | 16 +++ auth/src/main/res/values-da/strings.xml | 16 +++ auth/src/main/res/values-de-rAT/strings.xml | 16 +++ auth/src/main/res/values-de-rCH/strings.xml | 16 +++ auth/src/main/res/values-de/strings.xml | 16 +++ auth/src/main/res/values-el/strings.xml | 16 +++ auth/src/main/res/values-en-rAU/strings.xml | 16 +++ auth/src/main/res/values-en-rCA/strings.xml | 16 +++ auth/src/main/res/values-en-rGB/strings.xml | 16 +++ auth/src/main/res/values-en-rIE/strings.xml | 16 +++ auth/src/main/res/values-en-rIN/strings.xml | 16 +++ auth/src/main/res/values-en-rSG/strings.xml | 16 +++ auth/src/main/res/values-en-rZA/strings.xml | 16 +++ auth/src/main/res/values-es-rAR/strings.xml | 16 +++ auth/src/main/res/values-es-rBO/strings.xml | 16 +++ auth/src/main/res/values-es-rCL/strings.xml | 16 +++ auth/src/main/res/values-es-rCO/strings.xml | 16 +++ auth/src/main/res/values-es-rCR/strings.xml | 16 +++ auth/src/main/res/values-es-rDO/strings.xml | 16 +++ auth/src/main/res/values-es-rEC/strings.xml | 16 +++ auth/src/main/res/values-es-rGT/strings.xml | 16 +++ auth/src/main/res/values-es-rHN/strings.xml | 16 +++ auth/src/main/res/values-es-rMX/strings.xml | 16 +++ auth/src/main/res/values-es-rNI/strings.xml | 16 +++ auth/src/main/res/values-es-rPA/strings.xml | 16 +++ auth/src/main/res/values-es-rPE/strings.xml | 16 +++ auth/src/main/res/values-es-rPR/strings.xml | 16 +++ auth/src/main/res/values-es-rPY/strings.xml | 16 +++ auth/src/main/res/values-es-rSV/strings.xml | 16 +++ auth/src/main/res/values-es-rUS/strings.xml | 16 +++ auth/src/main/res/values-es-rUY/strings.xml | 16 +++ auth/src/main/res/values-es-rVE/strings.xml | 16 +++ auth/src/main/res/values-es/strings.xml | 16 +++ auth/src/main/res/values-fa/strings.xml | 16 +++ auth/src/main/res/values-fi/strings.xml | 16 +++ auth/src/main/res/values-fil/strings.xml | 16 +++ auth/src/main/res/values-fr-rCH/strings.xml | 16 +++ auth/src/main/res/values-fr/strings.xml | 16 +++ auth/src/main/res/values-gsw/strings.xml | 16 +++ auth/src/main/res/values-gu/strings.xml | 16 +++ auth/src/main/res/values-hi/strings.xml | 16 +++ auth/src/main/res/values-hr/strings.xml | 16 +++ auth/src/main/res/values-hu/strings.xml | 16 +++ auth/src/main/res/values-in/strings.xml | 16 +++ auth/src/main/res/values-it/strings.xml | 16 +++ auth/src/main/res/values-iw/strings.xml | 16 +++ auth/src/main/res/values-ja/strings.xml | 16 +++ auth/src/main/res/values-kn/strings.xml | 16 +++ auth/src/main/res/values-ko/strings.xml | 16 +++ auth/src/main/res/values-ln/strings.xml | 16 +++ auth/src/main/res/values-lt/strings.xml | 16 +++ auth/src/main/res/values-lv/strings.xml | 16 +++ auth/src/main/res/values-mo/strings.xml | 16 +++ auth/src/main/res/values-mr/strings.xml | 16 +++ auth/src/main/res/values-ms/strings.xml | 16 +++ auth/src/main/res/values-nb/strings.xml | 16 +++ auth/src/main/res/values-nl/strings.xml | 16 +++ auth/src/main/res/values-no/strings.xml | 16 +++ auth/src/main/res/values-pl/strings.xml | 16 +++ auth/src/main/res/values-pt-rBR/strings.xml | 16 +++ auth/src/main/res/values-pt-rPT/strings.xml | 16 +++ auth/src/main/res/values-pt/strings.xml | 16 +++ auth/src/main/res/values-ro/strings.xml | 16 +++ auth/src/main/res/values-ru/strings.xml | 16 +++ auth/src/main/res/values-sk/strings.xml | 16 +++ auth/src/main/res/values-sl/strings.xml | 16 +++ auth/src/main/res/values-sr/strings.xml | 16 +++ auth/src/main/res/values-sv/strings.xml | 16 +++ auth/src/main/res/values-ta/strings.xml | 16 +++ auth/src/main/res/values-th/strings.xml | 16 +++ auth/src/main/res/values-tl/strings.xml | 16 +++ auth/src/main/res/values-tr/strings.xml | 16 +++ auth/src/main/res/values-uk/strings.xml | 16 +++ auth/src/main/res/values-ur/strings.xml | 16 +++ auth/src/main/res/values-vi/strings.xml | 16 +++ auth/src/main/res/values-zh-rCN/strings.xml | 16 +++ auth/src/main/res/values-zh-rHK/strings.xml | 16 +++ auth/src/main/res/values-zh-rTW/strings.xml | 16 +++ auth/src/main/res/values-zh/strings.xml | 16 +++ auth/src/main/res/values/strings.xml | 15 +++ .../mfa/MfaEnrollmentContentStateTest.kt | 114 ------------------ .../auth/compose/mfa/MfaEnrollmentStepTest.kt | 107 ++++++++++++++++ 91 files changed, 1576 insertions(+), 144 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/compose/configuration/string_provider/AuthUIStringProvider.kt b/auth/src/main/java/com/firebase/ui/auth/compose/configuration/string_provider/AuthUIStringProvider.kt index f81ead323..2420fcf9a 100644 --- a/auth/src/main/java/com/firebase/ui/auth/compose/configuration/string_provider/AuthUIStringProvider.kt +++ b/auth/src/main/java/com/firebase/ui/auth/compose/configuration/string_provider/AuthUIStringProvider.kt @@ -224,4 +224,42 @@ interface AuthUIStringProvider { /** Unknown error recovery message */ val unknownErrorRecoveryMessage: String + + // MFA Enrollment Step Titles + /** Title for MFA factor selection step */ + val mfaStepSelectFactorTitle: String + + /** Title for SMS MFA configuration step */ + val mfaStepConfigureSmsTitle: String + + /** Title for TOTP MFA configuration step */ + val mfaStepConfigureTotpTitle: String + + /** Title for MFA verification step */ + val mfaStepVerifyFactorTitle: String + + /** Title for recovery codes step */ + val mfaStepShowRecoveryCodesTitle: String + + // MFA Enrollment Helper Text + /** Helper text for selecting MFA factor */ + val mfaStepSelectFactorHelper: String + + /** Helper text for SMS configuration */ + val mfaStepConfigureSmsHelper: String + + /** Helper text for TOTP configuration */ + val mfaStepConfigureTotpHelper: String + + /** Helper text for SMS verification */ + val mfaStepVerifyFactorSmsHelper: String + + /** Helper text for TOTP verification */ + val mfaStepVerifyFactorTotpHelper: String + + /** Generic helper text for factor verification */ + val mfaStepVerifyFactorGenericHelper: String + + /** Helper text for recovery codes */ + val mfaStepShowRecoveryCodesHelper: String } diff --git a/auth/src/main/java/com/firebase/ui/auth/compose/configuration/string_provider/DefaultAuthUIStringProvider.kt b/auth/src/main/java/com/firebase/ui/auth/compose/configuration/string_provider/DefaultAuthUIStringProvider.kt index 5c5e867e5..829f8f6f2 100644 --- a/auth/src/main/java/com/firebase/ui/auth/compose/configuration/string_provider/DefaultAuthUIStringProvider.kt +++ b/auth/src/main/java/com/firebase/ui/auth/compose/configuration/string_provider/DefaultAuthUIStringProvider.kt @@ -213,4 +213,36 @@ class DefaultAuthUIStringProvider( get() = localizedContext.getString(R.string.fui_error_auth_cancelled_message) override val unknownErrorRecoveryMessage: String get() = localizedContext.getString(R.string.fui_error_unknown) + + /** + * MFA Enrollment Step Titles + */ + override val mfaStepSelectFactorTitle: String + get() = localizedContext.getString(R.string.fui_mfa_step_select_factor_title) + override val mfaStepConfigureSmsTitle: String + get() = localizedContext.getString(R.string.fui_mfa_step_configure_sms_title) + override val mfaStepConfigureTotpTitle: String + get() = localizedContext.getString(R.string.fui_mfa_step_configure_totp_title) + override val mfaStepVerifyFactorTitle: String + get() = localizedContext.getString(R.string.fui_mfa_step_verify_factor_title) + override val mfaStepShowRecoveryCodesTitle: String + get() = localizedContext.getString(R.string.fui_mfa_step_show_recovery_codes_title) + + /** + * MFA Enrollment Helper Text + */ + override val mfaStepSelectFactorHelper: String + get() = localizedContext.getString(R.string.fui_mfa_step_select_factor_helper) + override val mfaStepConfigureSmsHelper: String + get() = localizedContext.getString(R.string.fui_mfa_step_configure_sms_helper) + override val mfaStepConfigureTotpHelper: String + get() = localizedContext.getString(R.string.fui_mfa_step_configure_totp_helper) + override val mfaStepVerifyFactorSmsHelper: String + get() = localizedContext.getString(R.string.fui_mfa_step_verify_factor_sms_helper) + override val mfaStepVerifyFactorTotpHelper: String + get() = localizedContext.getString(R.string.fui_mfa_step_verify_factor_totp_helper) + override val mfaStepVerifyFactorGenericHelper: String + get() = localizedContext.getString(R.string.fui_mfa_step_verify_factor_generic_helper) + override val mfaStepShowRecoveryCodesHelper: String + get() = localizedContext.getString(R.string.fui_mfa_step_show_recovery_codes_helper) } diff --git a/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentState.kt b/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentState.kt index 9d633437a..796900cb6 100644 --- a/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentState.kt +++ b/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentState.kt @@ -158,34 +158,4 @@ data class MfaEnrollmentContentState( */ val canGoBack: Boolean get() = step != MfaEnrollmentStep.SelectFactor - - /** - * Returns the title text for the current step. - * - * This is a convenience method for providing default titles in custom UIs. - */ - fun getStepTitle(): String = when (step) { - MfaEnrollmentStep.SelectFactor -> "Choose Authentication Method" - MfaEnrollmentStep.ConfigureSms -> "Set Up SMS Verification" - MfaEnrollmentStep.ConfigureTotp -> "Set Up Authenticator App" - MfaEnrollmentStep.VerifyFactor -> "Verify Your Code" - MfaEnrollmentStep.ShowRecoveryCodes -> "Save Your Recovery Codes" - } - - /** - * Returns helper text for the current step. - * - * This is a convenience method for providing default instructions in custom UIs. - */ - fun getStepHelperText(): String = when (step) { - MfaEnrollmentStep.SelectFactor -> "Select a second authentication method to secure your account" - MfaEnrollmentStep.ConfigureSms -> "Enter your phone number to receive verification codes" - MfaEnrollmentStep.ConfigureTotp -> "Scan the QR code with your authenticator app" - MfaEnrollmentStep.VerifyFactor -> when (selectedFactor) { - MfaFactor.Sms -> "Enter the code sent to your phone" - MfaFactor.Totp -> "Enter the code from your authenticator app" - null -> "Enter your verification code" - } - MfaEnrollmentStep.ShowRecoveryCodes -> "Store these codes in a safe place. You can use them to sign in if you lose access to your authentication method." - } } diff --git a/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentStep.kt b/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentStep.kt index 672db7554..160fa88ab 100644 --- a/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentStep.kt +++ b/auth/src/main/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentStep.kt @@ -14,6 +14,9 @@ package com.firebase.ui.auth.compose.mfa +import com.firebase.ui.auth.compose.configuration.MfaFactor +import com.firebase.ui.auth.compose.configuration.string_provider.AuthUIStringProvider + /** * Represents the different steps in the Multi-Factor Authentication (MFA) enrollment flow. * @@ -56,3 +59,40 @@ enum class MfaEnrollmentStep { */ ShowRecoveryCodes } + +/** + * Returns the localized title text for this enrollment step. + * + * @param stringProvider The string provider for localized strings + * @return The localized title for this step + */ +fun MfaEnrollmentStep.getTitle(stringProvider: AuthUIStringProvider): String = when (this) { + MfaEnrollmentStep.SelectFactor -> stringProvider.mfaStepSelectFactorTitle + MfaEnrollmentStep.ConfigureSms -> stringProvider.mfaStepConfigureSmsTitle + MfaEnrollmentStep.ConfigureTotp -> stringProvider.mfaStepConfigureTotpTitle + MfaEnrollmentStep.VerifyFactor -> stringProvider.mfaStepVerifyFactorTitle + MfaEnrollmentStep.ShowRecoveryCodes -> stringProvider.mfaStepShowRecoveryCodesTitle +} + +/** + * Returns localized helper text providing instructions for this step. + * + * @param stringProvider The string provider for localized strings + * @param selectedFactor The MFA factor being configured or verified. Used for [MfaEnrollmentStep.VerifyFactor] + * to provide factor-specific instructions. Ignored for other steps. + * @return Localized instructional text appropriate for this step + */ +fun MfaEnrollmentStep.getHelperText( + stringProvider: AuthUIStringProvider, + selectedFactor: MfaFactor? = null +): String = when (this) { + MfaEnrollmentStep.SelectFactor -> stringProvider.mfaStepSelectFactorHelper + MfaEnrollmentStep.ConfigureSms -> stringProvider.mfaStepConfigureSmsHelper + MfaEnrollmentStep.ConfigureTotp -> stringProvider.mfaStepConfigureTotpHelper + MfaEnrollmentStep.VerifyFactor -> when (selectedFactor) { + MfaFactor.Sms -> stringProvider.mfaStepVerifyFactorSmsHelper + MfaFactor.Totp -> stringProvider.mfaStepVerifyFactorTotpHelper + null -> stringProvider.mfaStepVerifyFactorGenericHelper + } + MfaEnrollmentStep.ShowRecoveryCodes -> stringProvider.mfaStepShowRecoveryCodesHelper +} diff --git a/auth/src/main/res/values-ar/strings.xml b/auth/src/main/res/values-ar/strings.xml index 3231bd74f..26017c8b6 100755 --- a/auth/src/main/res/values-ar/strings.xml +++ b/auth/src/main/res/values-ar/strings.xml @@ -94,4 +94,20 @@ مطلوب تحقق إضافي. يرجى إكمال المصادقة متعددة العوامل. يجب ربط الحساب. جرب طريقة تسجيل دخول مختلفة. تم إلغاء المصادقة. أعد المحاولة عندما تكون جاهزاً. + + + اختر طريقة المصادقة + إعداد التحقق بالرسائل القصيرة + إعداد تطبيق المصادقة + تحقق من الرمز + احفظ رموز الاسترداد + + اختر طريقة مصادقة ثانية لتأمين حسابك + أدخل رقم هاتفك لتلقي رموز التحقق + امسح رمز الاستجابة السريعة باستخدام تطبيق المصادقة + أدخل الرمز المرسل إلى هاتفك + أدخل الرمز من تطبيق المصادقة + أدخل رمز التحقق + احفظ هذه الرموز في مكان آمن. يمكنك استخدامها لتسجيل الدخول إذا فقدت الوصول إلى طريقة المصادقة. + diff --git a/auth/src/main/res/values-b+es+419/strings.xml b/auth/src/main/res/values-b+es+419/strings.xml index f2635ab84..595813d95 100755 --- a/auth/src/main/res/values-b+es+419/strings.xml +++ b/auth/src/main/res/values-b+es+419/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Choose Authentication Method + Set Up SMS Verification + Set Up Authenticator App + Verify Your Code + Save Your Recovery Codes + + Select a second authentication method to secure your account + Enter your phone number to receive verification codes + Scan the QR code with your authenticator app + Enter the code sent to your phone + Enter the code from your authenticator app + Enter your verification code + Store these codes in a safe place. You can use them to sign in if you lose access to your authentication method. + diff --git a/auth/src/main/res/values-bg/strings.xml b/auth/src/main/res/values-bg/strings.xml index dc2b315cd..175a7c60a 100755 --- a/auth/src/main/res/values-bg/strings.xml +++ b/auth/src/main/res/values-bg/strings.xml @@ -94,4 +94,20 @@ Необходима е допълнителна проверка. Моля, завършете многофакторното удостоверяване. Акаунтът трябва да бъде свързан. Опитайте различен метод за влизане. Удостоверяването беше отменено. Опитайте отново, когато сте готови. + + + Изберете метод за удостоверяване + Настройте SMS проверка + Настройте приложение за удостоверяване + Потвърдете кода си + Запазете кодовете за възстановяване + + Изберете втори метод за удостоверяване, за да защитите акаунта си + Въведете телефонния си номер, за да получавате кодове за проверка + Сканирайте QR кода с приложението си за удостоверяване + Въведете кода, изпратен на телефона ви + Въведете кода от приложението си за удостоверяване + Въведете кода си за проверка + Съхранявайте тези кодове на сигурно място. Можете да ги използвате за влизане, ако загубите достъп до метода си за удостоверяване. + diff --git a/auth/src/main/res/values-bn/strings.xml b/auth/src/main/res/values-bn/strings.xml index bce8d34a7..282db51a6 100755 --- a/auth/src/main/res/values-bn/strings.xml +++ b/auth/src/main/res/values-bn/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + প্রমাণীকরণ পদ্ধতি চয়ন করুন + SMS যাচাইকরণ সেট আপ করুন + প্রমাণীকরণকারী অ্যাপ সেট আপ করুন + আপনার কোড যাচাই করুন + আপনার পুনরুদ্ধার কোড সংরক্ষণ করুন + + আপনার অ্যাকাউন্ট সুরক্ষিত করতে দ্বিতীয় প্রমাণীকরণ পদ্ধতি নির্বাচন করুন + যাচাইকরণ কোড পেতে আপনার ফোন নম্বর লিখুন + আপনার প্রমাণীকরণকারী অ্যাপ দিয়ে QR কোড স্ক্যান করুন + আপনার ফোনে পাঠানো কোড লিখুন + আপনার প্রমাণীকরণকারী অ্যাপ থেকে কোড লিখুন + আপনার যাচাইকরণ কোড লিখুন + এই কোডগুলি একটি নিরাপদ স্থানে সংরক্ষণ করুন। আপনি যদি আপনার প্রমাণীকরণ পদ্ধতিতে অ্যাক্সেস হারান তবে সাইন ইন করতে এগুলি ব্যবহার করতে পারেন। + diff --git a/auth/src/main/res/values-ca/strings.xml b/auth/src/main/res/values-ca/strings.xml index a08a21c1d..445d0cdfa 100755 --- a/auth/src/main/res/values-ca/strings.xml +++ b/auth/src/main/res/values-ca/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Trieu el mètode d\'autenticació + Configureu la verificació per SMS + Configureu l\'aplicació d\'autenticació + Verifiqueu el codi + Deseu els codis de recuperació + + Seleccioneu un segon mètode d\'autenticació per protegir el vostre compte + Introduïu el vostre número de telèfon per rebre codis de verificació + Escanegeu el codi QR amb la vostra aplicació d\'autenticació + Introduïu el codi enviat al vostre telèfon + Introduïu el codi de la vostra aplicació d\'autenticació + Introduïu el vostre codi de verificació + Deseu aquests codis en un lloc segur. Podeu utilitzar-los per iniciar sessió si perdeu l\'accés al vostre mètode d\'autenticació. + diff --git a/auth/src/main/res/values-cs/strings.xml b/auth/src/main/res/values-cs/strings.xml index 6ee3d6467..56e5d5edf 100755 --- a/auth/src/main/res/values-cs/strings.xml +++ b/auth/src/main/res/values-cs/strings.xml @@ -94,4 +94,20 @@ Vyžadováno další ověření. Dokončete prosím vícefaktorové ověření. Účet je třeba propojit. Zkuste jiný způsob přihlášení. Ověření bylo zrušeno. Zkuste znovu až budete připraveni. + + + Vyberte metodu ověření + Nastavit ověření SMS + Nastavit ověřovací aplikaci + Ověřte svůj kód + Uložte obnovací kódy + + Vyberte druhou metodu ověření pro zabezpečení účtu + Zadejte telefonní číslo pro příjem ověřovacích kódů + Naskenujte QR kód pomocí ověřovací aplikace + Zadejte kód odeslaný na váš telefon + Zadejte kód z ověřovací aplikace + Zadejte ověřovací kód + Uložte tyto kódy na bezpečném místě. Můžete je použít k přihlášení, pokud ztratíte přístup k metodě ověření. + diff --git a/auth/src/main/res/values-da/strings.xml b/auth/src/main/res/values-da/strings.xml index f177f7d53..db790ab5d 100755 --- a/auth/src/main/res/values-da/strings.xml +++ b/auth/src/main/res/values-da/strings.xml @@ -94,4 +94,20 @@ Yderligere bekræftelse påkrævet. Fuldfør venligst multifaktorgodkendelse. Kontoen skal tilknyttes. Prøv en anden login-metode. Godkendelsen blev annulleret. Prøv igen når du er klar. + + + Vælg godkendelsesmetode + Konfigurer SMS-bekræftelse + Konfigurer godkendelsesapp + Bekræft din kode + Gem dine gendannelseskoder + + Vælg en anden godkendelsesmetode for at beskytte din konto + Indtast dit telefonnummer for at modtage bekræftelseskoder + Scan QR-koden med din godkendelsesapp + Indtast koden sendt til din telefon + Indtast koden fra din godkendelsesapp + Indtast din bekræftelseskode + Gem disse koder et sikkert sted. Du kan bruge dem til at logge ind, hvis du mister adgang til din godkendelsesmetode. + diff --git a/auth/src/main/res/values-de-rAT/strings.xml b/auth/src/main/res/values-de-rAT/strings.xml index f221da191..0f04c46de 100755 --- a/auth/src/main/res/values-de-rAT/strings.xml +++ b/auth/src/main/res/values-de-rAT/strings.xml @@ -94,4 +94,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Authentifizierungsmethode auswählen + SMS-Bestätigung einrichten + Authenticator-App einrichten + Code bestätigen + Wiederherstellungscodes speichern + + Wählen Sie eine zweite Authentifizierungsmethode aus, um Ihr Konto zu schützen + Geben Sie Ihre Telefonnummer ein, um Bestätigungscodes zu erhalten + Scannen Sie den QR-Code mit Ihrer Authenticator-App + Geben Sie den an Ihr Telefon gesendeten Code ein + Geben Sie den Code aus Ihrer Authenticator-App ein + Geben Sie Ihren Bestätigungscode ein + Bewahren Sie diese Codes an einem sicheren Ort auf. Sie können sie zum Anmelden verwenden, wenn Sie den Zugriff auf Ihre Authentifizierungsmethode verlieren. + diff --git a/auth/src/main/res/values-de-rCH/strings.xml b/auth/src/main/res/values-de-rCH/strings.xml index 1909d07a7..a41c9fe55 100755 --- a/auth/src/main/res/values-de-rCH/strings.xml +++ b/auth/src/main/res/values-de-rCH/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Authentifizierungsmethode auswählen + SMS-Bestätigung einrichten + Authenticator-App einrichten + Code bestätigen + Wiederherstellungscodes speichern + + Wählen Sie eine zweite Authentifizierungsmethode aus, um Ihr Konto zu schützen + Geben Sie Ihre Telefonnummer ein, um Bestätigungscodes zu erhalten + Scannen Sie den QR-Code mit Ihrer Authenticator-App + Geben Sie den an Ihr Telefon gesendeten Code ein + Geben Sie den Code aus Ihrer Authenticator-App ein + Geben Sie Ihren Bestätigungscode ein + Bewahren Sie diese Codes an einem sicheren Ort auf. Sie können sie zum Anmelden verwenden, wenn Sie den Zugriff auf Ihre Authentifizierungsmethode verlieren. + diff --git a/auth/src/main/res/values-de/strings.xml b/auth/src/main/res/values-de/strings.xml index cd05db0fc..9fb192397 100755 --- a/auth/src/main/res/values-de/strings.xml +++ b/auth/src/main/res/values-de/strings.xml @@ -94,4 +94,20 @@ Zusätzliche Verifizierung erforderlich. Bitte schließen Sie die Multi-Faktor-Authentifizierung ab. Das Konto muss verknüpft werden. Bitte versuchen Sie eine andere Anmeldemethode. Die Authentifizierung wurde abgebrochen. Bitte versuchen Sie es erneut, wenn Sie bereit sind. + + + Authentifizierungsmethode auswählen + SMS-Bestätigung einrichten + Authenticator-App einrichten + Code bestätigen + Wiederherstellungscodes speichern + + Wählen Sie eine zweite Authentifizierungsmethode aus, um Ihr Konto zu schützen + Geben Sie Ihre Telefonnummer ein, um Bestätigungscodes zu erhalten + Scannen Sie den QR-Code mit Ihrer Authenticator-App + Geben Sie den an Ihr Telefon gesendeten Code ein + Geben Sie den Code aus Ihrer Authenticator-App ein + Geben Sie Ihren Bestätigungscode ein + Bewahren Sie diese Codes an einem sicheren Ort auf. Sie können sie zum Anmelden verwenden, wenn Sie den Zugriff auf Ihre Authentifizierungsmethode verlieren. + diff --git a/auth/src/main/res/values-el/strings.xml b/auth/src/main/res/values-el/strings.xml index 08ada6b00..ae743c298 100755 --- a/auth/src/main/res/values-el/strings.xml +++ b/auth/src/main/res/values-el/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Επιλέξτε μέθοδο ελέγχου ταυτότητας + Ρύθμιση επαλήθευσης SMS + Ρύθμιση εφαρμογής ελέγχου ταυτότητας + Επαληθεύστε τον κωδικό σας + Αποθηκεύστε τους κωδικούς ανάκτησης + + Επιλέξτε μια δεύτερη μέθοδο ελέγχου ταυτότητας για να προστατεύσετε τον λογαριασμό σας + Εισαγάγετε τον αριθμό τηλεφώνου σας για να λαμβάνετε κωδικούς επαλήθευσης + Σαρώστε τον κωδικό QR με την εφαρμογή ελέγχου ταυτότητας + Εισαγάγετε τον κωδικό που στάλθηκε στο τηλέφωνό σας + Εισαγάγετε τον κωδικό από την εφαρμογή ελέγχου ταυτότητας + Εισαγάγετε τον κωδικό επαλήθευσης + Αποθηκεύστε αυτούς τους κωδικούς σε ασφαλές μέρος. Μπορείτε να τους χρησιμοποιήσετε για σύνδεση εάν χάσετε την πρόσβαση στη μέθοδο ελέγχου ταυτότητας. + diff --git a/auth/src/main/res/values-en-rAU/strings.xml b/auth/src/main/res/values-en-rAU/strings.xml index 54501d465..7c76fbdea 100755 --- a/auth/src/main/res/values-en-rAU/strings.xml +++ b/auth/src/main/res/values-en-rAU/strings.xml @@ -94,4 +94,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Choose Authentication Method + Set Up SMS Verification + Set Up Authenticator App + Verify Your Code + Save Your Recovery Codes + + Select a second authentication method to secure your account + Enter your phone number to receive verification codes + Scan the QR code with your authenticator app + Enter the code sent to your phone + Enter the code from your authenticator app + Enter your verification code + Store these codes in a safe place. You can use them to sign in if you lose access to your authentication method. + diff --git a/auth/src/main/res/values-en-rCA/strings.xml b/auth/src/main/res/values-en-rCA/strings.xml index 54501d465..7c76fbdea 100755 --- a/auth/src/main/res/values-en-rCA/strings.xml +++ b/auth/src/main/res/values-en-rCA/strings.xml @@ -94,4 +94,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Choose Authentication Method + Set Up SMS Verification + Set Up Authenticator App + Verify Your Code + Save Your Recovery Codes + + Select a second authentication method to secure your account + Enter your phone number to receive verification codes + Scan the QR code with your authenticator app + Enter the code sent to your phone + Enter the code from your authenticator app + Enter your verification code + Store these codes in a safe place. You can use them to sign in if you lose access to your authentication method. + diff --git a/auth/src/main/res/values-en-rGB/strings.xml b/auth/src/main/res/values-en-rGB/strings.xml index 54501d465..7c76fbdea 100755 --- a/auth/src/main/res/values-en-rGB/strings.xml +++ b/auth/src/main/res/values-en-rGB/strings.xml @@ -94,4 +94,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Choose Authentication Method + Set Up SMS Verification + Set Up Authenticator App + Verify Your Code + Save Your Recovery Codes + + Select a second authentication method to secure your account + Enter your phone number to receive verification codes + Scan the QR code with your authenticator app + Enter the code sent to your phone + Enter the code from your authenticator app + Enter your verification code + Store these codes in a safe place. You can use them to sign in if you lose access to your authentication method. + diff --git a/auth/src/main/res/values-en-rIE/strings.xml b/auth/src/main/res/values-en-rIE/strings.xml index 54501d465..7c76fbdea 100755 --- a/auth/src/main/res/values-en-rIE/strings.xml +++ b/auth/src/main/res/values-en-rIE/strings.xml @@ -94,4 +94,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Choose Authentication Method + Set Up SMS Verification + Set Up Authenticator App + Verify Your Code + Save Your Recovery Codes + + Select a second authentication method to secure your account + Enter your phone number to receive verification codes + Scan the QR code with your authenticator app + Enter the code sent to your phone + Enter the code from your authenticator app + Enter your verification code + Store these codes in a safe place. You can use them to sign in if you lose access to your authentication method. + diff --git a/auth/src/main/res/values-en-rIN/strings.xml b/auth/src/main/res/values-en-rIN/strings.xml index 54501d465..7c76fbdea 100755 --- a/auth/src/main/res/values-en-rIN/strings.xml +++ b/auth/src/main/res/values-en-rIN/strings.xml @@ -94,4 +94,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Choose Authentication Method + Set Up SMS Verification + Set Up Authenticator App + Verify Your Code + Save Your Recovery Codes + + Select a second authentication method to secure your account + Enter your phone number to receive verification codes + Scan the QR code with your authenticator app + Enter the code sent to your phone + Enter the code from your authenticator app + Enter your verification code + Store these codes in a safe place. You can use them to sign in if you lose access to your authentication method. + diff --git a/auth/src/main/res/values-en-rSG/strings.xml b/auth/src/main/res/values-en-rSG/strings.xml index 54501d465..7c76fbdea 100755 --- a/auth/src/main/res/values-en-rSG/strings.xml +++ b/auth/src/main/res/values-en-rSG/strings.xml @@ -94,4 +94,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Choose Authentication Method + Set Up SMS Verification + Set Up Authenticator App + Verify Your Code + Save Your Recovery Codes + + Select a second authentication method to secure your account + Enter your phone number to receive verification codes + Scan the QR code with your authenticator app + Enter the code sent to your phone + Enter the code from your authenticator app + Enter your verification code + Store these codes in a safe place. You can use them to sign in if you lose access to your authentication method. + diff --git a/auth/src/main/res/values-en-rZA/strings.xml b/auth/src/main/res/values-en-rZA/strings.xml index 54501d465..7c76fbdea 100755 --- a/auth/src/main/res/values-en-rZA/strings.xml +++ b/auth/src/main/res/values-en-rZA/strings.xml @@ -94,4 +94,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Choose Authentication Method + Set Up SMS Verification + Set Up Authenticator App + Verify Your Code + Save Your Recovery Codes + + Select a second authentication method to secure your account + Enter your phone number to receive verification codes + Scan the QR code with your authenticator app + Enter the code sent to your phone + Enter the code from your authenticator app + Enter your verification code + Store these codes in a safe place. You can use them to sign in if you lose access to your authentication method. + diff --git a/auth/src/main/res/values-es-rAR/strings.xml b/auth/src/main/res/values-es-rAR/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rAR/strings.xml +++ b/auth/src/main/res/values-es-rAR/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rBO/strings.xml b/auth/src/main/res/values-es-rBO/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rBO/strings.xml +++ b/auth/src/main/res/values-es-rBO/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rCL/strings.xml b/auth/src/main/res/values-es-rCL/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rCL/strings.xml +++ b/auth/src/main/res/values-es-rCL/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rCO/strings.xml b/auth/src/main/res/values-es-rCO/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rCO/strings.xml +++ b/auth/src/main/res/values-es-rCO/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rCR/strings.xml b/auth/src/main/res/values-es-rCR/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rCR/strings.xml +++ b/auth/src/main/res/values-es-rCR/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rDO/strings.xml b/auth/src/main/res/values-es-rDO/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rDO/strings.xml +++ b/auth/src/main/res/values-es-rDO/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rEC/strings.xml b/auth/src/main/res/values-es-rEC/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rEC/strings.xml +++ b/auth/src/main/res/values-es-rEC/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rGT/strings.xml b/auth/src/main/res/values-es-rGT/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rGT/strings.xml +++ b/auth/src/main/res/values-es-rGT/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rHN/strings.xml b/auth/src/main/res/values-es-rHN/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rHN/strings.xml +++ b/auth/src/main/res/values-es-rHN/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rMX/strings.xml b/auth/src/main/res/values-es-rMX/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rMX/strings.xml +++ b/auth/src/main/res/values-es-rMX/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rNI/strings.xml b/auth/src/main/res/values-es-rNI/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rNI/strings.xml +++ b/auth/src/main/res/values-es-rNI/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rPA/strings.xml b/auth/src/main/res/values-es-rPA/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rPA/strings.xml +++ b/auth/src/main/res/values-es-rPA/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rPE/strings.xml b/auth/src/main/res/values-es-rPE/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rPE/strings.xml +++ b/auth/src/main/res/values-es-rPE/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rPR/strings.xml b/auth/src/main/res/values-es-rPR/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rPR/strings.xml +++ b/auth/src/main/res/values-es-rPR/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rPY/strings.xml b/auth/src/main/res/values-es-rPY/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rPY/strings.xml +++ b/auth/src/main/res/values-es-rPY/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rSV/strings.xml b/auth/src/main/res/values-es-rSV/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rSV/strings.xml +++ b/auth/src/main/res/values-es-rSV/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rUS/strings.xml b/auth/src/main/res/values-es-rUS/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rUS/strings.xml +++ b/auth/src/main/res/values-es-rUS/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rUY/strings.xml b/auth/src/main/res/values-es-rUY/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rUY/strings.xml +++ b/auth/src/main/res/values-es-rUY/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es-rVE/strings.xml b/auth/src/main/res/values-es-rVE/strings.xml index f2635ab84..d731899dd 100755 --- a/auth/src/main/res/values-es-rVE/strings.xml +++ b/auth/src/main/res/values-es-rVE/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-es/strings.xml b/auth/src/main/res/values-es/strings.xml index a4b5704a0..b7359f091 100755 --- a/auth/src/main/res/values-es/strings.xml +++ b/auth/src/main/res/values-es/strings.xml @@ -94,4 +94,20 @@ Se requiere verificación adicional. Complete la autenticación de múltiples factores. Es necesario vincular la cuenta. Pruebe con un método de inicio de sesión diferente. La autenticación fue cancelada. Vuelva a intentarlo cuando esté listo. + + + Elige el método de autenticación + Configurar verificación por SMS + Configurar aplicación de autenticación + Verifica tu código + Guarda tus códigos de recuperación + + Selecciona un segundo método de autenticación para proteger tu cuenta + Introduce tu número de teléfono para recibir códigos de verificación + Escanea el código QR con tu aplicación de autenticación + Introduce el código enviado a tu teléfono + Introduce el código de tu aplicación de autenticación + Introduce tu código de verificación + Guarda estos códigos en un lugar seguro. Puedes usarlos para iniciar sesión si pierdes el acceso a tu método de autenticación. + diff --git a/auth/src/main/res/values-fa/strings.xml b/auth/src/main/res/values-fa/strings.xml index 8e3c5f551..c0629e247 100755 --- a/auth/src/main/res/values-fa/strings.xml +++ b/auth/src/main/res/values-fa/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + روش احراز هویت را انتخاب کنید + تأیید پیامک را راه‌اندازی کنید + برنامه احراز هویت را راه‌اندازی کنید + کد خود را تأیید کنید + کدهای بازیابی خود را ذخیره کنید + + برای ایمن کردن حساب خود، روش دوم احراز هویت را انتخاب کنید + شماره تلفن خود را وارد کنید تا کدهای تأیید دریافت کنید + کد QR را با برنامه احراز هویت خود اسکن کنید + کد ارسال شده به تلفن خود را وارد کنید + کد برنامه احراز هویت خود را وارد کنید + کد تأیید خود را وارد کنید + این کدها را در مکانی امن ذخیره کنید. اگر دسترسی به روش احراز هویت خود را از دست دادید، می‌توانید از آن‌ها برای ورود استفاده کنید. + diff --git a/auth/src/main/res/values-fi/strings.xml b/auth/src/main/res/values-fi/strings.xml index f76b85893..864dc7742 100755 --- a/auth/src/main/res/values-fi/strings.xml +++ b/auth/src/main/res/values-fi/strings.xml @@ -94,4 +94,20 @@ Lisävarmistus vaaditaan. Suorita monitekijätodennus loppuun. Tili täytyy linkittää. Kokeile eri kirjautumistapaa. Todennus peruutettiin. Yritä uudelleen kun olet valmis. + + + Valitse todennusmenetelmä + Määritä tekstiviestivahvistus + Määritä todennussovellus + Vahvista koodisi + Tallenna palautuskoodisi + + Valitse toinen todennusmenetelmä tilisi suojaamiseksi + Anna puhelinnumerosi vastaanottaaksesi vahvistuskoodit + Skannaa QR-koodi todennussovelluksellasi + Anna puhelimeesi lähetetty koodi + Anna todennussovelluksesi koodi + Anna vahvistuskoodisi + Tallenna nämä koodit turvalliseen paikkaan. Voit käyttää niitä kirjautumiseen, jos menetät pääsyn todennusmenetelmääsi. + diff --git a/auth/src/main/res/values-fil/strings.xml b/auth/src/main/res/values-fil/strings.xml index d0f765fc6..0a5ea38ac 100755 --- a/auth/src/main/res/values-fil/strings.xml +++ b/auth/src/main/res/values-fil/strings.xml @@ -94,4 +94,20 @@ Kailangan ang karagdagang pagpapatotoo. Mangyaring kumpletuhin ang multi-factor authentication. Kailangang i-link ang account. Mangyaring subukan ang ibang paraan ng pag-sign in. Ang pagpapatotoo ay nakansela. Mangyaring subukan muli kapag handa ka na. + + + Piliin ang Paraan ng Authentication + I-set Up ang SMS Verification + I-set Up ang Authenticator App + I-verify ang Iyong Code + I-save ang Iyong Mga Recovery Code + + Pumili ng pangalawang paraan ng authentication para protektahan ang iyong account + Ilagay ang iyong numero ng telepono para makatanggap ng mga verification code + I-scan ang QR code gamit ang iyong authenticator app + Ilagay ang code na ipinadala sa iyong telepono + Ilagay ang code mula sa iyong authenticator app + Ilagay ang iyong verification code + I-imbak ang mga code na ito sa ligtas na lugar. Magagamit mo ang mga ito para mag-sign in kung mawawala ang access sa iyong paraan ng authentication. + diff --git a/auth/src/main/res/values-fr-rCH/strings.xml b/auth/src/main/res/values-fr-rCH/strings.xml index 14d56131c..e3a691939 100755 --- a/auth/src/main/res/values-fr-rCH/strings.xml +++ b/auth/src/main/res/values-fr-rCH/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Choisir la méthode d\'authentification + Configurer la vérification par SMS + Configurer l\'application d\'authentification + Vérifiez votre code + Enregistrez vos codes de récupération + + Sélectionnez une deuxième méthode d\'authentification pour sécuriser votre compte + Saisissez votre numéro de téléphone pour recevoir les codes de vérification + Scannez le code QR avec votre application d\'authentification + Saisissez le code envoyé à votre téléphone + Saisissez le code de votre application d\'authentification + Saisissez votre code de vérification + Conservez ces codes en lieu sûr. Vous pouvez les utiliser pour vous connecter si vous perdez l\'accès à votre méthode d\'authentification. + diff --git a/auth/src/main/res/values-fr/strings.xml b/auth/src/main/res/values-fr/strings.xml index 7cb182287..43154dc3d 100755 --- a/auth/src/main/res/values-fr/strings.xml +++ b/auth/src/main/res/values-fr/strings.xml @@ -94,4 +94,20 @@ Vérification supplémentaire requise. Veuillez compléter l\'authentification à plusieurs facteurs. Le compte doit être lié. Veuillez essayer une méthode de connexion différente. L\'authentification a été annulée. Veuillez réessayer quand vous serez prêt. + + + Choisir la méthode d\'authentification + Configurer la vérification par SMS + Configurer l\'application d\'authentification + Vérifiez votre code + Enregistrez vos codes de récupération + + Sélectionnez une deuxième méthode d\'authentification pour sécuriser votre compte + Saisissez votre numéro de téléphone pour recevoir les codes de vérification + Scannez le code QR avec votre application d\'authentification + Saisissez le code envoyé à votre téléphone + Saisissez le code de votre application d\'authentification + Saisissez votre code de vérification + Conservez ces codes en lieu sûr. Vous pouvez les utiliser pour vous connecter si vous perdez l\'accès à votre méthode d\'authentification. + diff --git a/auth/src/main/res/values-gsw/strings.xml b/auth/src/main/res/values-gsw/strings.xml index 74d1a7623..5f640d6b6 100755 --- a/auth/src/main/res/values-gsw/strings.xml +++ b/auth/src/main/res/values-gsw/strings.xml @@ -94,4 +94,20 @@ Zusätzliche Verifizierung erforderlich. Bitte schließen Sie die Multi-Faktor-Authentifizierung ab. Das Konto muss verknüpft werden. Bitte versuchen Sie eine andere Anmeldemethode. Die Authentifizierung wurde abgebrochen. Bitte versuchen Sie es erneut, wenn Sie bereit sind. + + + Authentifizierungsmethode wählen + SMS-Bestätigung iirichte + Authenticator-App iirichte + Code bestätige + Wiederherstelligscodes speichere + + Wähle Sie e zweiti Authentifizierungsmethode us, zum Ihres Konto z schütze + Gäbe Sie Ihri Telefonnummer ii, zum Bestätigungscodes z erhalte + Scanne Sie de QR-Code mit Ihrer Authenticator-App + Gäbe Sie de Code ii, wo an Ihres Telefon gschickt worde isch + Gäbe Sie de Code us Ihrer Authenticator-App ii + Gäbe Sie Ihre Bestätigungscode ii + Bewahre Sie die Codes a eme sichere Ort uuf. Sie chönd si zum Aamälde benutze, falls Sie de Zuegriff uf Ihri Authentifizierungsmethode verliere. + diff --git a/auth/src/main/res/values-gu/strings.xml b/auth/src/main/res/values-gu/strings.xml index a4898d625..d149e2ba7 100755 --- a/auth/src/main/res/values-gu/strings.xml +++ b/auth/src/main/res/values-gu/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + પ્રમાણીકરણ પદ્ધતિ પસંદ કરો + SMS ચકાસણી સેટ કરો + પ્રમાણીકરણ ઍપ સેટ કરો + તમારો કોડ ચકાસો + તમારા પુનઃપ્રાપ્તિ કોડ સાચવો + + તમારા એકાઉન્ટને સુરક્ષિત કરવા બીજી પ્રમાણીકરણ પદ્ધતિ પસંદ કરો + ચકાસણી કોડ મેળવવા તમારો ફોન નંબર દાખલ કરો + તમારી પ્રમાણીકરણ ઍપથી QR કોડ સ્કેન કરો + તમારા ફોન પર મોકલવામાં આવેલો કોડ દાખલ કરો + તમારી પ્રમાણીકરણ ઍપનો કોડ દાખલ કરો + તમારો ચકાસણી કોડ દાખલ કરો + આ કોડને સુરક્ષિત સ્થળે સંગ્રહિત કરો. જો તમે તમારી પ્રમાણીકરણ પદ્ધતિની ઍક્સેસ ગુમાવો છો, તો તમે સાઇન ઇન કરવા માટે તેનો ઉપયોગ કરી શકો છો. + diff --git a/auth/src/main/res/values-hi/strings.xml b/auth/src/main/res/values-hi/strings.xml index 5e479bb25..443c84825 100755 --- a/auth/src/main/res/values-hi/strings.xml +++ b/auth/src/main/res/values-hi/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + प्रमाणीकरण विधि चुनें + SMS सत्यापन सेट करें + प्रमाणक ऐप सेट करें + अपना कोड सत्यापित करें + अपने पुनर्प्राप्ति कोड सहेजें + + अपने खाते को सुरक्षित करने के लिए दूसरी प्रमाणीकरण विधि चुनें + सत्यापन कोड प्राप्त करने के लिए अपना फ़ोन नंबर दर्ज करें + अपने प्रमाणक ऐप से QR कोड स्कैन करें + अपने फ़ोन पर भेजा गया कोड दर्ज करें + अपने प्रमाणक ऐप से कोड दर्ज करें + अपना सत्यापन कोड दर्ज करें + इन कोड को सुरक्षित स्थान पर संग्रहीत करें। यदि आप अपनी प्रमाणीकरण विधि तक पहुंच खो देते हैं, तो आप साइन इन करने के लिए इनका उपयोग कर सकते हैं। + diff --git a/auth/src/main/res/values-hr/strings.xml b/auth/src/main/res/values-hr/strings.xml index a7f0527ec..978523e89 100755 --- a/auth/src/main/res/values-hr/strings.xml +++ b/auth/src/main/res/values-hr/strings.xml @@ -94,4 +94,20 @@ Potrebna je dodatna provjera. Molimo dovršite višefaktorsku provjeru identiteta. Račun mora biti povezan. Pokušajte s drugim načinom prijave. Provjera identiteta je otkazana. Pokušajte ponovno kad budete spremni. + + + Odaberite metodu provjere autentičnosti + Postavite SMS provjeru + Postavite aplikaciju za provjeru autentičnosti + Potvrdite svoju šifru + Spremite šifre za oporavak + + Odaberite drugu metodu provjere autentičnosti kako biste zaštitili svoj račun + Unesite svoj telefonski broj kako biste primali šifre za potvrdu + Skenirajte QR kôd svojom aplikacijom za provjeru autentičnosti + Unesite šifru poslanu na vaš telefon + Unesite šifru iz svoje aplikacije za provjeru autentičnosti + Unesite svoju šifru za potvrdu + Pohranite ove šifre na sigurno mjesto. Možete ih koristiti za prijavu ako izgubite pristup svojoj metodi provjere autentičnosti. + diff --git a/auth/src/main/res/values-hu/strings.xml b/auth/src/main/res/values-hu/strings.xml index 1ea903b33..8e1d79de1 100755 --- a/auth/src/main/res/values-hu/strings.xml +++ b/auth/src/main/res/values-hu/strings.xml @@ -94,4 +94,20 @@ További ellenőrzés szükséges. Kérjük, fejezze be a többtényezős hitelesítést. A fiókot össze kell kapcsolni. Próbáljon meg egy másik bejelentkezési módot. A hitelesítés megszakadt. Próbálja újra, amikor készen áll. + + + Válasszon hitelesítési módszert + SMS-ellenőrzés beállítása + Hitelesítő alkalmazás beállítása + Kód ellenőrzése + Helyreállítási kódok mentése + + Válasszon második hitelesítési módszert fiókja védelme érdekében + Adja meg telefonszámát az ellenőrző kódok fogadásához + Olvassa be a QR-kódot hitelesítő alkalmazásával + Adja meg a telefonjára küldött kódot + Adja meg a hitelesítő alkalmazásából származó kódot + Adja meg ellenőrző kódját + Tárolja ezeket a kódokat biztonságos helyen. Ezekkel jelentkezhet be, ha elveszti a hitelesítési módszeréhez való hozzáférést. + diff --git a/auth/src/main/res/values-in/strings.xml b/auth/src/main/res/values-in/strings.xml index 68cf5db3e..d7fa60d30 100755 --- a/auth/src/main/res/values-in/strings.xml +++ b/auth/src/main/res/values-in/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Pilih Metode Autentikasi + Siapkan Verifikasi SMS + Siapkan Aplikasi Autentikator + Verifikasi Kode Anda + Simpan Kode Pemulihan Anda + + Pilih metode autentikasi kedua untuk mengamankan akun Anda + Masukkan nomor telepon Anda untuk menerima kode verifikasi + Pindai kode QR dengan aplikasi autentikator Anda + Masukkan kode yang dikirim ke ponsel Anda + Masukkan kode dari aplikasi autentikator Anda + Masukkan kode verifikasi Anda + Simpan kode ini di tempat yang aman. Anda dapat menggunakannya untuk masuk jika kehilangan akses ke metode autentikasi Anda. + diff --git a/auth/src/main/res/values-it/strings.xml b/auth/src/main/res/values-it/strings.xml index e1c37a998..498a725d3 100755 --- a/auth/src/main/res/values-it/strings.xml +++ b/auth/src/main/res/values-it/strings.xml @@ -94,4 +94,20 @@ È richiesta una verifica aggiuntiva. Completa l\'autenticazione a più fattori. L\'account deve essere collegato. Prova un metodo di accesso diverso. L\'autenticazione è stata annullata. Riprova quando sei pronto. + + + Scegli il metodo di autenticazione + Configura verifica SMS + Configura app di autenticazione + Verifica il codice + Salva i codici di recupero + + Seleziona un secondo metodo di autenticazione per proteggere il tuo account + Inserisci il tuo numero di telefono per ricevere i codici di verifica + Scansiona il codice QR con la tua app di autenticazione + Inserisci il codice inviato al tuo telefono + Inserisci il codice dalla tua app di autenticazione + Inserisci il codice di verifica + Conserva questi codici in un luogo sicuro. Puoi usarli per accedere se perdi l\'accesso al tuo metodo di autenticazione. + diff --git a/auth/src/main/res/values-iw/strings.xml b/auth/src/main/res/values-iw/strings.xml index f271dafd8..9e3eb2b6f 100755 --- a/auth/src/main/res/values-iw/strings.xml +++ b/auth/src/main/res/values-iw/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + בחר שיטת אימות + הגדר אימות SMS + הגדר אפליקציית מאמת + אמת את הקוד שלך + שמור את קודי השחזור שלך + + בחר שיטת אימות שנייה כדי לאבטח את החשבון שלך + הזן את מספר הטלפון שלך כדי לקבל קודי אימות + סרוק את קוד ה-QR באמצעות אפליקציית המאמת שלך + הזן את הקוד שנשלח לטלפון שלך + הזן את הקוד מאפליקציית המאמת שלך + הזן את קוד האימות שלך + שמור קודים אלה במקום בטוח. תוכל להשתמש בהם כדי להיכנס אם תאבד גישה לשיטת האימות שלך. + diff --git a/auth/src/main/res/values-ja/strings.xml b/auth/src/main/res/values-ja/strings.xml index 4be80b287..8bd658629 100755 --- a/auth/src/main/res/values-ja/strings.xml +++ b/auth/src/main/res/values-ja/strings.xml @@ -94,4 +94,20 @@ 追加の認証が必要です。多要素認証を完了してください。 アカウントをリンクする必要があります。別のサインイン方法をお試しください。 認証がキャンセルされました。準備ができたら再度お試しください。 + + + 認証方法を選択 + SMS認証を設定 + 認証アプリを設定 + コードを確認 + 復元コードを保存 + + アカウントを保護するため、2つ目の認証方法を選択してください + 確認コードを受け取るために電話番号を入力してください + 認証アプリでQRコードをスキャンしてください + 電話に送信されたコードを入力してください + 認証アプリのコードを入力してください + 確認コードを入力してください + これらのコードを安全な場所に保管してください。認証方法にアクセスできなくなった場合、これらを使用してログインできます。 + diff --git a/auth/src/main/res/values-kn/strings.xml b/auth/src/main/res/values-kn/strings.xml index b23ad1791..6dd2e1a8c 100755 --- a/auth/src/main/res/values-kn/strings.xml +++ b/auth/src/main/res/values-kn/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + ದೃಢೀಕರಣ ವಿಧಾನವನ್ನು ಆಯ್ಕೆಮಾಡಿ + SMS ಪರಿಶೀಲನೆಯನ್ನು ಹೊಂದಿಸಿ + ದೃಢೀಕರಣ ಅಪ್ಲಿಕೇಶನ್ ಹೊಂದಿಸಿ + ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ + ನಿಮ್ಮ ಮರುಪಡೆಯುವಿಕೆ ಕೋಡ್‌ಗಳನ್ನು ಉಳಿಸಿ + + ನಿಮ್ಮ ಖಾತೆಯನ್ನು ಸುರಕ್ಷಿತವಾಗಿರಿಸಲು ಎರಡನೇ ದೃಢೀಕರಣ ವಿಧಾನವನ್ನು ಆಯ್ಕೆಮಾಡಿ + ಪರಿಶೀಲನೆ ಕೋಡ್‌ಗಳನ್ನು ಸ್ವೀಕರಿಸಲು ನಿಮ್ಮ ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ + ನಿಮ್ಮ ದೃಢೀಕರಣ ಅಪ್ಲಿಕೇಶನ್‌ನೊಂದಿಗೆ QR ಕೋಡ್ ಅನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿ + ನಿಮ್ಮ ಫೋನ್‌ಗೆ ಕಳುಹಿಸಿದ ಕೋಡ್ ಅನ್ನು ನಮೂದಿಸಿ + ನಿಮ್ಮ ದೃಢೀಕರಣ ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ ಕೋಡ್ ಅನ್ನು ನಮೂದಿಸಿ + ನಿಮ್ಮ ಪರಿಶೀಲನೆ ಕೋಡ್ ಅನ್ನು ನಮೂದಿಸಿ + ಈ ಕೋಡ್‌ಗಳನ್ನು ಸುರಕ್ಷಿತ ಸ್ಥಳದಲ್ಲಿ ಸಂಗ್ರಹಿಸಿ. ನಿಮ್ಮ ದೃಢೀಕರಣ ವಿಧಾನಕ್ಕೆ ಪ್ರವೇಶವನ್ನು ಕಳೆದುಕೊಂಡರೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಅವುಗಳನ್ನು ಬಳಸಬಹುದು. + diff --git a/auth/src/main/res/values-ko/strings.xml b/auth/src/main/res/values-ko/strings.xml index 22c9bcbe7..9aa109ed0 100755 --- a/auth/src/main/res/values-ko/strings.xml +++ b/auth/src/main/res/values-ko/strings.xml @@ -93,4 +93,20 @@ 추가 인증이 필요합니다. 다단계 인증을 완료해 주세요. 계정을 연결해야 합니다. 다른 로그인 방법을 시도해 주세요. 인증이 취소되었습니다. 준비가 되면 다시 시도해 주세요. + + + 인증 방법 선택 + SMS 인증 설정 + 인증 앱 설정 + 코드 확인 + 복구 코드 저장 + + 계정을 보호하기 위해 두 번째 인증 방법을 선택하세요 + 인증 코드를 받을 전화번호를 입력하세요 + 인증 앱으로 QR 코드를 스캔하세요 + 휴대전화로 전송된 코드를 입력하세요 + 인증 앱의 코드를 입력하세요 + 인증 코드를 입력하세요 + 이 코드를 안전한 곳에 보관하세요. 인증 방법에 액세스할 수 없게 되면 이 코드를 사용하여 로그인할 수 있습니다. + diff --git a/auth/src/main/res/values-ln/strings.xml b/auth/src/main/res/values-ln/strings.xml index 14d56131c..7c7a59dfc 100755 --- a/auth/src/main/res/values-ln/strings.xml +++ b/auth/src/main/res/values-ln/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Pona lolenge ya bondimi + Bongisa bondimi ya SMS + Bongisa aplikasyo ya bondimi + Talela kode na yo + Bomba ba kode ya bozongisi + + Pona lolenge ya mibale ya bondimi po na kobatela konte na yo + Kota nimero ya telefone na yo po na kozwa ba kode ya bondimi + Talela kode QR na aplikasyo na yo ya bondimi + Kota kode oyo etindaki na telefone na yo + Kota kode oyo euti na aplikasyo na yo ya bondimi + Kota kode na yo ya bondimi + Bomba ba kode oyo na esika moko ya libateli. Okoki kosalela yango po na kokota soki obungi nzela ya bondimi na yo. + diff --git a/auth/src/main/res/values-lt/strings.xml b/auth/src/main/res/values-lt/strings.xml index 175ec43bd..0bb64fd78 100755 --- a/auth/src/main/res/values-lt/strings.xml +++ b/auth/src/main/res/values-lt/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Pasirinkite autentifikavimo metodą + Nustatyti SMS patvirtinimą + Nustatyti autentifikatoriaus programą + Patvirtinkite kodą + Išsaugokite atkūrimo kodus + + Pasirinkite antrą autentifikavimo metodą, kad apsaugotumėte paskyrą + Įveskite telefono numerį, kad gautumėte patvirtinimo kodus + Nuskaitykite QR kodą naudodami autentifikatoriaus programą + Įveskite kodą, išsiųstą į telefoną + Įveskite kodą iš autentifikatoriaus programos + Įveskite patvirtinimo kodą + Išsaugokite šiuos kodus saugioje vietoje. Galite juos naudoti prisijungti, jei prarasite prieigą prie autentifikavimo metodo. + diff --git a/auth/src/main/res/values-lv/strings.xml b/auth/src/main/res/values-lv/strings.xml index 5ce841b20..b10b66de6 100755 --- a/auth/src/main/res/values-lv/strings.xml +++ b/auth/src/main/res/values-lv/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Izvēlieties autentifikācijas metodi + Iestatīt SMS verifikāciju + Iestatīt autentifikatora lietotni + Verificējiet savu kodu + Saglabājiet atgūšanas kodus + + Izvēlieties otro autentifikācijas metodi, lai aizsargātu savu kontu + Ievadiet savu tālruņa numuru, lai saņemtu verificēšanas kodus + Skenējiet QR kodu ar savu autentifikatora lietotni + Ievadiet uz tālruni nosūtīto kodu + Ievadiet kodu no savas autentifikatora lietotnes + Ievadiet verificēšanas kodu + Glabājiet šos kodus drošā vietā. Varat tos izmantot, lai pierakstītos, ja zaudējat piekļuvi autentifikācijas metodei. + diff --git a/auth/src/main/res/values-mo/strings.xml b/auth/src/main/res/values-mo/strings.xml index 98b2dbbb0..09a3acb87 100755 --- a/auth/src/main/res/values-mo/strings.xml +++ b/auth/src/main/res/values-mo/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Alegeți metoda de autentificare + Configurați verificarea prin SMS + Configurați aplicația de autentificare + Verificați codul + Salvați codurile de recuperare + + Selectați o a doua metodă de autentificare pentru a vă securiza contul + Introduceți numărul de telefon pentru a primi coduri de verificare + Scanați codul QR cu aplicația dvs. de autentificare + Introduceți codul trimis pe telefon + Introduceți codul din aplicația dvs. de autentificare + Introduceți codul de verificare + Stocați aceste coduri într-un loc sigur. Le puteți folosi pentru a vă conecta dacă pierdeți accesul la metoda de autentificare. + diff --git a/auth/src/main/res/values-mr/strings.xml b/auth/src/main/res/values-mr/strings.xml index 364ce87bc..f9837e7f5 100755 --- a/auth/src/main/res/values-mr/strings.xml +++ b/auth/src/main/res/values-mr/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + प्रमाणीकरण पद्धत निवडा + SMS पडताळणी सेट करा + प्रमाणीकरणकर्ता अॅप सेट करा + तुमचा कोड पडताळा + तुमचे पुनर्प्राप्ती कोड जतन करा + + तुमचे खाते सुरक्षित करण्यासाठी दुसरी प्रमाणीकरण पद्धत निवडा + पडताळणी कोड प्राप्त करण्यासाठी तुमचा फोन नंबर प्रविष्ट करा + तुमच्या प्रमाणीकरणकर्ता अॅपसह QR कोड स्कॅन करा + तुमच्या फोनवर पाठवलेला कोड प्रविष्ट करा + तुमच्या प्रमाणीकरणकर्ता अॅपमधील कोड प्रविष्ट करा + तुमचा पडताळणी कोड प्रविष्ट करा + हे कोड सुरक्षित ठिकाणी संग्रहित करा. तुम्ही तुमच्या प्रमाणीकरण पद्धतीचा प्रवेश गमावल्यास साइन इन करण्यासाठी त्यांचा वापर करू शकता. + diff --git a/auth/src/main/res/values-ms/strings.xml b/auth/src/main/res/values-ms/strings.xml index fd55613c3..e23164061 100755 --- a/auth/src/main/res/values-ms/strings.xml +++ b/auth/src/main/res/values-ms/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Pilih Kaedah Pengesahan + Sediakan Pengesahan SMS + Sediakan Aplikasi Pengesah + Sahkan Kod Anda + Simpan Kod Pemulihan Anda + + Pilih kaedah pengesahan kedua untuk melindungi akaun anda + Masukkan nombor telefon anda untuk menerima kod pengesahan + Imbas kod QR dengan aplikasi pengesah anda + Masukkan kod yang dihantar ke telefon anda + Masukkan kod dari aplikasi pengesah anda + Masukkan kod pengesahan anda + Simpan kod ini di tempat yang selamat. Anda boleh menggunakannya untuk log masuk jika anda kehilangan akses kepada kaedah pengesahan anda. + diff --git a/auth/src/main/res/values-nb/strings.xml b/auth/src/main/res/values-nb/strings.xml index fe2dab2b4..93b327736 100755 --- a/auth/src/main/res/values-nb/strings.xml +++ b/auth/src/main/res/values-nb/strings.xml @@ -94,4 +94,20 @@ Ytterligere verifisering kreves. Vennligst fullfør multifaktorgodkjenning. Kontoen må kobles. Prøv en annen påloggingsmetode. Godkjenning ble avbrutt. Prøv igjen når du er klar. + + + Velg autentiseringsmetode + Konfigurer SMS-bekreftelse + Konfigurer autentiseringsapp + Bekreft koden din + Lagre gjenopprettingskodene dine + + Velg en andre autentiseringsmetode for å sikre kontoen din + Skriv inn telefonnummeret ditt for å motta bekreftelseskoder + Skann QR-koden med autentiseringsappen din + Skriv inn koden som ble sendt til telefonen din + Skriv inn koden fra autentiseringsappen din + Skriv inn bekreftelseskoden din + Lagre disse kodene på et sikkert sted. Du kan bruke dem til å logge inn hvis du mister tilgang til autentiseringsmetoden din. + diff --git a/auth/src/main/res/values-nl/strings.xml b/auth/src/main/res/values-nl/strings.xml index 3fac2b8f4..e48023c7d 100755 --- a/auth/src/main/res/values-nl/strings.xml +++ b/auth/src/main/res/values-nl/strings.xml @@ -94,4 +94,20 @@ Aanvullende verificatie vereist. Voltooi de multi-factor authenticatie. Account moet worden gekoppeld. Probeer een andere inlogmethode. Authenticatie is geannuleerd. Probeer opnieuw wanneer u klaar bent. + + + Kies authenticatiemethode + SMS-verificatie instellen + Authenticator-app instellen + Code verifiëren + Herstelcodes opslaan + + Selecteer een tweede authenticatiemethode om je account te beveiligen + Voer je telefoonnummer in om verificatiecodes te ontvangen + Scan de QR-code met je authenticator-app + Voer de code in die naar je telefoon is verzonden + Voer de code uit je authenticator-app in + Voer je verificatiecode in + Bewaar deze codes op een veilige plek. Je kunt ze gebruiken om in te loggen als je geen toegang meer hebt tot je authenticatiemethode. + diff --git a/auth/src/main/res/values-no/strings.xml b/auth/src/main/res/values-no/strings.xml index b3206d53b..373f3dfe6 100755 --- a/auth/src/main/res/values-no/strings.xml +++ b/auth/src/main/res/values-no/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Velg autentiseringsmetode + Konfigurer SMS-bekreftelse + Konfigurer autentiseringsapp + Bekreft koden din + Lagre gjenopprettingskodene dine + + Velg en andre autentiseringsmetode for å sikre kontoen din + Skriv inn telefonnummeret ditt for å motta bekreftelseskoder + Skann QR-koden med autentiseringsappen din + Skriv inn koden som ble sendt til telefonen din + Skriv inn koden fra autentiseringsappen din + Skriv inn bekreftelseskoden din + Lagre disse kodene på et sikkert sted. Du kan bruke dem til å logge inn hvis du mister tilgang til autentiseringsmetoden din. + diff --git a/auth/src/main/res/values-pl/strings.xml b/auth/src/main/res/values-pl/strings.xml index d144ecae5..1951b47e6 100755 --- a/auth/src/main/res/values-pl/strings.xml +++ b/auth/src/main/res/values-pl/strings.xml @@ -94,4 +94,20 @@ Wymagana dodatkowa weryfikacja. Proszę ukończyć uwierzytelnianie wieloskładnikowe. Konto musi zostać połączone. Spróbuj innej metody logowania. Uwierzytelnianie zostało anulowane. Spróbuj ponownie gdy będziesz gotowy. + + + Wybierz metodę uwierzytelniania + Skonfiguruj weryfikację SMS + Skonfiguruj aplikację uwierzytelniającą + Zweryfikuj kod + Zapisz kody odzyskiwania + + Wybierz drugą metodę uwierzytelniania, aby zabezpieczyć swoje konto + Wprowadź numer telefonu, aby otrzymywać kody weryfikacyjne + Zeskanuj kod QR za pomocą aplikacji uwierzytelniającej + Wprowadź kod wysłany na Twój telefon + Wprowadź kod z aplikacji uwierzytelniającej + Wprowadź kod weryfikacyjny + Przechowuj te kody w bezpiecznym miejscu. Możesz ich użyć do zalogowania się, jeśli stracisz dostęp do metody uwierzytelniania. + diff --git a/auth/src/main/res/values-pt-rBR/strings.xml b/auth/src/main/res/values-pt-rBR/strings.xml index c971e6764..ae9215fc2 100755 --- a/auth/src/main/res/values-pt-rBR/strings.xml +++ b/auth/src/main/res/values-pt-rBR/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Escolher método de autenticação + Configurar verificação por SMS + Configurar app de autenticação + Verificar código + Salvar códigos de recuperação + + Selecione um segundo método de autenticação para proteger sua conta + Digite seu número de telefone para receber códigos de verificação + Digitalize o código QR com seu app de autenticação + Digite o código enviado para seu telefone + Digite o código do seu app de autenticação + Digite seu código de verificação + Armazene esses códigos em um local seguro. Você pode usá-los para fazer login se perder o acesso ao seu método de autenticação. + diff --git a/auth/src/main/res/values-pt-rPT/strings.xml b/auth/src/main/res/values-pt-rPT/strings.xml index 92e2e5bd5..236d9d5af 100755 --- a/auth/src/main/res/values-pt-rPT/strings.xml +++ b/auth/src/main/res/values-pt-rPT/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Escolher método de autenticação + Configurar verificação por SMS + Configurar app de autenticação + Verificar código + Salvar códigos de recuperação + + Selecione um segundo método de autenticação para proteger sua conta + Digite seu número de telefone para receber códigos de verificação + Digitalize o código QR com seu app de autenticação + Digite o código enviado para seu telefone + Digite o código do seu app de autenticação + Digite seu código de verificação + Armazene esses códigos em um local seguro. Você pode usá-los para fazer login se perder o acesso ao seu método de autenticação. + diff --git a/auth/src/main/res/values-pt/strings.xml b/auth/src/main/res/values-pt/strings.xml index 374ee367c..336a32898 100755 --- a/auth/src/main/res/values-pt/strings.xml +++ b/auth/src/main/res/values-pt/strings.xml @@ -94,4 +94,20 @@ Verificação adicional necessária. Conclua a autenticação de vários fatores. A conta precisa ser vinculada. Tente um método de login diferente. A autenticação foi cancelada. Tente novamente quando estiver pronto. + + + Escolher método de autenticação + Configurar verificação por SMS + Configurar app de autenticação + Verificar código + Salvar códigos de recuperação + + Selecione um segundo método de autenticação para proteger sua conta + Digite seu número de telefone para receber códigos de verificação + Digitalize o código QR com seu app de autenticação + Digite o código enviado para seu telefone + Digite o código do seu app de autenticação + Digite seu código de verificação + Armazene esses códigos em um local seguro. Você pode usá-los para fazer login se perder o acesso ao seu método de autenticação. + diff --git a/auth/src/main/res/values-ro/strings.xml b/auth/src/main/res/values-ro/strings.xml index 8515515ed..0037d51ac 100755 --- a/auth/src/main/res/values-ro/strings.xml +++ b/auth/src/main/res/values-ro/strings.xml @@ -94,4 +94,20 @@ Este necesară verificarea suplimentară. Vă rugăm să completați autentificarea cu mai mulți factori. Contul trebuie conectat. Încercați o metodă de conectare diferită. Autentificarea a fost anulată. Încercați din nou când sunteți gata. + + + Alegeți metoda de autentificare + Configurați verificarea prin SMS + Configurați aplicația de autentificare + Verificați codul + Salvați codurile de recuperare + + Selectați o a doua metodă de autentificare pentru a vă securiza contul + Introduceți numărul de telefon pentru a primi coduri de verificare + Scanați codul QR cu aplicația dvs. de autentificare + Introduceți codul trimis pe telefon + Introduceți codul din aplicația dvs. de autentificare + Introduceți codul de verificare + Stocați aceste coduri într-un loc sigur. Le puteți folosi pentru a vă conecta dacă pierdeți accesul la metoda de autentificare. + diff --git a/auth/src/main/res/values-ru/strings.xml b/auth/src/main/res/values-ru/strings.xml index dd28f7f27..b8b45952e 100755 --- a/auth/src/main/res/values-ru/strings.xml +++ b/auth/src/main/res/values-ru/strings.xml @@ -94,4 +94,20 @@ Требуется дополнительная проверка. Пожалуйста, завершите многофакторную аутентификацию. Необходимо связать аккаунт. Попробуйте другой способ входа. Аутентификация была отменена. Повторите попытку, когда будете готовы. + + + Выберите способ аутентификации + Настроить SMS-подтверждение + Настроить приложение-аутентификатор + Подтвердите код + Сохраните коды восстановления + + Выберите второй способ аутентификации для защиты аккаунта + Введите номер телефона для получения кодов подтверждения + Отсканируйте QR-код с помощью приложения-аутентификатора + Введите код, отправленный на ваш телефон + Введите код из приложения-аутентификатора + Введите код подтверждения + Сохраните эти коды в безопасном месте. Вы можете использовать их для входа, если потеряете доступ к способу аутентификации. + diff --git a/auth/src/main/res/values-sk/strings.xml b/auth/src/main/res/values-sk/strings.xml index 366367a1f..89ee537cf 100755 --- a/auth/src/main/res/values-sk/strings.xml +++ b/auth/src/main/res/values-sk/strings.xml @@ -94,4 +94,20 @@ Vyžaduje sa dodatočné overenie. Dokončite prosím viacfaktorové overenie. Účet je potrebné prepojiť. Skúste iný spôsob prihlásenia. Overenie bolo zrušené. Skúste znova keď budete pripravení. + + + Vyberte metódu overenia + Nastaviť overenie SMS + Nastaviť overovaciu aplikáciu + Overte svoj kód + Uložte obnovovacie kódy + + Vyberte druhú metódu overenia na zabezpečenie účtu + Zadajte telefónne číslo na príjem overovacích kódov + Naskenujte QR kód pomocou overovacej aplikácie + Zadajte kód odoslaný na váš telefón + Zadajte kód z overovacej aplikácie + Zadajte overovací kód + Uložte tieto kódy na bezpečnom mieste. Môžete ich použiť na prihlásenie, ak stratíte prístup k metóde overenia. + diff --git a/auth/src/main/res/values-sl/strings.xml b/auth/src/main/res/values-sl/strings.xml index 6b1251615..84002e9d9 100755 --- a/auth/src/main/res/values-sl/strings.xml +++ b/auth/src/main/res/values-sl/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Izberite način preverjanja pristnosti + Nastavite preverjanje prek SMS + Nastavite aplikacijo za preverjanje pristnosti + Preverite svojo kodo + Shranite kode za obnovitev + + Izberite drug način preverjanja pristnosti za zaščito računa + Vnesite telefonsko številko za prejemanje kod za preverjanje + Skenirajte kodo QR z aplikacijo za preverjanje pristnosti + Vnesite kodo, poslano na vaš telefon + Vnesite kodo iz aplikacije za preverjanje pristnosti + Vnesite kodo za preverjanje + Shranite te kode na varno mesto. Uporabite jih lahko za prijavo, če izgubite dostop do načina preverjanja pristnosti. + diff --git a/auth/src/main/res/values-sr/strings.xml b/auth/src/main/res/values-sr/strings.xml index 662005382..346ca0c0a 100755 --- a/auth/src/main/res/values-sr/strings.xml +++ b/auth/src/main/res/values-sr/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Изаберите метод аутентификације + Подесите SMS верификацију + Подесите апликацију за аутентификацију + Верификујте свој код + Сачувајте кодове за опоравак + + Изаберите други метод аутентификације да бисте заштитили свој налог + Унесите свој број телефона да бисте примали кодове за верификацију + Скенирајте QR код помоћу своје апликације за аутентификацију + Унесите код послат на ваш телефон + Унесите код из своје апликације за аутентификацију + Унесите свој код за верификацију + Похраните ове кодове на сигурно место. Можете их користити за пријаву ако изгубите приступ методу аутентификације. + diff --git a/auth/src/main/res/values-sv/strings.xml b/auth/src/main/res/values-sv/strings.xml index 23ad81fd1..f62f30104 100755 --- a/auth/src/main/res/values-sv/strings.xml +++ b/auth/src/main/res/values-sv/strings.xml @@ -94,4 +94,20 @@ Ytterligare verifiering krävs. Vänligen slutför multifaktorautentisering. Kontot måste länkas. Försök med en annan inloggningsmetod. Autentisering avbröts. Försök igen när du är redo. + + + Välj autentiseringsmetod + Konfigurera SMS-verifiering + Konfigurera autentiseringsapp + Verifiera din kod + Spara dina återställningskoder + + Välj en andra autentiseringsmetod för att skydda ditt konto + Ange ditt telefonnummer för att ta emot verifieringskoder + Skanna QR-koden med din autentiseringsapp + Ange koden som skickades till din telefon + Ange koden från din autentiseringsapp + Ange din verifieringskod + Förvara dessa koder på en säker plats. Du kan använda dem för att logga in om du förlorar åtkomst till din autentiseringsmetod. + diff --git a/auth/src/main/res/values-ta/strings.xml b/auth/src/main/res/values-ta/strings.xml index c18dc8171..0a26e5578 100755 --- a/auth/src/main/res/values-ta/strings.xml +++ b/auth/src/main/res/values-ta/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + அங்கீகார முறையைத் தேர்ந்தெடுக்கவும் + SMS சரிபார்ப்பை அமைக்கவும் + அங்கீகரிப்பு ஆப்ஸை அமைக்கவும் + உங்கள் குறியீட்டைச் சரிபார்க்கவும் + உங்கள் மீட்டெடுப்பு குறியீடுகளைச் சேமிக்கவும் + + உங்கள் கணக்கைப் பாதுகாக்க இரண்டாவது அங்கீகார முறையைத் தேர்ந்தெடுக்கவும் + சரிபார்ப்புக் குறியீடுகளைப் பெற உங்கள் தொலைபேசி எண்ணை உள்ளிடவும் + உங்கள் அங்கீகரிப்பு ஆப்ஸுடன் QR குறியீட்டை ஸ்கேன் செய்யவும் + உங்கள் தொலைபேசிக்கு அனுப்பப்பட்ட குறியீட்டை உள்ளிடவும் + உங்கள் அங்கீகரிப்பு ஆப்ஸிலிருந்து குறியீட்டை உள்ளிடவும் + உங்கள் சரிபார்ப்புக் குறியீட்டை உள்ளிடவும் + இந்தக் குறியீடுகளைப் பாதுகாப்பான இடத்தில் சேமிக்கவும். உங்கள் அங்கீகார முறைக்கான அணுகலை இழந்தால் உள்நுழைய இவற்றைப் பயன்படுத்தலாம். + diff --git a/auth/src/main/res/values-th/strings.xml b/auth/src/main/res/values-th/strings.xml index 39dfffbf2..8744bec0f 100755 --- a/auth/src/main/res/values-th/strings.xml +++ b/auth/src/main/res/values-th/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + เลือกวิธีการตรวจสอบสิทธิ์ + ตั้งค่าการยืนยัน SMS + ตั้งค่าแอปตรวจสอบสิทธิ์ + ยืนยันรหัสของคุณ + บันทึกรหัสกู้คืนของคุณ + + เลือกวิธีการตรวจสอบสิทธิ์ที่สองเพื่อรักษาความปลอดภัยบัญชีของคุณ + ป้อนหมายเลขโทรศัพท์ของคุณเพื่อรับรหัสยืนยัน + สแกนรหัส QR ด้วยแอปตรวจสอบสิทธิ์ของคุณ + ป้อนรหัสที่ส่งไปยังโทรศัพท์ของคุณ + ป้อนรหัสจากแอปตรวจสอบสิทธิ์ของคุณ + ป้อนรหัสยืนยันของคุณ + เก็บรหัสเหล่านี้ไว้ในที่ปลอดภัย คุณสามารถใช้รหัสเหล่านี้ลงชื่อเข้าใช้หากคุณไม่สามารถเข้าถึงวิธีการตรวจสอบสิทธิ์ของคุณ + diff --git a/auth/src/main/res/values-tl/strings.xml b/auth/src/main/res/values-tl/strings.xml index d0f765fc6..0a5ea38ac 100755 --- a/auth/src/main/res/values-tl/strings.xml +++ b/auth/src/main/res/values-tl/strings.xml @@ -94,4 +94,20 @@ Kailangan ang karagdagang pagpapatotoo. Mangyaring kumpletuhin ang multi-factor authentication. Kailangang i-link ang account. Mangyaring subukan ang ibang paraan ng pag-sign in. Ang pagpapatotoo ay nakansela. Mangyaring subukan muli kapag handa ka na. + + + Piliin ang Paraan ng Authentication + I-set Up ang SMS Verification + I-set Up ang Authenticator App + I-verify ang Iyong Code + I-save ang Iyong Mga Recovery Code + + Pumili ng pangalawang paraan ng authentication para protektahan ang iyong account + Ilagay ang iyong numero ng telepono para makatanggap ng mga verification code + I-scan ang QR code gamit ang iyong authenticator app + Ilagay ang code na ipinadala sa iyong telepono + Ilagay ang code mula sa iyong authenticator app + Ilagay ang iyong verification code + I-imbak ang mga code na ito sa ligtas na lugar. Magagamit mo ang mga ito para mag-sign in kung mawawala ang access sa iyong paraan ng authentication. + diff --git a/auth/src/main/res/values-tr/strings.xml b/auth/src/main/res/values-tr/strings.xml index 05c21a46d..5821d9da2 100755 --- a/auth/src/main/res/values-tr/strings.xml +++ b/auth/src/main/res/values-tr/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Kimlik Doğrulama Yöntemini Seçin + SMS Doğrulamasını Ayarlayın + Kimlik Doğrulayıcı Uygulamayı Ayarlayın + Kodunuzu Doğrulayın + Kurtarma Kodlarınızı Kaydedin + + Hesabınızı güvence altına almak için ikinci bir kimlik doğrulama yöntemi seçin + Doğrulama kodları almak için telefon numaranızı girin + Kimlik doğrulayıcı uygulamanızla QR kodunu tarayın + Telefonunuza gönderilen kodu girin + Kimlik doğrulayıcı uygulamanızdaki kodu girin + Doğrulama kodunuzu girin + Bu kodları güvenli bir yerde saklayın. Kimlik doğrulama yönteminize erişimi kaybederseniz oturum açmak için bunları kullanabilirsiniz. + diff --git a/auth/src/main/res/values-uk/strings.xml b/auth/src/main/res/values-uk/strings.xml index 9cacf3f5f..14919eb0e 100755 --- a/auth/src/main/res/values-uk/strings.xml +++ b/auth/src/main/res/values-uk/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Виберіть спосіб автентифікації + Налаштувати підтвердження через SMS + Налаштувати додаток автентифікації + Підтвердіть свій код + Збережіть коди відновлення + + Виберіть другий спосіб автентифікації для захисту облікового запису + Введіть номер телефону для отримання кодів підтвердження + Відскануйте QR-код за допомогою додатка автентифікації + Введіть код, надісланий на ваш телефон + Введіть код із додатка автентифікації + Введіть код підтвердження + Збережіть ці коди в безпечному місці. Ви можете використовувати їх для входу, якщо втратите доступ до способу автентифікації. + diff --git a/auth/src/main/res/values-ur/strings.xml b/auth/src/main/res/values-ur/strings.xml index 818ebf6ca..b36cd1fa3 100755 --- a/auth/src/main/res/values-ur/strings.xml +++ b/auth/src/main/res/values-ur/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + تصدیقی طریقہ منتخب کریں + SMS تصدیق سیٹ اپ کریں + تصدیقی ایپ سیٹ اپ کریں + اپنا کوڈ تصدیق کریں + اپنے بازیافتی کوڈز محفوظ کریں + + اپنے اکاؤنٹ کو محفوظ بنانے کے لیے دوسرا تصدیقی طریقہ منتخب کریں + تصدیقی کوڈز وصول کرنے کے لیے اپنا فون نمبر درج کریں + اپنی تصدیقی ایپ سے QR کوڈ اسکین کریں + اپنے فون پر بھیجا گیا کوڈ درج کریں + اپنی تصدیقی ایپ سے کوڈ درج کریں + اپنا تصدیقی کوڈ درج کریں + ان کوڈز کو محفوظ جگہ پر اسٹور کریں۔ اگر آپ اپنے تصدیقی طریقے تک رسائی کھو دیتے ہیں تو آپ سائن ان کرنے کے لیے ان کا استعمال کر سکتے ہیں۔ + diff --git a/auth/src/main/res/values-vi/strings.xml b/auth/src/main/res/values-vi/strings.xml index 3a3e221de..500d33678 100755 --- a/auth/src/main/res/values-vi/strings.xml +++ b/auth/src/main/res/values-vi/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Chọn phương thức xác thực + Thiết lập xác minh qua SMS + Thiết lập ứng dụng xác thực + Xác minh mã của bạn + Lưu mã khôi phục của bạn + + Chọn phương thức xác thực thứ hai để bảo mật tài khoản của bạn + Nhập số điện thoại của bạn để nhận mã xác minh + Quét mã QR bằng ứng dụng xác thực của bạn + Nhập mã được gửi đến điện thoại của bạn + Nhập mã từ ứng dụng xác thực của bạn + Nhập mã xác minh của bạn + Lưu trữ các mã này ở nơi an toàn. Bạn có thể sử dụng chúng để đăng nhập nếu mất quyền truy cập vào phương thức xác thực của mình. + diff --git a/auth/src/main/res/values-zh-rCN/strings.xml b/auth/src/main/res/values-zh-rCN/strings.xml index 2f30bc99b..fdc2dbb44 100755 --- a/auth/src/main/res/values-zh-rCN/strings.xml +++ b/auth/src/main/res/values-zh-rCN/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + 选择身份验证方法 + 设置短信验证 + 设置身份验证器应用 + 验证代码 + 保存恢复代码 + + 选择第二种身份验证方法以保护您的帐号 + 输入您的电话号码以接收验证码 + 使用身份验证器应用扫描二维码 + 输入发送到您手机的验证码 + 输入身份验证器应用中的验证码 + 输入您的验证码 + 将这些代码保存在安全的地方。如果您无法访问身份验证方法,可以使用这些代码登录。 + diff --git a/auth/src/main/res/values-zh-rHK/strings.xml b/auth/src/main/res/values-zh-rHK/strings.xml index 53f6bdb0c..92d8266b0 100755 --- a/auth/src/main/res/values-zh-rHK/strings.xml +++ b/auth/src/main/res/values-zh-rHK/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + 選擇驗證方法 + 設定短訊驗證 + 設定驗證器應用程式 + 驗證代碼 + 儲存復原代碼 + + 選擇第二種驗證方法以保護您的帳戶 + 輸入您的電話號碼以接收驗證碼 + 使用驗證器應用程式掃描 QR 碼 + 輸入傳送至您手機的驗證碼 + 輸入驗證器應用程式中的驗證碼 + 輸入您的驗證碼 + 將這些代碼儲存在安全的地方。如果您無法存取驗證方法,可以使用這些代碼登入。 + diff --git a/auth/src/main/res/values-zh-rTW/strings.xml b/auth/src/main/res/values-zh-rTW/strings.xml index 53f6bdb0c..9b4b19f2d 100755 --- a/auth/src/main/res/values-zh-rTW/strings.xml +++ b/auth/src/main/res/values-zh-rTW/strings.xml @@ -95,4 +95,20 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + 選擇驗證方法 + 設定簡訊驗證 + 設定驗證器應用程式 + 驗證代碼 + 儲存復原代碼 + + 選擇第二種驗證方法以保護您的帳戶 + 輸入您的電話號碼以接收驗證碼 + 使用驗證器應用程式掃描 QR 碼 + 輸入傳送至您手機的驗證碼 + 輸入驗證器應用程式中的驗證碼 + 輸入您的驗證碼 + 將這些代碼儲存在安全的地方。如果您無法存取驗證方法,可以使用這些代碼登入。 + diff --git a/auth/src/main/res/values-zh/strings.xml b/auth/src/main/res/values-zh/strings.xml index 29395c3f2..9334dfbf8 100755 --- a/auth/src/main/res/values-zh/strings.xml +++ b/auth/src/main/res/values-zh/strings.xml @@ -94,4 +94,20 @@ 需要额外的验证。请完成多重身份验证。 需要关联账户。请尝试其他登录方式。 身份验证已取消。准备好后请重试。 + + + 选择身份验证方法 + 设置短信验证 + 设置身份验证器应用 + 验证代码 + 保存恢复代码 + + 选择第二种身份验证方法以保护您的帐号 + 输入您的电话号码以接收验证码 + 使用身份验证器应用扫描二维码 + 输入发送到您手机的验证码 + 输入身份验证器应用中的验证码 + 输入您的验证码 + 将这些代码保存在安全的地方。如果您无法访问身份验证方法,可以使用这些代码登录。 + diff --git a/auth/src/main/res/values/strings.xml b/auth/src/main/res/values/strings.xml index 5790ca8d2..fa3ec8cb5 100644 --- a/auth/src/main/res/values/strings.xml +++ b/auth/src/main/res/values/strings.xml @@ -148,4 +148,19 @@ Additional verification required. Please complete multi-factor authentication. Account needs to be linked. Please try a different sign-in method. Authentication was cancelled. Please try again when ready. + + + Choose Authentication Method + Set Up SMS Verification + Set Up Authenticator App + Verify Your Code + Save Your Recovery Codes + + Select a second authentication method to secure your account + Enter your phone number to receive verification codes + Scan the QR code with your authenticator app + Enter the code sent to your phone + Enter the code from your authenticator app + Enter your verification code + Store these codes in a safe place. You can use them to sign in if you lose access to your authentication method. diff --git a/auth/src/test/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentStateTest.kt b/auth/src/test/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentStateTest.kt index 61cc8bb9d..b08c84bf3 100644 --- a/auth/src/test/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentStateTest.kt +++ b/auth/src/test/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentContentStateTest.kt @@ -254,120 +254,6 @@ class MfaEnrollmentContentStateTest { } } - @Test - fun `getStepTitle returns correct titles for each step`() { - // Given & When & Then - assertEquals( - "Choose Authentication Method", - MfaEnrollmentContentState(step = MfaEnrollmentStep.SelectFactor).getStepTitle() - ) - assertEquals( - "Set Up SMS Verification", - MfaEnrollmentContentState(step = MfaEnrollmentStep.ConfigureSms).getStepTitle() - ) - assertEquals( - "Set Up Authenticator App", - MfaEnrollmentContentState(step = MfaEnrollmentStep.ConfigureTotp).getStepTitle() - ) - assertEquals( - "Verify Your Code", - MfaEnrollmentContentState(step = MfaEnrollmentStep.VerifyFactor).getStepTitle() - ) - assertEquals( - "Save Your Recovery Codes", - MfaEnrollmentContentState(step = MfaEnrollmentStep.ShowRecoveryCodes).getStepTitle() - ) - } - - @Test - fun `getStepHelperText returns correct text for SelectFactor`() { - // Given - val state = MfaEnrollmentContentState(step = MfaEnrollmentStep.SelectFactor) - - // When & Then - assertEquals( - "Select a second authentication method to secure your account", - state.getStepHelperText() - ) - } - - @Test - fun `getStepHelperText returns correct text for ConfigureSms`() { - // Given - val state = MfaEnrollmentContentState(step = MfaEnrollmentStep.ConfigureSms) - - // When & Then - assertEquals( - "Enter your phone number to receive verification codes", - state.getStepHelperText() - ) - } - - @Test - fun `getStepHelperText returns correct text for ConfigureTotp`() { - // Given - val state = MfaEnrollmentContentState(step = MfaEnrollmentStep.ConfigureTotp) - - // When & Then - assertEquals( - "Scan the QR code with your authenticator app", - state.getStepHelperText() - ) - } - - @Test - fun `getStepHelperText returns correct text for VerifyFactor with SMS`() { - // Given - val state = MfaEnrollmentContentState( - step = MfaEnrollmentStep.VerifyFactor, - selectedFactor = MfaFactor.Sms - ) - - // When & Then - assertEquals( - "Enter the code sent to your phone", - state.getStepHelperText() - ) - } - - @Test - fun `getStepHelperText returns correct text for VerifyFactor with TOTP`() { - // Given - val state = MfaEnrollmentContentState( - step = MfaEnrollmentStep.VerifyFactor, - selectedFactor = MfaFactor.Totp - ) - - // When & Then - assertEquals( - "Enter the code from your authenticator app", - state.getStepHelperText() - ) - } - - @Test - fun `getStepHelperText returns generic text for VerifyFactor with no factor`() { - // Given - val state = MfaEnrollmentContentState( - step = MfaEnrollmentStep.VerifyFactor, - selectedFactor = null - ) - - // When & Then - assertEquals( - "Enter your verification code", - state.getStepHelperText() - ) - } - - @Test - fun `getStepHelperText returns correct text for ShowRecoveryCodes`() { - // Given - val state = MfaEnrollmentContentState(step = MfaEnrollmentStep.ShowRecoveryCodes) - - // When & Then - assertTrue(state.getStepHelperText().contains("Store these codes in a safe place")) - } @Test fun `data class properties are accessible`() { diff --git a/auth/src/test/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentStepTest.kt b/auth/src/test/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentStepTest.kt index b89f3e8e7..5ffa2dab5 100644 --- a/auth/src/test/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentStepTest.kt +++ b/auth/src/test/java/com/firebase/ui/auth/compose/mfa/MfaEnrollmentStepTest.kt @@ -14,11 +14,30 @@ package com.firebase.ui.auth.compose.mfa +import android.content.Context +import androidx.test.core.app.ApplicationProvider +import com.firebase.ui.auth.compose.configuration.MfaFactor +import com.firebase.ui.auth.compose.configuration.string_provider.DefaultAuthUIStringProvider import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Before import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +@RunWith(RobolectricTestRunner::class) +@Config(manifest = Config.NONE) class MfaEnrollmentStepTest { + private lateinit var stringProvider: DefaultAuthUIStringProvider + + @Before + fun setUp() { + val context = ApplicationProvider.getApplicationContext() + stringProvider = DefaultAuthUIStringProvider(context) + } + @Test fun `enum has all expected values`() { val values = MfaEnrollmentStep.entries.toTypedArray() @@ -48,4 +67,92 @@ class MfaEnrollmentStepTest { assertEquals(3, MfaEnrollmentStep.VerifyFactor.ordinal) assertEquals(4, MfaEnrollmentStep.ShowRecoveryCodes.ordinal) } + + @Test + fun `getTitle returns correct values for each step`() { + assertEquals("Choose Authentication Method", MfaEnrollmentStep.SelectFactor.getTitle(stringProvider)) + assertEquals("Set Up SMS Verification", MfaEnrollmentStep.ConfigureSms.getTitle(stringProvider)) + assertEquals("Set Up Authenticator App", MfaEnrollmentStep.ConfigureTotp.getTitle(stringProvider)) + assertEquals("Verify Your Code", MfaEnrollmentStep.VerifyFactor.getTitle(stringProvider)) + assertEquals("Save Your Recovery Codes", MfaEnrollmentStep.ShowRecoveryCodes.getTitle(stringProvider)) + } + + @Test + fun `getHelperText returns correct text for SelectFactor`() { + assertEquals( + "Select a second authentication method to secure your account", + MfaEnrollmentStep.SelectFactor.getHelperText(stringProvider) + ) + } + + @Test + fun `getHelperText returns correct text for ConfigureSms`() { + assertEquals( + "Enter your phone number to receive verification codes", + MfaEnrollmentStep.ConfigureSms.getHelperText(stringProvider) + ) + } + + @Test + fun `getHelperText returns correct text for ConfigureTotp`() { + assertEquals( + "Scan the QR code with your authenticator app", + MfaEnrollmentStep.ConfigureTotp.getHelperText(stringProvider) + ) + } + + @Test + fun `getHelperText returns correct text for VerifyFactor with SMS`() { + assertEquals( + "Enter the code sent to your phone", + MfaEnrollmentStep.VerifyFactor.getHelperText(stringProvider, MfaFactor.Sms) + ) + } + + @Test + fun `getHelperText returns correct text for VerifyFactor with TOTP`() { + assertEquals( + "Enter the code from your authenticator app", + MfaEnrollmentStep.VerifyFactor.getHelperText(stringProvider, MfaFactor.Totp) + ) + } + + @Test + fun `getHelperText returns generic text for VerifyFactor with no factor`() { + assertEquals( + "Enter your verification code", + MfaEnrollmentStep.VerifyFactor.getHelperText(stringProvider, null) + ) + } + + @Test + fun `getHelperText returns generic text for VerifyFactor without parameter`() { + assertEquals( + "Enter your verification code", + MfaEnrollmentStep.VerifyFactor.getHelperText(stringProvider) + ) + } + + @Test + fun `getHelperText returns correct text for ShowRecoveryCodes`() { + val helperText = MfaEnrollmentStep.ShowRecoveryCodes.getHelperText(stringProvider) + assertTrue(helperText.contains("Store these codes in a safe place")) + } + + @Test + fun `getHelperText ignores factor parameter for non-VerifyFactor steps`() { + // These should return the same result regardless of the factor parameter + assertEquals( + MfaEnrollmentStep.SelectFactor.getHelperText(stringProvider), + MfaEnrollmentStep.SelectFactor.getHelperText(stringProvider, MfaFactor.Sms) + ) + assertEquals( + MfaEnrollmentStep.ConfigureSms.getHelperText(stringProvider), + MfaEnrollmentStep.ConfigureSms.getHelperText(stringProvider, MfaFactor.Totp) + ) + assertEquals( + MfaEnrollmentStep.ConfigureTotp.getHelperText(stringProvider), + MfaEnrollmentStep.ConfigureTotp.getHelperText(stringProvider, MfaFactor.Sms) + ) + } }