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/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 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_cubit.dart b/lib/logic/cubit/server_installation/server_installation_cubit.dart index ef83104d..05198229 100644 --- a/lib/logic/cubit/server_installation/server_installation_cubit.dart +++ b/lib/logic/cubit/server_installation/server_installation_cubit.dart @@ -417,11 +417,11 @@ class ServerInstallationCubit extends Cubit { ), ); break; - case RecoveryStep.serverSelection: - repository.deleteHetznerKey(); + case RecoveryStep.cloudflareToken: + repository.deleteServerDetails(); emit( dataState.copyWith( - currentStep: RecoveryStep.hetznerToken, + currentStep: RecoveryStep.serverSelection, ), ); break; diff --git a/lib/logic/cubit/server_installation/server_installation_repository.dart b/lib/logic/cubit/server_installation/server_installation_repository.dart index 5d4db8fe..e6eaf3c6 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; @@ -598,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); @@ -614,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..cbd40ff0 100644 --- a/lib/ui/pages/setup/recovering/recovery_confirm_backblaze.dart +++ b/lib/ui/pages/setup/recovering/recovery_confirm_backblaze.dart @@ -28,6 +28,9 @@ class RecoveryConfirmBackblaze extends StatelessWidget { heroTitle: 'recovering.confirm_backblaze'.tr(), heroSubtitle: 'recovering.confirm_backblaze_description'.tr(), hasBackButton: true, + onBackButtonPressed: () { + Navigator.of(context).popUntil((final route) => route.isFirst); + }, 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..063bd890 100644 --- a/lib/ui/pages/setup/recovering/recovery_confirm_server.dart +++ b/lib/ui/pages/setup/recovering/recovery_confirm_server.dart @@ -39,6 +39,9 @@ class _RecoveryConfirmServerState extends State { ? 'recovering.choose_server_description'.tr() : 'recovering.confirm_server_description'.tr(), hasBackButton: true, + 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 e1812b32..6976283c 100644 --- a/lib/ui/pages/setup/recovering/recovery_hentzner_connected.dart +++ b/lib/ui/pages/setup/recovering/recovery_hentzner_connected.dart @@ -32,6 +32,9 @@ class RecoveryHetznerConnected extends StatelessWidget { ), hasBackButton: true, hasFlashButton: false, + onBackButtonPressed: () { + Navigator.of(context).popUntil((final route) => route.isFirst); + }, children: [ CubitFormTextField( formFieldCubit: context.read().apiKey, 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'