unstoppable domains fix (#1600)
cyan committed
Aug 13, 2024 at 14:15 UTC
29492998216ec65a5b986a8ca168c97a2b68f727
7 files changed
+16
-123
android/app/build.gradle
-1
@@ -91,5 +91,4 @@ dependencies {
91
testImplementation 'junit:junit:4.12'
92
androidTestImplementation 'androidx.test:runner:1.3.0'
93
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
94
- implementation 'com.unstoppabledomains:resolution:5.0.0'
94
}
android/app/src/main/java/com/cakewallet/cake_wallet/MainActivity.java
-29
@@ -20,14 +20,10 @@ import android.net.Uri;
20
import android.os.PowerManager;
21
import android.provider.Settings;
22
23
-import com.unstoppabledomains.resolution.DomainResolution;
24
-import com.unstoppabledomains.resolution.Resolution;
25
-
23
import java.security.SecureRandom;
24
25
public class MainActivity extends FlutterFragmentActivity {
26
final String UTILS_CHANNEL = "com.cake_wallet/native_utils";
30
- final int UNSTOPPABLE_DOMAIN_MIN_VERSION_SDK = 24;
27
boolean isAppSecure = false;
28
29
@Override
@@ -53,14 +49,6 @@ public class MainActivity extends FlutterFragmentActivity {
49
random.nextBytes(bytes);
50
handler.post(() -> result.success(bytes));
51
break;
56
- case "getUnstoppableDomainAddress":
57
- int version = Build.VERSION.SDK_INT;
58
- if (version >= UNSTOPPABLE_DOMAIN_MIN_VERSION_SDK) {
59
- getUnstoppableDomainAddress(call, result);
60
- } else {
61
- handler.post(() -> result.success(""));
62
- }
63
- break;
52
case "setIsAppSecure":
53
isAppSecure = call.argument("isAppSecure");
54
if (isAppSecure) {
@@ -85,23 +73,6 @@ public class MainActivity extends FlutterFragmentActivity {
73
}
74
}
75
88
- private void getUnstoppableDomainAddress(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
89
- DomainResolution resolution = new Resolution();
90
- Handler handler = new Handler(Looper.getMainLooper());
91
- String domain = call.argument("domain");
92
- String ticker = call.argument("ticker");
93
-
94
- AsyncTask.execute(() -> {
95
- try {
96
- String address = resolution.getAddress(domain, ticker);
97
- handler.post(() -> result.success(address));
98
- } catch (Exception e) {
99
- System.out.println("Expected Address, but got " + e.getMessage());
100
- handler.post(() -> result.success(""));
101
- }
102
- });
103
- }
104
-
76
private void disableBatteryOptimization() {
77
String packageName = getPackageName();
78
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
android/app/src/main/java/com/cakewallet/haven/MainActivity.java
-29
@@ -19,14 +19,10 @@ import android.net.Uri;
19
import android.os.PowerManager;
20
import android.provider.Settings;
21
22
-import com.unstoppabledomains.resolution.DomainResolution;
23
-import com.unstoppabledomains.resolution.Resolution;
24
-
22
import java.security.SecureRandom;
23
24
public class MainActivity extends FlutterFragmentActivity {
25
final String UTILS_CHANNEL = "com.cake_wallet/native_utils";
29
- final int UNSTOPPABLE_DOMAIN_MIN_VERSION_SDK = 24;
26
27
@Override
28
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
@@ -51,14 +47,6 @@ public class MainActivity extends FlutterFragmentActivity {
47
random.nextBytes(bytes);
48
handler.post(() -> result.success(bytes));
49
break;
54
- case "getUnstoppableDomainAddress":
55
- int version = Build.VERSION.SDK_INT;
56
- if (version >= UNSTOPPABLE_DOMAIN_MIN_VERSION_SDK) {
57
- getUnstoppableDomainAddress(call, result);
58
- } else {
59
- handler.post(() -> result.success(""));
60
- }
61
- break;
50
case "disableBatteryOptimization":
51
disableBatteryOptimization();
52
handler.post(() -> result.success(null));
@@ -75,23 +63,6 @@ public class MainActivity extends FlutterFragmentActivity {
63
}
64
}
65
78
- private void getUnstoppableDomainAddress(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
79
- DomainResolution resolution = new Resolution();
80
- Handler handler = new Handler(Looper.getMainLooper());
81
- String domain = call.argument("domain");
82
- String ticker = call.argument("ticker");
83
-
84
- AsyncTask.execute(() -> {
85
- try {
86
- String address = resolution.getAddress(domain, ticker);
87
- handler.post(() -> result.success(address));
88
- } catch (Exception e) {
89
- System.out.println("Expected Address, but got " + e.getMessage());
90
- handler.post(() -> result.success(""));
91
- }
92
- });
93
- }
94
-
66
private void disableBatteryOptimization() {
67
String packageName = getPackageName();
68
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
android/app/src/main/java/com/monero/app/MainActivity.java
-29
@@ -19,14 +19,10 @@ import android.net.Uri;
19
import android.os.PowerManager;
20
import android.provider.Settings;
21
22
-import com.unstoppabledomains.resolution.DomainResolution;
23
-import com.unstoppabledomains.resolution.Resolution;
24
-
22
import java.security.SecureRandom;
23
24
public class MainActivity extends FlutterFragmentActivity {
25
final String UTILS_CHANNEL = "com.cake_wallet/native_utils";
29
- final int UNSTOPPABLE_DOMAIN_MIN_VERSION_SDK = 24;
26
boolean isAppSecure = false;
27
28
@Override
@@ -52,14 +48,6 @@ public class MainActivity extends FlutterFragmentActivity {
48
random.nextBytes(bytes);
49
handler.post(() -> result.success(bytes));
50
break;
55
- case "getUnstoppableDomainAddress":
56
- int version = Build.VERSION.SDK_INT;
57
- if (version >= UNSTOPPABLE_DOMAIN_MIN_VERSION_SDK) {
58
- getUnstoppableDomainAddress(call, result);
59
- } else {
60
- handler.post(() -> result.success(""));
61
- }
62
- break;
51
case "setIsAppSecure":
52
isAppSecure = call.argument("isAppSecure");
53
if (isAppSecure) {
@@ -84,23 +72,6 @@ public class MainActivity extends FlutterFragmentActivity {
72
}
73
}
74
87
- private void getUnstoppableDomainAddress(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
88
- DomainResolution resolution = new Resolution();
89
- Handler handler = new Handler(Looper.getMainLooper());
90
- String domain = call.argument("domain");
91
- String ticker = call.argument("ticker");
92
-
93
- AsyncTask.execute(() -> {
94
- try {
95
- String address = resolution.getAddress(domain, ticker);
96
- handler.post(() -> result.success(address));
97
- } catch (Exception e) {
98
- System.out.println("Expected Address, but got " + e.getMessage());
99
- handler.post(() -> result.success(""));
100
- }
101
- });
102
- }
103
-
75
private void disableBatteryOptimization() {
76
String packageName = getPackageName();
77
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
ios/Podfile
-1
@@ -36,7 +36,6 @@ target 'Runner' do
36
37
# Cake Wallet (Legacy)
38
pod 'CryptoSwift'
39
- pod 'UnstoppableDomainsResolution', '~> 4.0.0'
39
end
40
41
post_install do |installer|
ios/Runner/AppDelegate.swift
+1
-22
@@ -1,6 +1,5 @@
1
import UIKit
2
import Flutter
3
-import UnstoppableDomainsResolution
3
import workmanager
4
5
@UIApplicationMain
@@ -87,27 +86,7 @@ import workmanager
86
}
87
88
result(secRandom(count: count))
90
- case "getUnstoppableDomainAddress":
91
- guard let args = call.arguments as? Dictionary<String, String>,
92
- let domain = args["domain"],
93
- let ticker = args["ticker"],
94
- let resolution = self?.resolution else {
95
- result(nil)
96
- return
97
- }
98
-
99
- resolution.addr(domain: domain, ticker: ticker) { addrResult in
100
- var address : String = ""
101
-
102
- switch addrResult {
103
- case .success(let returnValue):
104
- address = returnValue
105
- case .failure(let error):
106
- print("Expected Address, but got \(error)")
107
- }
108
-
109
- result(address)
110
- }
89
+
90
case "setIsAppSecure":
91
guard let args = call.arguments as? Dictionary<String, Bool>,
92
let isAppSecure = args["isAppSecure"] else {
lib/entities/unstoppable_domain_address.dart
+15
-12
@@ -1,5 +1,7 @@
1
-import 'package:cake_wallet/utils/device_info.dart';
1
+import 'dart:convert';
2
+
3
import 'package:flutter/services.dart';
4
+import 'package:http/http.dart' as http;
5
6
const channel = MethodChannel('com.cake_wallet/native_utils');
7
@@ -7,18 +9,19 @@ Future<String> fetchUnstoppableDomainAddress(String domain, String ticker) async
9
var address = '';
10
11
try {
10
- if (DeviceInfo.instance.isMobile) {
11
- address = await channel.invokeMethod<String>(
12
- 'getUnstoppableDomainAddress',
13
- <String, String> {
14
- 'domain' : domain,
15
- 'ticker' : ticker
16
- }
17
- ) ?? '';
18
- } else {
19
- // TODO: Integrate with Unstoppable domains resolution API
20
- return address;
12
+ final uri = Uri.parse("https://api.unstoppabledomains.com/profile/public/${Uri.encodeQueryComponent(domain)}?fields=records");
13
+ final jsonString = await http.read(uri);
14
+ final jsonParsed = json.decode(jsonString) as Map<String, dynamic>;
15
+ if (jsonParsed["records"] == null) {
16
+ throw Exception(".records response from $uri is empty");
17
+ };
18
+ final records = jsonParsed["records"] as Map<String, dynamic>;
19
+ final key = "crypto.${ticker.toUpperCase()}.address";
20
+ if (records[key] == null) {
21
+ throw Exception(".records.${key} response from $uri is empty");
22
}
23
+
24
+ return records[key] as String? ?? '';
25
} catch (e) {
26
print('Unstoppable domain error: ${e.toString()}');
27
address = '';