Redirect to pubsub node and some bug fixes #8
@ -1,4 +1,4 @@
|
||||
use crate::constants::{STAGING_BRAIN_URLS, TESTNET_BRAIN_URLS};
|
||||
use crate::constants::{BRAIN_STAGING, BRAIN_TESTING};
|
||||
use crate::{general, utils::block_on};
|
||||
use ed25519_dalek::SigningKey;
|
||||
use log::{debug, info, warn};
|
||||
@ -6,7 +6,6 @@ use openssl::bn::BigNum;
|
||||
use openssl::hash::{Hasher, MessageDigest};
|
||||
use openssl::pkey::{PKey, Private};
|
||||
use openssl::rsa::Rsa;
|
||||
use rand::Rng;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::{fs::File, io::Write, path::Path};
|
||||
|
||||
@ -313,15 +312,13 @@ impl Config {
|
||||
match Self::init_config().network.as_str() {
|
||||
"localhost" => ("https://localhost:31337".to_string(), "staging-brain".to_string()),
|
||||
"staging" => {
|
||||
let url = STAGING_BRAIN_URLS
|
||||
[rand::thread_rng().gen_range(0..STAGING_BRAIN_URLS.len())]
|
||||
.to_string();
|
||||
let url = BRAIN_STAGING.to_string();
|
||||
log::info!("Using staging brain URL: {url}");
|
||||
(url, "staging-brain".to_string())
|
||||
}
|
||||
_ => {
|
||||
let url = TESTNET_BRAIN_URLS
|
||||
[rand::thread_rng().gen_range(0..TESTNET_BRAIN_URLS.len())]
|
||||
.to_string();
|
||||
let url = BRAIN_TESTING.to_string();
|
||||
log::info!("Using testnet brain URL: {url}");
|
||||
(url, "testnet-brain".to_string())
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,6 @@
|
||||
use rand::Rng;
|
||||
use std::sync::LazyLock;
|
||||
|
||||
pub const HRATLS_APP_PORT: u32 = 34500;
|
||||
pub const MAX_REDIRECTS: u16 = 3;
|
||||
pub const STAGING_BRAIN_URLS: [&str; 3] = [
|
||||
@ -11,3 +14,9 @@ pub const TESTNET_BRAIN_URLS: [&str; 3] = [
|
||||
"https://149.22.95.1:44522", // testnet brain 2
|
||||
"https://149.36.48.99:48638", // testnet brain 3
|
||||
];
|
||||
|
||||
pub static BRAIN_STAGING: LazyLock<&str> =
|
||||
LazyLock::new(|| STAGING_BRAIN_URLS[rand::thread_rng().gen_range(0..STAGING_BRAIN_URLS.len())]);
|
||||
|
||||
pub static BRAIN_TESTING: LazyLock<&str> =
|
||||
LazyLock::new(|| TESTNET_BRAIN_URLS[rand::thread_rng().gen_range(0..TESTNET_BRAIN_URLS.len())]);
|
||||
|
@ -7,6 +7,7 @@ use detee_shared::sgx::types::brain::AppDeployConfig;
|
||||
use tokio_stream::StreamExt;
|
||||
use tonic::transport::Channel;
|
||||
|
||||
use crate::call_with_follow_redirect;
|
||||
use crate::config::Config;
|
||||
use crate::sgx::utils::calculate_nanolp_for_app;
|
||||
use crate::utils::{self, sign_request};
|
||||
@ -25,6 +26,10 @@ pub enum Error {
|
||||
CorruptedRootCa(#[from] std::io::Error),
|
||||
#[error("Internal app error: could not parse Brain URL")]
|
||||
CorruptedBrainUrl,
|
||||
#[error("Max redirects exceeded: {0}")]
|
||||
MaxRedirectsExceeded(String),
|
||||
#[error("Redirect error: {0}")]
|
||||
RedirectError(String),
|
||||
}
|
||||
|
||||
type Result<T> = std::result::Result<T, Error>;
|
||||
@ -70,6 +75,10 @@ async fn client() -> Result<BrainAppCliClient<Channel>> {
|
||||
Ok(BrainAppCliClient::new(Config::connect_brain_channel(default_brain_url).await?))
|
||||
}
|
||||
|
||||
async fn client_from_endpoint(reconnect_endpoint: String) -> Result<BrainAppCliClient<Channel>> {
|
||||
Ok(BrainAppCliClient::new(Config::connect_brain_channel(reconnect_endpoint).await?))
|
||||
}
|
||||
|
||||
pub async fn new_app(app_deploy_config: AppDeployConfig) -> Result<NewAppRes> {
|
||||
let resource = app_deploy_config.clone().resource;
|
||||
let mut req: NewAppReq = app_deploy_config.clone().into();
|
||||
@ -87,15 +96,21 @@ pub async fn new_app(app_deploy_config: AppDeployConfig) -> Result<NewAppRes> {
|
||||
req.admin_pubkey = Config::get_detee_wallet()?;
|
||||
req.hratls_pubkey = Config::get_hratls_pubkey_hex()?;
|
||||
|
||||
let res = client().await?.new_app(sign_request(req)?).await?;
|
||||
|
||||
Ok(res.into_inner())
|
||||
let client = client().await?;
|
||||
match call_with_follow_redirect!(client, req, new_app).await {
|
||||
Ok(res) => Ok(res.into_inner()),
|
||||
Err(e) => {
|
||||
log::error!("Failed to create new app: {}", e);
|
||||
Err(e.into())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn delete_app(app_uuid: String) -> Result<()> {
|
||||
let admin_pubkey = Config::get_detee_wallet()?;
|
||||
let delete_req = DelAppReq { uuid: app_uuid, admin_pubkey };
|
||||
let _ = client().await?.delete_app(sign_request(delete_req)?).await?;
|
||||
let client = client().await?;
|
||||
let _ = call_with_follow_redirect!(client, delete_req, delete_app).await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@ pub async fn connect_app_dtpm_client(app_uuid: &str) -> Result<DtpmConfigManager
|
||||
let private_key_pem = Config::get_hratls_private_key()?;
|
||||
|
||||
let (hratls_uri, package_mr_enclave) = hratls_url_and_mr_enclave_from_app_id(app_uuid).await?;
|
||||
log::info!("hratls uri: {}\nmr_enclave: {:?}", &hratls_uri, &package_mr_enclave);
|
||||
log::info!("hratls uri: {} mr_enclave: {:?}", &hratls_uri, &package_mr_enclave);
|
||||
|
||||
let hratls_config =
|
||||
Arc::new(RwLock::new(HRaTlsConfig::new().with_hratls_private_key_pem(private_key_pem)));
|
||||
|
@ -54,7 +54,11 @@ macro_rules! call_with_follow_redirect {
|
||||
let mut client = $client;
|
||||
|
||||
for attempt in 0..crate::constants::MAX_REDIRECTS {
|
||||
debug!("Attempt #{}: Calling method '{}'...", attempt + 1, stringify!($method));
|
||||
log::debug!(
|
||||
"Attempt #{}: Calling method '{}'...",
|
||||
attempt + 1,
|
||||
stringify!($method)
|
||||
);
|
||||
|
||||
let req_data_clone = $req_data.clone();
|
||||
let signed_req = crate::utils::sign_request(req_data_clone)?;
|
||||
@ -76,7 +80,7 @@ macro_rules! call_with_follow_redirect {
|
||||
)
|
||||
})?;
|
||||
|
||||
info!("Server moved. Redirecting to {}...", redirect_url);
|
||||
log::info!("Server moved. Redirecting to {}...", redirect_url);
|
||||
|
||||
client = client_from_endpoint(format!("https://{}", redirect_url)).await?;
|
||||
continue;
|
||||
|
Loading…
Reference in New Issue
Block a user