Add reusable two-factor verification for login and money operations (#32)

This commit is contained in:
Stephan D committed 2026-09-12 12:44:34 +02:00
1 parent b7a58b1a87
commit fb40f860d2
41 files changed
+2439 -43

No files matched your search

@@ -1465,6 +1465,174 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'Make another transaction'**
String get wAnother;
/// No description provided for @factorTitle.
///
/// In en, this message translates to:
/// **'One more check.'**
String get factorTitle;
/// No description provided for @factorLogin.
///
/// In en, this message translates to:
/// **'Confirm it’s you to finish signing in.'**
String get factorLogin;
/// No description provided for @factorMoney.
///
/// In en, this message translates to:
/// **'Confirm this transaction. No money moves before confirmation.'**
String get factorMoney;
/// No description provided for @factorEnableHelp.
///
/// In en, this message translates to:
/// **'Confirm to turn on two-factor verification for sign-in and money operations.'**
String get factorEnableHelp;
/// No description provided for @factorDisableHelp.
///
/// In en, this message translates to:
/// **'Confirm to turn off two-factor verification. Sign-in and money operations will no longer ask for a second code.'**
String get factorDisableHelp;
/// No description provided for @factorEmail.
///
/// In en, this message translates to:
/// **'Enter the six-digit code sent to your email.'**
String get factorEmail;
/// No description provided for @factorAuthenticator.
///
/// In en, this message translates to:
/// **'Enter the current six-digit code from your authenticator app.'**
String get factorAuthenticator;
/// No description provided for @factorCode.
///
/// In en, this message translates to:
/// **'Verification code'**
String get factorCode;
/// No description provided for @factorConfirm.
///
/// In en, this message translates to:
/// **'Verify and continue'**
String get factorConfirm;
/// No description provided for @factorResend.
///
/// In en, this message translates to:
/// **'Send a new code'**
String get factorResend;
/// No description provided for @factorHelp.
///
/// In en, this message translates to:
/// **'Check your inbox and spam folder. A new code replaces the previous one.'**
String get factorHelp;
/// No description provided for @factorAppHelp.
///
/// In en, this message translates to:
/// **'Use the current code. If you cannot access your authenticator, cancel this action.'**
String get factorAppHelp;
/// No description provided for @factorInvalid.
///
/// In en, this message translates to:
/// **'That code is not valid. Check all six digits and try again.'**
String get factorInvalid;
/// No description provided for @factorExpired.
///
/// In en, this message translates to:
/// **'This verification has expired. Request a new code or return to start again.'**
String get factorExpired;
/// No description provided for @factorLocked.
///
/// In en, this message translates to:
/// **'Too many incorrect attempts. Wait five minutes, then start verification again.'**
String get factorLocked;
/// No description provided for @factorWait.
///
/// In en, this message translates to:
/// **'Please wait before requesting another code.'**
String get factorWait;
/// No description provided for @factorRequired.
///
/// In en, this message translates to:
/// **'Verification is needed again. Please confirm this action once more.'**
String get factorRequired;
/// No description provided for @factorUnavailable.
///
/// In en, this message translates to:
/// **'Could not complete verification. Try again or cancel this action.'**
String get factorUnavailable;
/// No description provided for @factorCooldown.
///
/// In en, this message translates to:
/// **'Send a new code in {seconds}s'**
String factorCooldown(int seconds);
/// No description provided for @factorSettings.
///
/// In en, this message translates to:
/// **'Two-factor verification'**
String get factorSettings;
/// No description provided for @factorSettingsHelp.
///
/// In en, this message translates to:
/// **'Add a verification code when you sign in, top up, exchange or pay out.'**
String get factorSettingsHelp;
/// No description provided for @factorOn.
///
/// In en, this message translates to:
/// **'On'**
String get factorOn;
/// No description provided for @factorOff.
///
/// In en, this message translates to:
/// **'Off'**
String get factorOff;
/// No description provided for @factorEnable.
///
/// In en, this message translates to:
/// **'Turn on'**
String get factorEnable;
/// No description provided for @factorDisable.
///
/// In en, this message translates to:
/// **'Turn off'**
String get factorDisable;
/// No description provided for @factorEmailMethod.
///
/// In en, this message translates to:
/// **'Email code'**
String get factorEmailMethod;
/// No description provided for @factorAppMethod.
///
/// In en, this message translates to:
/// **'Authenticator app'**
String get factorAppMethod;
/// No description provided for @factorAppExpired.
///
/// In en, this message translates to:
/// **'This verification has expired. Return and start again.'**
String get factorAppExpired;
}
class _AppLocalizationsDelegate
@@ -758,4 +758,103 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get wAnother => 'Make another transaction';
@override
String get factorTitle => 'One more check.';
@override
String get factorLogin => 'Confirm it’s you to finish signing in.';
@override
String get factorMoney =>
'Confirm this transaction. No money moves before confirmation.';
@override
String get factorEnableHelp =>
'Confirm to turn on two-factor verification for sign-in and money operations.';
@override
String get factorDisableHelp =>
'Confirm to turn off two-factor verification. Sign-in and money operations will no longer ask for a second code.';
@override
String get factorEmail => 'Enter the six-digit code sent to your email.';
@override
String get factorAuthenticator =>
'Enter the current six-digit code from your authenticator app.';
@override
String get factorCode => 'Verification code';
@override
String get factorConfirm => 'Verify and continue';
@override
String get factorResend => 'Send a new code';
@override
String get factorHelp =>
'Check your inbox and spam folder. A new code replaces the previous one.';
@override
String get factorAppHelp =>
'Use the current code. If you cannot access your authenticator, cancel this action.';
@override
String get factorInvalid =>
'That code is not valid. Check all six digits and try again.';
@override
String get factorExpired =>
'This verification has expired. Request a new code or return to start again.';
@override
String get factorLocked =>
'Too many incorrect attempts. Wait five minutes, then start verification again.';
@override
String get factorWait => 'Please wait before requesting another code.';
@override
String get factorRequired =>
'Verification is needed again. Please confirm this action once more.';
@override
String get factorUnavailable =>
'Could not complete verification. Try again or cancel this action.';
@override
String factorCooldown(int seconds) {
return 'Send a new code in ${seconds}s';
}
@override
String get factorSettings => 'Two-factor verification';
@override
String get factorSettingsHelp =>
'Add a verification code when you sign in, top up, exchange or pay out.';
@override
String get factorOn => 'On';
@override
String get factorOff => 'Off';
@override
String get factorEnable => 'Turn on';
@override
String get factorDisable => 'Turn off';
@override
String get factorEmailMethod => 'Email code';
@override
String get factorAppMethod => 'Authenticator app';
@override
String get factorAppExpired =>
'This verification has expired. Return and start again.';
}
@@ -755,4 +755,103 @@ class AppLocalizationsRu extends AppLocalizations {
@override
String get wAnother => 'Создать новую операцию';
@override
String get factorTitle => 'Ещё одна проверка.';
@override
String get factorLogin => 'Подтвердите, что это вы, чтобы завершить вход.';
@override
String get factorMoney =>
'Подтвердите эту операцию. До подтверждения деньги не переводятся.';
@override
String get factorEnableHelp =>
'Подтвердите включение двухфакторной проверки для входа и операций с деньгами.';
@override
String get factorDisableHelp =>
'Подтвердите отключение двухфакторной проверки. Для входа и операций больше не потребуется второй код.';
@override
String get factorEmail => 'Введите шестизначный код из письма.';
@override
String get factorAuthenticator =>
'Введите текущий шестизначный код из приложения-аутентификатора.';
@override
String get factorCode => 'Код подтверждения';
@override
String get factorConfirm => 'Подтвердить и продолжить';
@override
String get factorResend => 'Отправить новый код';
@override
String get factorHelp =>
'Проверьте входящие и папку «Спам». Новый код заменяет предыдущий.';
@override
String get factorAppHelp =>
'Используйте текущий код. Если приложение недоступно, отмените это действие.';
@override
String get factorInvalid =>
'Неверный код. Проверьте все шесть цифр и попробуйте ещё раз.';
@override
String get factorExpired =>
'Срок проверки истёк. Запросите новый код или вернитесь и начните снова.';
@override
String get factorLocked =>
'Слишком много неверных попыток. Подождите пять минут и начните проверку снова.';
@override
String get factorWait => 'Подождите перед повторным запросом кода.';
@override
String get factorRequired =>
'Нужна повторная проверка. Подтвердите это действие ещё раз.';
@override
String get factorUnavailable =>
'Не удалось завершить проверку. Повторите попытку или отмените действие.';
@override
String factorCooldown(int seconds) {
return 'Новый код через $seconds с';
}
@override
String get factorSettings => 'Двухфакторная проверка';
@override
String get factorSettingsHelp =>
'Подтверждайте кодом вход, пополнение, обмен и вывод средств.';
@override
String get factorOn => 'Включена';
@override
String get factorOff => 'Выключена';
@override
String get factorEnable => 'Включить';
@override
String get factorDisable => 'Выключить';
@override
String get factorEmailMethod => 'Код из письма';
@override
String get factorAppMethod => 'Приложение-аутентификатор';
@override
String get factorAppExpired =>
'Срок проверки истёк. Вернитесь и начните снова.';
}