mirror of
https://github.com/jwinterm/grin-wallet.git
synced 2026-10-17 15:21:39 +02:00
http: provide proxy on node client creation (#738)
This commit is contained in:
@@ -200,9 +200,10 @@ impl HttpSlateSender {
|
|||||||
let client = if !self.use_socks {
|
let client = if !self.use_socks {
|
||||||
Client::new()
|
Client::new()
|
||||||
} else {
|
} else {
|
||||||
Client::with_socks_proxy(
|
Client::with_proxy(
|
||||||
self.socks_proxy_addr
|
self.socks_proxy_addr
|
||||||
.ok_or_else(|| ClientError::Internal("No socks proxy address set".into()))?,
|
.ok_or_else(|| ClientError::Internal("No socks proxy address set".into()))?,
|
||||||
|
"socks5h://",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
.map_err(|_| ClientError::Internal("Unable to create http client".into()))?;
|
.map_err(|_| ClientError::Internal("Unable to create http client".into()))?;
|
||||||
|
|||||||
@@ -65,11 +65,11 @@ impl Client {
|
|||||||
Self::build(None)
|
Self::build(None)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_socks_proxy(socks_proxy_addr: SocketAddr) -> Result<Self, Error> {
|
pub fn with_proxy(socks_proxy_addr: SocketAddr, scheme: &'static str) -> Result<Self, Error> {
|
||||||
Self::build(Some(socks_proxy_addr))
|
Self::build(Some((socks_proxy_addr, scheme)))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build(socks_proxy_addr: Option<SocketAddr>) -> Result<Self, Error> {
|
fn build(proxy: Option<(SocketAddr, &str)>) -> Result<Self, Error> {
|
||||||
let mut headers = HeaderMap::new();
|
let mut headers = HeaderMap::new();
|
||||||
headers.insert(USER_AGENT, HeaderValue::from_static("grin-client"));
|
headers.insert(USER_AGENT, HeaderValue::from_static("grin-client"));
|
||||||
headers.insert(ACCEPT, HeaderValue::from_static("application/json"));
|
headers.insert(ACCEPT, HeaderValue::from_static("application/json"));
|
||||||
@@ -80,8 +80,9 @@ impl Client {
|
|||||||
.use_rustls_tls()
|
.use_rustls_tls()
|
||||||
.default_headers(headers);
|
.default_headers(headers);
|
||||||
|
|
||||||
if let Some(s) = socks_proxy_addr {
|
if let Some(p) = proxy {
|
||||||
let proxy = Proxy::all(&format!("socks5h://{}:{}", s.ip(), s.port()))
|
let (addr, scheme) = p;
|
||||||
|
let proxy = Proxy::all(&format!("{}{}:{}", scheme, addr.ip(), addr.port()))
|
||||||
.map_err(|e| Error::Internal(format!("Unable to create proxy: {}", e)))?;
|
.map_err(|e| Error::Internal(format!("Unable to create proxy: {}", e)))?;
|
||||||
builder = builder.proxy(proxy);
|
builder = builder.proxy(proxy);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,17 +15,17 @@
|
|||||||
//! Client functions, implementations of the NodeClient trait
|
//! Client functions, implementations of the NodeClient trait
|
||||||
|
|
||||||
use crate::api::{self, LocatedTxKernel, OutputListing, OutputPrintable};
|
use crate::api::{self, LocatedTxKernel, OutputListing, OutputPrintable};
|
||||||
|
use crate::client_utils::{Client, RUNTIME};
|
||||||
use crate::core::core::{Transaction, TxKernel};
|
use crate::core::core::{Transaction, TxKernel};
|
||||||
|
use crate::libwallet;
|
||||||
use crate::libwallet::{NodeClient, NodeVersionInfo};
|
use crate::libwallet::{NodeClient, NodeVersionInfo};
|
||||||
|
use crate::util::secp::pedersen;
|
||||||
|
use crate::util::ToHex;
|
||||||
use futures::stream::FuturesUnordered;
|
use futures::stream::FuturesUnordered;
|
||||||
use futures::TryStreamExt;
|
use futures::TryStreamExt;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::env;
|
use std::env;
|
||||||
|
use std::net::SocketAddr;
|
||||||
use crate::client_utils::{Client, RUNTIME};
|
|
||||||
use crate::libwallet;
|
|
||||||
use crate::util::secp::pedersen;
|
|
||||||
use crate::util::ToHex;
|
|
||||||
|
|
||||||
use super::resp_types::*;
|
use super::resp_types::*;
|
||||||
use crate::client_utils::json_rpc::*;
|
use crate::client_utils::json_rpc::*;
|
||||||
@@ -46,8 +46,22 @@ impl HTTPNodeClient {
|
|||||||
node_url: &str,
|
node_url: &str,
|
||||||
node_api_secret: Option<String>,
|
node_api_secret: Option<String>,
|
||||||
) -> Result<HTTPNodeClient, libwallet::Error> {
|
) -> Result<HTTPNodeClient, libwallet::Error> {
|
||||||
|
Self::new_proxy(node_url, node_api_secret, None)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a new client with proxy
|
||||||
|
pub fn new_proxy(
|
||||||
|
node_url: &str,
|
||||||
|
node_api_secret: Option<String>,
|
||||||
|
proxy: Option<(SocketAddr, &'static str)>,
|
||||||
|
) -> Result<HTTPNodeClient, libwallet::Error> {
|
||||||
|
let client = if let Some((a, s)) = proxy {
|
||||||
|
Client::with_proxy(a, s)
|
||||||
|
} else {
|
||||||
|
Client::new()
|
||||||
|
};
|
||||||
Ok(HTTPNodeClient {
|
Ok(HTTPNodeClient {
|
||||||
client: Client::new().map_err(|_| libwallet::Error::Node)?,
|
client: client.map_err(|_| libwallet::Error::Node)?,
|
||||||
node_url: node_url.to_owned(),
|
node_url: node_url.to_owned(),
|
||||||
node_api_secret: node_api_secret,
|
node_api_secret: node_api_secret,
|
||||||
node_version_info: None,
|
node_version_info: None,
|
||||||
|
|||||||
Reference in New Issue
Block a user