authendication with brain
This commit is contained in:
parent
4cc15184f0
commit
ede3edccfe
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -410,7 +410,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "detee-shared"
|
name = "detee-shared"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+ssh://git@gitea.detee.cloud/noormohammedb/detee-shared?branch=stable_01#606c0ad395e2bad10b93f619a8c9d150ab806108"
|
source = "git+ssh://git@gitea.detee.cloud/noormohammedb/detee-shared?branch=stable_01#f2bc29149e32df09508519f3f88cdf880728e6dd"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64",
|
"base64",
|
||||||
"prost",
|
"prost",
|
||||||
|
@ -5,9 +5,6 @@ use std::fs::File;
|
|||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use std::sync::LazyLock;
|
use std::sync::LazyLock;
|
||||||
|
|
||||||
pub const NODE_PUBKEY: &str = "0xd0837609aedd53854651210327db90f5c2626188a00e940bbc9eea2c7e6838b7";
|
|
||||||
pub const ADMIN_PUBKEY: &str = "0x28a3a71197250b0fa4dd0f86288e07ec9cc78ce3338e21e2ebef84dd7780e3eb";
|
|
||||||
|
|
||||||
pub const PACKAGE_ARCHIVE_POSTFIX: &str = "-enclave_packager.tar.gz";
|
pub const PACKAGE_ARCHIVE_POSTFIX: &str = "-enclave_packager.tar.gz";
|
||||||
pub const PACKAGE_ARCHIVE_DIR_PATH: &str = "./enclave_archives";
|
pub const PACKAGE_ARCHIVE_DIR_PATH: &str = "./enclave_archives";
|
||||||
pub const PACKAGE_DIR_PATH: &str = "./enclaves";
|
pub const PACKAGE_DIR_PATH: &str = "./enclaves";
|
||||||
@ -21,7 +18,7 @@ pub static IP_INFO: LazyLock<IPInfo> = LazyLock::new(|| get_ip_info().unwrap());
|
|||||||
pub static USED_RESOURCES_PATH: LazyLock<String> = LazyLock::new(|| {
|
pub static USED_RESOURCES_PATH: LazyLock<String> = LazyLock::new(|| {
|
||||||
let home = home::home_dir().unwrap().to_string_lossy().into_owned();
|
let home = home::home_dir().unwrap().to_string_lossy().into_owned();
|
||||||
std::env::var(DETEE_DIR_ENV_NAME)
|
std::env::var(DETEE_DIR_ENV_NAME)
|
||||||
.unwrap_or(format!("{home}/.detee/app_daemon/USED_RESOURCES_PATH.yaml"))
|
.unwrap_or(format!("{home}/.detee/app_daemon/used_resources.yaml"))
|
||||||
});
|
});
|
||||||
|
|
||||||
pub static DAEMON_CONFIG_PATH: LazyLock<String> = LazyLock::new(|| {
|
pub static DAEMON_CONFIG_PATH: LazyLock<String> = LazyLock::new(|| {
|
||||||
|
41
src/grpc.rs
41
src/grpc.rs
@ -1,7 +1,7 @@
|
|||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use detee_shared::pb::brain::brain_app_daemon_client::BrainAppDaemonClient;
|
use detee_shared::pb::brain::brain_app_daemon_client::BrainAppDaemonClient;
|
||||||
use detee_shared::pb::brain::{
|
use detee_shared::pb::brain::{
|
||||||
AppContract, BrainMessageApp, DaemonMessageApp, Pubkey, RegisterAppNodeReq,
|
AppContract, BrainMessageApp, DaemonAuth, DaemonMessageApp, RegisterAppNodeReq,
|
||||||
};
|
};
|
||||||
use tokio::sync::mpsc::Receiver;
|
use tokio::sync::mpsc::Receiver;
|
||||||
use tokio::sync::mpsc::Sender;
|
use tokio::sync::mpsc::Sender;
|
||||||
@ -14,7 +14,6 @@ use tonic::Request;
|
|||||||
|
|
||||||
use crate::global::IP_INFO;
|
use crate::global::IP_INFO;
|
||||||
use crate::global::PUBLIC_KEY;
|
use crate::global::PUBLIC_KEY;
|
||||||
use crate::global::{ADMIN_PUBKEY, NODE_PUBKEY};
|
|
||||||
|
|
||||||
pub struct ConnectionData {
|
pub struct ConnectionData {
|
||||||
pub brain_url: String,
|
pub brain_url: String,
|
||||||
@ -30,8 +29,8 @@ pub async fn register_node(config: &crate::HostConfig) -> Result<Vec<AppContract
|
|||||||
log::debug!("registering node with brain");
|
log::debug!("registering node with brain");
|
||||||
|
|
||||||
let req = RegisterAppNodeReq {
|
let req = RegisterAppNodeReq {
|
||||||
node_pubkey: NODE_PUBKEY.to_string(),
|
node_pubkey: PUBLIC_KEY.to_string(),
|
||||||
owner_pubkey: ADMIN_PUBKEY.to_string(),
|
owner_pubkey: config.owner_wallet.clone(),
|
||||||
main_ip: IP_INFO.ip.clone(),
|
main_ip: IP_INFO.ip.clone(),
|
||||||
city: IP_INFO.city.clone(),
|
city: IP_INFO.city.clone(),
|
||||||
region: IP_INFO.region.clone(),
|
region: IP_INFO.region.clone(),
|
||||||
@ -82,6 +81,7 @@ pub async fn connect_and_run(conn_data: ConnectionData) -> Result<()> {
|
|||||||
));
|
));
|
||||||
streaming_tasks.spawn(send_messages(
|
streaming_tasks.spawn(send_messages(
|
||||||
client.clone(),
|
client.clone(),
|
||||||
|
conn_data.app_contracts_uuid.clone(),
|
||||||
conn_data.daemon_msg_rx,
|
conn_data.daemon_msg_rx,
|
||||||
conn_data.daemon_msg_tx,
|
conn_data.daemon_msg_tx,
|
||||||
));
|
));
|
||||||
@ -91,15 +91,29 @@ pub async fn connect_and_run(conn_data: ConnectionData) -> Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn sign_stream_auth(contracts: Vec<String>) -> Result<DaemonAuth> {
|
||||||
|
let pubkey = PUBLIC_KEY.clone();
|
||||||
|
let timestamp = chrono::Utc::now().to_rfc3339();
|
||||||
|
let signature =
|
||||||
|
crate::global::sign_message(&(timestamp.to_string() + &format!("{contracts:?}")))?;
|
||||||
|
Ok(DaemonAuth {
|
||||||
|
timestamp,
|
||||||
|
pubkey,
|
||||||
|
contracts,
|
||||||
|
signature,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn receive_messages(
|
pub async fn receive_messages(
|
||||||
mut client: BrainAppDaemonClient<Channel>,
|
mut client: BrainAppDaemonClient<Channel>,
|
||||||
_contracts: Vec<String>,
|
contracts: Vec<String>,
|
||||||
tx: Sender<BrainMessageApp>,
|
tx: Sender<BrainMessageApp>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let pubkey = NODE_PUBKEY.to_string();
|
|
||||||
|
|
||||||
log::debug!("starting to listen for messages from brain");
|
log::debug!("starting to listen for messages from brain");
|
||||||
let mut grpc_stream = client.brain_messages(Pubkey { pubkey }).await?.into_inner();
|
let mut grpc_stream = client
|
||||||
|
.brain_messages(sign_stream_auth(contracts)?)
|
||||||
|
.await?
|
||||||
|
.into_inner();
|
||||||
|
|
||||||
while let Some(stream_update) = grpc_stream.next().await {
|
while let Some(stream_update) = grpc_stream.next().await {
|
||||||
match stream_update {
|
match stream_update {
|
||||||
@ -118,14 +132,17 @@ pub async fn receive_messages(
|
|||||||
|
|
||||||
pub async fn send_messages(
|
pub async fn send_messages(
|
||||||
mut client: BrainAppDaemonClient<Channel>,
|
mut client: BrainAppDaemonClient<Channel>,
|
||||||
|
contracts: Vec<String>,
|
||||||
rx: Receiver<DaemonMessageApp>,
|
rx: Receiver<DaemonMessageApp>,
|
||||||
tx: Sender<DaemonMessageApp>,
|
tx: Sender<DaemonMessageApp>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let pubkey = NODE_PUBKEY.to_string();
|
|
||||||
|
|
||||||
let rx_stream = ReceiverStream::new(rx);
|
let rx_stream = ReceiverStream::new(rx);
|
||||||
|
tx.send(DaemonMessageApp {
|
||||||
tx.send(pubkey.into()).await?;
|
msg: Some(detee_shared::pb::brain::daemon_message_app::Msg::Auth(
|
||||||
|
sign_stream_auth(contracts)?,
|
||||||
|
)),
|
||||||
|
})
|
||||||
|
.await?;
|
||||||
client.daemon_messages(rx_stream).await?;
|
client.daemon_messages(rx_stream).await?;
|
||||||
log::debug!("daemon_messages is about to exit");
|
log::debug!("daemon_messages is about to exit");
|
||||||
Ok(())
|
Ok(())
|
||||||
|
Loading…
Reference in New Issue
Block a user