diff --git a/lib/shared/constants.dart b/lib/shared/constants.dart index b31f7cc89e..2c3b80d3fe 100644 --- a/lib/shared/constants.dart +++ b/lib/shared/constants.dart @@ -37,6 +37,9 @@ const String updateCheckerEndpoint = 'https://komodo.earth/adexwebversion'; final Uri feedbackUrl = Uri.parse('https://komodo.earth:8181/webform/'); const int feedbackMaxLength = 1000; const int contactDetailsMaxLength = 100; +// Maximum allowed length for passwords across the app +// TODO: Mirror this limit in the SDK validation and any backend API constraints +const int passwordMaxLength = 128; final RegExp discordUsernameRegex = RegExp(r'^[a-zA-Z0-9._]{2,32}$'); final RegExp telegramUsernameRegex = RegExp(r'^[a-zA-Z0-9_]{5,32}$'); final RegExp matrixIdRegex = RegExp( diff --git a/lib/views/common/hw_wallet_dialog/trezor_steps/trezor_dialog_select_wallet.dart b/lib/views/common/hw_wallet_dialog/trezor_steps/trezor_dialog_select_wallet.dart index bb9dabc4c9..878dda319e 100644 --- a/lib/views/common/hw_wallet_dialog/trezor_steps/trezor_dialog_select_wallet.dart +++ b/lib/views/common/hw_wallet_dialog/trezor_steps/trezor_dialog_select_wallet.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:web_dex/generated/codegen_loader.g.dart'; import 'package:komodo_ui_kit/komodo_ui_kit.dart'; +import 'package:web_dex/shared/constants.dart'; class TrezorDialogSelectWallet extends StatelessWidget { const TrezorDialogSelectWallet({Key? key, required this.onComplete}) @@ -100,6 +101,8 @@ class _TrezorHiddenWalletState extends State<_TrezorHiddenWallet> { keyboardType: TextInputType.text, autofillHints: const [AutofillHints.password], obscureText: true, + maxLength: passwordMaxLength, + counterText: '', focusNode: _passphraseFieldFocusNode, onFieldSubmitted: (_) => _onSubmit(), validator: (String? text) { diff --git a/lib/views/common/wallet_password_dialog/password_dialog_content.dart b/lib/views/common/wallet_password_dialog/password_dialog_content.dart index 3c8805502e..038f5d5621 100644 --- a/lib/views/common/wallet_password_dialog/password_dialog_content.dart +++ b/lib/views/common/wallet_password_dialog/password_dialog_content.dart @@ -8,6 +8,7 @@ import 'package:web_dex/bloc/auth_bloc/auth_bloc.dart'; import 'package:web_dex/common/screen.dart'; import 'package:web_dex/generated/codegen_loader.g.dart'; import 'package:web_dex/model/wallet.dart'; +import 'package:web_dex/shared/constants.dart'; import 'package:web_dex/shared/widgets/password_visibility_control.dart'; // TODO: refactor this widget, and other seed viewing/backup related widgets @@ -74,7 +75,8 @@ class _PasswordDialogContentState extends State { autofocus: true, autocorrect: false, obscureText: _isObscured, - inputFormatters: [LengthLimitingTextInputFormatter(40)], + maxLength: passwordMaxLength, + counterText: '', errorMaxLines: 6, errorText: _error, hintText: LocaleKeys.enterThePassword.tr(), @@ -276,7 +278,8 @@ class _PasswordDialogContentWithLoadingState autofocus: true, autocorrect: false, obscureText: _isObscured, - inputFormatters: [LengthLimitingTextInputFormatter(40)], + maxLength: passwordMaxLength, + counterText: '', errorMaxLines: 6, errorText: _error, hintText: LocaleKeys.enterThePassword.tr(), diff --git a/lib/views/settings/widgets/security_settings/password_update_page.dart b/lib/views/settings/widgets/security_settings/password_update_page.dart index ece9bf05f2..ec4216fac1 100644 --- a/lib/views/settings/widgets/security_settings/password_update_page.dart +++ b/lib/views/settings/widgets/security_settings/password_update_page.dart @@ -15,6 +15,7 @@ import 'package:web_dex/generated/codegen_loader.g.dart'; import 'package:web_dex/model/wallet.dart'; import 'package:web_dex/shared/utils/validators.dart'; import 'package:web_dex/shared/widgets/password_visibility_control.dart'; +import 'package:web_dex/shared/constants.dart'; import 'package:web_dex/views/common/page_header/page_header.dart'; class PasswordUpdatePage extends StatefulWidget { @@ -369,8 +370,9 @@ class _PasswordField extends StatelessWidget { autocorrect: false, enableInteractiveSelection: true, obscureText: isObscured, + maxLength: passwordMaxLength, + counterText: '', autofillHints: autofillHints, - inputFormatters: [LengthLimitingTextInputFormatter(40)], validator: validator, errorMaxLines: 6, hintText: hintText, diff --git a/lib/views/wallets_manager/widgets/creation_password_fields.dart b/lib/views/wallets_manager/widgets/creation_password_fields.dart index f4c608d515..468297b917 100644 --- a/lib/views/wallets_manager/widgets/creation_password_fields.dart +++ b/lib/views/wallets_manager/widgets/creation_password_fields.dart @@ -7,6 +7,7 @@ import 'package:web_dex/generated/codegen_loader.g.dart'; import 'package:web_dex/shared/utils/validators.dart'; import 'package:web_dex/shared/widgets/password_visibility_control.dart'; import 'package:komodo_ui_kit/komodo_ui_kit.dart'; +import 'package:web_dex/shared/constants.dart'; class CreationPasswordFields extends StatefulWidget { const CreationPasswordFields({ @@ -62,9 +63,10 @@ class _CreationPasswordFieldsState extends State { obscureText: _isObscured, enableInteractiveSelection: true, validationMode: InputValidationMode.eager, - inputFormatters: [LengthLimitingTextInputFormatter(40)], + maxLength: passwordMaxLength, validator: _validateConfirmPasswordField, onFieldSubmitted: widget.onFieldSubmitted, + counterText: '', errorMaxLines: 6, autofillHints: const [AutofillHints.newPassword], hintText: LocaleKeys.walletCreationConfirmPasswordHint.tr(), @@ -79,8 +81,9 @@ class _CreationPasswordFieldsState extends State { autocorrect: false, enableInteractiveSelection: true, obscureText: _isObscured, - inputFormatters: [LengthLimitingTextInputFormatter(40)], + maxLength: passwordMaxLength, validator: _validatePasswordField, + counterText: '', errorMaxLines: 6, autofillHints: const [AutofillHints.newPassword], hintText: LocaleKeys.walletCreationPasswordHint.tr(), diff --git a/lib/views/wallets_manager/widgets/wallet_deleting.dart b/lib/views/wallets_manager/widgets/wallet_deleting.dart index fb54d88573..51f4c42dcc 100644 --- a/lib/views/wallets_manager/widgets/wallet_deleting.dart +++ b/lib/views/wallets_manager/widgets/wallet_deleting.dart @@ -9,6 +9,7 @@ import 'package:web_dex/blocs/wallets_repository.dart'; import 'package:web_dex/generated/codegen_loader.g.dart'; import 'package:web_dex/model/wallet.dart'; import 'package:web_dex/shared/widgets/password_visibility_control.dart'; +import 'package:web_dex/shared/constants.dart'; class WalletDeleting extends StatefulWidget { const WalletDeleting({ @@ -218,6 +219,8 @@ class _PasswordFieldState extends State<_PasswordField> { autofocus: true, autocorrect: false, obscureText: _isObscured, + maxLength: passwordMaxLength, + counterText: '', errorText: widget.errorText, validator: widget.validator, validationMode: InputValidationMode.eager, diff --git a/lib/views/wallets_manager/widgets/wallet_import_by_file.dart b/lib/views/wallets_manager/widgets/wallet_import_by_file.dart index 30b8a9c902..233e65eb52 100644 --- a/lib/views/wallets_manager/widgets/wallet_import_by_file.dart +++ b/lib/views/wallets_manager/widgets/wallet_import_by_file.dart @@ -14,6 +14,7 @@ import 'package:web_dex/shared/utils/encryption_tool.dart'; import 'package:web_dex/shared/widgets/disclaimer/eula_tos_checkboxes.dart'; import 'package:web_dex/shared/widgets/password_visibility_control.dart'; import 'package:web_dex/shared/widgets/quick_login_switch.dart'; +import 'package:web_dex/shared/constants.dart'; import 'package:web_dex/views/wallets_manager/widgets/custom_seed_checkbox.dart'; import 'package:web_dex/views/wallets_manager/widgets/hdwallet_mode_switch.dart'; @@ -121,6 +122,8 @@ class _WalletImportByFileState extends State { autocorrect: false, enableInteractiveSelection: true, obscureText: _isObscured, + maxLength: passwordMaxLength, + counterText: '', autofillHints: const [AutofillHints.password], validator: (_) { return _filePasswordError; diff --git a/lib/views/wallets_manager/widgets/wallet_login.dart b/lib/views/wallets_manager/widgets/wallet_login.dart index 9fe8c9488f..df5ff8ab6f 100644 --- a/lib/views/wallets_manager/widgets/wallet_login.dart +++ b/lib/views/wallets_manager/widgets/wallet_login.dart @@ -14,6 +14,7 @@ import 'package:web_dex/generated/codegen_loader.g.dart'; import 'package:web_dex/model/wallet.dart'; import 'package:web_dex/shared/widgets/password_visibility_control.dart'; import 'package:web_dex/shared/widgets/quick_login_switch.dart'; +import 'package:web_dex/shared/constants.dart'; import 'package:web_dex/views/wallets_manager/widgets/hdwallet_mode_switch.dart'; class WalletLogIn extends StatefulWidget { @@ -304,6 +305,8 @@ class _PasswordTextFieldState extends State { autocorrect: false, controller: widget.controller, obscureText: _isPasswordObscured, + maxLength: passwordMaxLength, + counterText: '', errorText: widget.errorText, autofillHints: widget.autofillHints ?? const [AutofillHints.password], hintText: LocaleKeys.walletCreationPasswordHint.tr(),