Skip to content

Commit

Permalink
Deprecate HTTP(S) (#532)
Browse files Browse the repository at this point in the history
* Deprecate HTTP(S)

* Remove http support altogether
  • Loading branch information
jaspervdm authored Nov 26, 2020
1 parent de6a6ad commit 429db61
Show file tree
Hide file tree
Showing 7 changed files with 11 additions and 139 deletions.
26 changes: 5 additions & 21 deletions api/src/owner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2324,7 +2324,7 @@ where
}
}

/// attempt to send slate synchronously, starting with TOR and downgrading to HTTP
/// attempt to send slate synchronously with TOR
pub fn try_slatepack_sync_workflow(
slate: &Slate,
dest: &str,
Expand Down Expand Up @@ -2355,7 +2355,7 @@ pub fn try_slatepack_sync_workflow(
}
};

// First, try TOR
// Try parsing Slatepack address
match SlatepackAddress::try_from(dest) {
Ok(address) => {
let tor_addr = OnionV3Address::try_from(&address).unwrap();
Expand Down Expand Up @@ -2392,34 +2392,18 @@ pub fn try_slatepack_sync_workflow(
Ok(_) => return Ok(Some(ret_slate)),
Err(e) => {
debug!("Unable to send via TOR: {}", e);
warn!("Unable to send transaction via TOR. Attempting alternate methods.");
warn!("Unable to send transaction via TOR");
}
}
}
}
Err(e) => {
debug!("Send (TOR): Destination is not SlatepackAddress {:?}", e);
warn!("Destination is not a valid Slatepack address. Will output Slatepack.")
}
}

// Try Fallback to HTTP for deprecation period
match HttpSlateSender::new(&dest) {
Ok(sender) => {
println!("Attempting to send transaction via HTTP (deprecated)");
match send_sync(sender, "HTTP") {
Ok(_) => return Ok(Some(ret_slate)),
Err(e) => {
debug!("Unable to send via HTTP: {}", e);
warn!("Unable to send transaction via HTTP. Will output Slatepack.");
return Ok(None);
}
}
}
Err(e) => {
debug!("Send (HTTP): Cannot create HTTP Slate sender {:?}", e);
return Ok(None);
}
}
Ok(None)
}

#[doc(hidden)]
Expand Down
6 changes: 1 addition & 5 deletions config/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,6 @@ use crate::util::logger::LoggingConfig;
pub struct WalletConfig {
/// Chain parameters (default to Mainnet if none at the moment)
pub chain_type: Option<ChainTypes>,
/// The api interface/ip_address that this api server (i.e. this wallet) will run
/// by default this is 127.0.0.1 (and will not accept connections from external clients)
pub api_listen_interface: String,
/// The port this wallet will run on
pub api_listen_port: u16,
/// The port this wallet's owner API will run on
Expand Down Expand Up @@ -62,7 +59,6 @@ impl Default for WalletConfig {
fn default() -> WalletConfig {
WalletConfig {
chain_type: Some(ChainTypes::Mainnet),
api_listen_interface: "127.0.0.1".to_string(),
api_listen_port: 3415,
owner_api_listen_port: Some(WalletConfig::default_owner_api_listen_port()),
api_secret_path: Some(".owner_api_secret".to_string()),
Expand All @@ -82,7 +78,7 @@ impl Default for WalletConfig {
impl WalletConfig {
/// API Listen address
pub fn api_listen_addr(&self) -> String {
format!("{}:{}", self.api_listen_interface, self.api_listen_port)
format!("127.0.0.1:{}", self.api_listen_port)
}

/// Default listener port
Expand Down
2 changes: 1 addition & 1 deletion impls/src/adapters/http.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ pub struct HttpSlateSender {

impl HttpSlateSender {
/// Create, return Err if scheme is not "http"
pub fn new(base_url: &str) -> Result<HttpSlateSender, SchemeNotHttp> {
fn new(base_url: &str) -> Result<HttpSlateSender, SchemeNotHttp> {
if !base_url.starts_with("http") && !base_url.starts_with("https") {
Err(SchemeNotHttp)
} else {
Expand Down
66 changes: 2 additions & 64 deletions impls/src/adapters/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,8 @@ pub use self::http::{HttpSlateSender, SchemeNotHttp};
pub use self::keybase::{KeybaseAllChannels, KeybaseChannel};
pub use self::slatepack::PathToSlatepack;

use crate::config::{TorConfig, WalletConfig};
use crate::libwallet::{Error, ErrorKind, Slate};
use crate::tor::config::complete_tor_address;
use crate::config::WalletConfig;
use crate::libwallet::{Error, Slate};
use crate::util::ZeroingString;

/// Sends transactions to a corresponding SlateReceiver
Expand Down Expand Up @@ -59,64 +58,3 @@ pub trait SlateGetter {
/// Returns (Slate, whether it was in binary form)
fn get_tx(&self) -> Result<(Slate, bool), Error>;
}

/// select a SlateSender based on method and dest fields from, e.g., SendArgs
pub fn create_sender(
method: &str,
dest: &str,
tor_config: Option<TorConfig>,
) -> Result<Box<dyn SlateSender>, Error> {
let invalid = || {
ErrorKind::WalletComms(format!(
"Invalid wallet comm type and destination. method: {}, dest: {}",
method, dest
))
};

let mut method = method;

// will test if this is a tor address and fill out
// the http://[].onion if missing
let dest = match complete_tor_address(dest) {
Ok(d) => {
method = "tor";
d
}
Err(_) => dest.into(),
};

Ok(match method {
"http" => Box::new(HttpSlateSender::new(&dest).map_err(|_| invalid())?),
"tor" => match tor_config {
None => {
return Err(
ErrorKind::WalletComms("Tor Configuration required".to_string()).into(),
);
}
Some(tc) => Box::new(
HttpSlateSender::with_socks_proxy(&dest, &tc.socks_proxy_addr, &tc.send_config_dir)
.map_err(|_| invalid())?,
),
},
"keybase" => Box::new(KeybaseChannel::new(dest)?),
"self" => {
return Err(ErrorKind::WalletComms(
"No sender implementation for \"self\".".to_string(),
)
.into());
}
"file" => {
return Err(ErrorKind::WalletComms(
"File based transactions must be performed asynchronously.".to_string(),
)
.into());
}
_ => {
return Err(ErrorKind::WalletComms(format!(
"Wallet comm method \"{}\" does not exist.",
method
))
.into());
}
})
}
4 changes: 2 additions & 2 deletions impls/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ pub mod test_framework;
pub mod tor;

pub use crate::adapters::{
create_sender, HttpSlateSender, KeybaseAllChannels, KeybaseChannel, PathToSlate,
PathToSlatepack, SlateGetter, SlatePutter, SlateReceiver, SlateSender,
HttpSlateSender, KeybaseAllChannels, KeybaseChannel, PathToSlate, PathToSlatepack, SlateGetter,
SlatePutter, SlateReceiver, SlateSender,
};
pub use crate::backends::{wallet_db_exists, LMDBBackend};
pub use crate::error::{Error, ErrorKind};
Expand Down
5 changes: 0 additions & 5 deletions src/bin/grin-wallet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,6 @@ args:
short: t
long: top_level_dir
takes_value: true
- external:
help: Listen on 0.0.0.0 interface to allow external connections (default is 127.0.0.1)
short: e
long: external
takes_value: false
- show_spent:
help: Show spent outputs on wallet output commands
short: s
Expand Down
41 changes: 0 additions & 41 deletions src/cmd/wallet_args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -219,39 +219,6 @@ fn prompt_pay_invoice(slate: &Slate, dest: &str) -> Result<bool, ParseError> {
}
}

fn prompt_deprecate_http() -> Result<bool, ParseError> {
let interface = Arc::new(Interface::new("http")?);
interface.set_report_signal(Signal::Interrupt, true);
interface.set_prompt("To proceed, type 'UNDERSTOOD' > ")?;
println!();
println!("Http(s) is being deprecated in favour of the Slatepack Workflow");
println!("This sending method is planned for removal as of the last scheduled Hardfork in Grin 5.0.0");
println!("Please see https://github.com/mimblewimble/grin-rfcs/pull/55 for details");
loop {
let res = interface.read_line()?;
match res {
ReadResult::Eof => return Ok(false),
ReadResult::Signal(sig) => {
if sig == Signal::Interrupt {
interface.cancel_read_line()?;
return Err(ParseError::CancelledError);
}
}
ReadResult::Input(line) => match line.trim() {
"Q" | "q" => return Err(ParseError::CancelledError),
result => {
if result == "UNDERSTOOD" {
return Ok(true);
} else {
println!("Please enter the phrase 'UNDERSTOOD' (without quotes) to continue or Q to quit");
println!();
}
}
},
}
}
}

// instantiate wallet (needed by most functions)

pub fn inst_wallet<L, C, K>(
Expand Down Expand Up @@ -487,10 +454,6 @@ pub fn parse_send_args(args: &ArgMatches) -> Result<command::SendArgs, ParseErro
None => "default",
};

if dest.to_uppercase().starts_with("HTTP") {
prompt_deprecate_http()?;
}

// change_outputs
let change_outputs = parse_required(args, "change_outputs")?;
let change_outputs = parse_u64(change_outputs, "change_outputs")? as usize;
Expand Down Expand Up @@ -962,10 +925,6 @@ where
>,
),
{
if wallet_args.is_present("external") {
wallet_config.api_listen_interface = "0.0.0.0".to_string();
}

if let Some(dir) = wallet_args.value_of("top_level_dir") {
wallet_config.data_file_dir = dir.to_string().clone();
}
Expand Down

0 comments on commit 429db61

Please sign in to comment.