From ea73feb8e9eeff950e8e277f87dde835c1b70bc5 Mon Sep 17 00:00:00 2001 From: Thoronium <107363768+NotThorny@users.noreply.github.com> Date: Sun, 5 Mar 2023 19:13:09 -0700 Subject: [PATCH] Full offline compatibility --- .github/workflows/build.yml | 4 +- src-tauri/Cargo.lock | 315 ++++++++++++++++++++++-------------- src-tauri/Cargo.toml | 2 +- src-tauri/patch/version.dll | Bin 0 -> 82944 bytes src-tauri/src/main.rs | 3 +- src-tauri/src/proxy.rs | 39 +++-- src-tauri/src/web.rs | 17 +- src-tauri/tauri.conf.json | 2 +- src/utils/rsa.ts | 38 +---- 9 files changed, 250 insertions(+), 170 deletions(-) create mode 100644 src-tauri/patch/version.dll diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9fd8659..27ba818 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -39,7 +39,7 @@ jobs: - name: Compress build uses: vimtor/action-zip@v1 with: - files: src-tauri/target/debug/lang/ src-tauri/target/debug/keys/ src-tauri/target/debug/Cultivation.exe src-tauri/target/debug/bundle/msi/ + files: src-tauri/target/debug/lang/ src-tauri/target/debug/keys/ src-tauri/target/debug/patch/ src-tauri/target/debug/Cultivation.exe src-tauri/target/debug/bundle/msi/ recursive: true dest: Cultivation.zip @@ -74,7 +74,7 @@ jobs: - name: Compress build uses: vimtor/action-zip@v1 with: - files: src-tauri/target/debug/lang/ src-tauri/target/debug/keys/ src-tauri/target/debug/cultivation + files: src-tauri/target/debug/lang/ src-tauri/target/debug/keys/ src-tauri/target/debug/patch/ src-tauri/target/debug/cultivation recursive: true dest: Cultivation.zip diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 1dc7e64..58155eb 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -20,7 +20,7 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cipher", "cpufeatures", "opaque-debug", @@ -82,7 +82,23 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33" dependencies = [ - "asn1-rs-derive", + "asn1-rs-derive 0.1.0", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits 0.2.15", + "rusticata-macros", + "thiserror", + "time 0.3.11", +] + +[[package]] +name = "asn1-rs" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" +dependencies = [ + "asn1-rs-derive 0.4.0", "asn1-rs-impl", "displaydoc", "nom", @@ -104,6 +120,18 @@ dependencies = [ "synstructure", ] +[[package]] +name = "asn1-rs-derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + [[package]] name = "asn1-rs-impl" version = "0.1.0" @@ -281,6 +309,18 @@ dependencies = [ "memchr", ] +[[package]] +name = "bstr" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" +dependencies = [ + "memchr", + "once_cell", + "regex-automata", + "serde", +] + [[package]] name = "bumpalo" version = "3.10.0" @@ -447,12 +487,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - [[package]] name = "cfg-if" version = "1.0.0" @@ -592,7 +626,7 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -601,8 +635,8 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c" dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils 0.8.10", + "cfg-if", + "crossbeam-utils", ] [[package]] @@ -611,24 +645,9 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" dependencies = [ - "cfg-if 1.0.0", - "crossbeam-epoch 0.9.9", - "crossbeam-utils 0.8.10", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" -dependencies = [ - "autocfg", - "cfg-if 0.1.10", - "crossbeam-utils 0.7.2", - "lazy_static", - "maybe-uninit", - "memoffset 0.5.6", - "scopeguard", + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", ] [[package]] @@ -638,31 +657,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d" dependencies = [ "autocfg", - "cfg-if 1.0.0", - "crossbeam-utils 0.8.10", - "memoffset 0.6.5", + "cfg-if", + "crossbeam-utils", + "memoffset", "once_cell", "scopeguard", ] -[[package]] -name = "crossbeam-utils" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" -dependencies = [ - "autocfg", - "cfg-if 0.1.10", - "lazy_static", -] - [[package]] name = "crossbeam-utils" version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "once_cell", ] @@ -743,7 +751,7 @@ dependencies = [ "is_elevated", "once_cell", "open", - "rcgen", + "rcgen 0.9.3", "regex", "registry", "reqwest", @@ -757,7 +765,7 @@ dependencies = [ "tauri-build", "tokio", "tokio-rustls", - "tokio-tungstenite", + "tokio-tungstenite 0.17.2", "tracing", "unrar", "zip 0.6.2", @@ -841,7 +849,21 @@ version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82" dependencies = [ - "asn1-rs", + "asn1-rs 0.3.1", + "displaydoc", + "nom", + "num-bigint 0.4.3", + "num-traits 0.2.15", + "rusticata-macros", +] + +[[package]] +name = "der-parser" +version = "8.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" +dependencies = [ + "asn1-rs 0.5.1", "displaydoc", "nom", "num-bigint 0.4.3", @@ -864,9 +886,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.3" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ "block-buffer", "crypto-common", @@ -879,7 +901,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "dirs-sys-next", ] @@ -975,7 +997,7 @@ version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -1017,7 +1039,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92" dependencies = [ - "memoffset 0.6.5", + "memoffset", "rustc_version 0.3.3", ] @@ -1033,7 +1055,7 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "redox_syscall", "windows-sys", @@ -1310,7 +1332,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "wasi 0.9.0+wasi-snapshot-preview1", ] @@ -1321,7 +1343,7 @@ version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "wasi 0.11.0+wasi-snapshot-preview1", ] @@ -1414,7 +1436,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" dependencies = [ "aho-corasick", - "bstr", + "bstr 0.2.17", "fnv", "log", "regex", @@ -1563,9 +1585,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", @@ -1603,12 +1625,13 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hudsucker" -version = "0.17.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b05c90565930259fbacb8f15d5e20132aa8056f3f73bc2b4aa6b7c9b4d89434" +checksum = "655326a6a1f44e52c64ee30a4fdfd86e4de893b2ed6757250391ec6c9a8f93a8" dependencies = [ "async-compression", "async-trait", + "bstr 1.3.0", "bytes", "futures", "http", @@ -1617,12 +1640,12 @@ dependencies = [ "hyper-tungstenite", "moka", "rand 0.8.5", - "rcgen", + "rcgen 0.10.0", "thiserror", "time 0.3.11", "tokio", "tokio-rustls", - "tokio-tungstenite", + "tokio-tungstenite 0.18.0", "tokio-util", "tracing", ] @@ -1681,15 +1704,15 @@ dependencies = [ [[package]] name = "hyper-tungstenite" -version = "0.6.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e9b2a23919b72e723692a5b81330ecdd640bba2f2d0fc0089b7abf0be67bf7" +checksum = "880b8b1c98a5ec2a505c7c90db6d3f6f1f480af5655d9c5b55facc9382a5a5b5" dependencies = [ "hyper", "pin-project", "tokio", - "tokio-tungstenite", - "tungstenite", + "tokio-tungstenite 0.18.0", + "tungstenite 0.18.0", ] [[package]] @@ -1725,7 +1748,7 @@ version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d" dependencies = [ - "crossbeam-utils 0.8.10", + "crossbeam-utils", "globset", "lazy_static", "log", @@ -1785,7 +1808,7 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -1959,7 +1982,7 @@ version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -1968,7 +1991,7 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "generator", "scoped-tls", "serde", @@ -2043,27 +2066,12 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" -[[package]] -name = "maybe-uninit" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" - [[package]] name = "memchr" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" -[[package]] -name = "memoffset" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" -dependencies = [ - "autocfg", -] - [[package]] name = "memoffset" version = "0.6.5" @@ -2108,20 +2116,21 @@ dependencies = [ [[package]] name = "moka" -version = "0.8.6" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975fa04238144061e7f8df9746b2e9cd93ef85881da5548d842a7c6a4b614415" +checksum = "2b6446f16d504e3d575df79cabb11bfbe9f24b17e9562d964a815db7b28ae3ec" dependencies = [ "async-io", "async-lock", "crossbeam-channel", - "crossbeam-epoch 0.8.2", - "crossbeam-utils 0.8.10", + "crossbeam-epoch", + "crossbeam-utils", "futures-util", "num_cpus", "once_cell", "parking_lot 0.12.1", "quanta", + "rustc_version 0.4.0", "scheduled-thread-pool", "skeptic", "smallvec", @@ -2191,7 +2200,7 @@ checksum = "e322c04a9e3440c327fca7b6c8a63e6890a32fa2ad689db972425f07e0d22abb" dependencies = [ "autocfg", "bitflags", - "cfg-if 1.0.0", + "cfg-if", "libc", ] @@ -2425,14 +2434,23 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a" dependencies = [ - "asn1-rs", + "asn1-rs 0.3.1", +] + +[[package]] +name = "oid-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" +dependencies = [ + "asn1-rs 0.5.1", ] [[package]] name = "once_cell" -version = "1.13.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "opaque-debug" @@ -2457,7 +2475,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0" dependencies = [ "bitflags", - "cfg-if 1.0.0", + "cfg-if", "foreign-types", "libc", "once_cell", @@ -2594,7 +2612,7 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "instant", "libc", "redox_syscall", @@ -2608,7 +2626,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "redox_syscall", "smallvec", @@ -2854,7 +2872,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "log", "wepoll-ffi", @@ -2939,7 +2957,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bafd74c340a0a7e79415981ede3460df16b530fd071541901a57416eea950b17" dependencies = [ - "crossbeam-utils 0.8.10", + "crossbeam-utils", "libc", "mach", "once_cell", @@ -3105,7 +3123,7 @@ checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" dependencies = [ "crossbeam-channel", "crossbeam-deque", - "crossbeam-utils 0.8.10", + "crossbeam-utils", "num_cpus", ] @@ -3118,7 +3136,20 @@ dependencies = [ "pem", "ring", "time 0.3.11", - "x509-parser", + "x509-parser 0.13.2", + "yasna", +] + +[[package]] +name = "rcgen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" +dependencies = [ + "pem", + "ring", + "time 0.3.11", + "x509-parser 0.14.0", "yasna", ] @@ -3283,7 +3314,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "ordered-multimap", ] @@ -3589,11 +3620,11 @@ dependencies = [ [[package]] name = "sha-1" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" +checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest", ] @@ -3604,7 +3635,7 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c77f4e7f65455545c2153c1253d25056825e77ee2533f0e41deb65a93a34852f" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest", ] @@ -3615,7 +3646,7 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest", ] @@ -3848,7 +3879,7 @@ version = "0.24.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b6e19da72a8d75be4d40e4dd4686afca31507f26c3ffdf6bd3073278d9de0a0" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "core-foundation-sys", "libc", "ntapi", @@ -4128,7 +4159,7 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "fastrand", "libc", "redox_syscall", @@ -4270,13 +4301,25 @@ name = "tokio-tungstenite" version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite 0.17.3", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54319c93411147bced34cb5609a80e0a8e44c5999c93903a81cd866630ec0bfd" dependencies = [ "futures-util", "log", "rustls", "tokio", "tokio-rustls", - "tungstenite", + "tungstenite 0.18.0", "webpki", "webpki-roots", ] @@ -4316,7 +4359,7 @@ version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "log", "pin-project-lite", "tracing-attributes", @@ -4407,11 +4450,30 @@ dependencies = [ "httparse", "log", "rand 0.8.5", - "rustls", "sha-1", "thiserror", "url", "utf-8", +] + +[[package]] +name = "tungstenite" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788" +dependencies = [ + "base64", + "byteorder", + "bytes", + "http", + "httparse", + "log", + "rand 0.8.5", + "rustls", + "sha1", + "thiserror", + "url", + "utf-8", "webpki", ] @@ -4644,7 +4706,7 @@ version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "wasm-bindgen-macro", ] @@ -4669,7 +4731,7 @@ version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "wasm-bindgen", "web-sys", @@ -5149,13 +5211,32 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c" dependencies = [ - "asn1-rs", + "asn1-rs 0.3.1", "base64", "data-encoding", - "der-parser", + "der-parser 7.0.0", "lazy_static", "nom", - "oid-registry", + "oid-registry 0.4.0", + "ring", + "rusticata-macros", + "thiserror", + "time 0.3.11", +] + +[[package]] +name = "x509-parser" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" +dependencies = [ + "asn1-rs 0.5.1", + "base64", + "data-encoding", + "der-parser 8.1.0", + "lazy_static", + "nom", + "oid-registry 0.6.1", "ring", "rusticata-macros", "thiserror", @@ -5211,7 +5292,7 @@ dependencies = [ "bzip2", "constant_time_eq", "crc32fast", - "crossbeam-utils 0.8.10", + "crossbeam-utils", "flate2", "hmac", "pbkdf2", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 4e4793c..1b3527b 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -46,7 +46,7 @@ serde_json = "1" # Dependencies for the HTTP(S) proxy. http = "0.2" -hudsucker = "0.17.2" +hudsucker = "0.19.1" tracing = "0.1.21" tokio-rustls = "0.23.0" tokio-tungstenite = "0.17.0" diff --git a/src-tauri/patch/version.dll b/src-tauri/patch/version.dll new file mode 100644 index 0000000000000000000000000000000000000000..9030f7234cb4d584df8e4dacd7bcb822af8cc69c GIT binary patch literal 82944 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%0AbBG(Y<7sZQd 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, + _ctx: &HttpContext, + mut req: Request, ) -> RequestOrResponse { - let uri = request.uri().to_string(); - let uri_path_and_query = request.uri().path_and_query().unwrap().as_str(); + let uri = req.uri().to_string(); if uri.contains("hoyoverse.com") || uri.contains("mihoyo.com") || uri.contains("yuanshen.com") { - // Create new URI. - let new_uri = - Uri::from_str(format!("{}{}", SERVER.lock().unwrap(), uri_path_and_query).as_str()) - .unwrap(); - // Set request URI to the new one. - *request.uri_mut() = new_uri; + // Handle CONNECTs + if req.method().as_str() == "CONNECT" { + let builder = Response::builder() + .header("DecryptEndpoint", "Created") + .status(StatusCode::OK); + let res = builder.body(()).unwrap(); + + // Respond to CONNECT + *res.body() + } else { + let uri_path_and_query = req.uri().path_and_query().unwrap().as_str(); + // Create new URI. + let new_uri = + Uri::from_str(format!("{}{}", SERVER.lock().unwrap(), uri_path_and_query).as_str()) + .unwrap(); + // Set request URI to the new one. + *req.uri_mut() = new_uri; + } } - RequestOrResponse::Request(request) + req.into() } async fn handle_response( @@ -73,6 +84,10 @@ impl HttpHandler for ProxyHandler { ) -> Response { response } + + async fn should_intercept(&mut self, _ctx: &HttpContext, _req: &Request) -> bool { + true + } } /** diff --git a/src-tauri/src/web.rs b/src-tauri/src/web.rs index 29193ee..35ed83d 100644 --- a/src-tauri/src/web.rs +++ b/src-tauri/src/web.rs @@ -9,8 +9,13 @@ pub(crate) async fn query(site: &str) -> String { .header(CONTENT_TYPE, "application/json") .send() .await - .unwrap(); - response.text().await.unwrap() + .ok(); + + if response.is_some() { + return response.unwrap().text().await.unwrap(); + } else { + false.to_string() + } } #[tauri::command] @@ -23,9 +28,13 @@ pub(crate) async fn valid_url(url: String) -> bool { .header(USER_AGENT, "cultivation") .send() .await - .unwrap(); + .ok(); - response.status().as_str() == "200" + if response.is_some() { + return response.unwrap().status().as_str() == "200"; + } else { + false + } } #[tauri::command] diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index e4e2374..7cd6d0f 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -40,7 +40,7 @@ "providerShortName": null, "signingIdentity": null }, - "resources": ["lang/*.json", "keys/*"], + "resources": ["lang/*.json", "keys/*", "patch/*"], "targets": "all", "windows": { "allowDowngrades": false, diff --git a/src/utils/rsa.ts b/src/utils/rsa.ts index 475a014..84c3d68 100644 --- a/src/utils/rsa.ts +++ b/src/utils/rsa.ts @@ -71,45 +71,19 @@ export async function getBackupRSAPath() { } export async function downloadRSA() { - const rsaLink = 'https://github.com/34736384/RSAPatch/releases/download/v1.1.0/RSAPatch.dll' + // Patch file from: https://github.com/34736384/RSAPatch/ // Should make sure rsa path exists await invoke('dir_create', { path: await getBackupRSAPath(), }) - // Download the file - downloadHandler.addDownload(rsaLink, (await getBackupRSAPath()) + '\\version.dll', () => { - null - }) - let errored = false - - listen('download_error', ({ payload }) => { - // @ts-expect-error shut up typescript - const errorData: { - path: string - error: string - } = payload - - errored = true + // Copy patch from local for offline compatibility + await invoke('copy_file_with_new_name', { + path: (await invoke('install_location')) + '\\patch\\version.dll', + newPath: await getBackupRSAPath(), + newName: 'version.dll', }) - // There is 100% a better way to do this but I don't use ts enough to know - let downloadComplete = false - while (!downloadComplete) { - // Waits until download completes before continuing - if ( - (await invoke('dir_exists', { - path: (await getBackupRSAPath()) + '\\version.dll', - })) || - errored - ) { - downloadComplete = true - } - } - - if (errored) { - return false - } return true }