fix openAlias address resolv

This commit is contained in:
Serhii 2023-01-31 21:39:08 +02:00
parent 81f59cacd9
commit ef01554fdb
23 changed files with 79 additions and 99 deletions

View file

@ -1,5 +1,4 @@
import 'package:basic_utils/basic_utils.dart';
import 'package:cw_core/wallet_type.dart';
class OpenaliasRecord {
OpenaliasRecord({
@ -22,69 +21,68 @@ class OpenaliasRecord {
return formattedName;
}
static Future<OpenaliasRecord> fetchAddressAndName({
static Future<List<RRecord>?> lookupOpenAliasRecord(String name) async {
try {
final txtRecord = await DnsUtils.lookupRecord(name, RRecordType.TXT, dnssec: true);
return txtRecord;
} catch (e) {
print("${e.toString()}");
return null;
}
}
static OpenaliasRecord fetchAddressAndName({
required String formattedName,
required String ticker,
}) async {
required List<RRecord> txtRecord,
}) {
String address = formattedName;
String name = formattedName;
String note = '';
if (formattedName.contains(".")) {
try {
final txtRecord = await DnsUtils.lookupRecord(
formattedName, RRecordType.TXT,
dnssec: true);
for (RRecord element in txtRecord) {
String record = element.data;
if (txtRecord != null) {
for (RRecord element in txtRecord) {
String record = element.data;
if (record.contains("oa1:$ticker") && record.contains("recipient_address")) {
record = record.replaceAll('\"', "");
if (record.contains("oa1:$ticker") &&
record.contains("recipient_address")) {
record = record.replaceAll('\"', "");
final dataList = record.split(";");
final dataList = record.split(";");
address = dataList
.where((item) => (item.contains("recipient_address")))
.toString()
.replaceAll("oa1:$ticker recipient_address=", "")
.replaceAll("(", "")
.replaceAll(")", "")
.trim();
address = dataList
.where((item) => (item.contains("recipient_address")))
.toString()
.replaceAll("oa1:$ticker recipient_address=", "")
.replaceAll("(", "")
.replaceAll(")", "")
.trim();
final recipientName = dataList
.where((item) => (item.contains("recipient_name")))
.toString()
.replaceAll("(", "")
.replaceAll(")", "")
.trim();
final recipientName = dataList
.where((item) => (item.contains("recipient_name")))
.toString()
.replaceAll("(", "")
.replaceAll(")", "")
.trim();
if (recipientName.isNotEmpty) {
name = recipientName.replaceAll("recipient_name=", "");
}
final description = dataList
.where((item) => (item.contains("tx_description")))
.toString()
.replaceAll("(", "")
.replaceAll(")", "")
.trim();
if (description.isNotEmpty) {
note = description.replaceAll("tx_description=", "");
}
break;
}
}
if (recipientName.isNotEmpty) {
name = recipientName.replaceAll("recipient_name=", "");
}
} catch (e) {
print("${e.toString()}");
}
}
return OpenaliasRecord(address: address, name: name, description: note);
final description = dataList
.where((item) => (item.contains("tx_description")))
.toString()
.replaceAll("(", "")
.replaceAll(")", "")
.trim();
if (description.isNotEmpty) {
note = description.replaceAll("tx_description=", "");
}
break;
}
}
return OpenaliasRecord(address: address, name: name, description: note);
}
}

View file

@ -11,21 +11,22 @@ import 'package:cake_wallet/entities/fio_address_provider.dart';
class AddressResolver {
AddressResolver({required this.yatService, required this.walletType});
final YatService yatService;
final WalletType walletType;
static const unstoppableDomains = [
'crypto',
'zil',
'x',
'coin',
'wallet',
'bitcoin',
'888',
'nft',
'dao',
'blockchain'
];
'crypto',
'zil',
'x',
'coin',
'wallet',
'bitcoin',
'888',
'nft',
'dao',
'blockchain'
];
static String? extractAddressByType({required String raw, required CryptoCurrency type}) {
final addressPattern = AddressValidator.getAddressFromStringPattern(type);
@ -43,18 +44,18 @@ class AddressResolver {
if (text.startsWith('@') && !text.substring(1).contains('@')) {
final formattedName = text.substring(1);
final twitterUser = await TwitterApi.lookupUserByName(userName: formattedName);
final address = extractAddressByType(raw: twitterUser.description ?? '', type: CryptoCurrency.fromString(ticker));
final address = extractAddressByType(
raw: twitterUser.description ?? '', type: CryptoCurrency.fromString(ticker));
if (address != null) {
return ParsedAddress.fetchTwitterAddress(address: address, name: '$text (Twitter)');
return ParsedAddress.fetchTwitterAddress(address: address, name: text);
}
}
if (!text.startsWith('@') && text.contains('@') && !text.contains('.')) {
final bool isFioRegistered = await FioAddressProvider.checkAvail(text);
if (isFioRegistered) {
final address = await FioAddressProvider.getPubAddress(text, ticker);
return ParsedAddress.fetchFioAddress(address: address, name: '$text (FIO)');
}
return ParsedAddress.fetchFioAddress(address: address, name: text);
}
}
if (text.hasOnlyEmojis) {
if (walletType != WalletType.haven) {
@ -75,10 +76,14 @@ class AddressResolver {
return ParsedAddress.fetchUnstoppableDomainAddress(address: address, name: text);
}
final record = await OpenaliasRecord.fetchAddressAndName(
formattedName: formattedName, ticker: ticker);
return ParsedAddress.fetchOpenAliasAddress(record: record, name: '$text (OpenAlias)');
if (formattedName.contains(".")) {
final txtRecord = await OpenaliasRecord.lookupOpenAliasRecord(formattedName);
if (txtRecord != null) {
final record = await OpenaliasRecord.fetchAddressAndName(
formattedName: formattedName, ticker: ticker, txtRecord: txtRecord);
return ParsedAddress.fetchOpenAliasAddress(record: record, name: text);
}
}
} catch (e) {
print(e.toString());
}

View file

@ -40,11 +40,7 @@ class ParsedAddress {
);
}
factory ParsedAddress.fetchOpenAliasAddress({OpenaliasRecord? record, required String name}){
final formattedName = OpenaliasRecord.formatDomainName(name);
if (record == null || record.address.contains(formattedName)) {
return ParsedAddress(addresses: [name]);
}
factory ParsedAddress.fetchOpenAliasAddress({required OpenaliasRecord record, required String name}){
return ParsedAddress(
addresses: [record.address],
name: record.name,

View file

@ -20,17 +20,17 @@ Future<String> extractAddressFromParsed(
break;
case ParseFrom.openAlias:
title = S.of(context).address_detected;
content = S.of(context).openalias_alert_content(parsedAddress.name);
content = S.of(context).openalias_alert_content('${parsedAddress.name} (OpenAlias)');
address = parsedAddress.addresses.first;
break;
case ParseFrom.fio:
title = S.of(context).address_detected;
content = S.of(context).openalias_alert_content(parsedAddress.name);
content = S.of(context).openalias_alert_content('${parsedAddress.name} (FIO)');
address = parsedAddress.addresses.first;
break;
case ParseFrom.twitter:
title = S.of(context).address_detected;
content = S.of(context).openalias_alert_content(parsedAddress.name);
content = S.of(context).openalias_alert_content('${parsedAddress.name} (Twitter)');
address = parsedAddress.addresses.first;
break;
case ParseFrom.yatRecord:

View file

@ -398,7 +398,6 @@
"biometric_auth_reason":"امسح بصمة إصبعك للمصادقة",
"version":"الإصدار ${currentVersion}",
"openalias_alert_title":"تم ايجاد العنوان",
"openalias_alert_content":"سوف ترسل الأموال إلى\n${recipient_name}",
"card_address":"العنوان:",

View file

@ -398,7 +398,6 @@
"biometric_auth_reason" : "Scannen Sie Ihren Fingerabdruck zur Authentifizierung",
"version" : "Version ${currentVersion}",
"openalias_alert_title" : "Adresse Erkannt",
"openalias_alert_content" : "Sie senden Geld an\n${recipient_name}",
"card_address" : "Adresse:",

View file

@ -398,7 +398,6 @@
"biometric_auth_reason" : "Scan your fingerprint to authenticate",
"version" : "Version ${currentVersion}",
"openalias_alert_title" : "Address Detected",
"openalias_alert_content" : "You will be sending funds to\n${recipient_name}",
"card_address" : "Address:",

View file

@ -398,7 +398,6 @@
"biometric_auth_reason" : "Escanee su huella digital para autenticar",
"version" : "Versión ${currentVersion}",
"openalias_alert_title" : "Destinatario detectado",
"openalias_alert_content" : "Enviará fondos a\n${recipient_name}",
"card_address" : "Dirección:",

View file

@ -396,7 +396,6 @@
"biometric_auth_reason" : "Scannez votre empreinte digitale pour vous authentifier",
"version" : "Version ${currentVersion}",
"openalias_alert_title" : "Adresse Détectée",
"openalias_alert_content" : "Vous allez envoyer des fonds à\n${recipient_name}",
"card_address" : "Adresse :",

View file

@ -398,7 +398,6 @@
"biometric_auth_reason" : "प्रमाणित करने के लिए अपने फ़िंगरप्रिंट को स्कैन करें",
"version" : "संस्करण ${currentVersion}",
"openalias_alert_title" : "पता मिला",
"openalias_alert_content" : "आपको धनराशि भेजी जाएगी\n${recipient_name}",
"card_address" : "पता:",

View file

@ -398,7 +398,6 @@
"biometric_auth_reason" : "Skenirajte svoj otisak prsta za autentifikaciju",
"version" : "Verzija ${currentVersion}",
"openalias_alert_title" : "Otkrivena je adresa",
"openalias_alert_content" : "Poslat ćete sredstva primatelju\n${recipient_name}",
"card_address" : "Adresa:",

View file

@ -398,7 +398,6 @@
"biometric_auth_reason" : "Scansiona la tua impronta per autenticarti",
"version" : "Versione ${currentVersion}",
"openalias_alert_title" : "Indirizzo Rilevato",
"openalias_alert_content" : "Invierai i tuoi fondi a\n${recipient_name}",
"card_address" : "Indirizzo:",

View file

@ -398,7 +398,6 @@
"biometric_auth_reason" : "प指紋をスキャンして認証する",
"version" : "バージョン ${currentVersion}",
"openalias_alert_title" : "アドレスが検出されました",
"openalias_alert_content" : "に送金します\n${recipient_name}",
"card_address" : "住所:",

View file

@ -398,7 +398,6 @@
"biometric_auth_reason" : "지문을 스캔하여 인증",
"version" : "버전 ${currentVersion}",
"openalias_alert_title" : "주소 감지됨",
"openalias_alert_content" : "당신은에 자금을 보낼 것입니다\n${recipient_name}",
"card_address" : "주소:",

View file

@ -398,7 +398,6 @@
"biometric_auth_reason" : "စစ်မှန်ကြောင်းအထောက်အထားပြရန် သင့်လက်ဗွေကို စကန်ဖတ်ပါ။",
"version" : "ဗားရှင်း ${currentVersion}",
"openalias_alert_title" : "လိပ်စာကို ရှာတွေ့သည်။",
"openalias_alert_content" : "သင်သည် \n${recipient_name} သို့ ရန်ပုံငွေများ ပေးပို့ပါမည်",
"card_address" : "လိပ်စာ-",

View file

@ -398,7 +398,6 @@
"biometric_auth_reason" : "Scan uw vingerafdruk om te verifiëren",
"version" : "Versie ${currentVersion}",
"openalias_alert_title" : "Adres Gedetecteerd",
"openalias_alert_content" : "U stuurt geld naar\n${recipient_name}",
"card_address" : "Adres:",

View file

@ -398,7 +398,6 @@
"biometric_auth_reason" : "Zeskanuj swój odcisk palca, aby uwierzytelnić",
"version" : "Wersja ${currentVersion}",
"openalias_alert_title" : "Wykryto Adres",
"openalias_alert_content" : "Wysyłasz środki na\n${recipient_name}",
"card_address" : "Adres:",

View file

@ -398,7 +398,6 @@
"biometric_auth_reason" : "Digitalize sua impressão digital para autenticar",
"version" : "Versão ${currentVersion}",
"openalias_alert_title" : "Endereço Detectado",
"openalias_alert_content" : "Você enviará fundos para\n${recipient_name}",
"card_address" : "Endereço:",

View file

@ -398,7 +398,6 @@
"biometric_auth_reason" : "Отсканируйте свой отпечаток пальца для аутентификации",
"version" : "Версия ${currentVersion}",
"openalias_alert_title" : "Адрес Обнаружен",
"openalias_alert_content" : "Вы будете отправлять средства\n${recipient_name}",
"card_address" : "Адрес:",

View file

@ -396,7 +396,6 @@
"biometric_auth_reason" : "สแกนลายนิ้วมือของคุณเพื่อยืนยันตัวตน",
"version" : "เวอร์ชัน ${currentVersion}",
"openalias_alert_title" : "พบที่อยู่",
"openalias_alert_content" : "คุณกำลังจะส่งเงินไปยัง\n${recipient_name}",
"card_address" : "ที่อยู่:",

View file

@ -398,7 +398,6 @@
"biometric_auth_reason" : "Kimlik doğrulaması için parmak izini okutun",
"version" : "Sürüm ${currentVersion}",
"openalias_alert_title" : "Adres tespit edildi",
"openalias_alert_content" : "Parayı buraya gönderceksin:\n${recipient_name}",
"card_address" : "Adres:",

View file

@ -397,7 +397,6 @@
"biometric_auth_reason" : "Відскануйте свій відбиток пальця для аутентифікації",
"version" : "Версія ${currentVersion}",
"openalias_alert_title" : "Виявлено адресу",
"openalias_alert_content" : "Ви будете відправляти кошти\n${recipient_name}",
"card_address" : "Адреса:",

View file

@ -398,7 +398,6 @@
"biometric_auth_reason" : "扫描指纹进行身份认证",
"version" : "版本 ${currentVersion}",
"openalias_alert_title" : "检测到地址",
"openalias_alert_content" : "您将汇款至\n${recipient_name}",
"card_address" : "地址:",