From 7eb253b0dd2fa2f4925d6d36b8c7cb79a5498847 Mon Sep 17 00:00:00 2001 From: Mike Mueller Date: Wed, 6 May 2026 18:48:25 +0200 Subject: [PATCH] feat: signed customization client-side hooks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Companion to the rustdesk-server Customization admin page that produces signed custom.txt blobs. - src/common.rs: replaces the hardcoded branding pubkey with a build-time RUSTDESK_BRANDING_PUBKEY env (option_env!), falling back to the operator's primary pubkey so unattended builds still produce a working client. Per-customer keys can be baked in via CI without source edits. - flutter/lib/common.dart: adds getAppIconBytes() (cached, base64 decoded once) and patches loadLogo / loadIcon to honor the buildin app-icon. This covers every existing call-site — desktop home page, server page, tabbar, and mobile settings — without touching any of them. OPTION_APP_ICON itself ships in the hbb_common submodule (already bumped in the previous commit). Co-Authored-By: Claude Opus 4.7 (1M context) --- Cargo.lock | 218 +++++++++++++++++++++++----------------- flutter/lib/common.dart | 31 ++++++ src/common.rs | 9 +- 3 files changed, 166 insertions(+), 92 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index febfd6b17..52a4f9e1c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -312,9 +312,12 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.7.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" +checksum = "6a3a1fd6f75306b68087b831f025c712524bcb19aad54e557b1129cfa0a2b207" +dependencies = [ + "rustversion", +] [[package]] name = "arrayref" @@ -357,7 +360,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", "synstructure", ] @@ -369,7 +372,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -522,7 +525,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -557,7 +560,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -614,7 +617,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -703,7 +706,7 @@ dependencies = [ "log", "peeking_take_while", "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "regex", "rustc-hash 1.1.0", "shlex", @@ -725,7 +728,7 @@ dependencies = [ "peeking_take_while", "prettyplease", "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "regex", "rustc-hash 1.1.0", "shlex", @@ -746,7 +749,7 @@ dependencies = [ "lazy_static", "lazycell", "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "regex", "rustc-hash 1.1.0", "shlex", @@ -764,7 +767,7 @@ dependencies = [ "clang-sys", "itertools 0.12.1", "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "regex", "rustc-hash 2.1.1", "shlex", @@ -798,7 +801,7 @@ version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afb15541e888071f64592c0b4364fdff21b7cb0a247f984296699351963a8721" dependencies = [ - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -947,7 +950,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -1046,9 +1049,9 @@ dependencies = [ [[package]] name = "calloop" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb9f6e1368bd4621d2c86baa7e37de77a938adf5221e5dd3d6133340101b309e" +checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7" dependencies = [ "bitflags 2.9.1", "polling 3.7.2", @@ -1075,7 +1078,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa" dependencies = [ - "calloop 0.14.3", + "calloop 0.14.4", "rustix 1.1.2", "wayland-backend", "wayland-client", @@ -1523,7 +1526,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "unicode-xid 0.2.4", ] @@ -1918,7 +1921,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -2079,9 +2082,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.9.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" +checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" [[package]] name = "dbus" @@ -2177,7 +2180,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 1.0.109", ] @@ -2319,7 +2322,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -2363,7 +2366,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a09ac8bb8c16a282264c379dffba707b9c998afc7506009137f3c6136888078" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 1.0.109", ] @@ -2600,7 +2603,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -2621,15 +2624,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] [[package]] name = "env_filter" -version = "0.1.3" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +checksum = "7a1c3cc8e57274ec99de65301228b537f1e4eedc1b8e0f9411c6caac8ae7308f" dependencies = [ "log", "regex", @@ -2660,14 +2663,14 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.6" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" +checksum = "b2daee4ea451f429a58296525ddf28b45a3b64f1acf6587e2067437bb11e218d" dependencies = [ "anstream", "anstyle", "env_filter", - "humantime", + "jiff", "log", ] @@ -2694,7 +2697,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2981,7 +2984,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -3148,7 +3151,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -3450,7 +3453,7 @@ dependencies = [ "proc-macro-crate 0.1.5", "proc-macro-error", "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 1.0.109", ] @@ -3464,7 +3467,7 @@ dependencies = [ "proc-macro-crate 2.0.2", "proc-macro-error", "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -3708,7 +3711,7 @@ dependencies = [ "proc-macro-crate 1.3.1", "proc-macro-error", "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -3759,7 +3762,7 @@ dependencies = [ "directories-next", "dirs-next", "dlopen", - "env_logger 0.11.6", + "env_logger 0.11.9", "filetime", "flexi_logger", "futures", @@ -4129,7 +4132,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", ] [[package]] @@ -4291,6 +4294,30 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "jiff" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073d" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", +] + +[[package]] +name = "jiff-static" +version = "0.2.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7" +dependencies = [ + "proc-macro2 1.0.93", + "quote 1.0.45", + "syn 2.0.98", +] + [[package]] name = "jni" version = "0.21.1" @@ -5267,7 +5294,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 1.0.109", ] @@ -5278,7 +5305,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -5356,7 +5383,7 @@ checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 1.0.109", ] @@ -5368,7 +5395,7 @@ checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ "proc-macro-crate 2.0.2", "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -5778,7 +5805,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -5956,7 +5983,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c94f3b9b97df3c6d4e51a14916639b24e02c7d15d1dba686ce9b1118277cb811" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 1.0.109", ] @@ -6223,7 +6250,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -6362,9 +6389,18 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.11.1" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" + +[[package]] +name = "portable-atomic-util" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" +dependencies = [ + "portable-atomic", +] [[package]] name = "portable-pty" @@ -6469,7 +6505,7 @@ checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 1.0.109", "version_check", ] @@ -6481,7 +6517,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "version_check", ] @@ -6673,7 +6709,7 @@ dependencies = [ "once_cell", "socket2 0.5.10", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.60.2", ] [[package]] @@ -6687,9 +6723,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2 1.0.93", ] @@ -7457,7 +7493,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -7514,7 +7550,7 @@ dependencies = [ "security-framework 3.5.1", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -7743,7 +7779,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -7777,7 +7813,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -8028,7 +8064,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" dependencies = [ "bitflags 2.9.1", - "calloop 0.14.3", + "calloop 0.14.4", "calloop-wayland-source 0.4.1", "cursor-icon", "libc", @@ -8208,7 +8244,7 @@ checksum = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c" dependencies = [ "heck 0.3.3", "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 1.0.109", ] @@ -8220,7 +8256,7 @@ checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck 0.4.1", "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "rustversion", "syn 1.0.109", ] @@ -8304,7 +8340,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "unicode-ident", ] @@ -8315,7 +8351,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "unicode-ident", ] @@ -8335,7 +8371,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -8467,7 +8503,7 @@ version = "0.1.2" source = "git+https://github.com/rustdesk-org/tao?branch=dev#288c219cb0527e509590c2b2d8e7072aa9feb2d3" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 1.0.109", ] @@ -8602,7 +8638,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -8613,7 +8649,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -8770,7 +8806,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -8995,7 +9031,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b1ffbcf9c6f6b99d386e7444eb608ba646ae452a36b39737deb9663b610f662" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -9059,7 +9095,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebeb235c5847e2f82cfe0f07eb971d1e5f6804b18dac2ae16349cc604380f82f" dependencies = [ - "quote 1.0.36", + "quote 1.0.45", "syn 1.0.109", ] @@ -9284,9 +9320,9 @@ dependencies = [ [[package]] name = "unicase" -version = "2.8.1" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" [[package]] name = "unicode-bidi" @@ -9582,7 +9618,7 @@ dependencies = [ "bumpalo", "log", "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", "wasm-bindgen-shared", ] @@ -9606,7 +9642,7 @@ version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ - "quote 1.0.36", + "quote 1.0.45", "wasm-bindgen-macro-support", ] @@ -9617,7 +9653,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", @@ -9752,7 +9788,7 @@ checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" dependencies = [ "proc-macro2 1.0.93", "quick-xml 0.37.5", - "quote 1.0.36", + "quote 1.0.45", ] [[package]] @@ -9805,9 +9841,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.3" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d651ec480de84b762e7be71e6efa7461699c19d9e2c272c8d93455f567786e" +checksum = "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92c" dependencies = [ "rustls-pki-types", ] @@ -10019,11 +10055,11 @@ dependencies = [ [[package]] name = "whoami" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" +checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" dependencies = [ - "redox_syscall 0.5.2", + "libredox", "wasite", "web-sys", ] @@ -10266,7 +10302,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12168c33176773b86799be25e2a2ba07c7aab9968b37541f1094dbd7a60c8946" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -10277,7 +10313,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -10288,7 +10324,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d8dc32e0095a7eeccebd0e3f09e9509365ecb3fc6ac4d6f5f14a3f6392942d1" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -10299,7 +10335,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -11095,7 +11131,7 @@ checksum = "7131497b0f887e8061b430c530240063d33bf9455fa34438f388a245da69e0a5" dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "regex", "syn 1.0.109", "zvariant_utils", @@ -11138,7 +11174,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -11149,7 +11185,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -11164,12 +11200,12 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 2.0.98", ] @@ -11271,7 +11307,7 @@ checksum = "37c24dc0bed72f5f90d1f8bb5b07228cbf63b3c6e9f82d82559d4bae666e7ed9" dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 1.0.109", "zvariant_utils", ] @@ -11283,6 +11319,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" dependencies = [ "proc-macro2 1.0.93", - "quote 1.0.36", + "quote 1.0.45", "syn 1.0.109", ] diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index e579db36a..4961670a8 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -3702,8 +3702,35 @@ Widget loadPowered(BuildContext context) { ).marginOnly(top: 6); } +// Cached decoded `app-icon` bytes from the signed custom.txt blob. The blob +// stores the image as standard base64 under the buildin key "app-icon"; we +// decode once on first read and reuse the bytes for every Image.memory call +// below. Empty Uint8List means "no custom icon" and we fall through to the +// bundled assets. +Uint8List? _appIconBytes; +bool _appIconChecked = false; +Uint8List? getAppIconBytes() { + if (_appIconChecked) return _appIconBytes; + _appIconChecked = true; + final b64 = bind.mainGetBuildinOption(key: 'app-icon'); + if (b64.isEmpty) return null; + try { + _appIconBytes = base64.decode(b64); + } catch (_) { + _appIconBytes = null; + } + return _appIconBytes; +} + // max 300 x 60 Widget loadLogo() { + final custom = getAppIconBytes(); + if (custom != null) { + return Container( + constraints: BoxConstraints(maxWidth: 300, maxHeight: 60), + child: Image.memory(custom, fit: BoxFit.contain), + ).marginOnly(left: 12, right: 12, top: 12); + } return FutureBuilder( future: rootBundle.load('assets/logo.png'), builder: (BuildContext context, AsyncSnapshot snapshot) { @@ -3725,6 +3752,10 @@ Widget loadLogo() { } Widget loadIcon(double size) { + final custom = getAppIconBytes(); + if (custom != null) { + return Image.memory(custom, width: size, height: size, fit: BoxFit.contain); + } return Image.asset('assets/icon.png', width: size, height: size, diff --git a/src/common.rs b/src/common.rs index 69e3ec304..0b0b8bebf 100644 --- a/src/common.rs +++ b/src/common.rs @@ -2184,7 +2184,14 @@ pub fn read_custom_client(config: &str) { log::error!("Failed to decode custom client config"); return; }; - const KEY: &str = "5Qbwsde3unUcJBtrx9ZkvUmwFNoExHzpryHuPUdqlWM="; + // Bake the branding public key in at build time: + // RUSTDESK_BRANDING_PUBKEY=$(cat branding_ed25519.pub) cargo build --release + // Default falls back to the operator's primary branding pubkey so + // unattended builds still produce a working client. + const KEY: &str = match option_env!("RUSTDESK_BRANDING_PUBKEY") { + Some(k) => k, + None => "o8oOwMOzG/h3x/mDOeBcxQUBTxEQTQSQ/3gTe+K7RME=", + }; let Some(pk) = get_rs_pk(KEY) else { log::error!("Failed to parse public key of custom client"); return;