From 9e1753539f0161d97a41e7e31193d60cca1918e3 Mon Sep 17 00:00:00 2001 From: Godwin Asuquo Date: Wed, 2 Feb 2022 15:36:18 +0100 Subject: [PATCH] implement Digest Auth --- cw_core/lib/digest_auth.dart | 41 ++++++++++++++++++++++++++++++++++++ cw_core/lib/node.dart | 20 +++++++----------- 2 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 cw_core/lib/digest_auth.dart diff --git a/cw_core/lib/digest_auth.dart b/cw_core/lib/digest_auth.dart new file mode 100644 index 00000000..752ff077 --- /dev/null +++ b/cw_core/lib/digest_auth.dart @@ -0,0 +1,41 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:http/http.dart' as http; +import 'package:http/io_client.dart' as ioc; + +class DigestAuth{ + Futurerequest({ + String uri, + String login = "", + String password = "", + }) async { + final path = '/json_rpc'; + final rpcUri = Uri.http(uri, path); + final realm = 'monero-rpc'; + final postMap = { + 'jsonrpc': '2.0', + 'id': '0', + 'method': 'get_info' + }; + final authenticatingClient = HttpClient(); + + authenticatingClient.addCredentials( + rpcUri, + realm, + HttpClientDigestCredentials(login ?? "", password ?? ""), + ); + + final http.Client client = ioc.IOClient(authenticatingClient); + + final response = await client.post( + rpcUri, + headers: {'Content-Type': 'application/json'}, + body: json.encode(postMap), + ); + + client.close(); + + return response; + } +} \ No newline at end of file diff --git a/cw_core/lib/node.dart b/cw_core/lib/node.dart index 3dc87652..f7f24d89 100644 --- a/cw_core/lib/node.dart +++ b/cw_core/lib/node.dart @@ -1,5 +1,6 @@ import 'dart:io'; +import 'package:cw_core/digest_auth.dart'; import 'package:cw_core/keyable.dart'; import 'package:flutter/foundation.dart'; import 'dart:convert'; @@ -95,20 +96,15 @@ class Node extends HiveObject with Keyable { } Future requestMoneroNode() async { - try { - Map resBody; - final rpcUri = Uri.http(uri.authority, '/json_rpc'); - final headers = {'Content-type': 'application/json'}; - final body = - json.encode({'jsonrpc': '2.0', 'id': '0', 'method': 'get_info'}); - final response = - await http.post(rpcUri.toString(), headers: headers, body: body); - resBody = json.decode(response.body) as Map; - return !(resBody['result']['offline'] as bool); - } catch (_) { + final digestAuth = DigestAuth(); + try { + final response = await digestAuth.request(uri: uri.authority, login: login, password: password); + final resBody = json.decode(response.body) as Map; + return !(resBody['result']['offline'] as bool); + } catch (_) { return false; } - } +} Future requestElectrumServer() async { try {