cake_wallet/lib/entities/openalias_record.dart

89 lines
2.2 KiB
Dart
Raw Permalink Normal View History

import 'package:basic_utils/basic_utils.dart';
class OpenaliasRecord {
2022-01-18 07:46:13 +00:00
OpenaliasRecord({
2022-10-12 17:09:57 +00:00
required this.address,
required this.name,
required this.description,
2022-01-18 07:46:13 +00:00
});
final String name;
final String address;
2022-01-18 07:46:13 +00:00
final String description;
static String formatDomainName(String name) {
String formattedName = name;
if (name.contains("@")) {
formattedName = name.replaceAll("@", ".");
}
return formattedName;
}
2023-01-31 19:39:08 +00:00
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({
2022-10-12 17:09:57 +00:00
required String formattedName,
required String ticker,
2023-01-31 19:39:08 +00:00
required List<RRecord> txtRecord,
}) {
String address = '';
String name = formattedName;
2022-01-18 07:46:13 +00:00
String note = '';
2023-01-31 19:39:08 +00:00
for (RRecord element in txtRecord) {
String record = element.data;
if (record.contains("oa1:$ticker") && record.contains("recipient_address")) {
record = record.replaceAll('\"', "");
final dataList = record.split(";");
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();
if (recipientName.isNotEmpty) {
name = recipientName.replaceAll("recipient_name=", "");
}
2023-01-31 19:39:08 +00:00
final description = dataList
.where((item) => (item.contains("tx_description")))
.toString()
.replaceAll("(", "")
.replaceAll(")", "")
.trim();
if (description.isNotEmpty) {
note = description.replaceAll("tx_description=", "");
}
break;
}
}
2023-01-31 19:39:08 +00:00
return OpenaliasRecord(address: address, name: name, description: note);
}
}