From 5affefc7636b627e2f474316f022eec5edcb250e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Tue, 13 Dec 2016 12:17:01 +0100 Subject: [PATCH] Fixing CLI signer --- rpc/src/v1/types/confirmations.rs | 32 +++++++++++++++++++++---- rpc/src/v1/types/transaction_request.rs | 21 ++++++++++------ rpc_client/src/client.rs | 26 ++++++++++++-------- rpc_client/src/signer_client.rs | 6 ++--- 4 files changed, 60 insertions(+), 25 deletions(-) diff --git a/rpc/src/v1/types/confirmations.rs b/rpc/src/v1/types/confirmations.rs index fa7741fd1..a3cf02a9e 100644 --- a/rpc/src/v1/types/confirmations.rs +++ b/rpc/src/v1/types/confirmations.rs @@ -18,6 +18,8 @@ use std::fmt; use serde::{Serialize, Serializer}; +use util::log::Colour; + use v1::types::{U256, TransactionRequest, RichRawTransaction, H160, H256, H520, Bytes}; use v1::helpers; @@ -48,11 +50,10 @@ impl fmt::Display for ConfirmationRequest { impl fmt::Display for ConfirmationPayload { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match *self { - ConfirmationPayload::SendTransaction(ref transaction) - => write!(f, "{}", transaction), - ConfirmationPayload::SignTransaction(_) => write!(f, "TODO: data"), - ConfirmationPayload::Decrypt(_) => write!(f, "TODO: decrypt"), - ConfirmationPayload::Signature(_) => write!(f, "TODO: signature"), + ConfirmationPayload::SendTransaction(ref transaction) => write!(f, "{}", transaction), + ConfirmationPayload::SignTransaction(ref transaction) => write!(f, "(Sign only) {}", transaction), + ConfirmationPayload::Signature(ref sign) => write!(f, "{}", sign), + ConfirmationPayload::Decrypt(ref decrypt) => write!(f, "{}", decrypt), } } } @@ -75,6 +76,17 @@ impl From<(H160, H256)> for SignRequest { } } +impl fmt::Display for SignRequest { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!( + f, + "sign 0x{:?} with {}", + self.hash, + Colour::White.bold().paint(format!("0x{:?}", self.address)), + ) + } +} + /// Decrypt request #[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)] pub struct DecryptRequest { @@ -93,6 +105,16 @@ impl From<(H160, Bytes)> for DecryptRequest { } } +impl fmt::Display for DecryptRequest { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!( + f, + "decrypt data with {}", + Colour::White.bold().paint(format!("0x{:?}", self.address)), + ) + } +} + /// Confirmation response for particular payload #[derive(Debug, Clone, PartialEq)] pub enum ConfirmationResponse { diff --git a/rpc/src/v1/types/transaction_request.rs b/rpc/src/v1/types/transaction_request.rs index 492f2354d..a91a16858 100644 --- a/rpc/src/v1/types/transaction_request.rs +++ b/rpc/src/v1/types/transaction_request.rs @@ -18,6 +18,7 @@ use v1::types::{Bytes, H160, U256}; use v1::helpers; +use util::log::Colour; use std::fmt; @@ -62,13 +63,19 @@ impl fmt::Display for TransactionRequest { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let eth = self.value.unwrap_or(U256::from(0)); match self.to { - Some(ref to) => write!(f, "{} Ether from {:?} to {:?}", - format_ether(eth), - self.from, - to), - None => write!(f, "{} Ether from {:?}", - format_ether(eth), - self.from), + Some(ref to) => write!( + f, + "{} ETH from {} to 0x{:?}", + Colour::White.bold().paint(format_ether(eth)), + Colour::White.bold().paint(format!("0x{:?}", self.from)), + to + ), + None => write!( + f, + "{} ETH from {} for contract creation", + Colour::White.bold().paint(format_ether(eth)), + Colour::White.bold().paint(format!("0x{:?}", self.from)), + ), } } } diff --git a/rpc_client/src/client.rs b/rpc_client/src/client.rs index 84e9cedb9..bc4c7aa8b 100644 --- a/rpc_client/src/client.rs +++ b/rpc_client/src/client.rs @@ -22,13 +22,15 @@ use ws::{ Error as WsError, ErrorKind as WsErrorKind, Message, - Result as WsResult + Result as WsResult, }; use serde::Deserialize; -use serde_json::{self as json, - Value as JsonValue, - Error as JsonError}; +use serde_json::{ + self as json, + Value as JsonValue, + Error as JsonError, +}; use futures::{BoxFuture, Canceled, Complete, Future, oneshot, done}; @@ -170,13 +172,17 @@ impl Pending { } fn get_authcode(path: &PathBuf) -> Result { - match File::open(path) { - Ok(fd) => match BufReader::new(fd).lines().next() { - Some(Ok(code)) => Ok(code), - _ => Err(RpcError::NoAuthCode), - }, - Err(_) => Err(RpcError::NoAuthCode) + if let Ok(fd) = File::open(path) { + if let Some(Ok(line)) = BufReader::new(fd).lines().next() { + let mut parts = line.split(';'); + let token = parts.next(); + + if let Some(code) = token { + return Ok(code.into()); + } + } } + Err(RpcError::NoAuthCode) } /// The handle to the connection diff --git a/rpc_client/src/signer_client.rs b/rpc_client/src/signer_client.rs index 75bf85119..8a2eccd5d 100644 --- a/rpc_client/src/signer_client.rs +++ b/rpc_client/src/signer_client.rs @@ -17,7 +17,7 @@ impl SignerRpc { pub fn requests_to_confirm(&mut self) -> BoxFuture, RpcError>, Canceled> { - self.rpc.request("personal_requestsToConfirm", vec![]) + self.rpc.request("signer_requestsToConfirm", vec![]) } pub fn confirm_request( &mut self, @@ -27,7 +27,7 @@ impl SignerRpc { pwd: &str ) -> BoxFuture, Canceled> { - self.rpc.request("personal_confirmRequest", vec![ + self.rpc.request("signer_confirmRequest", vec![ to_value(&format!("{:#x}", id)), to_value(&TransactionModification { gas_price: new_gas_price, gas: new_gas }), to_value(&pwd), @@ -36,7 +36,7 @@ impl SignerRpc { pub fn reject_request(&mut self, id: U256) -> BoxFuture, Canceled> { - self.rpc.request("personal_rejectRequest", vec![ + self.rpc.request("signer_rejectRequest", vec![ JsonValue::String(format!("{:#x}", id)) ]) }