Catch cloudflare exceptions

pull/111/head
NaiJi ✨ 2022-09-09 12:14:37 +03:00
parent 06fbcff9a9
commit e4bb35d5d8
4 changed files with 69 additions and 55 deletions

View File

@ -76,22 +76,23 @@ class CloudflareApi extends DnsProviderApi {
} }
@override @override
Future<String> getZoneId(final String domain) async { Future<String?> getZoneId(final String domain) async {
validateStatus = (final status) => String? zoneId;
status == HttpStatus.ok || status == HttpStatus.forbidden;
final Dio client = await getClient(); final Dio client = await getClient();
try {
final Response response = await client.get( final Response response = await client.get(
'/zones', '/zones',
queryParameters: {'name': domain}, queryParameters: {'name': domain},
); );
zoneId = response.data['result'][0]['id'];
} catch (e) {
print(e);
} finally {
close(client); close(client);
if (response.data['result'].isEmpty) {
throw DomainNotFoundException('No domains found');
} else {
return response.data['result'][0]['id'];
} }
return zoneId;
} }
@override @override
@ -105,6 +106,7 @@ class CloudflareApi extends DnsProviderApi {
final String url = '/zones/$domainZoneId/dns_records'; final String url = '/zones/$domainZoneId/dns_records';
final Dio client = await getClient(); final Dio client = await getClient();
try {
final Response response = await client.get(url); final Response response = await client.get(url);
final List records = response.data['result'] ?? []; final List records = response.data['result'] ?? [];
@ -117,10 +119,13 @@ class CloudflareApi extends DnsProviderApi {
); );
} }
} }
await Future.wait(allDeleteFutures); await Future.wait(allDeleteFutures);
} catch (e) {
print(e);
} finally {
close(client); close(client);
} }
}
@override @override
Future<List<DnsRecord>> getDnsRecords({ Future<List<DnsRecord>> getDnsRecords({
@ -252,27 +257,38 @@ class CloudflareApi extends DnsProviderApi {
); );
final Dio client = await getClient(); final Dio client = await getClient();
try {
await client.post( await client.post(
url, url,
data: dkimRecord.toJson(), data: dkimRecord.toJson(),
); );
} catch (e) {
client.close(); print(e);
} finally {
close(client);
}
} }
@override @override
Future<List<String>> domainList() async { Future<List<String>> domainList() async {
final String url = '$rootAddress/zones'; final String url = '$rootAddress/zones';
final Dio client = await getClient(); List<String> domains = [];
final Dio client = await getClient();
try {
final Response response = await client.get( final Response response = await client.get(
url, url,
queryParameters: {'per_page': 50}, queryParameters: {'per_page': 50},
); );
domains = response.data['result']
close(client);
return response.data['result']
.map<String>((final el) => el['name'] as String) .map<String>((final el) => el['name'] as String)
.toList(); .toList();
} catch (e) {
print(e);
} finally {
close(client);
}
return domains;
} }
} }

View File

@ -23,7 +23,7 @@ abstract class DnsProviderApi extends ApiMap {
final String dkimRecordString, final String dkimRecordString,
final ServerDomain domain, final ServerDomain domain,
); );
Future<String> getZoneId(final String domain); Future<String?> getZoneId(final String domain);
Future<List<String>> domainList(); Future<List<String>> domainList();
Future<bool> isApiTokenValid(final String token); Future<bool> isApiTokenValid(final String token);

View File

@ -31,11 +31,12 @@ class DomainSetupCubit extends Cubit<DomainSetupState> {
emit(Loading(LoadingTypes.saving)); emit(Loading(LoadingTypes.saving));
final String zoneId = await serverInstallationCubit final String? zoneId = await serverInstallationCubit
.repository.dnsProviderApiFactory! .repository.dnsProviderApiFactory!
.getDnsProvider() .getDnsProvider()
.getZoneId(domainName); .getZoneId(domainName);
if (zoneId != null) {
final ServerDomain domain = ServerDomain( final ServerDomain domain = ServerDomain(
domainName: domainName, domainName: domainName,
zoneId: zoneId, zoneId: zoneId,
@ -46,6 +47,7 @@ class DomainSetupCubit extends Cubit<DomainSetupState> {
emit(DomainSet()); emit(DomainSet());
} }
} }
}
abstract class DomainSetupState {} abstract class DomainSetupState {}

View File

@ -169,12 +169,8 @@ class ServerInstallationRepository {
), ),
); );
try { final String? domainId = await dnsProviderApi.getZoneId(domain);
final String domainId = await dnsProviderApi.getZoneId(domain);
return domainId; return domainId;
} on DomainNotFoundException {
return null;
}
} }
Future<Map<String, bool>> isDnsAddressesMatch( Future<Map<String, bool>> isDnsAddressesMatch(