Merge pull request 'fix(validations): Make validations and errors text more specific' (#135) from validations into master

Reviewed-on: kherel/selfprivacy.org.app#135
Reviewed-by: Inex Code <inex.code@selfprivacy.org>
pull/137/head
NaiJi ✨ 2022-10-09 02:23:48 +03:00
commit 90dd3beae0
8 changed files with 46 additions and 28 deletions

View File

@ -20,7 +20,7 @@
"connect": "Connect", "connect": "Connect",
"domain": "Domain", "domain": "Domain",
"saving": "Saving…", "saving": "Saving…",
"nickname": "Nickname", "username": "Username",
"loading": "Loading…", "loading": "Loading…",
"later": "Skip to setup later", "later": "Skip to setup later",
"connect_to_existing": "Connect to an existing server", "connect_to_existing": "Connect to an existing server",
@ -258,6 +258,7 @@
"could_not_create_user": "Couldn't create user", "could_not_create_user": "Couldn't create user",
"could_not_delete_user": "Couldn't delete user", "could_not_delete_user": "Couldn't delete user",
"could_not_add_ssh_key": "Couldn't add SSH key", "could_not_add_ssh_key": "Couldn't add SSH key",
"username_rule": "Username must contain only lowercase latin letters, digits and underscores, should not start with a digit",
"email_login": "Email login", "email_login": "Email login",
"no_ssh_notice": "Only email and SSH accounts are created for this user. Single Sign On for all services is coming soon." "no_ssh_notice": "Only email and SSH accounts are created for this user. Single Sign On for all services is coming soon."
}, },
@ -286,7 +287,7 @@
"check": "Check", "check": "Check",
"one_more_restart": "One more restart to apply your security certificates.", "one_more_restart": "One more restart to apply your security certificates.",
"create_master_account": "Create master account", "create_master_account": "Create master account",
"enter_nickname_and_password": "Enter a nickname and strong password", "enter_username_and_password": "Enter username and strong password",
"finish": "Everything is initialized", "finish": "Everything is initialized",
"checks": "Checks have been completed \n{} out of {}" "checks": "Checks have been completed \n{} out of {}"
}, },
@ -418,13 +419,13 @@
"reset_user_password": "Reset password of user" "reset_user_password": "Reset password of user"
}, },
"validations": { "validations": {
"required": "Required.", "required": "Required",
"invalid_format": "Invalid format.", "already_exist": "Already exists",
"root_name": "User name cannot be 'root'.", "invalid_format": "Invalid format",
"key_format": "Invalid key format.", "invalid_format_password": "Must not contain empty characters",
"length_not_equal": "Length is []. Should be {}.", "invalid_format_ssh": "Must follow the SSH key format",
"length_longer": "Length is []. Should be shorter than or equal to {}.", "root_name": "Cannot be 'root'",
"user_already_exist": "This user already exists.", "length_not_equal": "Length is [], should be {}",
"key_already_exists": "This key already exists." "length_longer": "Length is [], should be shorter than or equal to {}"
} }
} }

View File

@ -20,7 +20,7 @@
"connect": "Подключить", "connect": "Подключить",
"domain": "Домен", "domain": "Домен",
"saving": "Сохранение…", "saving": "Сохранение…",
"nickname": "Никнейм", "username": "Имя пользователя",
"loading": "Загрузка…", "loading": "Загрузка…",
"later": "Пропустить и настроить потом", "later": "Пропустить и настроить потом",
"connect_to_existing": "Подключиться к существующему серверу", "connect_to_existing": "Подключиться к существующему серверу",
@ -258,6 +258,7 @@
"could_not_create_user": "Не удалось создать пользователя", "could_not_create_user": "Не удалось создать пользователя",
"could_not_delete_user": "Не удалось стереть пользователя", "could_not_delete_user": "Не удалось стереть пользователя",
"could_not_add_ssh_key": "Не удалось создать SSH ключить", "could_not_add_ssh_key": "Не удалось создать SSH ключить",
"username_rule": "Имя может содержать только маленькие латинские буквы, цифры, подчёркивания, не может начинаться с цифр",
"email_login": "Авторизация по Email", "email_login": "Авторизация по Email",
"no_ssh_notice": "Для этого пользователя созданы только SSH и Email аккаунты. Единая авторизация для всех сервисов ещё не реализована." "no_ssh_notice": "Для этого пользователя созданы только SSH и Email аккаунты. Единая авторизация для всех сервисов ещё не реализована."
}, },
@ -286,7 +287,7 @@
"check": "Проверка", "check": "Проверка",
"one_more_restart": "Сейчас будет дополнительная перезагрузка для активации сертификатов безопасности.", "one_more_restart": "Сейчас будет дополнительная перезагрузка для активации сертификатов безопасности.",
"create_master_account": "Создайте главную учетную запись", "create_master_account": "Создайте главную учетную запись",
"enter_nickname_and_password": "Введите никнейм и сложный пароль", "enter_username_and_password": "Введите имя пользователя и сложный пароль",
"finish": "Всё инициализировано", "finish": "Всё инициализировано",
"checks": "Проверок выполнено: \n{} / {}" "checks": "Проверок выполнено: \n{} / {}"
}, },
@ -419,13 +420,13 @@
"reset_user_password": "Сбросить пароль пользователя" "reset_user_password": "Сбросить пароль пользователя"
}, },
"validations": { "validations": {
"required": "Обязательное поле.", "required": "Обязательное поле",
"invalid_format": "Неверный формат.", "already_exist": "Уже существует",
"root_name": "Имя пользователя не может быть 'root'.", "invalid_format": "Неверный формат",
"key_format": "Неверный формат.", "invalid_format_password": "Должен не содержать пустые символы",
"length_not_equal": "Длина строки []. Должно быть равно {}.", "invalid_format_ssh": "Должен следовать формату SSH ключей",
"length_longer": "Длина строки []. Должно быть меньше либо равно {}.", "root_name": "Имя пользователя не может быть 'root'",
"user_already_exist": "Имя уже используется.", "length_not_equal": "Длина строки [], должно быть равно {}",
"key_already_exists": "Этот ключ уже добавлен." "length_longer": "Длина строки [], должно быть меньше либо равно {}"
} }
} }

View File

@ -28,7 +28,7 @@ class FieldCubitFactory {
ValidationModel( ValidationModel(
(final String login) => (final String login) =>
context.read<UsersCubit>().state.isLoginRegistered(login), context.read<UsersCubit>().state.isLoginRegistered(login),
'validations.user_already_exist'.tr(), 'validations.already_exist'.tr(),
), ),
RequiredStringValidation('validations.required'.tr()), RequiredStringValidation('validations.required'.tr()),
LengthStringLongerValidation(userMaxLength), LengthStringLongerValidation(userMaxLength),
@ -52,7 +52,7 @@ class FieldCubitFactory {
RequiredStringValidation('validations.required'.tr()), RequiredStringValidation('validations.required'.tr()),
ValidationModel<String>( ValidationModel<String>(
passwordForbiddenRegExp.hasMatch, passwordForbiddenRegExp.hasMatch,
'validations.invalid_format'.tr(), 'validations.invalid_format_password'.tr(),
), ),
], ],
); );

View File

@ -14,7 +14,7 @@ class DnsProviderFormCubit extends FormCubit {
RequiredStringValidation('validations.required'.tr()), RequiredStringValidation('validations.required'.tr()),
ValidationModel<String>( ValidationModel<String>(
regExp.hasMatch, regExp.hasMatch,
'validations.key_format'.tr(), 'validations.invalid_format'.tr(),
), ),
LengthStringNotEqualValidation(40) LengthStringNotEqualValidation(40)
], ],

View File

@ -15,7 +15,7 @@ class ProviderFormCubit extends FormCubit {
RequiredStringValidation('validations.required'.tr()), RequiredStringValidation('validations.required'.tr()),
ValidationModel<String>( ValidationModel<String>(
regExp.hasMatch, regExp.hasMatch,
'validations.key_format'.tr(), 'validations.invalid_format'.tr(),
), ),
LengthStringNotEqualValidation(64) LengthStringNotEqualValidation(64)
], ],

View File

@ -21,7 +21,7 @@ class SshFormCubit extends FormCubit {
ValidationModel( ValidationModel(
(final String newKey) => (final String newKey) =>
user.sshKeys.any((final String key) => key == newKey), user.sshKeys.any((final String key) => key == newKey),
'validations.key_already_exists'.tr(), 'validations.already_exists'.tr(),
), ),
RequiredStringValidation('validations.required'.tr()), RequiredStringValidation('validations.required'.tr()),
ValidationModel<String>( ValidationModel<String>(
@ -30,7 +30,7 @@ class SshFormCubit extends FormCubit {
print(keyRegExp.hasMatch(s)); print(keyRegExp.hasMatch(s));
return !keyRegExp.hasMatch(s); return !keyRegExp.hasMatch(s);
}, },
'validations.invalid_format'.tr(), 'validations.invalid_format_ssh'.tr(),
), ),
], ],
); );

View File

@ -415,15 +415,23 @@ class InitializingPage extends StatelessWidget {
BrandText.h2('initializing.create_master_account'.tr()), BrandText.h2('initializing.create_master_account'.tr()),
const SizedBox(height: 10), const SizedBox(height: 10),
BrandText.body2( BrandText.body2(
'initializing.enter_nickname_and_password'.tr(), 'initializing.enter_username_and_password'.tr(),
), ),
const Spacer(), const Spacer(),
if (formCubitState.isErrorShown)
Text(
'users.username_rule'.tr(),
style: TextStyle(
color: Theme.of(context).colorScheme.error,
),
),
const SizedBox(height: 10),
CubitFormTextField( CubitFormTextField(
formFieldCubit: context.read<RootUserFormCubit>().userName, formFieldCubit: context.read<RootUserFormCubit>().userName,
textAlign: TextAlign.center, textAlign: TextAlign.center,
scrollPadding: const EdgeInsets.only(bottom: 70), scrollPadding: const EdgeInsets.only(bottom: 70),
decoration: InputDecoration( decoration: InputDecoration(
hintText: 'basis.nickname'.tr(), hintText: 'basis.username'.tr(),
), ),
), ),
const SizedBox(height: 10), const SizedBox(height: 10),

View File

@ -55,6 +55,14 @@ class NewUser extends StatelessWidget {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
if (formCubitState.isErrorShown)
Text(
'users.username_rule'.tr(),
style: TextStyle(
color: Theme.of(context).colorScheme.error,
),
),
const SizedBox(width: 14),
IntrinsicHeight( IntrinsicHeight(
child: CubitFormTextField( child: CubitFormTextField(
formFieldCubit: context.read<UserFormCubit>().login, formFieldCubit: context.read<UserFormCubit>().login,