From e4bb35d5d817c2a8c895f566b42a8b970fc0a338 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Fri, 9 Sep 2022 12:14:37 +0300 Subject: [PATCH] Catch cloudflare exceptions --- .../dns_providers/cloudflare/cloudflare.dart | 96 +++++++++++-------- .../rest_maps/dns_providers/dns_provider.dart | 2 +- .../initializing/domain_setup_cubit.dart | 18 ++-- .../server_installation_repository.dart | 8 +- 4 files changed, 69 insertions(+), 55 deletions(-) diff --git a/lib/logic/api_maps/rest_maps/dns_providers/cloudflare/cloudflare.dart b/lib/logic/api_maps/rest_maps/dns_providers/cloudflare/cloudflare.dart index e0fb469a..3088de67 100644 --- a/lib/logic/api_maps/rest_maps/dns_providers/cloudflare/cloudflare.dart +++ b/lib/logic/api_maps/rest_maps/dns_providers/cloudflare/cloudflare.dart @@ -76,22 +76,23 @@ class CloudflareApi extends DnsProviderApi { } @override - Future getZoneId(final String domain) async { - validateStatus = (final status) => - status == HttpStatus.ok || status == HttpStatus.forbidden; + Future getZoneId(final String domain) async { + String? zoneId; + final Dio client = await getClient(); - final Response response = await client.get( - '/zones', - queryParameters: {'name': domain}, - ); - - close(client); - - if (response.data['result'].isEmpty) { - throw DomainNotFoundException('No domains found'); - } else { - return response.data['result'][0]['id']; + try { + final Response response = await client.get( + '/zones', + queryParameters: {'name': domain}, + ); + zoneId = response.data['result'][0]['id']; + } catch (e) { + print(e); + } finally { + close(client); } + + return zoneId; } @override @@ -105,21 +106,25 @@ class CloudflareApi extends DnsProviderApi { final String url = '/zones/$domainZoneId/dns_records'; final Dio client = await getClient(); - final Response response = await client.get(url); + try { + final Response response = await client.get(url); - final List records = response.data['result'] ?? []; - final List allDeleteFutures = []; + final List records = response.data['result'] ?? []; + final List allDeleteFutures = []; - for (final record in records) { - if (record['zone_name'] == domainName) { - allDeleteFutures.add( - client.delete('$url/${record["id"]}'), - ); + for (final record in records) { + if (record['zone_name'] == domainName) { + allDeleteFutures.add( + client.delete('$url/${record["id"]}'), + ); + } } + await Future.wait(allDeleteFutures); + } catch (e) { + print(e); + } finally { + close(client); } - - await Future.wait(allDeleteFutures); - close(client); } @override @@ -252,27 +257,38 @@ class CloudflareApi extends DnsProviderApi { ); final Dio client = await getClient(); - await client.post( - url, - data: dkimRecord.toJson(), - ); - - client.close(); + try { + await client.post( + url, + data: dkimRecord.toJson(), + ); + } catch (e) { + print(e); + } finally { + close(client); + } } @override Future> domainList() async { final String url = '$rootAddress/zones'; + List domains = []; + final Dio client = await getClient(); + try { + final Response response = await client.get( + url, + queryParameters: {'per_page': 50}, + ); + domains = response.data['result'] + .map((final el) => el['name'] as String) + .toList(); + } catch (e) { + print(e); + } finally { + close(client); + } - final Response response = await client.get( - url, - queryParameters: {'per_page': 50}, - ); - - close(client); - return response.data['result'] - .map((final el) => el['name'] as String) - .toList(); + return domains; } } diff --git a/lib/logic/api_maps/rest_maps/dns_providers/dns_provider.dart b/lib/logic/api_maps/rest_maps/dns_providers/dns_provider.dart index 5c2a9369..6680975e 100644 --- a/lib/logic/api_maps/rest_maps/dns_providers/dns_provider.dart +++ b/lib/logic/api_maps/rest_maps/dns_providers/dns_provider.dart @@ -23,7 +23,7 @@ abstract class DnsProviderApi extends ApiMap { final String dkimRecordString, final ServerDomain domain, ); - Future getZoneId(final String domain); + Future getZoneId(final String domain); Future> domainList(); Future isApiTokenValid(final String token); diff --git a/lib/logic/cubit/forms/setup/initializing/domain_setup_cubit.dart b/lib/logic/cubit/forms/setup/initializing/domain_setup_cubit.dart index 4a14b862..a1c458fb 100644 --- a/lib/logic/cubit/forms/setup/initializing/domain_setup_cubit.dart +++ b/lib/logic/cubit/forms/setup/initializing/domain_setup_cubit.dart @@ -31,19 +31,21 @@ class DomainSetupCubit extends Cubit { emit(Loading(LoadingTypes.saving)); - final String zoneId = await serverInstallationCubit + final String? zoneId = await serverInstallationCubit .repository.dnsProviderApiFactory! .getDnsProvider() .getZoneId(domainName); - final ServerDomain domain = ServerDomain( - domainName: domainName, - zoneId: zoneId, - provider: DnsProvider.cloudflare, - ); + if (zoneId != null) { + final ServerDomain domain = ServerDomain( + domainName: domainName, + zoneId: zoneId, + provider: DnsProvider.cloudflare, + ); - serverInstallationCubit.setDomain(domain); - emit(DomainSet()); + serverInstallationCubit.setDomain(domain); + emit(DomainSet()); + } } } diff --git a/lib/logic/cubit/server_installation/server_installation_repository.dart b/lib/logic/cubit/server_installation/server_installation_repository.dart index 0df91227..76089229 100644 --- a/lib/logic/cubit/server_installation/server_installation_repository.dart +++ b/lib/logic/cubit/server_installation/server_installation_repository.dart @@ -169,12 +169,8 @@ class ServerInstallationRepository { ), ); - try { - final String domainId = await dnsProviderApi.getZoneId(domain); - return domainId; - } on DomainNotFoundException { - return null; - } + final String? domainId = await dnsProviderApi.getZoneId(domain); + return domainId; } Future> isDnsAddressesMatch(