From 2b30136def4977b6d9537089ebd5d4ff7c03d986 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Sun, 28 Jan 2024 09:18:36 +0400 Subject: [PATCH] fix(dns): Make sure that we notice domain ownership lost - https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/390 --- assets/translations/en.json | 5 +++-- .../cubit/dns_records/dns_records_cubit.dart | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/assets/translations/en.json b/assets/translations/en.json index 57bd579b..172fce4e 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -162,7 +162,8 @@ "services_subtitle": "Type “A” records required for each service.", "email_title": "Email", "email_subtitle": "Records necessary for secure email exchange.", - "update_list": "Update list" + "update_list": "Update list", + "domain_validation_failure": "We can't reach your domain!" }, "backup": { "card_title": "Backup", @@ -633,4 +634,4 @@ "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/lib/logic/cubit/dns_records/dns_records_cubit.dart b/lib/logic/cubit/dns_records/dns_records_cubit.dart index 539f36a1..d18d7af3 100644 --- a/lib/logic/cubit/dns_records/dns_records_cubit.dart +++ b/lib/logic/cubit/dns_records/dns_records_cubit.dart @@ -1,4 +1,6 @@ import 'package:cubit_form/cubit_form.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/logic/api_maps/rest_maps/dns_providers/desired_dns_record.dart'; import 'package:selfprivacy/logic/cubit/app_config_dependent/authentication_dependend_cubit.dart'; import 'package:selfprivacy/logic/models/hive/server_domain.dart'; @@ -45,10 +47,11 @@ class DnsRecordsCubit domain, extractDkimRecord(allDnsRecords)?.content ?? '', allDnsRecords, + ipAddress, ); if (!foundRecords.success || foundRecords.data.isEmpty) { - emit(const DnsRecordsState()); + emit(const DnsRecordsState(dnsState: DnsRecordsStatus.error)); return; } @@ -72,7 +75,19 @@ class DnsRecordsCubit final ServerDomain domain, final String dkimPublicKey, final List pendingDnsRecords, + final String ip4, ) async { + final matchMap = await validateDnsMatch(domain.domainName, ['api'], ip4); + if (matchMap.values.any((final status) => status != DnsRecordStatus.ok)) { + getIt().showSnackBar( + 'domain.domain_validation_failure'.tr(), + ); + return GenericResult( + success: false, + data: [], + ); + } + final result = await ProvidersController.currentDnsProvider! .getDnsRecords(domain: domain); if (result.data.isEmpty || !result.success) {