From 313cfc718793bb76fcc89fb3fdc31657d964c32d Mon Sep 17 00:00:00 2001 From: NaiJi Date: Wed, 15 Jun 2022 04:55:45 +0300 Subject: [PATCH 1/5] Bug fix error processing for installation cubits --- assets/translations/en.json | 3 +++ assets/translations/ru.json | 3 +++ .../initializing/backblaze_form_cubit.dart | 5 +++-- .../initializing/cloudflare_form_cubit.dart | 4 +++- .../initializing/hetzner_form_cubit.dart | 4 +++- .../server_installation_repository.dart | 19 ++++++++++++------- 6 files changed, 27 insertions(+), 11 deletions(-) diff --git a/assets/translations/en.json b/assets/translations/en.json index 46cee9b8..c0e95639 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -259,6 +259,9 @@ "1": "Connect a server", "2": "A place where your data and SelfPrivacy services will reside:", "how": "How to obtain API token", + "hetzner_bad_key_error": "Hetzner API key is invalid", + "cloudflare_bad_key_error": "Cloudflare API key is invalid", + "backblaze_bad_key_error": "Backblaze storage information is invalid", "3": "Connect CloudFlare", "4": "To manage your domain's DNS", "5": "CloudFlare API Token", diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 68665e26..e2048024 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -260,6 +260,9 @@ "1": "Подключите сервер", "2": "Здесь будут жить наши данные и SelfPrivacy-сервисы", "how": "Как получить API Token", + "hetzner_bad_key_error": "Hetzner API ключ неверен", + "cloudflare_bad_key_error": "Cloudflare API ключ неверен", + "backblaze_bad_key_error": "Информация о Backblaze хранилище неверна", "3": "Подключите CloudFlare", "4": "Для управления DNS вашего домена", "5": "CloudFlare API Token", diff --git a/lib/logic/cubit/forms/setup/initializing/backblaze_form_cubit.dart b/lib/logic/cubit/forms/setup/initializing/backblaze_form_cubit.dart index 4769286d..04d2993e 100644 --- a/lib/logic/cubit/forms/setup/initializing/backblaze_form_cubit.dart +++ b/lib/logic/cubit/forms/setup/initializing/backblaze_form_cubit.dart @@ -55,10 +55,11 @@ class BackblazeFormCubit extends FormCubit { } if (!isKeyValid) { - keyId.setError('bad key'); - applicationKey.setError('bad key'); + keyId.setError('initializing.backblaze_bad_key_error'.tr()); + applicationKey.setError('initializing.backblaze_bad_key_error'.tr()); return false; } + return true; } } diff --git a/lib/logic/cubit/forms/setup/initializing/cloudflare_form_cubit.dart b/lib/logic/cubit/forms/setup/initializing/cloudflare_form_cubit.dart index 01d26835..6a4b3b30 100644 --- a/lib/logic/cubit/forms/setup/initializing/cloudflare_form_cubit.dart +++ b/lib/logic/cubit/forms/setup/initializing/cloudflare_form_cubit.dart @@ -42,12 +42,14 @@ class CloudFlareFormCubit extends FormCubit { isKeyValid = await apiClient.isValid(apiKey.state.value); } catch (e) { addError(e); + isKeyValid = false; } if (!isKeyValid) { - apiKey.setError('bad key'); + apiKey.setError('initializing.cloudflare_bad_key_error'.tr()); return false; } + return true; } } diff --git a/lib/logic/cubit/forms/setup/initializing/hetzner_form_cubit.dart b/lib/logic/cubit/forms/setup/initializing/hetzner_form_cubit.dart index b8f47e10..11465d9d 100644 --- a/lib/logic/cubit/forms/setup/initializing/hetzner_form_cubit.dart +++ b/lib/logic/cubit/forms/setup/initializing/hetzner_form_cubit.dart @@ -42,12 +42,14 @@ class HetznerFormCubit extends FormCubit { isKeyValid = await apiClient.isValid(apiKey.state.value); } catch (e) { addError(e); + isKeyValid = false; } if (!isKeyValid) { - apiKey.setError('bad key'); + apiKey.setError('initializing.hetzner_bad_key_error'.tr()); return false; } + return true; } } diff --git a/lib/logic/cubit/server_installation/server_installation_repository.dart b/lib/logic/cubit/server_installation/server_installation_repository.dart index 5d4db8fe..2a0f84f4 100644 --- a/lib/logic/cubit/server_installation/server_installation_repository.dart +++ b/lib/logic/cubit/server_installation/server_installation_repository.dart @@ -242,13 +242,18 @@ class ServerInstallationRepository { domainName: domainName, ); - final ServerHostingDetails? serverDetails = - await hetznerApi.createServer( - cloudFlareKey: cloudFlareKey, - rootUser: rootUser, - domainName: domainName, - dataBase: dataBase, - ); + ServerHostingDetails? serverDetails; + try { + serverDetails = await hetznerApi.createServer( + cloudFlareKey: cloudFlareKey, + rootUser: rootUser, + domainName: domainName, + dataBase: dataBase, + ); + } catch (e) { + print(e); + } + if (serverDetails == null) { print('Server is not initialized!'); return; From 6a22e2db6fded6cc6aa7db291d54321c018723ab Mon Sep 17 00:00:00 2001 From: NaiJi Date: Wed, 15 Jun 2022 06:23:54 +0300 Subject: [PATCH 2/5] Fix revert routing errors --- .../server_installation_cubit.dart | 18 ++++++++++++++++++ .../server_installation_repository.dart | 15 +++++++++++++++ lib/logic/get_it/api_config.dart | 2 -- .../recovering/recovery_confirm_backblaze.dart | 2 ++ .../recovery_confirm_cloudflare.dart | 2 ++ .../recovering/recovery_confirm_server.dart | 2 ++ .../recovery_hentzner_connected.dart | 2 ++ 7 files changed, 41 insertions(+), 2 deletions(-) diff --git a/lib/logic/cubit/server_installation/server_installation_cubit.dart b/lib/logic/cubit/server_installation/server_installation_cubit.dart index ef83104d..36928f08 100644 --- a/lib/logic/cubit/server_installation/server_installation_cubit.dart +++ b/lib/logic/cubit/server_installation/server_installation_cubit.dart @@ -411,6 +411,7 @@ class ServerInstallationCubit extends Cubit { case RecoveryStep.recoveryKey: case RecoveryStep.newDeviceKey: case RecoveryStep.oldToken: + case RecoveryStep.hetznerToken: emit( dataState.copyWith( currentStep: RecoveryStep.selecting, @@ -425,6 +426,23 @@ class ServerInstallationCubit extends Cubit { ), ); break; + case RecoveryStep.cloudflareToken: + repository.deleteDomain(); + repository.deleteServerDetails(); + emit( + dataState.copyWith( + currentStep: RecoveryStep.serverSelection, + ), + ); + break; + case RecoveryStep.backblazeToken: + repository.deleteBackblazeKey(); + emit( + dataState.copyWith( + currentStep: RecoveryStep.cloudflareToken, + ), + ); + break; // We won't revert steps after client is authorized default: break; diff --git a/lib/logic/cubit/server_installation/server_installation_repository.dart b/lib/logic/cubit/server_installation/server_installation_repository.dart index 2a0f84f4..e6eaf3c6 100644 --- a/lib/logic/cubit/server_installation/server_installation_repository.dart +++ b/lib/logic/cubit/server_installation/server_installation_repository.dart @@ -603,6 +603,11 @@ class ServerInstallationRepository { await getIt().storeServerDetails(serverDetails); } + Future deleteServerDetails() async { + await box.delete(BNames.serverDetails); + getIt().init(); + } + Future saveHetznerKey(final String key) async { print('saved'); await getIt().storeHetznerKey(key); @@ -619,10 +624,20 @@ class ServerInstallationRepository { await getIt().storeBackblazeCredential(backblazeCredential); } + Future deleteBackblazeKey() async { + await box.delete(BNames.backblazeCredential); + getIt().init(); + } + Future saveCloudFlareKey(final String key) async { await getIt().storeCloudFlareKey(key); } + Future deleteCloudFlareKey() async { + await box.delete(BNames.cloudFlareKey); + getIt().init(); + } + Future saveDomain(final ServerDomain serverDomain) async { await getIt().storeServerDomain(serverDomain); } diff --git a/lib/logic/get_it/api_config.dart b/lib/logic/get_it/api_config.dart index 3f3e5ac0..ec2feb55 100644 --- a/lib/logic/get_it/api_config.dart +++ b/lib/logic/get_it/api_config.dart @@ -34,7 +34,6 @@ class ApiConfigModel { Future storeBackblazeCredential(final BackblazeCredential value) async { await _box.put(BNames.backblazeCredential, value); - _backblazeCredential = value; } @@ -64,7 +63,6 @@ class ApiConfigModel { void init() { _hetznerKey = _box.get(BNames.hetznerKey); - _cloudFlareKey = _box.get(BNames.cloudFlareKey); _backblazeCredential = _box.get(BNames.backblazeCredential); _serverDomain = _box.get(BNames.serverDomain); diff --git a/lib/ui/pages/setup/recovering/recovery_confirm_backblaze.dart b/lib/ui/pages/setup/recovering/recovery_confirm_backblaze.dart index 2b558727..02b68acf 100644 --- a/lib/ui/pages/setup/recovering/recovery_confirm_backblaze.dart +++ b/lib/ui/pages/setup/recovering/recovery_confirm_backblaze.dart @@ -28,6 +28,8 @@ class RecoveryConfirmBackblaze extends StatelessWidget { heroTitle: 'recovering.confirm_backblaze'.tr(), heroSubtitle: 'recovering.confirm_backblaze_description'.tr(), hasBackButton: true, + onBackButtonPressed: + context.read().revertRecoveryStep, hasFlashButton: false, children: [ CubitFormTextField( diff --git a/lib/ui/pages/setup/recovering/recovery_confirm_cloudflare.dart b/lib/ui/pages/setup/recovering/recovery_confirm_cloudflare.dart index 8cbdbe6c..0e12b51e 100644 --- a/lib/ui/pages/setup/recovering/recovery_confirm_cloudflare.dart +++ b/lib/ui/pages/setup/recovering/recovery_confirm_cloudflare.dart @@ -31,6 +31,8 @@ class RecoveryConfirmCloudflare extends StatelessWidget { ), hasBackButton: true, hasFlashButton: false, + onBackButtonPressed: + context.read().revertRecoveryStep, children: [ CubitFormTextField( formFieldCubit: context.read().apiKey, diff --git a/lib/ui/pages/setup/recovering/recovery_confirm_server.dart b/lib/ui/pages/setup/recovering/recovery_confirm_server.dart index 110425ef..19fcbb6b 100644 --- a/lib/ui/pages/setup/recovering/recovery_confirm_server.dart +++ b/lib/ui/pages/setup/recovering/recovery_confirm_server.dart @@ -39,6 +39,8 @@ class _RecoveryConfirmServerState extends State { ? 'recovering.choose_server_description'.tr() : 'recovering.confirm_server_description'.tr(), hasBackButton: true, + onBackButtonPressed: + context.read().revertRecoveryStep, hasFlashButton: false, children: [ FutureBuilder>( diff --git a/lib/ui/pages/setup/recovering/recovery_hentzner_connected.dart b/lib/ui/pages/setup/recovering/recovery_hentzner_connected.dart index e1812b32..36b5f130 100644 --- a/lib/ui/pages/setup/recovering/recovery_hentzner_connected.dart +++ b/lib/ui/pages/setup/recovering/recovery_hentzner_connected.dart @@ -32,6 +32,8 @@ class RecoveryHetznerConnected extends StatelessWidget { ), hasBackButton: true, hasFlashButton: false, + onBackButtonPressed: + context.read().revertRecoveryStep, children: [ CubitFormTextField( formFieldCubit: context.read().apiKey, From 9d4f7b4786189692fb2d1893495ed1a216d76a2e Mon Sep 17 00:00:00 2001 From: NaiJi Date: Wed, 15 Jun 2022 06:27:05 +0300 Subject: [PATCH 3/5] Add changelog for 0.6.1 --- fastlane/metadata/android/en-US/changelogs/0.6.1.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/0.6.1.txt diff --git a/fastlane/metadata/android/en-US/changelogs/0.6.1.txt b/fastlane/metadata/android/en-US/changelogs/0.6.1.txt new file mode 100644 index 00000000..0f5c3964 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/0.6.1.txt @@ -0,0 +1,3 @@ +- Fixed routing errors and broken "back" buttons on recovery stages +- Fixed broken validation on api token fields +- Minor improvements \ No newline at end of file From 7870cf9f990a0044acaf5b0de0e76c22ae8bb848 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Wed, 15 Jun 2022 07:06:57 +0300 Subject: [PATCH 4/5] Update pubsec version to 0.6.1 --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 71a5f2f9..1e052155 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: selfprivacy description: selfprivacy.org publish_to: 'none' -version: 0.6.0+15 +version: 0.6.1+15 environment: sdk: '>=2.17.0 <3.0.0' From 0feb9bc299333ccae1dd0e800e4026eec9725ca0 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Wed, 15 Jun 2022 07:51:32 +0300 Subject: [PATCH 5/5] Return to main page on backbutton press for some recovery pages --- .../server_installation_cubit.dart | 18 ------------------ .../recovering/recovery_confirm_backblaze.dart | 5 +++-- .../recovering/recovery_confirm_server.dart | 5 +++-- .../recovery_hentzner_connected.dart | 5 +++-- 4 files changed, 9 insertions(+), 24 deletions(-) diff --git a/lib/logic/cubit/server_installation/server_installation_cubit.dart b/lib/logic/cubit/server_installation/server_installation_cubit.dart index 36928f08..05198229 100644 --- a/lib/logic/cubit/server_installation/server_installation_cubit.dart +++ b/lib/logic/cubit/server_installation/server_installation_cubit.dart @@ -411,23 +411,13 @@ class ServerInstallationCubit extends Cubit { case RecoveryStep.recoveryKey: case RecoveryStep.newDeviceKey: case RecoveryStep.oldToken: - case RecoveryStep.hetznerToken: emit( dataState.copyWith( currentStep: RecoveryStep.selecting, ), ); break; - case RecoveryStep.serverSelection: - repository.deleteHetznerKey(); - emit( - dataState.copyWith( - currentStep: RecoveryStep.hetznerToken, - ), - ); - break; case RecoveryStep.cloudflareToken: - repository.deleteDomain(); repository.deleteServerDetails(); emit( dataState.copyWith( @@ -435,14 +425,6 @@ class ServerInstallationCubit extends Cubit { ), ); break; - case RecoveryStep.backblazeToken: - repository.deleteBackblazeKey(); - emit( - dataState.copyWith( - currentStep: RecoveryStep.cloudflareToken, - ), - ); - break; // We won't revert steps after client is authorized default: break; diff --git a/lib/ui/pages/setup/recovering/recovery_confirm_backblaze.dart b/lib/ui/pages/setup/recovering/recovery_confirm_backblaze.dart index 02b68acf..cbd40ff0 100644 --- a/lib/ui/pages/setup/recovering/recovery_confirm_backblaze.dart +++ b/lib/ui/pages/setup/recovering/recovery_confirm_backblaze.dart @@ -28,8 +28,9 @@ class RecoveryConfirmBackblaze extends StatelessWidget { heroTitle: 'recovering.confirm_backblaze'.tr(), heroSubtitle: 'recovering.confirm_backblaze_description'.tr(), hasBackButton: true, - onBackButtonPressed: - context.read().revertRecoveryStep, + onBackButtonPressed: () { + Navigator.of(context).popUntil((final route) => route.isFirst); + }, hasFlashButton: false, children: [ CubitFormTextField( diff --git a/lib/ui/pages/setup/recovering/recovery_confirm_server.dart b/lib/ui/pages/setup/recovering/recovery_confirm_server.dart index 19fcbb6b..063bd890 100644 --- a/lib/ui/pages/setup/recovering/recovery_confirm_server.dart +++ b/lib/ui/pages/setup/recovering/recovery_confirm_server.dart @@ -39,8 +39,9 @@ class _RecoveryConfirmServerState extends State { ? 'recovering.choose_server_description'.tr() : 'recovering.confirm_server_description'.tr(), hasBackButton: true, - onBackButtonPressed: - context.read().revertRecoveryStep, + onBackButtonPressed: () { + Navigator.of(context).popUntil((final route) => route.isFirst); + }, hasFlashButton: false, children: [ FutureBuilder>( diff --git a/lib/ui/pages/setup/recovering/recovery_hentzner_connected.dart b/lib/ui/pages/setup/recovering/recovery_hentzner_connected.dart index 36b5f130..6976283c 100644 --- a/lib/ui/pages/setup/recovering/recovery_hentzner_connected.dart +++ b/lib/ui/pages/setup/recovering/recovery_hentzner_connected.dart @@ -32,8 +32,9 @@ class RecoveryHetznerConnected extends StatelessWidget { ), hasBackButton: true, hasFlashButton: false, - onBackButtonPressed: - context.read().revertRecoveryStep, + onBackButtonPressed: () { + Navigator.of(context).popUntil((final route) => route.isFirst); + }, children: [ CubitFormTextField( formFieldCubit: context.read().apiKey,