Exposing all RPCs over dapps port as CLI option (#4346)
* Exposing all RPC over dapps port as CLI option * Fix test.
This commit is contained in:
		
							parent
							
								
									089da2a24a
								
							
						
					
					
						commit
						47e1c5e2f1
					
				| @ -184,6 +184,7 @@ usage! { | |||||||
| 			or |c: &Config| otry!(c.dapps).user.clone().map(Some), | 			or |c: &Config| otry!(c.dapps).user.clone().map(Some), | ||||||
| 		flag_dapps_pass: Option<String> = None, | 		flag_dapps_pass: Option<String> = None, | ||||||
| 			or |c: &Config| otry!(c.dapps).pass.clone().map(Some), | 			or |c: &Config| otry!(c.dapps).pass.clone().map(Some), | ||||||
|  | 		flag_dapps_apis_all: bool = false, or |_| None, | ||||||
| 
 | 
 | ||||||
| 		// -- Sealing/Mining Options
 | 		// -- Sealing/Mining Options
 | ||||||
| 		flag_author: Option<String> = None, | 		flag_author: Option<String> = None, | ||||||
| @ -629,6 +630,7 @@ mod tests { | |||||||
| 			flag_dapps_path: "$HOME/.parity/dapps".into(), | 			flag_dapps_path: "$HOME/.parity/dapps".into(), | ||||||
| 			flag_dapps_user: Some("test_user".into()), | 			flag_dapps_user: Some("test_user".into()), | ||||||
| 			flag_dapps_pass: Some("test_pass".into()), | 			flag_dapps_pass: Some("test_pass".into()), | ||||||
|  | 			flag_dapps_apis_all: false, | ||||||
| 
 | 
 | ||||||
| 			// -- Sealing/Mining Options
 | 			// -- Sealing/Mining Options
 | ||||||
| 			flag_author: Some("0xdeadbeefcafe0000000000000000000000000001".into()), | 			flag_author: Some("0xdeadbeefcafe0000000000000000000000000001".into()), | ||||||
|  | |||||||
| @ -171,6 +171,9 @@ API and Console Options: | |||||||
|                                  conjunction with --dapps-user. (default: {flag_dapps_pass:?}) |                                  conjunction with --dapps-user. (default: {flag_dapps_pass:?}) | ||||||
|   --dapps-path PATH              Specify directory where dapps should be installed. |   --dapps-path PATH              Specify directory where dapps should be installed. | ||||||
|                                  (default: {flag_dapps_path}) |                                  (default: {flag_dapps_path}) | ||||||
|  |   --dapps-apis-all               Expose all possible RPC APIs on Dapps port. | ||||||
|  |                                  WARNING: INSECURE. Used only for development. | ||||||
|  |                                  (default: {flag_dapps_apis_all}) | ||||||
| 
 | 
 | ||||||
| Sealing/Mining Options: | Sealing/Mining Options: | ||||||
|   --author ADDRESS               Specify the block author (aka "coinbase") address |   --author ADDRESS               Specify the block author (aka "coinbase") address | ||||||
|  | |||||||
| @ -534,6 +534,7 @@ impl Configuration { | |||||||
| 			} else { | 			} else { | ||||||
| 				vec![] | 				vec![] | ||||||
| 			}, | 			}, | ||||||
|  | 			all_apis: self.args.flag_dapps_apis_all, | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -16,15 +16,15 @@ | |||||||
| 
 | 
 | ||||||
| use std::path::PathBuf; | use std::path::PathBuf; | ||||||
| use std::sync::Arc; | use std::sync::Arc; | ||||||
| use io::PanicHandler; | 
 | ||||||
| use rpc_apis; | use dir::default_data_path; | ||||||
| use ethcore::client::Client; | use ethcore::client::Client; | ||||||
| use ethsync::SyncProvider; | use ethsync::SyncProvider; | ||||||
| use helpers::replace_home; |  | ||||||
| use dir::default_data_path; |  | ||||||
| use jsonrpc_core::reactor::Remote; |  | ||||||
| use rpc_apis::SignerService; |  | ||||||
| use hash_fetch::fetch::Client as FetchClient; | use hash_fetch::fetch::Client as FetchClient; | ||||||
|  | use helpers::replace_home; | ||||||
|  | use io::PanicHandler; | ||||||
|  | use jsonrpc_core::reactor::Remote; | ||||||
|  | use rpc_apis::{self, SignerService}; | ||||||
| 
 | 
 | ||||||
| #[derive(Debug, PartialEq, Clone)] | #[derive(Debug, PartialEq, Clone)] | ||||||
| pub struct Configuration { | pub struct Configuration { | ||||||
| @ -36,6 +36,7 @@ pub struct Configuration { | |||||||
| 	pub pass: Option<String>, | 	pub pass: Option<String>, | ||||||
| 	pub dapps_path: PathBuf, | 	pub dapps_path: PathBuf, | ||||||
| 	pub extra_dapps: Vec<PathBuf>, | 	pub extra_dapps: Vec<PathBuf>, | ||||||
|  | 	pub all_apis: bool, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl Default for Configuration { | impl Default for Configuration { | ||||||
| @ -50,6 +51,7 @@ impl Default for Configuration { | |||||||
| 			pass: None, | 			pass: None, | ||||||
| 			dapps_path: replace_home(&data_dir, "$BASE/dapps").into(), | 			dapps_path: replace_home(&data_dir, "$BASE/dapps").into(), | ||||||
| 			extra_dapps: vec![], | 			extra_dapps: vec![], | ||||||
|  | 			all_apis: false, | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @ -89,7 +91,8 @@ pub fn new(configuration: Configuration, deps: Dependencies) -> Result<Option<We | |||||||
| 		configuration.extra_dapps, | 		configuration.extra_dapps, | ||||||
| 		&addr, | 		&addr, | ||||||
| 		configuration.hosts, | 		configuration.hosts, | ||||||
| 		auth | 		auth, | ||||||
|  | 		configuration.all_apis, | ||||||
| 	)?)) | 	)?)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -110,6 +113,7 @@ mod server { | |||||||
| 		_url: &SocketAddr, | 		_url: &SocketAddr, | ||||||
| 		_allowed_hosts: Option<Vec<String>>, | 		_allowed_hosts: Option<Vec<String>>, | ||||||
| 		_auth: Option<(String, String)>, | 		_auth: Option<(String, String)>, | ||||||
|  | 		_all_apis: bool, | ||||||
| 	) -> Result<WebappServer, String> { | 	) -> Result<WebappServer, String> { | ||||||
| 		Err("Your Parity version has been compiled without WebApps support.".into()) | 		Err("Your Parity version has been compiled without WebApps support.".into()) | ||||||
| 	} | 	} | ||||||
| @ -124,14 +128,14 @@ mod server { | |||||||
| 	use std::io; | 	use std::io; | ||||||
| 	use util::{Bytes, Address, U256}; | 	use util::{Bytes, Address, U256}; | ||||||
| 
 | 
 | ||||||
|  | 	use ansi_term::Colour; | ||||||
| 	use ethcore::transaction::{Transaction, Action}; | 	use ethcore::transaction::{Transaction, Action}; | ||||||
| 	use ethcore::client::{Client, BlockChainClient, BlockId}; | 	use ethcore::client::{Client, BlockChainClient, BlockId}; | ||||||
| 
 |  | ||||||
| 	use rpc_apis; |  | ||||||
| 	use ethcore_rpc::is_major_importing; | 	use ethcore_rpc::is_major_importing; | ||||||
| 	use hash_fetch::urlhint::ContractClient; | 	use hash_fetch::urlhint::ContractClient; | ||||||
| 	use jsonrpc_core::reactor::RpcHandler; | 	use jsonrpc_core::reactor::RpcHandler; | ||||||
| 	use parity_reactor; | 	use parity_reactor; | ||||||
|  | 	use rpc_apis; | ||||||
| 
 | 
 | ||||||
| 	pub use ethcore_dapps::Server as WebappServer; | 	pub use ethcore_dapps::Server as WebappServer; | ||||||
| 
 | 
 | ||||||
| @ -142,6 +146,7 @@ mod server { | |||||||
| 		url: &SocketAddr, | 		url: &SocketAddr, | ||||||
| 		allowed_hosts: Option<Vec<String>>, | 		allowed_hosts: Option<Vec<String>>, | ||||||
| 		auth: Option<(String, String)>, | 		auth: Option<(String, String)>, | ||||||
|  | 		all_apis: bool, | ||||||
| 	) -> Result<WebappServer, String> { | 	) -> Result<WebappServer, String> { | ||||||
| 		use ethcore_dapps as dapps; | 		use ethcore_dapps as dapps; | ||||||
| 
 | 
 | ||||||
| @ -162,7 +167,14 @@ mod server { | |||||||
| 			.signer_address(deps.signer.address()) | 			.signer_address(deps.signer.address()) | ||||||
| 			.allowed_hosts(allowed_hosts); | 			.allowed_hosts(allowed_hosts); | ||||||
| 
 | 
 | ||||||
| 		let apis = rpc_apis::setup_rpc(Default::default(), deps.apis.clone(), rpc_apis::ApiSet::UnsafeContext); | 		let api_set = if all_apis { | ||||||
|  | 			warn!("{}", Colour::Red.bold().paint("*** INSECURE *** Running Dapps with all APIs exposed.")); | ||||||
|  | 			info!("If you do not intend this, exit now."); | ||||||
|  | 			rpc_apis::ApiSet::SafeContext | ||||||
|  | 		} else { | ||||||
|  | 			rpc_apis::ApiSet::UnsafeContext | ||||||
|  | 		}; | ||||||
|  | 		let apis = rpc_apis::setup_rpc(Default::default(), deps.apis.clone(), api_set); | ||||||
| 		let handler = RpcHandler::new(Arc::new(apis), deps.remote); | 		let handler = RpcHandler::new(Arc::new(apis), deps.remote); | ||||||
| 		let start_result = match auth { | 		let start_result = match auth { | ||||||
| 			None => { | 			None => { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user