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
}