diff --git a/appmgr/Cargo.lock b/appmgr/Cargo.lock index a5e8f8b76..60397766c 100644 --- a/appmgr/Cargo.lock +++ b/appmgr/Cargo.lock @@ -665,6 +665,9 @@ name = "either" version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +dependencies = [ + "serde", +] [[package]] name = "embassy-os" @@ -2409,6 +2412,7 @@ dependencies = [ "parking_lot", "percent-encoding", "rustls", + "serde", "sha2 0.9.5", "smallvec", "sqlformat", @@ -2432,9 +2436,12 @@ dependencies = [ "either", "futures", "heck", + "hex", "once_cell", "proc-macro2 1.0.28", "quote 1.0.9", + "serde", + "serde_json", "sha2 0.9.5", "sqlx-core", "sqlx-rt", diff --git a/appmgr/Cargo.toml b/appmgr/Cargo.toml index c8f92a46e..5065b9b0c 100644 --- a/appmgr/Cargo.toml +++ b/appmgr/Cargo.toml @@ -82,7 +82,7 @@ serde_toml = { package="toml", version="0.5.8" } serde_yaml = "0.8.14" sha2 = "0.9.3" simple-logging = "2.0" -sqlx = { version="0.5", features=["runtime-tokio-rustls", "sqlite"] } +sqlx = { version="0.5", features=["runtime-tokio-rustls", "sqlite", "offline"] } thiserror = "1.0.24" tokio = { version="1.5.0", features=["full"] } tokio-compat-02 = "0.2.0" diff --git a/appmgr/sqlx-data.json b/appmgr/sqlx-data.json new file mode 100644 index 000000000..34f4a1afc --- /dev/null +++ b/appmgr/sqlx-data.json @@ -0,0 +1,21 @@ +{ + "db": "SQLite", + "3e57a0e52b69f33e9411c13b03a5d82c5856d63f0375eb4c23b255a09c54f8b1": { + "query": "SELECT key FROM tor WHERE package = ? AND interface = ?", + "describe": { + "columns": [ + { + "name": "key", + "ordinal": 0, + "type_info": "Blob" + } + ], + "parameters": { + "Right": 2 + }, + "nullable": [ + false + ] + } + } +} \ No newline at end of file diff --git a/appmgr/src/context/rpc.rs b/appmgr/src/context/rpc.rs index c34ca5756..85d6efdbb 100644 --- a/appmgr/src/context/rpc.rs +++ b/appmgr/src/context/rpc.rs @@ -21,6 +21,7 @@ use crate::{Error, ResultExt}; pub struct RpcContextConfig { pub bind_rpc: Option, pub bind_ws: Option, + pub tor_control: Option, pub db: Option, pub secret_store: Option, } @@ -56,21 +57,27 @@ impl RpcContext { .unwrap_or_else(|| Path::new("/mnt/embassy-os/embassy.db").to_owned()), ) .await?; + let secret_store = SqlitePool::connect(&format!( + "sqlite://{}", + base.secret_store + .unwrap_or_else(|| Path::new("/mnt/embassy-os/secrets.db").to_owned()) + .display() + )) + .await?; let mut db_handle = db.handle(); let lan_handle = Container::new(); lan_handle.set(enable_lan(&mut db_handle).await?).await; - let tor_controller = TorController::init(&mut db_handle).await?; + let tor_controller = TorController::init( + base.tor_control.unwrap_or(([127, 0, 0, 1], 9051).into()), + &mut db_handle, + &mut secret_store.acquire().await?, + ) + .await?; let seed = Arc::new(RpcContextSeed { bind_rpc: base.bind_rpc.unwrap_or(([127, 0, 0, 1], 5959).into()), bind_ws: base.bind_ws.unwrap_or(([127, 0, 0, 1], 5960).into()), db, - secret_store: SqlitePool::connect(&format!( - "sqlite://{}", - base.secret_store - .unwrap_or_else(|| Path::new("/mnt/embassy-os/secrets.db").to_owned()) - .display() - )) - .await?, + secret_store, docker: Docker::connect_with_unix_defaults()?, lan_handle, tor_controller,