diff --git a/assets/translations/en.json b/assets/translations/en.json index eb36af5a..c3245f9d 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -299,6 +299,7 @@ "7": "Yes", "8": "Remove task", "9": "Reboot", + "10": "You cannot use this API for domains with such TLD.", "yes": "Yes" }, "timer": { diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 7198a040..7f46b137 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -295,6 +295,7 @@ "7": "Да, удалить", "8": "Удалить задачу", "9": "Перезагрузить", + "10": "API не поддерживает домены с таким TLD.", "yes": "Да" }, "timer": { diff --git a/lib/logic/api_maps/cloudflare.dart b/lib/logic/api_maps/cloudflare.dart index 9da5ecee..c0d7334b 100644 --- a/lib/logic/api_maps/cloudflare.dart +++ b/lib/logic/api_maps/cloudflare.dart @@ -125,23 +125,25 @@ class CloudflareApi extends ApiMap { var domainName = cloudFlareDomain.domainName; var domainZoneId = cloudFlareDomain.zoneId; var listDnsRecords = projectDnsRecords(domainName, ip4); - - var url = '$rootAddress/zones/$domainZoneId/dns_records'; - var allCreateFutures = []; + var client = await getClient(); - - for (var record in listDnsRecords) { - allCreateFutures.add( - client.post( - url, - data: record.toJson(), - ), - ); + try { + for (var record in listDnsRecords) { + allCreateFutures.add( + client.post( + '/zones/$domainZoneId/dns_records', + data: record.toJson(), + ), + ); + } + await Future.wait(allCreateFutures); + } on DioError catch (e) { + print(e.message); + throw e; + } finally { + close(client); } - - await Future.wait(allCreateFutures); - close(client); } List projectDnsRecords(String? domainName, String? ip4) { diff --git a/lib/logic/api_maps/server.dart b/lib/logic/api_maps/server.dart index 27c0f5c2..0cafbf6b 100644 --- a/lib/logic/api_maps/server.dart +++ b/lib/logic/api_maps/server.dart @@ -13,7 +13,6 @@ import 'package:selfprivacy/logic/models/json/recovery_token_status.dart'; import 'package:selfprivacy/logic/models/json/device_token.dart'; import 'package:selfprivacy/logic/models/timezone_settings.dart'; import 'package:selfprivacy/logic/models/hive/user.dart'; -import 'package:timezone/browser.dart'; import 'api_map.dart'; diff --git a/lib/logic/cubit/app_config/app_config_cubit.dart b/lib/logic/cubit/app_config/app_config_cubit.dart index f430f458..870154f1 100644 --- a/lib/logic/cubit/app_config/app_config_cubit.dart +++ b/lib/logic/cubit/app_config/app_config_cubit.dart @@ -80,10 +80,14 @@ class AppConfigCubit extends Cubit { void createServerAndSetDnsRecords() async { AppConfigNotFinished _stateCopy = state as AppConfigNotFinished; + var onCancel = + () => emit((state as AppConfigNotFinished).copyWith(isLoading: false)); + var onSuccess = (ServerHostingDetails serverDetails) async { await repository.createDnsRecords( serverDetails.ip4, state.serverDomain!, + onCancel: onCancel, ); emit((state as AppConfigNotFinished).copyWith( @@ -93,9 +97,6 @@ class AppConfigCubit extends Cubit { runDelayed(startServerIfDnsIsOkay, Duration(seconds: 30), null); }; - var onCancel = - () => emit((state as AppConfigNotFinished).copyWith(isLoading: false)); - try { emit((state as AppConfigNotFinished).copyWith(isLoading: true)); await repository.createServer( diff --git a/lib/logic/cubit/app_config/app_config_repository.dart b/lib/logic/cubit/app_config/app_config_repository.dart index 28c27db6..d8edaedc 100644 --- a/lib/logic/cubit/app_config/app_config_repository.dart +++ b/lib/logic/cubit/app_config/app_config_repository.dart @@ -214,8 +214,9 @@ class AppConfigRepository { Future createDnsRecords( String ip4, - ServerDomain cloudFlareDomain, - ) async { + ServerDomain cloudFlareDomain, { + required void Function() onCancel, + }) async { var cloudflareApi = CloudflareApi(); await cloudflareApi.removeSimilarRecords( @@ -223,10 +224,41 @@ class AppConfigRepository { cloudFlareDomain: cloudFlareDomain, ); - await cloudflareApi.createMultipleDnsRecords( - ip4: ip4, - cloudFlareDomain: cloudFlareDomain, - ); + try { + await cloudflareApi.createMultipleDnsRecords( + ip4: ip4, + cloudFlareDomain: cloudFlareDomain, + ); + } on DioError catch (e) { + var hetznerApi = HetznerApi(); + var nav = getIt.get(); + nav.showPopUpDialog( + BrandAlert( + title: e.response!.data["errors"][0]["code"] == 1038 + ? 'modals.10'.tr() + : 'providers.domain.states.error'.tr(), + contentText: 'modals.6'.tr(), + actions: [ + ActionButton( + text: 'basis.delete'.tr(), + isRed: true, + onPressed: () async { + await hetznerApi.deleteSelfprivacyServerAndAllVolumes( + domainName: cloudFlareDomain.domainName); + + onCancel(); + }, + ), + ActionButton( + text: 'basis.cancel'.tr(), + onPressed: () { + onCancel(); + }, + ), + ], + ), + ); + } await HetznerApi().createReverseDns( ip4: ip4,