From 53e72504f7a269f8cdb388cdcea214c7884eb468 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Fri, 16 Jun 2023 05:59:48 +0300 Subject: [PATCH] refactor: Allow changing values for TLS settings --- assets/translations/en.json | 8 +++++--- assets/translations/ru.json | 6 +++--- lib/logic/api_maps/graphql_maps/api_map.dart | 4 ++-- .../digital_ocean/digital_ocean_api.dart | 4 ++-- .../server_providers/hetzner/hetzner_api.dart | 4 ++-- .../{staging_options.dart => tls_options.dart} | 4 ++-- .../server_installation_cubit.dart | 6 +++--- .../server_installation_repository.dart | 4 ++-- .../more/app_settings/developer_settings.dart | 17 ++++++++++++++--- 9 files changed, 35 insertions(+), 22 deletions(-) rename lib/logic/api_maps/{staging_options.dart => tls_options.dart} (89%) diff --git a/assets/translations/en.json b/assets/translations/en.json index 0ac7562e..b45e6ac2 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -493,7 +493,7 @@ "required": "Required", "already_exist": "Already exists", "invalid_format": "Invalid format", - "invalid_format_password": "Must not contain empty characters", + "invalid_format_password": "Password must not contain spaces", "invalid_format_ssh": "Must follow the SSH key format", "root_name": "Cannot be 'root'", "length_not_equal": "Length is [], should be {}", @@ -507,10 +507,12 @@ "subtitle": "These settings are for debugging only. Don't change them unless you know what you're doing.", "server_setup": "Server setup", "use_staging_acme": "Use staging ACME server", - "use_staging_acme_description": "Rebuild your app to change this value.", + "use_staging_acme_description": "Applies when setting up a new server.", + "ignore_tls": "Do not verify TLS certificates", + "ignore_tls_description": "App will not verify TLS certificates when connecting to the server.", "routing": "App routing", "reset_onboarding": "Reset onboarding switch", "reset_onboarding_description": "Reset onboarding switch to show onboarding screen again", "cubit_statuses": "Cubit loading statuses" } -} \ No newline at end of file +} diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 8fdf0054..9b0c93ad 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -310,7 +310,7 @@ "no_server_types_found": "Не найдено доступных типов сервера! Пожалуйста, убедитесь, что у вас есть доступ к провайдеру сервера...", "dns_provider_bad_key_error": "API ключ неверен", "backblaze_bad_key_error": "Информация о Backblaze хранилище неверна", - "connect_to_dns": "Подключите DNS провайдер", + "connect_to_dns": "Подключите DNS провайдера", "connect_to_dns_provider_text": "С помощью API токена приложение SelfPrivacy настроит DNS записи", "manage_domain_dns": "Для управления DNS вашего домена", "use_this_domain": "Используем этот домен?", @@ -472,10 +472,10 @@ "required": "Обязательное поле", "already_exist": "Уже существует", "invalid_format": "Неверный формат", - "invalid_format_password": "Должен не содержать пустые символы", + "invalid_format_password": "Пароль не должен содержать пробелы", "invalid_format_ssh": "Должен следовать формату SSH ключей", "root_name": "Имя пользователя не может быть 'root'", "length_not_equal": "Длина строки [], должна быть равна {}", "length_longer": "Длина строки [], должна быть меньше либо равна {}" } -} \ No newline at end of file +} diff --git a/lib/logic/api_maps/graphql_maps/api_map.dart b/lib/logic/api_maps/graphql_maps/api_map.dart index 34e39b7a..32359f93 100644 --- a/lib/logic/api_maps/graphql_maps/api_map.dart +++ b/lib/logic/api_maps/graphql_maps/api_map.dart @@ -3,7 +3,7 @@ import 'dart:io'; import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:http/io_client.dart'; import 'package:selfprivacy/config/get_it_config.dart'; -import 'package:selfprivacy/logic/api_maps/staging_options.dart'; +import 'package:selfprivacy/logic/api_maps/tls_options.dart'; import 'package:selfprivacy/logic/models/message.dart'; void _logToAppConsole(final T objectToLog) { @@ -56,7 +56,7 @@ class ResponseLoggingParser extends ResponseParser { abstract class ApiMap { Future getClient() async { IOClient? ioClient; - if (StagingOptions.stagingAcme || !StagingOptions.verifyCertificate) { + if (TlsOptions.stagingAcme || !TlsOptions.verifyCertificate) { final HttpClient httpClient = HttpClient(); httpClient.badCertificateCallback = ( final cert, diff --git a/lib/logic/api_maps/rest_maps/server_providers/digital_ocean/digital_ocean_api.dart b/lib/logic/api_maps/rest_maps/server_providers/digital_ocean/digital_ocean_api.dart index 1fcb46c5..976ddb6b 100644 --- a/lib/logic/api_maps/rest_maps/server_providers/digital_ocean/digital_ocean_api.dart +++ b/lib/logic/api_maps/rest_maps/server_providers/digital_ocean/digital_ocean_api.dart @@ -4,7 +4,7 @@ import 'package:dio/dio.dart'; import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/volume_provider.dart'; import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/server_provider.dart'; -import 'package:selfprivacy/logic/api_maps/staging_options.dart'; +import 'package:selfprivacy/logic/api_maps/tls_options.dart'; import 'package:selfprivacy/logic/models/disk_size.dart'; import 'package:selfprivacy/logic/models/hive/user.dart'; import 'package:selfprivacy/logic/models/json/digital_ocean_server_info.dart'; @@ -314,7 +314,7 @@ class DigitalOceanApi extends ServerProviderApi with VolumeProviderApi { required final String hostName, required final String serverType, }) async { - final String stagingAcme = StagingOptions.stagingAcme ? 'true' : 'false'; + final String stagingAcme = TlsOptions.stagingAcme ? 'true' : 'false'; int? dropletId; Response? serverCreateResponse; diff --git a/lib/logic/api_maps/rest_maps/server_providers/hetzner/hetzner_api.dart b/lib/logic/api_maps/rest_maps/server_providers/hetzner/hetzner_api.dart index 7dc1bd28..338c96dd 100644 --- a/lib/logic/api_maps/rest_maps/server_providers/hetzner/hetzner_api.dart +++ b/lib/logic/api_maps/rest_maps/server_providers/hetzner/hetzner_api.dart @@ -4,7 +4,7 @@ import 'package:dio/dio.dart'; import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/volume_provider.dart'; import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/server_provider.dart'; -import 'package:selfprivacy/logic/api_maps/staging_options.dart'; +import 'package:selfprivacy/logic/api_maps/tls_options.dart'; import 'package:selfprivacy/logic/models/disk_size.dart'; import 'package:selfprivacy/logic/models/json/hetzner_server_info.dart'; import 'package:selfprivacy/logic/models/hive/user.dart'; @@ -355,7 +355,7 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi { required final int volumeId, required final String serverType, }) async { - final String stagingAcme = StagingOptions.stagingAcme ? 'true' : 'false'; + final String stagingAcme = TlsOptions.stagingAcme ? 'true' : 'false'; Response? serverCreateResponse; HetznerServerInfo? serverInfo; DioError? hetznerError; diff --git a/lib/logic/api_maps/staging_options.dart b/lib/logic/api_maps/tls_options.dart similarity index 89% rename from lib/logic/api_maps/staging_options.dart rename to lib/logic/api_maps/tls_options.dart index a4e98fe8..b216841c 100644 --- a/lib/logic/api_maps/staging_options.dart +++ b/lib/logic/api_maps/tls_options.dart @@ -1,11 +1,11 @@ /// Controls staging environment for network -class StagingOptions { +class TlsOptions { /// Whether we request for staging temprorary certificates. /// Hardcode to 'true' in the middle of testing to not /// get your domain banned by constant certificate renewal /// /// If set to 'true', the 'verifyCertificate' becomes useless - static bool get stagingAcme => false; + static bool stagingAcme = false; /// Should we consider CERTIFICATE_VERIFY_FAILED code an error /// For now it's just a global variable and DNS API diff --git a/lib/logic/cubit/server_installation/server_installation_cubit.dart b/lib/logic/cubit/server_installation/server_installation_cubit.dart index 50c6b09a..714179ca 100644 --- a/lib/logic/cubit/server_installation/server_installation_cubit.dart +++ b/lib/logic/cubit/server_installation/server_installation_cubit.dart @@ -9,7 +9,7 @@ import 'package:selfprivacy/logic/models/callback_dialogue_branching.dart'; import 'package:selfprivacy/logic/models/launch_installation_data.dart'; import 'package:selfprivacy/logic/providers/provider_settings.dart'; import 'package:selfprivacy/logic/providers/providers_controller.dart'; -import 'package:selfprivacy/logic/api_maps/staging_options.dart'; +import 'package:selfprivacy/logic/api_maps/tls_options.dart'; import 'package:selfprivacy/logic/models/hive/backblaze_credential.dart'; import 'package:selfprivacy/logic/models/hive/server_details.dart'; import 'package:selfprivacy/logic/models/hive/server_domain.dart'; @@ -407,7 +407,7 @@ class ServerInstallationCubit extends Cubit { emit(TimerState(dataState: dataState, isLoading: true)); final bool isServerWorking = await repository.isHttpServerWorking(); - StagingOptions.verifyCertificate = true; + TlsOptions.verifyCertificate = true; if (isServerWorking) { bool dkimCreated = true; @@ -757,7 +757,7 @@ class ServerInstallationCubit extends Cubit { void clearAppConfig() { closeTimer(); ProvidersController.clearProviders(); - StagingOptions.verifyCertificate = false; + TlsOptions.verifyCertificate = false; repository.clearAppConfig(); emit(const ServerInstallationEmpty()); } diff --git a/lib/logic/cubit/server_installation/server_installation_repository.dart b/lib/logic/cubit/server_installation/server_installation_repository.dart index a9122b33..96fa4d8d 100644 --- a/lib/logic/cubit/server_installation/server_installation_repository.dart +++ b/lib/logic/cubit/server_installation/server_installation_repository.dart @@ -12,7 +12,7 @@ import 'package:selfprivacy/config/hive_config.dart'; import 'package:selfprivacy/logic/models/json/dns_records.dart'; import 'package:selfprivacy/logic/providers/provider_settings.dart'; import 'package:selfprivacy/logic/api_maps/graphql_maps/server_api/server_api.dart'; -import 'package:selfprivacy/logic/api_maps/staging_options.dart'; +import 'package:selfprivacy/logic/api_maps/tls_options.dart'; import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart'; import 'package:selfprivacy/logic/models/hive/backblaze_credential.dart'; import 'package:selfprivacy/logic/models/hive/server_details.dart'; @@ -75,7 +75,7 @@ class ServerInstallationRepository { } if (box.get(BNames.hasFinalChecked, defaultValue: false)) { - StagingOptions.verifyCertificate = true; + TlsOptions.verifyCertificate = true; return ServerInstallationFinished( installationDialoguePopUp: null, providerApiToken: providerApiToken!, diff --git a/lib/ui/pages/more/app_settings/developer_settings.dart b/lib/ui/pages/more/app_settings/developer_settings.dart index 220cb791..c2a34916 100644 --- a/lib/ui/pages/more/app_settings/developer_settings.dart +++ b/lib/ui/pages/more/app_settings/developer_settings.dart @@ -1,6 +1,6 @@ import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; -import 'package:selfprivacy/logic/api_maps/staging_options.dart'; +import 'package:selfprivacy/logic/api_maps/tls_options.dart'; import 'package:selfprivacy/logic/cubit/app_settings/app_settings_cubit.dart'; import 'package:selfprivacy/logic/cubit/devices/devices_cubit.dart'; import 'package:selfprivacy/logic/cubit/recovery_key/recovery_key_cubit.dart'; @@ -37,8 +37,19 @@ class _DeveloperSettingsPageState extends State { title: Text('developer_settings.use_staging_acme'.tr()), subtitle: Text('developer_settings.use_staging_acme_description'.tr()), - value: StagingOptions.stagingAcme, - onChanged: null, + value: TlsOptions.stagingAcme, + onChanged: (final bool value) => setState( + () => TlsOptions.stagingAcme = value, + ), + ), + SwitchListTile( + title: Text('developer_settings.ignore_tls'.tr()), + subtitle: + Text('developer_settings.ignore_tls_description'.tr()), + value: TlsOptions.verifyCertificate, + onChanged: (final bool value) => setState( + () => TlsOptions.verifyCertificate = value, + ), ), Padding( padding: const EdgeInsets.all(16),