mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2025-01-24 19:25:52 +00:00
WIP monero test onion node
works sometimes but fails most of the time, ffs
This commit is contained in:
parent
c2d0812025
commit
fd3bac27eb
1 changed files with 70 additions and 24 deletions
|
@ -13,6 +13,7 @@ import 'dart:io';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:socks5_proxy/socks.dart';
|
import 'package:socks5_proxy/socks.dart';
|
||||||
|
import 'package:tor_ffi_plugin/socks_socket.dart';
|
||||||
|
|
||||||
import '../widgets/desktop/primary_button.dart';
|
import '../widgets/desktop/primary_button.dart';
|
||||||
import '../widgets/desktop/secondary_button.dart';
|
import '../widgets/desktop/secondary_button.dart';
|
||||||
|
@ -64,34 +65,79 @@ Future<MoneroNodeConnectionResponse> testMoneroNodeConnection(
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
final request = await httpClient.postUrl(uri);
|
if (!uri.host.endsWith('.onion')) {
|
||||||
|
final request = await httpClient.postUrl(uri);
|
||||||
|
|
||||||
final body = utf8.encode(
|
final body = utf8.encode(
|
||||||
jsonEncode({
|
jsonEncode({
|
||||||
"jsonrpc": "2.0",
|
"jsonrpc": "2.0",
|
||||||
"id": "0",
|
"id": "0",
|
||||||
"method": "get_info",
|
"method": "get_info",
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
request.headers.add(
|
request.headers.add(
|
||||||
'Content-Length',
|
'Content-Length',
|
||||||
body.length.toString(),
|
body.length.toString(),
|
||||||
preserveHeaderCase: true,
|
preserveHeaderCase: true,
|
||||||
);
|
);
|
||||||
request.headers.set(
|
request.headers.set(
|
||||||
'Content-Type',
|
'Content-Type',
|
||||||
'application/json',
|
'application/json',
|
||||||
preserveHeaderCase: true,
|
preserveHeaderCase: true,
|
||||||
);
|
);
|
||||||
|
|
||||||
request.add(body);
|
request.add(body);
|
||||||
|
|
||||||
final response = await request.close();
|
final response = await request.close();
|
||||||
final result = await response.transform(utf8.decoder).join();
|
final result = await response.transform(utf8.decoder).join();
|
||||||
// TODO: json decoded without error so assume connection exists?
|
// TODO: json decoded without error so assume connection exists?
|
||||||
// or we can check for certain values in the response to decide
|
// or we can check for certain values in the response to decide
|
||||||
return MoneroNodeConnectionResponse(null, null, null, true);
|
return MoneroNodeConnectionResponse(null, null, null, true);
|
||||||
|
} else {
|
||||||
|
// If the URL ends in .onion, we can't use an httpClient to connect to it.
|
||||||
|
//
|
||||||
|
// The SOCKSSocket class from the tor_ffi_plugin package can be used to
|
||||||
|
// connect to .onion addresses. We'll do the same things as above but
|
||||||
|
// with SOCKSSocket instead of httpClient.
|
||||||
|
final socket = await SOCKSSocket.create(
|
||||||
|
proxyHost: proxyInfo!.host.address,
|
||||||
|
proxyPort: proxyInfo.port,
|
||||||
|
sslEnabled: false,
|
||||||
|
);
|
||||||
|
await socket.connect();
|
||||||
|
await socket.connectTo(uri.host, uri.port);
|
||||||
|
|
||||||
|
final body = utf8.encode(
|
||||||
|
jsonEncode({
|
||||||
|
"jsonrpc": "2.0",
|
||||||
|
"id": "0",
|
||||||
|
"method": "get_info",
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
// Write the request body to the socket.
|
||||||
|
socket.write(body);
|
||||||
|
|
||||||
|
// Read the response.
|
||||||
|
final response = await socket.inputStream.first;
|
||||||
|
final result = utf8.decode(response);
|
||||||
|
|
||||||
|
// Close the socket.
|
||||||
|
await socket.close();
|
||||||
|
return MoneroNodeConnectionResponse(null, null, null, true);
|
||||||
|
|
||||||
|
// Parse the response.
|
||||||
|
//
|
||||||
|
// This is commented because any issues should throw.
|
||||||
|
// final Map<String, dynamic> jsonResponse = jsonDecode(result);
|
||||||
|
// print(jsonResponse);
|
||||||
|
// if (jsonResponse.containsKey('result')) {
|
||||||
|
// return MoneroNodeConnectionResponse(null, null, null, true);
|
||||||
|
// } else {
|
||||||
|
// return MoneroNodeConnectionResponse(null, null, null, false);
|
||||||
|
// }
|
||||||
|
}
|
||||||
} catch (e, s) {
|
} catch (e, s) {
|
||||||
if (badCertResponse != null) {
|
if (badCertResponse != null) {
|
||||||
return badCertResponse!;
|
return badCertResponse!;
|
||||||
|
|
Loading…
Reference in a new issue