Finish DFX auth flow with the primary address for Electrum (bitcoin) (#1264)

Omar Hatem committed Jan 11, 2024 at 17:29 UTC 8d973cf919e4f8399c98c3b88be8f7ee9057538b
3 files changed +22 -15
cw_bitcoin/lib/electrum_wallet_addresses.dart
+3
@@ -62,6 +62,9 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
62 return walletInfo.type == WalletType.bitcoinCash ? toCashAddr(receiveAddress) : receiveAddress;
63 }
64
65 + @override
66 + String get primaryAddress => getAddress(index: 0, hd: mainHd);
67 +
68 @override
69 set address(String addr) => null;
70
cw_core/lib/wallet_addresses.dart
+2
@@ -10,6 +10,8 @@ abstract class WalletAddresses {
10
11 String get address;
12
13 + String? get primaryAddress => null;
14 +
15 set address(String address);
16
17 Map<String, String> addressesMap;
lib/buy/dfx/dfx_buy_provider.dart
+17 -15
@@ -66,8 +66,10 @@ class DFXBuyProvider extends BuyProvider {
66 }
67 }
68
69 + String get walletAddress =>
70 + wallet.walletAddresses.primaryAddress ?? wallet.walletAddresses.address;
71 +
72 Future<String> getSignMessage() async {
70 - final walletAddress = wallet.walletAddresses.address;
73 final uri = Uri.https(_baseUrl, _authPath, {'address': walletAddress});
74
75 var response = await http.get(uri, headers: {'accept': 'application/json'});
@@ -83,7 +85,6 @@ class DFXBuyProvider extends BuyProvider {
85
86 Future<String> signUp() async {
87 final signMessage = getSignature(await getSignMessage());
86 - final walletAddress = wallet.walletAddresses.address;
88
89 final requestBody = jsonEncode({
90 'wallet': walletName,
@@ -92,8 +93,11 @@ class DFXBuyProvider extends BuyProvider {
93 });
94
95 final uri = Uri.https(_baseUrl, _signUpPath);
95 - var response = await http.post(uri,
96 - headers: {'Content-Type': 'application/json'}, body: requestBody);
96 + var response = await http.post(
97 + uri,
98 + headers: {'Content-Type': 'application/json'},
99 + body: requestBody,
100 + );
101
102 if (response.statusCode == 201) {
103 final responseBody = jsonDecode(response.body);
@@ -103,14 +107,12 @@ class DFXBuyProvider extends BuyProvider {
107 final message = responseBody['message'] ?? 'Service unavailable in your country';
108 throw Exception(message);
109 } else {
106 - throw Exception(
107 - 'Failed to sign up. Status: ${response.statusCode} ${response.body}');
110 + throw Exception('Failed to sign up. Status: ${response.statusCode} ${response.body}');
111 }
112 }
113
114 Future<String> signIn() async {
115 final signMessage = getSignature(await getSignMessage());
113 - final walletAddress = wallet.walletAddresses.address;
116
117 final requestBody = jsonEncode({
118 'address': walletAddress,
@@ -118,8 +120,11 @@ class DFXBuyProvider extends BuyProvider {
120 });
121
122 final uri = Uri.https(_baseUrl, _signInPath);
121 - var response = await http.post(uri,
122 - headers: {'Content-Type': 'application/json'}, body: requestBody);
123 + var response = await http.post(
124 + uri,
125 + headers: {'Content-Type': 'application/json'},
126 + body: requestBody,
127 + );
128
129 if (response.statusCode == 201) {
130 final responseBody = jsonDecode(response.body);
@@ -129,8 +134,7 @@ class DFXBuyProvider extends BuyProvider {
134 final message = responseBody['message'] ?? 'Service unavailable in your country';
135 throw Exception(message);
136 } else {
132 - throw Exception(
133 - 'Failed to sign in. Status: ${response.statusCode} ${response.body}');
137 + throw Exception('Failed to sign in. Status: ${response.statusCode} ${response.body}');
138 }
139 }
140
@@ -142,8 +146,7 @@ class DFXBuyProvider extends BuyProvider {
146 case WalletType.litecoin:
147 case WalletType.bitcoin:
148 case WalletType.bitcoinCash:
145 - return wallet.signMessage(message,
146 - address: wallet.walletAddresses.address);
149 + return wallet.signMessage(message, address: walletAddress);
150 default:
151 throw Exception("WalletType is not available for DFX ${wallet.type}");
152 }
@@ -178,8 +181,7 @@ class DFXBuyProvider extends BuyProvider {
181
182 if (await canLaunchUrl(uri)) {
183 if (DeviceInfo.instance.isMobile) {
181 - Navigator.of(context)
182 - .pushNamed(Routes.webViewPage, arguments: [title, uri]);
184 + Navigator.of(context).pushNamed(Routes.webViewPage, arguments: [title, uri]);
185 } else {
186 await launchUrl(uri, mode: LaunchMode.externalApplication);
187 }