diff --git a/unshell-gui/Cargo.lock b/unshell-gui/Cargo.lock index 0df2c0f..2e9c243 100644 --- a/unshell-gui/Cargo.lock +++ b/unshell-gui/Cargo.lock @@ -52,7 +52,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom", + "getrandom 0.3.4", "once_cell", "serde", "version_check", @@ -142,6 +142,12 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "atomic_float" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "628d228f918ac3b82fe590352cc719d30664a0c13ca3a60266fe02c7132d480a" + [[package]] name = "autocfg" version = "1.5.0" @@ -458,7 +464,7 @@ dependencies = [ "bitflags 1.3.2", "core-foundation 0.9.4", "core-graphics-types", - "foreign-types", + "foreign-types 0.5.0", "libc", ] @@ -655,6 +661,19 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "egui-async" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f611c6c4c47a6786f77129c887e947410b1d23f0f222447c42a91a5f981fd9ed" +dependencies = [ + "atomic_float", + "egui", + "tokio", + "tracing", + "wasm-bindgen-futures", +] + [[package]] name = "egui-wgpu" version = "0.33.2" @@ -757,6 +776,15 @@ dependencies = [ "serde", ] +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + [[package]] name = "enum-map" version = "2.7.3" @@ -835,6 +863,12 @@ version = "3.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + [[package]] name = "fax" version = "0.2.6" @@ -880,12 +914,27 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "foldhash" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared 0.1.1", +] + [[package]] name = "foreign-types" version = "0.5.0" @@ -893,7 +942,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" dependencies = [ "foreign-types-macros", - "foreign-types-shared", + "foreign-types-shared 0.3.1", ] [[package]] @@ -907,6 +956,12 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + [[package]] name = "foreign-types-shared" version = "0.3.1" @@ -922,6 +977,45 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -942,6 +1036,17 @@ dependencies = [ "windows-link", ] +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "getrandom" version = "0.3.4" @@ -1043,6 +1148,25 @@ dependencies = [ "gl_generator", ] +[[package]] +name = "h2" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "half" version = "2.7.1" @@ -1097,6 +1221,45 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "http" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + [[package]] name = "hybrid-array" version = "0.4.5" @@ -1106,6 +1269,86 @@ dependencies = [ "typenum", ] +[[package]] +name = "hyper" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "pin-utils", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "system-configuration", + "tokio", + "tower-service", + "tracing", + "windows-registry", +] + [[package]] name = "iana-time-zone" version = "0.1.64" @@ -1266,6 +1509,22 @@ dependencies = [ "generic-array", ] +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "itertools" version = "0.14.0" @@ -1309,7 +1568,7 @@ version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ - "getrandom", + "getrandom 0.3.4", "libc", ] @@ -1453,6 +1712,17 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "mio" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + [[package]] name = "moxcms" version = "0.7.9" @@ -1488,6 +1758,23 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "native-tls" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + [[package]] name = "ndk" version = "0.9.0" @@ -1833,6 +2120,50 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "openssl" +version = "0.10.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" +dependencies = [ + "bitflags 2.10.0", + "cfg-if", + "foreign-types 0.3.2", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.111" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "orbclient" version = "0.3.49" @@ -1950,6 +2281,12 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "pkg-config" version = "0.3.32" @@ -2120,7 +2457,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom", + "getrandom 0.3.4", ] [[package]] @@ -2182,6 +2519,60 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" +[[package]] +name = "reqwest" +version = "0.12.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b4c14b2d9afca6a60277086b0cc6a6ae0b568f6f7916c943a8cdc79f8be240f" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "js-sys", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-native-tls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "ron" version = "0.11.0" @@ -2233,6 +2624,39 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "rustls" +version = "0.23.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.22" @@ -2254,6 +2678,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -2266,6 +2699,29 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.10.0", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "serde" version = "1.0.228" @@ -2309,6 +2765,18 @@ dependencies = [ "serde_core", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "sha2" version = "0.10.9" @@ -2431,6 +2899,16 @@ dependencies = [ "serde", ] +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -2471,6 +2949,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "1.0.109" @@ -2493,6 +2977,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + [[package]] name = "synstructure" version = "0.13.2" @@ -2504,6 +2997,40 @@ dependencies = [ "syn 2.0.111", ] +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.10.0", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +dependencies = [ + "fastrand", + "getrandom 0.3.4", + "once_cell", + "rustix 1.1.2", + "windows-sys 0.61.2", +] + [[package]] name = "thiserror" version = "1.0.69" @@ -2568,6 +3095,53 @@ dependencies = [ "zerovec", ] +[[package]] +name = "tokio" +version = "1.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + [[package]] name = "toml_datetime" version = "0.7.3" @@ -2598,6 +3172,51 @@ dependencies = [ "winnow", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +dependencies = [ + "bitflags 2.10.0", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + [[package]] name = "tracing" version = "0.1.41" @@ -2606,14 +3225,35 @@ checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "log", "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.111", +] + [[package]] name = "tracing-core" version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "ttf-parser" @@ -2667,7 +3307,7 @@ dependencies = [ "aes", "block-padding 0.4.2", "cbc", - "getrandom", + "getrandom 0.3.4", "hex", "hex-literal", "regex", @@ -2681,9 +3321,11 @@ dependencies = [ "chrono", "eframe", "egui", + "egui-async", "egui_extras", "egui_tiles", "log", + "reqwest", "serde", "serde_json", "unshell-lib", @@ -2714,6 +3356,12 @@ dependencies = [ "unshell-crypt", ] +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.5.7" @@ -2732,6 +3380,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.5" @@ -2748,6 +3402,21 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + [[package]] name = "wasip2" version = "1.0.1+wasi-0.2.4" @@ -3160,6 +3829,17 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link", + "windows-result", + "windows-strings", +] + [[package]] name = "windows-result" version = "0.4.1" @@ -3608,6 +4288,12 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" + [[package]] name = "zerotrie" version = "0.2.3" diff --git a/unshell-gui/Cargo.toml b/unshell-gui/Cargo.toml index d1df9ab..0798c1e 100644 --- a/unshell-gui/Cargo.toml +++ b/unshell-gui/Cargo.toml @@ -7,13 +7,17 @@ authors = ["ASTATIN3"] include = ["LICENSE-APACHE", "LICENSE-MIT", "**/*.rs", "Cargo.toml"] rust-version = "1.88" -[package.metadata.docs.rs] -all-features = true -targets = ["x86_64-unknown-linux-gnu", "wasm32-unknown-unknown"] +[lib] +crate-type = ["cdylib"] + +# [package.metadata.docs.rs] +# all-features = true +# targets = ["x86_64-unknown-linux-gnu", "wasm32-unknown-unknown"] [dependencies] unshell-lib = {path="../unshell-lib"} +# Stuff for app functionality egui = "0.33.0" eframe = { version = "0.33.0", default-features = false, features = [ # "accesskit", # Make egui compatible with screen readers. NOTE: adds a lot of dependencies. @@ -23,27 +27,27 @@ eframe = { version = "0.33.0", default-features = false, features = [ "wayland", # To support Linux (and CI) "x11", # To support older Linux distributions (restores one of the default features) ] } +egui_extras = "0.33.2" +egui_tiles = "0.14.0" +egui-async = "0.2.6" log = "0.4.27" +chrono = "0.4.42" # You only need serde if you want app persistence: serde = { version = "1.0.219", features = ["derive"] } -egui_extras = "0.33.2" -egui_tiles = "0.14.0" +serde_json = "1.0.145" -# native: -# [target.'cfg(not(target_arch = "wasm32"))'.dependencies] -# pretty_env_logger = "0.5.0" - -# web: -# [target.'cfg(target_arch = "wasm32")'.dependencies] +# Web Stuff wasm-bindgen-futures = "0.4.50" wasm-bindgen = "0.2.106" -web-sys = "0.3.70" # to access the DOM (to hide the loading text) -serde_json = "1.0.145" -chrono = "0.4.42" +web-sys = {version = "0.3.70", features = ['Headers', 'Request', 'RequestInit', 'RequestMode', 'Response', 'Window']} + +reqwest = {version = "0.12.26", features=["json"]} +# tokio = {version = "1.48.0", features = ["full"]} [profile.release] opt-level = 2 # fast and small wasm +# lto = true # Optimize all dependencies even in debug builds: [profile.dev.package."*"] diff --git a/unshell-gui/src/app/app.rs b/unshell-gui/src/app/app.rs index 8234d68..341e2fb 100644 --- a/unshell-gui/src/app/app.rs +++ b/unshell-gui/src/app/app.rs @@ -48,6 +48,8 @@ impl eframe::App for TemplateApp { /// Called each time the UI needs repainting, which may be many times per second. fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { + ctx.plugin_or_default::(); + if !self.state.auth.logged_in() { egui::CentralPanel::default() .frame(Frame::central_panel(&ctx.style()).inner_margin(0)) diff --git a/unshell-gui/src/auth/js_poll.rs b/unshell-gui/src/auth/js_poll.rs new file mode 100644 index 0000000..f86999a --- /dev/null +++ b/unshell-gui/src/auth/js_poll.rs @@ -0,0 +1,108 @@ +use serde::de::DeserializeOwned; +use std::cell::RefCell; +use std::rc::Rc; +use wasm_bindgen::JsCast; +use wasm_bindgen::prelude::*; +use web_sys::js_sys::Promise; + +pub struct PromiseWrapper { + state: Rc>>, +} + +enum PromiseState { + Pending, + Resolved(T), + Rejected(String), +} + +impl PromiseWrapper +where + T: DeserializeOwned, +{ + /// Create a new PromiseWrapper from a JavaScript Promise + /// The promise should resolve to a Response object (from fetch) + pub fn new(promise: Promise) -> Self { + let state = Rc::new(RefCell::new(PromiseState::Pending)); + let state_clone = state.clone(); + let state_clone2 = state.clone(); + + // Success callback + let success = Closure::once(move |value: JsValue| { + if let Ok(response) = value.dyn_into::() { + if let Ok(json_promise) = response.json() { + let state_inner = state_clone.clone(); + + let json_success = Closure::once(move |json_value: JsValue| { + *state_inner.borrow_mut() = if let Some(body) = json_value.as_string() { + match serde_json::from_str(&body) { + Ok(data) => PromiseState::Resolved(data), + Err(e) => PromiseState::Rejected(format!("{:?}", e)), + } + } else { + PromiseState::Rejected(format!("Response was not a string")) + }; + + match serde_wasm_bindgen::from_value::(json_value) { + Ok(data) => *state_inner.borrow_mut() = PromiseState::Resolved(data), + Err(e) => { + *state_inner.borrow_mut() = + PromiseState::Rejected(format!("{:?}", e)) + } + } + }); + + let _ = json_promise.then(&json_success); + json_success.forget(); + } + } + }); + + // Error callback + let error = Closure::once(move |err: JsValue| { + *state_clone2.borrow_mut() = PromiseState::Rejected( + err.as_string() + .unwrap_or_else(|| "Unknown error".to_string()), + ); + }); + + let _ = promise.then2(&success, &error); + success.forget(); + error.forget(); + + Self { state } + } + + /// Poll the promise to check if it has completed + /// Returns Some(T) if resolved successfully, None if still pending or rejected + /// This is a lightweight check that's safe to call every frame + #[inline] + pub fn poll(&self) -> Option + where + T: Clone, + { + match &*self.state.borrow() { + PromiseState::Resolved(value) => Some(value.clone()), + _ => None, + } + } + + /// Check if the promise is still pending (lightweight) + #[inline] + pub fn is_pending(&self) -> bool { + matches!(&*self.state.borrow(), PromiseState::Pending) + } + + /// Check if the promise was rejected (lightweight) + #[inline] + pub fn is_rejected(&self) -> bool { + matches!(&*self.state.borrow(), PromiseState::Rejected(_)) + } + + /// Get the error message if rejected + pub fn error(&self) -> Option { + match &*self.state.borrow() { + PromiseState::Rejected(err) => Some(err.clone()), + _ => None, + } + } +} diff --git a/unshell-gui/src/auth/webreq.rs b/unshell-gui/src/auth/webreq.rs new file mode 100644 index 0000000..96a8c1f --- /dev/null +++ b/unshell-gui/src/auth/webreq.rs @@ -0,0 +1,113 @@ +impl Auth { + // pub fn get_test(url: String) -> Promise { + // let fut = Self::get_async(&url); + + // // wasm_bindgen_futures::(fut) + // } + + // pub fn get_async(&self, url: &str) -> PromiseWrapper + // where + // // F: FnOnce(R) + 'static, + // R: DeserializeOwned + 'static, + // { + // let token = self.token.as_ref().unwrap(); + + // let opts = RequestInit::new(); + // opts.set_method("GET"); + + // let request = Request::new_with_str_and_init(url, &opts).unwrap(); + + // let headers = request.headers(); + + // headers.set("content-type", "application/json").unwrap(); + + // headers + // .set("Authorization", &format!("Bearer {}", token.token)) + // .unwrap(); + + // let window = web_sys::window().unwrap(); + // let promise = window.fetch_with_request(&request); + + // // wasm_bindgen_futures::spawn_local(async move { + // // let resp_value = JsFuture::from(window.fetch_with_request(&request)) + // // .await + // // .unwrap(); + + // // // `resp_value` is a `Response` object. + // // assert!(resp_value.is_instance_of::()); + // // let resp: Response = resp_value.dyn_into().unwrap(); + + // // // Convert this other `Promise` into a rust `Future`. + // // if let Ok(json) = resp.json() { + // // if let Ok(json) = JsFuture::from(json).await { + // // crate::log(&format!("{json:?}")); + // // // let json = ; + // // } + // // } + + // // // crate::log(text); + // // // Any follow-up work here + // // }); + + // PromiseWrapper::new(promise) + + // // Ok(()) + // } + + // pub fn get_async_callback(&self, url: &str, callback: F) -> Result<()> + // where + // F: FnOnce(R) + 'static, + // R: DeserializeOwned + 'static, + // { + // if self.token.is_none() { + // return Err(ModuleError::Error("Not authenticated".into())); + // } + + // let token = self.token.clone().unwrap(); + + // let url = url.to_string(); + + // let state_clone = self.auth_state.clone(); + + // wasm_bindgen_futures::future_to_promise(async move { + // let result = Self::get_async(&url, &token).await; + + // match result { + // Ok(result) => callback(result), + // Err(err) => (*state_clone.lock()) = AuthState::Error(err.into()), + // } + + // Ok(JsValue::NULL) + // }); + + // Ok(()) + // } + + // async fn get_async(url: &str, token: &Token) -> Result + // where + // R: DeserializeOwned + 'static, + // { + // let res = reqwest::Client::new() + // .get(format!("http://localhost:8080{url}")) + // .bearer_auth(&token.token) + // .send() + // .await + // .map_err(|e| ModuleError::Error(e.to_string()))?; + + // match res.error_for_status() { + // Ok(res) => res + // .json() + // .await + // .map_err(|e| ModuleError::Error(e.to_string())), + // Err(err) => Err(ModuleError::Error(format!( + // "Server returned error: {err:?}" + // ))), + // } + + // // .json::() + // // .await + // // .map_err(|e| ModuleError::Error(e.to_string()))?; + + // // serde_json::from_str(&res).map_err(|e| ModuleError::SerdeJsonError(e.to_string())) + // } +} diff --git a/unshell-gui/src/interface/render_interface.rs b/unshell-gui/src/interface/interface.rs similarity index 100% rename from unshell-gui/src/interface/render_interface.rs rename to unshell-gui/src/interface/interface.rs diff --git a/unshell-gui/src/interface/mod.rs b/unshell-gui/src/interface/mod.rs index e85aa8a..ad4319a 100644 --- a/unshell-gui/src/interface/mod.rs +++ b/unshell-gui/src/interface/mod.rs @@ -1,21 +1,26 @@ -mod render_interface; +mod interface; use std::{ path::PathBuf, sync::{Arc, Mutex}, }; -use unshell_lib::Result; +use egui_async::Bind; +use log::debug; use unshell_lib::config::TreeMessage; +use unshell_lib::{ModuleError, Result}; use crate::auth::Auth; #[derive(serde::Deserialize, serde::Serialize)] pub struct InterfaceWindow { path: PathBuf, - + // #[serde(skip)] + // data_bind: Bind, #[serde(skip)] state: Arc>, + // #[serde(skip)] + // promise: Option>>, } pub struct InterfaceWindowState { @@ -26,6 +31,8 @@ pub struct InterfaceWindowState { impl InterfaceWindow { pub fn update(&mut self, auth: &mut Auth, ui: &mut egui::Ui) { + // let data_bind = Bind::::new(false); + ui.heading("Interface"); ui.label(self.path.to_string_lossy()); @@ -73,7 +80,8 @@ impl InterfaceWindow { Ok(item) => { state_lock.branch = Some(item); } - Err(_) => { + Err(err) => { + crate::log(&format!("Got error {err:?}")); state_lock.is_error = true; } } @@ -93,14 +101,14 @@ impl InterfaceWindow { let clear = match branch { TreeMessage::InterfaceAndValue(interface_struct, interface_data) => { - render_interface::render(ui, interface_struct, interface_data); + interface::render(ui, interface_struct, interface_data); if ui.button("Save").clicked() { auth.post( &format!("/api/interface{}", self.path.display()), &TreeMessage::State(interface_data.clone()), move |response: Result| { - crate::log(&format!("{response:?}")); + debug!("{response:?}"); }, ) .unwrap(); @@ -129,6 +137,56 @@ impl InterfaceWindow { drop(state_lock) } } + + // if ui.button("Go Up").clicked() { + // self.go_up(); + // // self.data_bind.clear(); + // } + + // match self.promise.as_mut() { + // Some(promise) => { + // if let Some(result) = promise.poll() { + // crate::log(&format!("{result:?}")); + // } else { + // crate::log("Poll failed"); + // } + // } + // None => { + // self.promise = + // Some(auth.get_async(&format!("/api/interface{}", self.path.to_str().unwrap()))); + // } + // } + + // let future = Auth::get_async::("/api/test").await; + // future.; + + // if let Some(res) = self.data_bind.read_or_request(async || { + // // self.go_up(); + // // auth.get("", |e: String| {}); + + // reqwest::get("https://icanhazip.com/") + // .await + // .map_err(|e| ModuleError::Error(e.to_string()))? + // .text() + // .await + // .map_err(|e| ModuleError::Error(e.to_string())) + // }) { + // match res { + // Ok(ip) => { + // ui.label(format!("OK {ip}")); + // } + // Err(err) => { + // ui.label(format!("ERR {err}")); + // } + // } + // } else { + // ui.spinner(); + // }; + + // if ui.button("Refresh").clicked() { + // Auth::get_async_callback::("/api/interface"); + // // self.data_bind.clear(); + // } } fn reset_path(&mut self) { @@ -136,19 +194,25 @@ impl InterfaceWindow { } fn go_up(&mut self) { - self.path = PathBuf::from(self.path.parent().unwrap()); + if let Some(parent) = self.path.parent() { + self.path = PathBuf::from(parent); + } } fn go_down(&mut self, path: String) { self.path = self.path.join(path); } + + async fn get() {} } impl Default for InterfaceWindow { fn default() -> Self { Self { path: "/".into(), + // promise: None, state: Arc::new(Mutex::new(InterfaceWindowState::default())), + // data_bind: Bind::new(false), } } } diff --git a/unshell-gui/src/lib.rs b/unshell-gui/src/lib.rs index 854ceec..7751b5f 100644 --- a/unshell-gui/src/lib.rs +++ b/unshell-gui/src/lib.rs @@ -34,6 +34,54 @@ extern "C" { pub fn httpPostAuth(url: &str, auth: String, data: &str, ok_callback: JsValue); } +// When compiling to web using trunk: +#[cfg(target_arch = "wasm32")] +#[wasm_bindgen(start)] +pub async fn run() { + use wasm_bindgen::JsCast as _; + + use app::TemplateApp; + + // Redirect `log` message to `console.log` and friends: + eframe::WebLogger::init(log::LevelFilter::Debug).ok(); + + let web_options = eframe::WebOptions::default(); + + let document = web_sys::window() + .expect("No window") + .document() + .expect("No document"); + + let canvas = document + .get_element_by_id("the_canvas_id") + .expect("Failed to find the_canvas_id") + .dyn_into::() + .expect("the_canvas_id was not a HtmlCanvasElement"); + + let start_result = eframe::WebRunner::new() + .start( + canvas, + web_options, + Box::new(|cc| Ok(Box::new(TemplateApp::new(cc)))), + ) + .await; + + // Remove the loading text and spinner: + if let Some(loading_text) = document.get_element_by_id("loading_text") { + match start_result { + Ok(_) => { + loading_text.remove(); + } + Err(e) => { + loading_text.set_inner_html( + "

The app has crashed. See the developer console for details.

", + ); + panic!("Failed to start eframe: {e:?}"); + } + } + } +} + // } // #[cfg(not(target_arch = "wasm32"))] // mod JsFunc { diff --git a/unshell-gui/src/main.rs b/unshell-gui/src/main.rs deleted file mode 100644 index f11ae59..0000000 --- a/unshell-gui/src/main.rs +++ /dev/null @@ -1,70 +0,0 @@ -#![warn(clippy::all, rust_2018_idioms)] -#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release - -// When compiling natively: -#[cfg(not(target_arch = "wasm32"))] -fn main() -> eframe::Result { - // pretty_env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`). - - // let native_options = eframe::NativeOptions { - // viewport: egui::ViewportBuilder::default() - // .with_inner_size([400.0, 300.0]) - // .with_min_inner_size([300.0, 220.0]), - // ..Default::default() - // }; - // eframe::run_native( - // "eframe template", - // native_options, - // Box::new(|cc| Ok(Box::new(TemplateApp::new(cc)))), - // ) - todo!() -} - -// When compiling to web using trunk: -#[cfg(target_arch = "wasm32")] -fn main() { - use eframe::wasm_bindgen::JsCast as _; - - use unshell_gui::app::TemplateApp; - - // Redirect `log` message to `console.log` and friends: - eframe::WebLogger::init(log::LevelFilter::Debug).ok(); - - let web_options = eframe::WebOptions::default(); - - wasm_bindgen_futures::spawn_local(async { - let document = web_sys::window() - .expect("No window") - .document() - .expect("No document"); - - let canvas = document - .get_element_by_id("the_canvas_id") - .expect("Failed to find the_canvas_id") - .dyn_into::() - .expect("the_canvas_id was not a HtmlCanvasElement"); - - let start_result = eframe::WebRunner::new() - .start( - canvas, - web_options, - Box::new(|cc| Ok(Box::new(TemplateApp::new(cc)))), - ) - .await; - - // Remove the loading text and spinner: - if let Some(loading_text) = document.get_element_by_id("loading_text") { - match start_result { - Ok(_) => { - loading_text.remove(); - } - Err(e) => { - loading_text.set_inner_html( - "

The app has crashed. See the developer console for details.

", - ); - panic!("Failed to start eframe: {e:?}"); - } - } - } - }); -} diff --git a/unshell-gui/src/main~.rs b/unshell-gui/src/main~.rs new file mode 100644 index 0000000..a67a1c1 --- /dev/null +++ b/unshell-gui/src/main~.rs @@ -0,0 +1,21 @@ +#![warn(clippy::all, rust_2018_idioms)] +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release + +// When compiling natively: +#[cfg(not(target_arch = "wasm32"))] +fn main() -> eframe::Result { + // pretty_env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`). + + // let native_options = eframe::NativeOptions { + // viewport: egui::ViewportBuilder::default() + // .with_inner_size([400.0, 300.0]) + // .with_min_inner_size([300.0, 220.0]), + // ..Default::default() + // }; + // eframe::run_native( + // "eframe template", + // native_options, + // Box::new(|cc| Ok(Box::new(TemplateApp::new(cc)))), + // ) + todo!() +} diff --git a/unshell-lib/src/error.rs b/unshell-lib/src/error.rs index 6743dfe..02eacd0 100644 --- a/unshell-lib/src/error.rs +++ b/unshell-lib/src/error.rs @@ -3,7 +3,7 @@ use std::fmt; pub type Result = std::result::Result; ///Generic error type for module-related operations. -#[derive(Debug, serde::Serialize, serde::Deserialize)] +#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] pub enum ModuleError { LibLoadingError(String), // LogError(log::SetLoggerError), @@ -54,3 +54,9 @@ impl fmt::Display for ModuleError { f.write_str(format!("{:?}", self).as_str()) } } + +impl From for std::string::String { + fn from(value: ModuleError) -> Self { + value.to_string() + } +} diff --git a/unshell-server/Cargo.toml b/unshell-server/Cargo.toml index 1ed29a0..a1f898f 100644 --- a/unshell-server/Cargo.toml +++ b/unshell-server/Cargo.toml @@ -12,15 +12,19 @@ unshell-lib = {path = "../unshell-lib", default-featues = false} unshell-obfuscate = {path = "../unshell-obfuscate", default-featues = false} unshell-manager = {path = "../unshell-manager", default-featues = false} + +clap = {version = "4.5.53", features = ["derive"]} axum = "0.8.7" axum-extra = {version="0.12.2", features = ["typed-header"]} -jsonwebtoken = {version = "10.2.0", features = ["aws_lc_rs"]} +tokio = {version="1.48.0", features = ["full"] } + serde = {version = "1.0.228", features = ["derive"]} serde_json = "1.0.145" -tokio = {version="1.48.0", features = ["full"] } -bcrypt = "0.17.1" chrono = "0.4.42" static_init = "1.0.4" -clap = {version = "4.5.53", features = ["derive"]} -sled = "0.34.7" toml = "0.9.9" + +jsonwebtoken = {version = "10.2.0", features = ["aws_lc_rs"]} +bcrypt = "0.17.1" + +sled = "0.34.7" diff --git a/unshell-server/src/api.rs b/unshell-server/src/api.rs index e9492fb..d058d76 100644 --- a/unshell-server/src/api.rs +++ b/unshell-server/src/api.rs @@ -51,6 +51,11 @@ pub async fn start_api(address: &str, server: Server) { router = route_get!(router, "/api/interface/", Server::get_tree2_root); router = route_get!(router, "/api/interface/{*path}", Server::get_tree2); + + // router = router.route("/api/interface", get(Server::get_tree2_root)); + + // router = router.route("/api/interface/{*path}", post(Server::post_tree2)); + router = route_post!(router, "/api/interface/{*path}", Server::post_tree2); // router = route_get_log(router); diff --git a/unshell-server/src/auth/mod.rs b/unshell-server/src/auth/mod.rs index 4d9c19a..6b0cb63 100644 --- a/unshell-server/src/auth/mod.rs +++ b/unshell-server/src/auth/mod.rs @@ -58,7 +58,7 @@ pub async fn authorize(mut req: Request, next: Next) -> Result, A let (_, token) = (header.next(), header.next()); - let token_data: TokenData = match decode_jwt(token.unwrap().to_string()) { + let _token_data: TokenData = match decode_jwt(token.unwrap().to_string()) { Ok(data) => data, Err(_) => { return Err(AuthError { @@ -68,18 +68,18 @@ pub async fn authorize(mut req: Request, next: Next) -> Result, A } }; - // Fetch the user details from the database - let current_user = match retrieve_user_by_email(&token_data.claims.email) { - Some(user) => user, - None => { - return Err(AuthError { - message: "Unauthorized".to_string(), - status_code: StatusCode::UNAUTHORIZED, - }); - } - }; + // // Fetch the user details from the database + // let current_user = match retrieve_user_by_email(&token_data.claims.email) { + // Some(user) => user, + // None => { + // return Err(AuthError { + // message: "Unauthorized".to_string(), + // status_code: StatusCode::UNAUTHORIZED, + // }); + // } + // }; - req.extensions_mut().insert(current_user); + // req.extensions_mut().insert(current_user); Ok(next.run(req).await) } diff --git a/unshell-server/src/server/tree2.rs b/unshell-server/src/server/tree2.rs index 12744be..e1c7445 100644 --- a/unshell-server/src/server/tree2.rs +++ b/unshell-server/src/server/tree2.rs @@ -15,15 +15,15 @@ use crate::{Server, auth::structs::CurrentUser}; impl Server { pub async fn get_tree2_root( State(server): State, - Extension(extension): Extension, + // Extension(extension): Extension, ) -> Json { - Self::get_tree2(State(server), Path("".into()), Extension(extension)).await + Self::get_tree2(State(server), Path("".into())).await } pub async fn get_tree2( State(mut server): State, Path(path): Path, - Extension(_): Extension, + // Extension(_): Extension, ) -> Json { debug!("GET /api/interface/{}", path); @@ -37,10 +37,12 @@ impl Server { pub async fn post_tree2( State(mut server): State, Path(path): Path, - Extension(_): Extension, + // Extension(_): Extension, Json(tree_message): Json, ) -> Json { - debug!("POST /api/interface/{}", path); + debug!("POST /api/interface/"); + + // Json(Value::Null) let result = server .get(&path, tree_message)