mirror of
https://github.com/mimblewimble/grin.git
synced 2025-01-21 03:21:08 +03:00
add https as optional for server api (#2310)
* add tls as optional config for server api * add error log if start_rest_apis fail
This commit is contained in:
parent
2c5ba853f7
commit
c5efb715a5
4 changed files with 39 additions and 2 deletions
|
@ -86,7 +86,14 @@ pub fn start_rest_apis(
|
||||||
|
|
||||||
info!("Starting HTTP API server at {}.", addr);
|
info!("Starting HTTP API server at {}.", addr);
|
||||||
let socket_addr: SocketAddr = addr.parse().expect("unable to parse socket address");
|
let socket_addr: SocketAddr = addr.parse().expect("unable to parse socket address");
|
||||||
apis.start(socket_addr, router, tls_config).is_ok()
|
let res = apis.start(socket_addr, router, tls_config);
|
||||||
|
match res {
|
||||||
|
Ok(_) => true,
|
||||||
|
Err(e) => {
|
||||||
|
error!("HTTP API server failed to start. Err: {}", e);
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn build_router(
|
pub fn build_router(
|
||||||
|
|
|
@ -43,6 +43,11 @@ fn comments() -> HashMap<String, String> {
|
||||||
retval.insert(
|
retval.insert(
|
||||||
"api_http_addr".to_string(),
|
"api_http_addr".to_string(),
|
||||||
"
|
"
|
||||||
|
#path of TLS certificate file, self-signed certificates are not supported
|
||||||
|
#tls_certificate_file = \"\"
|
||||||
|
#private key for the TLS certificate
|
||||||
|
#tls_certificate_key = \"\"
|
||||||
|
|
||||||
#the address on which services will listen, e.g. Transaction Pool
|
#the address on which services will listen, e.g. Transaction Pool
|
||||||
"
|
"
|
||||||
.to_string(),
|
.to_string(),
|
||||||
|
|
|
@ -46,6 +46,8 @@ pub enum Error {
|
||||||
Cuckoo(pow::Error),
|
Cuckoo(pow::Error),
|
||||||
/// Error originating from the transaction pool.
|
/// Error originating from the transaction pool.
|
||||||
Pool(pool::PoolError),
|
Pool(pool::PoolError),
|
||||||
|
/// Invalid Arguments.
|
||||||
|
ArgumentError(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<core::block::Error> for Error {
|
impl From<core::block::Error> for Error {
|
||||||
|
@ -124,6 +126,11 @@ pub struct ServerConfig {
|
||||||
/// Location of secret for basic auth on Rest API HTTP server.
|
/// Location of secret for basic auth on Rest API HTTP server.
|
||||||
pub api_secret_path: Option<String>,
|
pub api_secret_path: Option<String>,
|
||||||
|
|
||||||
|
/// TLS certificate file
|
||||||
|
pub tls_certificate_file: Option<String>,
|
||||||
|
/// TLS certificate private key file
|
||||||
|
pub tls_certificate_key: Option<String>,
|
||||||
|
|
||||||
/// Setup the server for tests, testnet or mainnet
|
/// Setup the server for tests, testnet or mainnet
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub chain_type: ChainTypes,
|
pub chain_type: ChainTypes,
|
||||||
|
@ -174,6 +181,8 @@ impl Default for ServerConfig {
|
||||||
db_root: "grin_chain".to_string(),
|
db_root: "grin_chain".to_string(),
|
||||||
api_http_addr: "127.0.0.1:3413".to_string(),
|
api_http_addr: "127.0.0.1:3413".to_string(),
|
||||||
api_secret_path: Some(".api_secret".to_string()),
|
api_secret_path: Some(".api_secret".to_string()),
|
||||||
|
tls_certificate_file: None,
|
||||||
|
tls_certificate_key: None,
|
||||||
p2p_config: p2p::P2PConfig::default(),
|
p2p_config: p2p::P2PConfig::default(),
|
||||||
dandelion_config: pool::DandelionConfig::default(),
|
dandelion_config: pool::DandelionConfig::default(),
|
||||||
stratum_mining_config: Some(StratumServerConfig::default()),
|
stratum_mining_config: Some(StratumServerConfig::default()),
|
||||||
|
|
|
@ -21,6 +21,7 @@ use std::sync::Arc;
|
||||||
use std::{thread, time};
|
use std::{thread, time};
|
||||||
|
|
||||||
use crate::api;
|
use crate::api;
|
||||||
|
use crate::api::TLSConfig;
|
||||||
use crate::chain;
|
use crate::chain;
|
||||||
use crate::common::adapters::{
|
use crate::common::adapters::{
|
||||||
ChainToPoolAndNetAdapter, NetToChainAdapter, PoolToChainAdapter, PoolToNetAdapter,
|
ChainToPoolAndNetAdapter, NetToChainAdapter, PoolToChainAdapter, PoolToNetAdapter,
|
||||||
|
@ -223,13 +224,28 @@ impl Server {
|
||||||
|
|
||||||
info!("Starting rest apis at: {}", &config.api_http_addr);
|
info!("Starting rest apis at: {}", &config.api_http_addr);
|
||||||
let api_secret = get_first_line(config.api_secret_path.clone());
|
let api_secret = get_first_line(config.api_secret_path.clone());
|
||||||
|
|
||||||
|
let tls_conf = match config.tls_certificate_file.clone() {
|
||||||
|
None => None,
|
||||||
|
Some(file) => {
|
||||||
|
let key = match config.tls_certificate_key.clone() {
|
||||||
|
Some(k) => k,
|
||||||
|
None => {
|
||||||
|
let msg = format!("Private key for certificate is not set");
|
||||||
|
return Err(Error::ArgumentError(msg));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Some(TLSConfig::new(file, key))
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
api::start_rest_apis(
|
api::start_rest_apis(
|
||||||
config.api_http_addr.clone(),
|
config.api_http_addr.clone(),
|
||||||
shared_chain.clone(),
|
shared_chain.clone(),
|
||||||
tx_pool.clone(),
|
tx_pool.clone(),
|
||||||
p2p_server.peers.clone(),
|
p2p_server.peers.clone(),
|
||||||
api_secret,
|
api_secret,
|
||||||
None,
|
tls_conf,
|
||||||
);
|
);
|
||||||
|
|
||||||
info!("Starting dandelion monitor: {}", &config.api_http_addr);
|
info!("Starting dandelion monitor: {}", &config.api_http_addr);
|
||||||
|
|
Loading…
Reference in a new issue