add brain channel creation for tonic
This commit is contained in:
		
							parent
							
								
									bf677875ab
								
							
						
					
					
						commit
						27519ef823
					
				| @ -83,6 +83,10 @@ pub enum Error { | |||||||
|     SshKeyNoDefined, |     SshKeyNoDefined, | ||||||
|     #[error{"RSA Error: {0}"}] |     #[error{"RSA Error: {0}"}] | ||||||
|     RSAError(#[from] openssl::error::ErrorStack), |     RSAError(#[from] openssl::error::ErrorStack), | ||||||
|  |     #[error{"Internal CLI error: {0}"}] | ||||||
|  |     InternalError(String), | ||||||
|  |     #[error(transparent)] | ||||||
|  |     BrainConnection(#[from] tonic::transport::Error), | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl Config { | impl Config { | ||||||
| @ -310,6 +314,46 @@ impl Config { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     pub async fn get_brain_channel() -> Result<tonic::transport::Channel, Error> { | ||||||
|  |         let (brain_url, brain_san) = Self::get_brain_info(); | ||||||
|  | 
 | ||||||
|  |         use hyper_rustls::HttpsConnectorBuilder; | ||||||
|  |         use rustls::pki_types::pem::PemObject; | ||||||
|  |         use rustls::pki_types::CertificateDer; | ||||||
|  |         use rustls::{ClientConfig, RootCertStore}; | ||||||
|  | 
 | ||||||
|  |         let mut detee_root_ca_store = RootCertStore::empty(); | ||||||
|  |         detee_root_ca_store | ||||||
|  |             .add(CertificateDer::from_pem_file(Config::get_root_ca_path()?).map_err(|e| { | ||||||
|  |                 Error::InternalError(format!("Could not parse PEM certificate: {e}")) | ||||||
|  |             })?) | ||||||
|  |             .unwrap(); | ||||||
|  | 
 | ||||||
|  |         let client_tls_config = ClientConfig::builder() | ||||||
|  |             .with_root_certificates(detee_root_ca_store) | ||||||
|  |             .with_no_client_auth(); | ||||||
|  |         let connector = HttpsConnectorBuilder::new() | ||||||
|  |             .with_tls_config(client_tls_config) | ||||||
|  |             .https_only() | ||||||
|  |             .with_server_name_resolver(hyper_rustls::FixedServerNameResolver::new( | ||||||
|  |                 brain_san.clone().try_into().map_err(|e| { | ||||||
|  |                     Error::InternalError(format!( | ||||||
|  |                         "Could not parse {brain_san} into domain resolver: {e}" | ||||||
|  |                     )) | ||||||
|  |                 })?, | ||||||
|  |             )) | ||||||
|  |             .enable_http2() | ||||||
|  |             .build(); | ||||||
|  |         Ok(tonic::transport::Channel::from_shared(brain_url.to_string()) | ||||||
|  |             .map_err(|e| { | ||||||
|  |                 Error::InternalError(format!( | ||||||
|  |                     "Could not parse {brain_san} into domain resolver: {e}" | ||||||
|  |                 )) | ||||||
|  |             })? | ||||||
|  |             .connect_with_connector(connector) | ||||||
|  |             .await?) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     pub fn set_network(mut network: &str) { |     pub fn set_network(mut network: &str) { | ||||||
|         if network != "staging" { |         if network != "staging" { | ||||||
|             log::error!( |             log::error!( | ||||||
|  | |||||||
| @ -3,9 +3,7 @@ use crate::snp::grpc::proto::VmContract; | |||||||
| use crate::utils::sign_request; | use crate::utils::sign_request; | ||||||
| use detee_shared::general_proto::ReportNodeReq; | use detee_shared::general_proto::ReportNodeReq; | ||||||
| use log::{debug, info, warn}; | use log::{debug, info, warn}; | ||||||
| use rustls::pki_types::pem::PemObject; |  | ||||||
| use tokio_stream::StreamExt; | use tokio_stream::StreamExt; | ||||||
| // use tonic::transport::{Certificate, Channel, ClientTlsConfig};
 |  | ||||||
| use tonic::transport::Channel; | use tonic::transport::Channel; | ||||||
| 
 | 
 | ||||||
| pub mod proto { | pub mod proto { | ||||||
| @ -37,47 +35,7 @@ pub enum Error { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| async fn client() -> Result<BrainGeneralCliClient<Channel>, Error> { | async fn client() -> Result<BrainGeneralCliClient<Channel>, Error> { | ||||||
|     let (brain_url, brain_san) = Config::get_brain_info(); |     Ok(BrainGeneralCliClient::new(Config::get_brain_channel().await?)) | ||||||
| 
 |  | ||||||
|     use hyper_rustls::HttpsConnectorBuilder; |  | ||||||
|     use rustls::pki_types::CertificateDer; |  | ||||||
|     use rustls::{ClientConfig, RootCertStore}; |  | ||||||
| 
 |  | ||||||
|     let mut detee_root_ca_store = RootCertStore::empty(); |  | ||||||
|     detee_root_ca_store |  | ||||||
|         .add(CertificateDer::from_pem_file(Config::get_root_ca_path()?).unwrap()) |  | ||||||
|         .unwrap(); |  | ||||||
| 
 |  | ||||||
|     let client_tls_config = |  | ||||||
|         ClientConfig::builder().with_root_certificates(detee_root_ca_store).with_no_client_auth(); |  | ||||||
|     let connector = HttpsConnectorBuilder::new() |  | ||||||
|         .with_tls_config(client_tls_config) |  | ||||||
|         .https_only() |  | ||||||
|         .enable_http2() |  | ||||||
|         .build(); |  | ||||||
| 
 |  | ||||||
|     // let channel = Channel::from_shared(brain_url.to_string())
 |  | ||||||
|     //     .map_err(|_| Error::CorruptedBrainUrl)?
 |  | ||||||
|     //     .connect_with_connector(connector)
 |  | ||||||
|     //     .await
 |  | ||||||
|     //     .unwrap();
 |  | ||||||
| 
 |  | ||||||
|     Ok(BrainGeneralCliClient::new( |  | ||||||
|         Channel::from_shared(brain_url.to_string()) |  | ||||||
|             .map_err(|_| Error::CorruptedBrainUrl)? |  | ||||||
|             /* |  | ||||||
|             .tls_config( |  | ||||||
|                 ClientTlsConfig::new() |  | ||||||
|                     .ca_certificate(Certificate::from_pem(std::fs::read_to_string( |  | ||||||
|                         Config::get_root_ca_path()?, |  | ||||||
|                     )?)) |  | ||||||
|                     .domain_name(brain_san), |  | ||||||
|             )? |  | ||||||
|              */ |  | ||||||
|             .connect_with_connector(connector) |  | ||||||
|             .await |  | ||||||
|             .unwrap(), |  | ||||||
|     )) |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub async fn get_balance(account: &str) -> Result<AccountBalance, Error> { | pub async fn get_balance(account: &str) -> Result<AccountBalance, Error> { | ||||||
|  | |||||||
| @ -67,22 +67,7 @@ impl crate::HumanOutput for AppContract { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| async fn client() -> Result<BrainAppCliClient<Channel>> { | async fn client() -> Result<BrainAppCliClient<Channel>> { | ||||||
|     let (brain_url, brain_san) = Config::get_brain_info(); |     Ok(BrainAppCliClient::new(Config::get_brain_channel().await?)) | ||||||
|     Ok(BrainAppCliClient::new( |  | ||||||
|         Channel::from_shared(brain_url.to_string()) |  | ||||||
|             .map_err(|_| Error::CorruptedBrainUrl)? |  | ||||||
|             /* |  | ||||||
|             .tls_config( |  | ||||||
|                 ClientTlsConfig::new() |  | ||||||
|                     .ca_certificate(Certificate::from_pem(std::fs::read_to_string( |  | ||||||
|                         Config::get_root_ca_path()?, |  | ||||||
|                     )?)) |  | ||||||
|                     .domain_name(brain_san), |  | ||||||
|             )? |  | ||||||
|              */ |  | ||||||
|             .connect() |  | ||||||
|             .await?, |  | ||||||
|     )) |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub async fn new_app(app_deploy_config: AppDeployConfig) -> Result<NewAppRes> { | pub async fn new_app(app_deploy_config: AppDeployConfig) -> Result<NewAppRes> { | ||||||
|  | |||||||
| @ -78,12 +78,7 @@ pub async fn attest_and_send_config(loaded_config: DtpmConfig, uuid: &str) -> Re | |||||||
| 
 | 
 | ||||||
|     log::trace!("Decoded the configuration... {:?}", req_data); |     log::trace!("Decoded the configuration... {:?}", req_data); | ||||||
| 
 | 
 | ||||||
|     // let (hratls_uri, mr_enclave) = hratls_url_and_mr_enclave_from_app_id(uuid).await;
 |     let (hratls_uri, mr_enclave) = hratls_url_and_mr_enclave_from_app_id(uuid).await; | ||||||
|     // let (hratls_uri, mr_enclave) = hratls_url_and_mr_enclave_from_app_id(uuid).await;
 |  | ||||||
|     // dbg!(&hratls_uri, mr_enclave);
 |  | ||||||
| 
 |  | ||||||
|     let hratls_uri = "https://212.95.45.139:33950".to_string(); |  | ||||||
|     let mr_enclave = None; |  | ||||||
| 
 | 
 | ||||||
|     log::info!("hratls uri: {}\nmr_enclave: {:?}", &hratls_uri, &mr_enclave); |     log::info!("hratls uri: {}\nmr_enclave: {:?}", &hratls_uri, &mr_enclave); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -85,22 +85,7 @@ impl crate::HumanOutput for VmNodeListResp { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| async fn client() -> Result<BrainVmCliClient<Channel>, Error> { | async fn client() -> Result<BrainVmCliClient<Channel>, Error> { | ||||||
|     let (brain_url, brain_san) = Config::get_brain_info(); |     Ok(BrainVmCliClient::new(Config::get_brain_channel().await?)) | ||||||
|     Ok(BrainVmCliClient::new( |  | ||||||
|         Channel::from_shared(brain_url.to_string()) |  | ||||||
|             .map_err(|_| Error::CorruptedBrainUrl)? |  | ||||||
|             /* |  | ||||||
|             .tls_config( |  | ||||||
|                 ClientTlsConfig::new() |  | ||||||
|                     .ca_certificate(Certificate::from_pem(std::fs::read_to_string( |  | ||||||
|                         Config::get_root_ca_path()?, |  | ||||||
|                     )?)) |  | ||||||
|                     .domain_name(brain_san), |  | ||||||
|             )? |  | ||||||
|              */ |  | ||||||
|             .connect() |  | ||||||
|             .await?, |  | ||||||
|     )) |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| fn sign_request<T: std::fmt::Debug>(req: T) -> Result<Request<T>, Error> { | fn sign_request<T: std::fmt::Debug>(req: T) -> Result<Request<T>, Error> { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user