From bb7d09d1ef11f47198082b4dc23d129b4043e227 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bianca=20F=C3=BCrstenau?= Date: Mon, 10 Feb 2025 14:24:03 +0100 Subject: [PATCH] Argh --- src-tauri/Cargo.lock | 260 +++++++++++++++++++++++++++++-------- src-tauri/Cargo.toml | 5 +- src-tauri/src/data_door.rs | 53 ++++++++ src-tauri/src/lib.rs | 48 ++----- src/index.html | 12 ++ src/main.js | 17 ++- 6 files changed, 297 insertions(+), 98 deletions(-) create mode 100644 src-tauri/src/data_door.rs diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 11d64f5..de948fa 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -17,6 +17,16 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -255,6 +265,12 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + [[package]] name = "base64" version = "0.21.7" @@ -267,6 +283,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + [[package]] name = "bitflags" version = "1.3.2" @@ -289,7 +311,8 @@ dependencies = [ "chrono", "curl", "openssl", - "rand 0.9.0", + "rand 0.8.5", + "ring-compat", "rusqlite", "serde", "serde_json", @@ -564,6 +587,12 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "convert_case" version = "0.4.0" @@ -653,6 +682,18 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + [[package]] name = "crypto-common" version = "0.1.6" @@ -765,6 +806,16 @@ dependencies = [ "syn 2.0.98", ] +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "zeroize", +] + [[package]] name = "deranged" version = "0.3.11" @@ -916,6 +967,45 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "feeef44e73baff3a26d371801df019877a9866a8c493d315ab00177843314f35" +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "elliptic-curve", + "signature", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "signature", +] + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + [[package]] name = "embed-resource" version = "2.5.1" @@ -1037,6 +1127,16 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "field-offset" version = "0.3.6" @@ -1331,6 +1431,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", + "zeroize", ] [[package]] @@ -1471,6 +1572,17 @@ dependencies = [ "system-deps", ] +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + [[package]] name = "gtk" version = "0.18.2" @@ -2647,6 +2759,27 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", +] + +[[package]] +name = "p384" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", +] + [[package]] name = "pango" version = "0.18.3" @@ -2870,6 +3003,16 @@ dependencies = [ "futures-io", ] +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + [[package]] name = "pkg-config" version = "0.3.31" @@ -2929,7 +3072,7 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy 0.7.35", + "zerocopy", ] [[package]] @@ -2938,6 +3081,15 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + [[package]] name = "proc-macro-crate" version = "1.3.1" @@ -3100,17 +3252,6 @@ dependencies = [ "rand_core 0.6.4", ] -[[package]] -name = "rand" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.0", - "zerocopy 0.8.17", -] - [[package]] name = "rand_chacha" version = "0.2.2" @@ -3131,16 +3272,6 @@ dependencies = [ "rand_core 0.6.4", ] -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.0", -] - [[package]] name = "rand_core" version = "0.5.1" @@ -3159,16 +3290,6 @@ dependencies = [ "getrandom 0.2.15", ] -[[package]] -name = "rand_core" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b08f3c9802962f7e1b25113931d94f43ed9725bebc59db9d0c3e9a23b67e15ff" -dependencies = [ - "getrandom 0.3.1", - "zerocopy 0.8.17", -] - [[package]] name = "rand_hc" version = "0.2.0" @@ -3313,6 +3434,25 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "ring-compat" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccce7bae150b815f0811db41b8312fcb74bffa4cab9cee5429ee00f356dd5bd4" +dependencies = [ + "aead", + "digest", + "ecdsa", + "ed25519", + "generic-array", + "p256", + "p384", + "pkcs8", + "rand_core 0.6.4", + "ring", + "signature", +] + [[package]] name = "rusqlite" version = "0.33.0" @@ -3467,6 +3607,19 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "subtle", + "zeroize", +] + [[package]] name = "selectors" version = "0.22.0" @@ -3670,6 +3823,15 @@ dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "rand_core 0.6.4", +] + [[package]] name = "simd-adler32" version = "0.3.7" @@ -3767,6 +3929,16 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -5562,16 +5734,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy" -version = "0.8.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa91407dacce3a68c56de03abe2760159582b846c6a4acd2f456618087f12713" -dependencies = [ - "zerocopy-derive 0.8.17", + "zerocopy-derive", ] [[package]] @@ -5585,17 +5748,6 @@ dependencies = [ "syn 2.0.98", ] -[[package]] -name = "zerocopy-derive" -version = "0.8.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06718a168365cad3d5ff0bb133aad346959a2074bd4a85c121255a11304a8626" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.98", -] - [[package]] name = "zerofrom" version = "0.1.5" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 5e97fbb..1cabfea 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -23,9 +23,10 @@ tauri-plugin-opener = "2" serde = { version = "1", features = ["derive"] } serde_json = "1" rusqlite = {version = "^0.33", features = ["backup", "bundled"] } -rand = {version = "^0.9"} +rand = {version = "^0.8"} chrono = {version = "^0.4"} tokio = {version = "^1.43"} -tauri-plugin-fs = "2" +tauri-plugin-fs = {version = "2"} curl = {version = "^0.4"} openssl = {version = "^0.10", features = ["vendored"] } +ring-compat = {version = "^0.8", features = ["signature", "rand_core"] } diff --git a/src-tauri/src/data_door.rs b/src-tauri/src/data_door.rs new file mode 100644 index 0000000..c9e044f --- /dev/null +++ b/src-tauri/src/data_door.rs @@ -0,0 +1,53 @@ +use chrono::offset::Utc; +use curl::{easy, easy::Easy2}; +use rand::prelude::*; +use ring_compat::signature::ed25519::SigningKey; +use tauri::{Manager, State}; +use tokio::sync::Mutex; + +pub struct DoorState { + last_sync: i64, + id: u64, + key: SigningKey, +} + +impl DoorState { + pub fn new() -> Self { + let mut rng = rand::thread_rng(); + let last_sync = i64::MIN; + let id = rng.gen(); + let key = SigningKey::generate(&mut rng); + DoorState { last_sync, id, key } + } +} + +struct Collector(Vec); + +impl easy::Handler for Collector { + fn write(&mut self, data: &[u8]) -> Result { + self.0.extend_from_slice(data); + Ok(data.len()) + } +} + +#[tauri::command] +pub async fn pull_data(state: State<'_, Mutex>) -> Result { + println!("Hiya"); + let mut client = Easy2::new(Collector(Vec::new())); + client.custom_request("PROPFIND").map_err(|_| ())?; + client.url("https://cloud.seebruecke.org/public.php/webdav/data/") + .map_err(|_| ())?; + client.username(include_str!("cloud_user.txt")).map_err(|_| ())?; + client.http_auth(easy::Auth::new().auto(true)).map_err(|_| ())?; + client.ssl_cainfo_blob(include_bytes!("isrg-root-x1.pem")) + .map_err(|_| ())?; + client.perform().map_err(|_| ())?; + let content = client.get_ref(); + Ok(String::from_utf8_lossy(&content.0).to_string()) +} + +#[tauri::command] +pub async fn push_data(state: State<'_, Mutex>) -> Result<(), ()> { + let mut client = Easy2::new(Collector(Vec::new())); + Ok(()) +} diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 7d1fb55..72b977b 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1,18 +1,12 @@ use chrono::offset::Utc; -use curl::{easy, easy::Easy2}; use rand::prelude::*; use rusqlite::{types::ToSqlOutput, Connection, ToSql}; use tauri::{Manager, State}; use tokio::sync::Mutex; -struct Collector(Vec); +mod data_door; -impl easy::Handler for Collector { - fn write(&mut self, data: &[u8]) -> Result { - self.0.extend_from_slice(data); - Ok(data.len()) - } -} +use data_door::DoorState; struct AppState { db: Connection, @@ -58,40 +52,19 @@ impl ToSql for Store { } } -#[tauri::command] -async fn pull_data() -> Result { - let mut client = Easy2::new(Collector(Vec::new())); - client.custom_request("PROPFIND").map_err(|_| ())?; - client.url("https://cloud.seebruecke.org/public.php/webdav/data/") - .map_err(|_| ())?; - client.username(include_str!("cloud_user.txt")); - client.http_auth(easy::Auth::new().auto(true)); - client.ssl_cainfo_blob(include_bytes!("isrg-root-x1.pem")) - .map_err(|_| ())?; - client.perform().map_err(|_| ())?; - let content = client.get_ref(); - Ok(String::from_utf8_lossy(&content.0).to_string()) -} - -#[tauri::command] -async fn push_data() -> Result<(), ()> { - let mut client = Easy2::new(Collector(Vec::new())); - Ok(()) -} - -// Learn more about Tauri commands at https://tauri.app/develop/calling-rust/ #[tauri::command] async fn swap( store: &str, state: State<'_, Mutex>, ) -> Result<(), ()> { + println!("Hi"); let state = state.lock().await; - let mut rng = rand::rng(); + let mut rng = rand::thread_rng(); let store: Store = store.try_into()?; state.db.execute( "INSERT INTO swap VALUES (?1, ?2, ?3, ?4, ?5)", ( - rng.random::(), + rng.gen::(), store, state.acc, Utc::now().timestamp(), @@ -114,9 +87,9 @@ async fn count(state: State<'_, Mutex>) -> Result { #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { - let mut rng = rand::rng(); + let mut rng = rand::thread_rng(); let db = Connection::open_in_memory().expect("Failed to create DB."); - let acc = rng.random::(); + let acc = rng.gen::(); db.execute( "CREATE TABLE swap ( rand INTEGER, @@ -129,15 +102,20 @@ pub fn run() { ) .unwrap(); let state = AppState { db, acc }; + let door = DoorState::new(); tauri::Builder::default() .plugin(tauri_plugin_fs::init()) .setup(|app| { +// app.manage(Mutex::new(door)); app.manage(Mutex::new(state)); Ok(()) }) .plugin(tauri_plugin_opener::init()) .invoke_handler(tauri::generate_handler![ - swap, count, pull_data + swap, + count, + data_door::pull_data, + data_door::push_data, ]) .run(tauri::generate_context!()) .expect("error while running tauri application"); diff --git a/src/index.html b/src/index.html index 4ea453d..6017f2a 100644 --- a/src/index.html +++ b/src/index.html @@ -66,5 +66,17 @@

+
+
+ +
+
+ +
+
diff --git a/src/main.js b/src/main.js index 85db6a0..6c38b7c 100644 --- a/src/main.js +++ b/src/main.js @@ -2,14 +2,9 @@ const { invoke } = window.__TAURI__.core; let cntMsgEl; -// async function greet() { -// Learn more about Tauri commands at https://tauri.app/develop/calling-rust/ -// greetMsgEl.textContent = await invoke("greet", { name: greetInputEl.value }); -//} - async function swap(s) { - invoke("swap", { store: s }); - cntMsgEl.textContent = await invoke("pull_data", {}); + await invoke("swap", { store: s }); + cntMsgEl.textContent = await invoke("count", {}); } window.addEventListener("DOMContentLoaded", () => { @@ -38,4 +33,12 @@ window.addEventListener("DOMContentLoaded", () => { e.preventDefault(); swap("tegut"); }); + document.querySelector("#push-form").addEventListener("submit", (e) => { + e.preventDefault(); + await invoke("push_data"); + }); + document.querySelector("#pull-form").addEventListener("submit", (e) => { + e.preventDefault(); + cntMsgEl.textContent = await await invoke("pull_data", {}); + }); });