diff --git a/Cargo.lock b/Cargo.lock index a5d54aa..d7d069c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -219,9 +219,9 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.2" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa" +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" dependencies = [ "async-task", "concurrent-queue", @@ -595,9 +595,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.45" +version = "4.5.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318" +checksum = "2c5e4fcf9c21d2e544ca1ee9d8552de13019a42aa7dbf32747fa7aaf1df76e57" dependencies = [ "clap_builder", "clap_derive", @@ -605,9 +605,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.44" +version = "4.5.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8" +checksum = "fecb53a0e6fcfb055f686001bc2e2592fa527efaf38dbe81a6a9563562e57d41" dependencies = [ "anstream", "anstyle", @@ -1288,7 +1288,7 @@ dependencies = [ "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi 0.14.3+wasi-0.2.4", "wasm-bindgen", ] @@ -1567,7 +1567,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.0", + "socket2", "tokio", "tower-service", "tracing", @@ -1911,11 +1911,11 @@ checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -1990,12 +1990,11 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" dependencies = [ - "overload", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -2262,12 +2261,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "p256" version = "0.13.2" @@ -2519,9 +2512,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec", ] @@ -2615,9 +2608,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases", @@ -2626,7 +2619,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2 0.5.10", + "socket2", "thiserror 2.0.16", "tokio", "tracing", @@ -2635,9 +2628,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.12" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", "getrandom 0.3.3", @@ -2656,16 +2649,16 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.5.10", + "socket2", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -2773,47 +2766,32 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.1" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.1.10" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "relative-path" @@ -2934,21 +2912,20 @@ dependencies = [ [[package]] name = "rstest" -version = "0.25.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fc39292f8613e913f7df8fa892b8944ceb47c247b78e1b1ae2f09e019be789d" +checksum = "f5a3193c063baaa2a95a33f03035c8a72b83d97a54916055ba22d35ed3839d49" dependencies = [ "futures-timer", "futures-util", "rstest_macros", - "rustc_version", ] [[package]] name = "rstest_macros" -version = "0.25.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f168d99749d307be9de54d23fd226628d99768225ef08f6ffb52e0182a27746" +checksum = "9c845311f0ff7951c5506121a9ad75aec44d083c31583b2ea5a30bcb0b0abba0" dependencies = [ "cfg-if", "glob", @@ -3040,7 +3017,7 @@ dependencies = [ [[package]] name = "rustical" -version = "0.9.0" +version = "0.9.2" dependencies = [ "anyhow", "argon2", @@ -3083,7 +3060,7 @@ dependencies = [ [[package]] name = "rustical_caldav" -version = "0.9.0" +version = "0.9.2" dependencies = [ "async-std", "async-trait", @@ -3123,7 +3100,7 @@ dependencies = [ [[package]] name = "rustical_carddav" -version = "0.9.0" +version = "0.9.2" dependencies = [ "async-trait", "axum", @@ -3155,7 +3132,7 @@ dependencies = [ [[package]] name = "rustical_dav" -version = "0.9.0" +version = "0.9.2" dependencies = [ "async-trait", "axum", @@ -3180,7 +3157,7 @@ dependencies = [ [[package]] name = "rustical_dav_push" -version = "0.9.0" +version = "0.9.2" dependencies = [ "async-trait", "axum", @@ -3205,7 +3182,7 @@ dependencies = [ [[package]] name = "rustical_frontend" -version = "0.9.0" +version = "0.9.2" dependencies = [ "askama", "askama_web", @@ -3238,7 +3215,7 @@ dependencies = [ [[package]] name = "rustical_ical" -version = "0.9.0" +version = "0.9.2" dependencies = [ "axum", "chrono", @@ -3256,7 +3233,7 @@ dependencies = [ [[package]] name = "rustical_oidc" -version = "0.9.0" +version = "0.9.2" dependencies = [ "async-trait", "axum", @@ -3271,7 +3248,7 @@ dependencies = [ [[package]] name = "rustical_store" -version = "0.9.0" +version = "0.9.2" dependencies = [ "anyhow", "async-trait", @@ -3305,7 +3282,7 @@ dependencies = [ [[package]] name = "rustical_store_sqlite" -version = "0.9.0" +version = "0.9.2" dependencies = [ "async-trait", "chrono", @@ -3326,7 +3303,7 @@ dependencies = [ [[package]] name = "rustical_xml" -version = "0.9.0" +version = "0.9.2" dependencies = [ "quick-xml", "thiserror 2.0.16", @@ -3652,16 +3629,6 @@ dependencies = [ "serde", ] -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "socket2" version = "0.6.0" @@ -4096,7 +4063,7 @@ dependencies = [ "pin-project-lite", "signal-hook-registry", "slab", - "socket2 0.6.0", + "socket2", "tokio-macros", "tracing", "windows-sys 0.59.0", @@ -4443,14 +4410,14 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "sharded-slab", "smallvec", "thread_local", @@ -4623,11 +4590,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.3+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] @@ -4746,22 +4713,6 @@ dependencies = [ "wasite", ] -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - [[package]] name = "winapi-util" version = "0.1.10" @@ -4771,12 +4722,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - [[package]] name = "windows-core" version = "0.61.2" @@ -5068,13 +5013,10 @@ dependencies = [ ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags", -] +checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814" [[package]] name = "writeable" diff --git a/Cargo.toml b/Cargo.toml index c140f10..ec5d9d2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ members = ["crates/*"] [workspace.package] -version = "0.9.0" +version = "0.9.2" edition = "2024" description = "A CalDAV server" repository = "https://github.com/lennart-k/rustical" @@ -48,7 +48,7 @@ rand_core = { version = "0.9", features = ["std"] } chrono = { version = "0.4", features = ["serde"] } regex = "1.10" lazy_static = "1.5" -rstest = "0.25" +rstest = "0.26" rstest_reuse = "0.7" sha2 = "0.10" tokio = { version = "1", features = [ diff --git a/Dockerfile b/Dockerfile index e6a838d..818f9ab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM --platform=$BUILDPLATFORM rust:1.88-alpine AS chef +FROM --platform=$BUILDPLATFORM rust:1.89-alpine AS chef ARG TARGETPLATFORM ARG BUILDPLATFORM diff --git a/crates/caldav/src/calendar/methods/mkcalendar.rs b/crates/caldav/src/calendar/methods/mkcalendar.rs index 770aa2b..6381c5d 100644 --- a/crates/caldav/src/calendar/methods/mkcalendar.rs +++ b/crates/caldav/src/calendar/methods/mkcalendar.rs @@ -46,7 +46,7 @@ pub struct PropElement { } #[derive(XmlDeserialize, XmlRootTag, Clone, Debug)] -#[xml(root = b"mkcalendar")] +#[xml(root = "mkcalendar")] #[xml(ns = "rustical_dav::namespace::NS_CALDAV")] struct MkcalendarRequest { #[xml(ns = "rustical_dav::namespace::NS_DAV")] @@ -54,7 +54,7 @@ struct MkcalendarRequest { } #[derive(XmlDeserialize, XmlRootTag, Clone, Debug)] -#[xml(root = b"mkcol")] +#[xml(root = "mkcol")] #[xml(ns = "rustical_dav::namespace::NS_DAV")] struct MkcolRequest { #[xml(ns = "rustical_dav::namespace::NS_DAV")] diff --git a/crates/caldav/src/calendar/methods/report/calendar_query.rs b/crates/caldav/src/calendar/methods/report/calendar_query.rs index fc26f5e..5606c62 100644 --- a/crates/caldav/src/calendar/methods/report/calendar_query.rs +++ b/crates/caldav/src/calendar/methods/report/calendar_query.rs @@ -116,19 +116,17 @@ impl CompFilterElement { // TODO: Implement prop-filter (and comp-filter?) at some point if let Some(time_range) = &self.time_range { - if let Some(start) = &time_range.start { - if let Some(last_occurence) = cal_object.get_last_occurence().unwrap_or(None) { - if start.deref() > &last_occurence.utc() { - return false; - } - }; + if let Some(start) = &time_range.start + && let Some(last_occurence) = cal_object.get_last_occurence().unwrap_or(None) + && start.deref() > &last_occurence.utc() + { + return false; } - if let Some(end) = &time_range.end { - if let Some(first_occurence) = cal_object.get_first_occurence().unwrap_or(None) { - if end.deref() < &first_occurence.utc() { - return false; - } - }; + if let Some(end) = &time_range.end + && let Some(first_occurence) = cal_object.get_first_occurence().unwrap_or(None) + && end.deref() < &first_occurence.utc() + { + return false; } } true @@ -156,15 +154,15 @@ impl From<&FilterElement> for CalendarQuery { for comp_filter in comp_filter_vcalendar.comp_filter.iter() { // A calendar object cannot contain both VEVENT and VTODO, so we only have to handle // whatever we get first - if matches!(comp_filter.name.as_str(), "VEVENT" | "VTODO") { - if let Some(time_range) = &comp_filter.time_range { - let start = time_range.start.as_ref().map(|start| start.date_naive()); - let end = time_range.end.as_ref().map(|end| end.date_naive()); - return CalendarQuery { - time_start: start, - time_end: end, - }; - } + if matches!(comp_filter.name.as_str(), "VEVENT" | "VTODO") + && let Some(time_range) = &comp_filter.time_range + { + let start = time_range.start.as_ref().map(|start| start.date_naive()); + let end = time_range.end.as_ref().map(|end| end.date_naive()); + return CalendarQuery { + time_start: start, + time_end: end, + }; } } Default::default() diff --git a/crates/caldav/src/calendar/resource.rs b/crates/caldav/src/calendar/resource.rs index 3c34261..1f36a69 100644 --- a/crates/caldav/src/calendar/resource.rs +++ b/crates/caldav/src/calendar/resource.rs @@ -225,12 +225,12 @@ impl Resource for CalendarResource { } CalendarProp::TimezoneServiceSet(_) => Err(rustical_dav::Error::PropReadOnly), CalendarProp::CalendarTimezoneId(timezone_id) => { - if let Some(tzid) = &timezone_id { - if !vtimezones_rs::VTIMEZONES.contains_key(tzid) { - return Err(rustical_dav::Error::BadRequest(format!( - "Invalid timezone-id: {tzid}" - ))); - } + if let Some(tzid) = &timezone_id + && !vtimezones_rs::VTIMEZONES.contains_key(tzid) + { + return Err(rustical_dav::Error::BadRequest(format!( + "Invalid timezone-id: {tzid}" + ))); } self.cal.timezone_id = timezone_id; Ok(()) diff --git a/crates/caldav/src/principal/prop.rs b/crates/caldav/src/principal/prop.rs index 2073cff..6777dfb 100644 --- a/crates/caldav/src/principal/prop.rs +++ b/crates/caldav/src/principal/prop.rs @@ -16,13 +16,13 @@ pub enum PrincipalProp { CalendarUserAddressSet(HrefElement), // WebDAV Access Control (RFC 3744) - #[xml(ns = "rustical_dav::namespace::NS_DAV", rename = b"principal-URL")] + #[xml(ns = "rustical_dav::namespace::NS_DAV", rename = "principal-URL")] PrincipalUrl(HrefElement), #[xml(ns = "rustical_dav::namespace::NS_DAV")] GroupMembership(GroupMembership), #[xml(ns = "rustical_dav::namespace::NS_DAV")] GroupMemberSet(GroupMemberSet), - #[xml(ns = "rustical_dav::namespace::NS_DAV", rename = b"alternate-URI-set")] + #[xml(ns = "rustical_dav::namespace::NS_DAV", rename = "alternate-URI-set")] AlternateUriSet, // #[xml(ns = "rustical_dav::namespace::NS_DAV")] // PrincipalCollectionSet(HrefElement), diff --git a/crates/caldav/src/principal/tests.rs b/crates/caldav/src/principal/tests.rs index e18e6e2..f8700a7 100644 --- a/crates/caldav/src/principal/tests.rs +++ b/crates/caldav/src/principal/tests.rs @@ -79,5 +79,5 @@ async fn test_propfind() { ) .unwrap(); - let output = response.serialize_to_string().unwrap(); + let _output = response.serialize_to_string().unwrap(); } diff --git a/crates/carddav/src/addressbook/methods/mkcol.rs b/crates/carddav/src/addressbook/methods/mkcol.rs index 225ce0f..aa4720e 100644 --- a/crates/carddav/src/addressbook/methods/mkcol.rs +++ b/crates/carddav/src/addressbook/methods/mkcol.rs @@ -22,7 +22,7 @@ pub struct MkcolAddressbookProp { resourcetype: Option, #[xml(ns = "rustical_dav::namespace::NS_DAV")] displayname: Option, - #[xml(rename = b"addressbook-description")] + #[xml(rename = "addressbook-description")] #[xml(ns = "rustical_dav::namespace::NS_CARDDAV")] description: Option, } @@ -34,7 +34,7 @@ pub struct PropElement { } #[derive(XmlDeserialize, XmlRootTag, Clone, Debug, PartialEq)] -#[xml(root = b"mkcol")] +#[xml(root = "mkcol")] #[xml(ns = "rustical_dav::namespace::NS_DAV")] struct MkcolRequest { #[xml(ns = "rustical_dav::namespace::NS_DAV")] diff --git a/crates/carddav/src/principal/prop.rs b/crates/carddav/src/principal/prop.rs index ebe68e8..8bf79a4 100644 --- a/crates/carddav/src/principal/prop.rs +++ b/crates/carddav/src/principal/prop.rs @@ -8,14 +8,14 @@ use rustical_xml::{EnumVariants, PropName, XmlDeserialize, XmlSerialize}; #[xml(unit_variants_ident = "PrincipalPropName")] pub enum PrincipalProp { // WebDAV Access Control (RFC 3744) - #[xml(rename = b"principal-URL")] + #[xml(rename = "principal-URL")] #[xml(ns = "rustical_dav::namespace::NS_DAV")] PrincipalUrl(HrefElement), #[xml(ns = "rustical_dav::namespace::NS_DAV")] GroupMembership(GroupMembership), #[xml(ns = "rustical_dav::namespace::NS_DAV")] GroupMemberSet(GroupMemberSet), - #[xml(ns = "rustical_dav::namespace::NS_DAV", rename = b"alternate-URI-set")] + #[xml(ns = "rustical_dav::namespace::NS_DAV", rename = "alternate-URI-set")] AlternateUriSet, #[xml(ns = "rustical_dav::namespace::NS_DAV")] PrincipalCollectionSet(HrefElement), diff --git a/crates/dav/src/privileges.rs b/crates/dav/src/privileges.rs index b401110..beb3347 100644 --- a/crates/dav/src/privileges.rs +++ b/crates/dav/src/privileges.rs @@ -20,13 +20,13 @@ impl XmlSerialize for UserPrivilegeSet { fn serialize( &self, ns: Option, - tag: Option<&[u8]>, - namespaces: &HashMap, + tag: Option<&str>, + namespaces: &HashMap, writer: &mut quick_xml::Writer<&mut Vec>, ) -> std::io::Result<()> { #[derive(XmlSerialize)] pub struct FakeUserPrivilegeSet { - #[xml(rename = b"privilege", flatten)] + #[xml(rename = "privilege", flatten)] privileges: Vec, } diff --git a/crates/dav/src/resource/methods/delete.rs b/crates/dav/src/resource/methods/delete.rs index 8279ab4..d7b5c47 100644 --- a/crates/dav/src/resource/methods/delete.rs +++ b/crates/dav/src/resource/methods/delete.rs @@ -60,11 +60,11 @@ pub async fn route_delete( return Err(crate::Error::PreconditionFailed.into()); } } - if let Some(if_none_match) = if_none_match { - if resource.satisfies_if_none_match(&if_none_match) { - // Precondition failed - return Err(crate::Error::PreconditionFailed.into()); - } + if let Some(if_none_match) = if_none_match + && resource.satisfies_if_none_match(&if_none_match) + { + // Precondition failed + return Err(crate::Error::PreconditionFailed.into()); } resource_service .delete_resource(path_components, !no_trash) diff --git a/crates/dav/src/resource/methods/proppatch.rs b/crates/dav/src/resource/methods/proppatch.rs index 0147e1e..4ba6adf 100644 --- a/crates/dav/src/resource/methods/proppatch.rs +++ b/crates/dav/src/resource/methods/proppatch.rs @@ -57,7 +57,7 @@ enum Operation { } #[derive(XmlDeserialize, XmlRootTag, Clone, Debug)] -#[xml(root = b"propertyupdate")] +#[xml(root = "propertyupdate")] #[xml(ns = "crate::namespace::NS_DAV")] struct PropertyupdateElement(#[xml(ty = "untagged", flatten)] Vec>); diff --git a/crates/dav/src/xml/error.rs b/crates/dav/src/xml/error.rs index 2f24858..32d95fd 100644 --- a/crates/dav/src/xml/error.rs +++ b/crates/dav/src/xml/error.rs @@ -1,12 +1,12 @@ use rustical_xml::{XmlRootTag, XmlSerialize}; #[derive(XmlSerialize, XmlRootTag)] -#[xml(ns = "crate::namespace::NS_DAV", root = b"error")] +#[xml(ns = "crate::namespace::NS_DAV", root = "error")] #[xml(ns_prefix( - crate::namespace::NS_DAV = b"", - crate::namespace::NS_CARDDAV = b"CARD", - crate::namespace::NS_CALDAV = b"CAL", - crate::namespace::NS_CALENDARSERVER = b"CS", - crate::namespace::NS_DAVPUSH = b"PUSH" + crate::namespace::NS_DAV = "", + crate::namespace::NS_CARDDAV = "CARD", + crate::namespace::NS_CALDAV = "CAL", + crate::namespace::NS_CALENDARSERVER = "CS", + crate::namespace::NS_DAVPUSH = "PUSH" ))] pub struct ErrorElement<'t, T: XmlSerialize>(#[xml(ty = "untagged")] pub &'t T); diff --git a/crates/dav/src/xml/multistatus.rs b/crates/dav/src/xml/multistatus.rs index 7349f2c..0e2cc0b 100644 --- a/crates/dav/src/xml/multistatus.rs +++ b/crates/dav/src/xml/multistatus.rs @@ -22,8 +22,8 @@ pub struct PropstatElement { fn xml_serialize_status( status: &StatusCode, ns: Option, - tag: Option<&[u8]>, - namespaces: &HashMap, + tag: Option<&str>, + namespaces: &HashMap, writer: &mut quick_xml::Writer<&mut Vec>, ) -> std::io::Result<()> { XmlSerialize::serialize(&format!("HTTP/1.1 {}", status), ns, tag, namespaces, writer) @@ -40,13 +40,13 @@ pub enum PropstatWrapper { // #[derive(XmlSerialize, XmlRootTag)] -#[xml(ns = "crate::namespace::NS_DAV", root = b"response")] +#[xml(ns = "crate::namespace::NS_DAV", root = "response")] #[xml(ns_prefix( - crate::namespace::NS_DAV = b"", - crate::namespace::NS_CARDDAV = b"CARD", - crate::namespace::NS_CALDAV = b"CAL", - crate::namespace::NS_CALENDARSERVER = b"CS", - crate::namespace::NS_DAVPUSH = b"PUSH" + crate::namespace::NS_DAV = "", + crate::namespace::NS_CARDDAV = "CARD", + crate::namespace::NS_CALDAV = "CAL", + crate::namespace::NS_CALENDARSERVER = "CS", + crate::namespace::NS_DAVPUSH = "PUSH" ))] pub struct ResponseElement { pub href: String, @@ -59,8 +59,8 @@ pub struct ResponseElement { fn xml_serialize_optional_status( val: &Option, ns: Option, - tag: Option<&[u8]>, - namespaces: &HashMap, + tag: Option<&str>, + namespaces: &HashMap, writer: &mut quick_xml::Writer<&mut Vec>, ) -> std::io::Result<()> { XmlSerialize::serialize( @@ -86,18 +86,18 @@ impl Default for ResponseElement { // // Extended by sync-token as specified in RFC 6578 #[derive(XmlSerialize, XmlRootTag)] -#[xml(root = b"multistatus", ns = "crate::namespace::NS_DAV")] +#[xml(root = "multistatus", ns = "crate::namespace::NS_DAV")] #[xml(ns_prefix( - crate::namespace::NS_DAV = b"", - crate::namespace::NS_CARDDAV = b"CARD", - crate::namespace::NS_CALDAV = b"CAL", - crate::namespace::NS_CALENDARSERVER = b"CS", - crate::namespace::NS_DAVPUSH = b"PUSH" + crate::namespace::NS_DAV = "", + crate::namespace::NS_CARDDAV = "CARD", + crate::namespace::NS_CALDAV = "CAL", + crate::namespace::NS_CALENDARSERVER = "CS", + crate::namespace::NS_DAVPUSH = "PUSH" ))] pub struct MultistatusElement { - #[xml(rename = b"response", flatten)] + #[xml(rename = "response", flatten)] pub responses: Vec>, - #[xml(rename = b"response", flatten)] + #[xml(rename = "response", flatten)] pub member_responses: Vec>, pub sync_token: Option, } diff --git a/crates/dav/src/xml/propfind.rs b/crates/dav/src/xml/propfind.rs index 587bbc3..dbee279 100644 --- a/crates/dav/src/xml/propfind.rs +++ b/crates/dav/src/xml/propfind.rs @@ -7,7 +7,7 @@ use rustical_xml::XmlError; use rustical_xml::XmlRootTag; #[derive(Debug, Clone, XmlDeserialize, XmlRootTag, PartialEq)] -#[xml(root = b"propfind", ns = "crate::namespace::NS_DAV")] +#[xml(root = "propfind", ns = "crate::namespace::NS_DAV")] pub struct PropfindElement { #[xml(ty = "untagged")] pub prop: PropfindType, diff --git a/crates/dav/src/xml/resourcetype.rs b/crates/dav/src/xml/resourcetype.rs index e5bde00..8b9dcb5 100644 --- a/crates/dav/src/xml/resourcetype.rs +++ b/crates/dav/src/xml/resourcetype.rs @@ -16,7 +16,7 @@ mod tests { use super::{Resourcetype, ResourcetypeInner}; #[derive(XmlSerialize, XmlRootTag)] - #[xml(root = b"document")] + #[xml(root = "document")] struct Document { resourcetype: Resourcetype, } diff --git a/crates/dav/src/xml/sync_collection.rs b/crates/dav/src/xml/sync_collection.rs index b742d28..50d14a8 100644 --- a/crates/dav/src/xml/sync_collection.rs +++ b/crates/dav/src/xml/sync_collection.rs @@ -60,7 +60,7 @@ pub struct NresultsElement(#[xml(ty = "text")] u64); // // // -#[xml(ns = "crate::namespace::NS_DAV", root = b"sync-collection")] +#[xml(ns = "crate::namespace::NS_DAV", root = "sync-collection")] pub struct SyncCollectionRequest { #[xml(ns = "crate::namespace::NS_DAV")] pub sync_token: String, diff --git a/crates/dav/src/xml/tag_list.rs b/crates/dav/src/xml/tag_list.rs index 0c5ca23..bf7b126 100644 --- a/crates/dav/src/xml/tag_list.rs +++ b/crates/dav/src/xml/tag_list.rs @@ -13,8 +13,8 @@ impl XmlSerialize for TagList { fn serialize( &self, ns: Option, - tag: Option<&[u8]>, - namespaces: &HashMap, + tag: Option<&str>, + namespaces: &HashMap, writer: &mut quick_xml::Writer<&mut Vec>, ) -> std::io::Result<()> { let prefix = ns @@ -22,23 +22,21 @@ impl XmlSerialize for TagList { .unwrap_or(None) .map(|prefix| { if !prefix.is_empty() { - [*prefix, b":"].concat() + format!("{prefix}:") } else { - Vec::new() + String::new() } }); let has_prefix = prefix.is_some(); let tagname = tag.map(|tag| [&prefix.unwrap_or_default(), tag].concat()); let qname = tagname .as_ref() - .map(|tagname| ::quick_xml::name::QName(tagname)); + .map(|tagname| ::quick_xml::name::QName(tagname.as_bytes())); if let Some(qname) = &qname { let mut bytes_start = BytesStart::from(qname.to_owned()); - if !has_prefix { - if let Some(ns) = &ns { - bytes_start.push_attribute((b"xmlns".as_ref(), ns.as_ref())); - } + if !has_prefix && let Some(ns) = &ns { + bytes_start.push_attribute((b"xmlns".as_ref(), ns.as_ref())); } writer.write_event(Event::Start(bytes_start))?; } diff --git a/crates/dav_push/src/lib.rs b/crates/dav_push/src/lib.rs index d18a64c..e27b394 100644 --- a/crates/dav_push/src/lib.rs +++ b/crates/dav_push/src/lib.rs @@ -25,10 +25,10 @@ pub struct ContentUpdate { } #[derive(XmlSerialize, XmlRootTag, Debug)] -#[xml(root = b"push-message", ns = "rustical_dav::namespace::NS_DAVPUSH")] +#[xml(root = "push-message", ns = "rustical_dav::namespace::NS_DAVPUSH")] #[xml(ns_prefix( - rustical_dav::namespace::NS_DAVPUSH = b"", - rustical_dav::namespace::NS_DAV = b"D", + rustical_dav::namespace::NS_DAVPUSH = "", + rustical_dav::namespace::NS_DAV = "D", ))] struct PushMessage { #[xml(ns = "rustical_dav::namespace::NS_DAVPUSH")] diff --git a/crates/dav_push/src/prop.rs b/crates/dav_push/src/prop.rs index 3ffba18..f995967 100644 --- a/crates/dav_push/src/prop.rs +++ b/crates/dav_push/src/prop.rs @@ -35,12 +35,12 @@ pub enum Trigger { #[derive(XmlSerialize, XmlDeserialize, PartialEq, Clone, Debug)] pub struct ContentUpdate( - #[xml(rename = b"depth", ns = "rustical_dav::namespace::NS_DAV")] pub Depth, + #[xml(rename = "depth", ns = "rustical_dav::namespace::NS_DAV")] pub Depth, ); #[derive(XmlSerialize, PartialEq, Clone, Debug)] pub struct PropertyUpdate( - #[xml(rename = b"depth", ns = "rustical_dav::namespace::NS_DAV")] pub Depth, + #[xml(rename = "depth", ns = "rustical_dav::namespace::NS_DAV")] pub Depth, ); impl XmlDeserialize for PropertyUpdate { @@ -51,8 +51,8 @@ impl XmlDeserialize for PropertyUpdate { ) -> Result { #[derive(XmlDeserialize, PartialEq, Clone, Debug)] struct FakePropertyUpdate( - #[xml(rename = b"depth", ns = "rustical_dav::namespace::NS_DAV")] pub Depth, - #[xml(rename = b"prop", ns = "rustical_dav::namespace::NS_DAV")] pub Unparsed, + #[xml(rename = "depth", ns = "rustical_dav::namespace::NS_DAV")] pub Depth, + #[xml(rename = "prop", ns = "rustical_dav::namespace::NS_DAV")] pub Unparsed, ); let FakePropertyUpdate(depth, _) = FakePropertyUpdate::deserialize(reader, start, empty)?; Ok(Self(depth)) diff --git a/crates/dav_push/src/register.rs b/crates/dav_push/src/register.rs index 5a3d05b..4a159dc 100644 --- a/crates/dav_push/src/register.rs +++ b/crates/dav_push/src/register.rs @@ -17,7 +17,7 @@ pub struct WebPushSubscription { #[derive(XmlDeserialize, Clone, Debug, PartialEq)] pub struct SubscriptionPublicKey { - #[xml(ty = "attr", rename = b"type")] + #[xml(ty = "attr", rename = "type")] pub ty: String, #[xml(ty = "text")] pub key: String, @@ -33,7 +33,7 @@ pub struct SubscriptionElement { pub struct TriggerElement(#[xml(ty = "untagged", flatten)] Vec); #[derive(XmlDeserialize, XmlRootTag, Clone, Debug, PartialEq)] -#[xml(root = b"push-register")] +#[xml(root = "push-register")] #[xml(ns = "rustical_dav::namespace::NS_DAVPUSH")] pub struct PushRegister { #[xml(ns = "rustical_dav::namespace::NS_DAVPUSH")] diff --git a/crates/frontend/js-components/lib/edit-addressbook-form.ts b/crates/frontend/js-components/lib/edit-addressbook-form.ts index 353ecd6..9a0dd21 100644 --- a/crates/frontend/js-components/lib/edit-addressbook-form.ts +++ b/crates/frontend/js-components/lib/edit-addressbook-form.ts @@ -30,7 +30,7 @@ export class EditAddressbookForm extends LitElement { return html` -

Create addressbook

+

Edit addressbook