fix proof of work issue
Some checks are pending
Flutter analyze & test / flutter_analyze_and_test (push) Waiting to run

This commit is contained in:
otsmr 2025-12-21 21:56:54 +01:00
parent b9bb074ba6
commit e17e39ef41
8 changed files with 38 additions and 6 deletions

View file

@ -20,6 +20,7 @@
"registerUsernameSlogan": "Bitte wähle einen Benutzernamen, damit dich andere finden können!", "registerUsernameSlogan": "Bitte wähle einen Benutzernamen, damit dich andere finden können!",
"registerUsernameDecoration": "Benutzername", "registerUsernameDecoration": "Benutzername",
"registerUsernameLimits": "Der Benutzername muss mindestens 3 Zeichen lang sein.", "registerUsernameLimits": "Der Benutzername muss mindestens 3 Zeichen lang sein.",
"registerProofOfWorkFailed": "Beim Captcha-Test gab es ein Problem. Bitte versuche es erneut.",
"registerSubmitButton": "Jetzt registrieren!", "registerSubmitButton": "Jetzt registrieren!",
"registerTwonlyCodeText": "Hast du einen twonly-Code erhalten? Dann löse ihn entweder direkt hier oder später ein!", "registerTwonlyCodeText": "Hast du einen twonly-Code erhalten? Dann löse ihn entweder direkt hier oder später ein!",
"registerTwonlyCodeLabel": "twonly-Code", "registerTwonlyCodeLabel": "twonly-Code",

View file

@ -20,6 +20,7 @@
"registerUsernameSlogan": "Please select a username so others can find you!", "registerUsernameSlogan": "Please select a username so others can find you!",
"registerUsernameDecoration": "Username", "registerUsernameDecoration": "Username",
"registerUsernameLimits": "Your username must be at least 3 characters long.", "registerUsernameLimits": "Your username must be at least 3 characters long.",
"registerProofOfWorkFailed": "There was an issue with the captcha test. Please try again.",
"registerSubmitButton": "Register now!", "registerSubmitButton": "Register now!",
"registerTwonlyCodeText": "Have you received a twonly code? Then redeem it either directly here or later!", "registerTwonlyCodeText": "Have you received a twonly code? Then redeem it either directly here or later!",
"registerTwonlyCodeLabel": "twonly-Code", "registerTwonlyCodeLabel": "twonly-Code",

View file

@ -218,6 +218,12 @@ abstract class AppLocalizations {
/// **'Your username must be at least 3 characters long.'** /// **'Your username must be at least 3 characters long.'**
String get registerUsernameLimits; String get registerUsernameLimits;
/// No description provided for @registerProofOfWorkFailed.
///
/// In en, this message translates to:
/// **'There was an issue with the captcha test. Please try again.'**
String get registerProofOfWorkFailed;
/// No description provided for @registerSubmitButton. /// No description provided for @registerSubmitButton.
/// ///
/// In en, this message translates to: /// In en, this message translates to:

View file

@ -79,6 +79,10 @@ class AppLocalizationsDe extends AppLocalizations {
String get registerUsernameLimits => String get registerUsernameLimits =>
'Der Benutzername muss mindestens 3 Zeichen lang sein.'; 'Der Benutzername muss mindestens 3 Zeichen lang sein.';
@override
String get registerProofOfWorkFailed =>
'Beim Captcha-Test gab es ein Problem. Bitte versuche es erneut.';
@override @override
String get registerSubmitButton => 'Jetzt registrieren!'; String get registerSubmitButton => 'Jetzt registrieren!';

View file

@ -78,6 +78,10 @@ class AppLocalizationsEn extends AppLocalizations {
String get registerUsernameLimits => String get registerUsernameLimits =>
'Your username must be at least 3 characters long.'; 'Your username must be at least 3 characters long.';
@override
String get registerProofOfWorkFailed =>
'There was an issue with the captcha test. Please try again.';
@override @override
String get registerSubmitButton => 'Register now!'; String get registerSubmitButton => 'Register now!';

View file

@ -169,7 +169,7 @@ class _SearchUsernameView extends State<AddNewUserView> {
}, },
inputFormatters: [ inputFormatters: [
LengthLimitingTextInputFormatter(12), LengthLimitingTextInputFormatter(12),
FilteringTextInputFormatter.allow(RegExp('[a-z0-9A-Z]')), FilteringTextInputFormatter.allow(RegExp('[a-z0-9A-Z._]')),
], ],
controller: searchUserName, controller: searchUserName,
decoration: decoration:

View file

@ -40,6 +40,7 @@ class _RegisterViewState extends State<RegisterView> {
bool _isTryingToRegister = false; bool _isTryingToRegister = false;
bool _isValidUserName = false; bool _isValidUserName = false;
bool _showUserNameError = false; bool _showUserNameError = false;
bool _showProofOfWorkError = false;
late Future<int>? proofOfWork; late Future<int>? proofOfWork;
@ -63,6 +64,7 @@ class _RegisterViewState extends State<RegisterView> {
setState(() { setState(() {
_isTryingToRegister = true; _isTryingToRegister = true;
_showUserNameError = false; _showUserNameError = false;
_showProofOfWorkError = false;
}); });
late int proof; late int proof;
@ -93,6 +95,7 @@ class _RegisterViewState extends State<RegisterView> {
Log.info('Got user_id ${res.value} from server'); Log.info('Got user_id ${res.value} from server');
userId = res.value.userid.toInt() as int; userId = res.value.userid.toInt() as int;
} else { } else {
proofOfWork = null;
if (res.error == ErrorCode.RegistrationDisabled) { if (res.error == ErrorCode.RegistrationDisabled) {
_registrationDisabled = true; _registrationDisabled = true;
return; return;
@ -103,9 +106,12 @@ class _RegisterViewState extends State<RegisterView> {
return createNewUser(); return createNewUser();
} }
if (res.error == ErrorCode.InvalidProofOfWork) { if (res.error == ErrorCode.InvalidProofOfWork) {
Log.error('Proof of Work is invalid. Try again.');
await deleteLocalUserData(); await deleteLocalUserData();
return createNewUser(); setState(() {
_showProofOfWorkError = true;
_isTryingToRegister = false;
});
return;
} }
if (mounted) { if (mounted) {
setState(() { setState(() {
@ -232,7 +238,7 @@ class _RegisterViewState extends State<RegisterView> {
}, },
inputFormatters: [ inputFormatters: [
LengthLimitingTextInputFormatter(12), LengthLimitingTextInputFormatter(12),
FilteringTextInputFormatter.allow(RegExp('[a-z0-9A-Z]')), FilteringTextInputFormatter.allow(RegExp('[a-z0-9A-Z._]')),
], ],
style: const TextStyle(fontSize: 17), style: const TextStyle(fontSize: 17),
decoration: getInputDecoration( decoration: getInputDecoration(
@ -248,7 +254,17 @@ class _RegisterViewState extends State<RegisterView> {
), ),
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),
const SizedBox(height: 30), const SizedBox(height: 10),
Text(
context.lang.registerProofOfWorkFailed,
style: TextStyle(
color:
_showProofOfWorkError ? Colors.red : Colors.transparent,
fontSize: 12,
),
textAlign: TextAlign.center,
),
const SizedBox(height: 10),
Column( Column(
children: [ children: [
FilledButton.icon( FilledButton.icon(

View file

@ -146,7 +146,7 @@ class _ProfileViewState extends State<ProfileView> {
maxLength: 12, maxLength: 12,
inputFormatters: [ inputFormatters: [
LengthLimitingTextInputFormatter(12), LengthLimitingTextInputFormatter(12),
FilteringTextInputFormatter.allow(RegExp('[a-z0-9A-Z]')), FilteringTextInputFormatter.allow(RegExp('[a-z0-9A-Z._]')),
], ],
); );
if (context.mounted && username != null && username != '') { if (context.mounted && username != null && username != '') {