Compare commits

..

2 Commits

Author SHA1 Message Date
Lennart
c648ed315d version 0.9.1 2025-08-25 19:09:48 +02:00
Lennart
2cf481d4e6 make session cookie samesite=lax by default 2025-08-25 19:09:24 +02:00
5 changed files with 21 additions and 13 deletions

22
Cargo.lock generated
View File

@@ -3040,7 +3040,7 @@ dependencies = [
[[package]] [[package]]
name = "rustical" name = "rustical"
version = "0.9.0" version = "0.9.1"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"argon2", "argon2",
@@ -3083,7 +3083,7 @@ dependencies = [
[[package]] [[package]]
name = "rustical_caldav" name = "rustical_caldav"
version = "0.9.0" version = "0.9.1"
dependencies = [ dependencies = [
"async-std", "async-std",
"async-trait", "async-trait",
@@ -3123,7 +3123,7 @@ dependencies = [
[[package]] [[package]]
name = "rustical_carddav" name = "rustical_carddav"
version = "0.9.0" version = "0.9.1"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"axum", "axum",
@@ -3155,7 +3155,7 @@ dependencies = [
[[package]] [[package]]
name = "rustical_dav" name = "rustical_dav"
version = "0.9.0" version = "0.9.1"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"axum", "axum",
@@ -3180,7 +3180,7 @@ dependencies = [
[[package]] [[package]]
name = "rustical_dav_push" name = "rustical_dav_push"
version = "0.9.0" version = "0.9.1"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"axum", "axum",
@@ -3205,7 +3205,7 @@ dependencies = [
[[package]] [[package]]
name = "rustical_frontend" name = "rustical_frontend"
version = "0.9.0" version = "0.9.1"
dependencies = [ dependencies = [
"askama", "askama",
"askama_web", "askama_web",
@@ -3238,7 +3238,7 @@ dependencies = [
[[package]] [[package]]
name = "rustical_ical" name = "rustical_ical"
version = "0.9.0" version = "0.9.1"
dependencies = [ dependencies = [
"axum", "axum",
"chrono", "chrono",
@@ -3256,7 +3256,7 @@ dependencies = [
[[package]] [[package]]
name = "rustical_oidc" name = "rustical_oidc"
version = "0.9.0" version = "0.9.1"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"axum", "axum",
@@ -3271,7 +3271,7 @@ dependencies = [
[[package]] [[package]]
name = "rustical_store" name = "rustical_store"
version = "0.9.0" version = "0.9.1"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-trait", "async-trait",
@@ -3305,7 +3305,7 @@ dependencies = [
[[package]] [[package]]
name = "rustical_store_sqlite" name = "rustical_store_sqlite"
version = "0.9.0" version = "0.9.1"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"chrono", "chrono",
@@ -3326,7 +3326,7 @@ dependencies = [
[[package]] [[package]]
name = "rustical_xml" name = "rustical_xml"
version = "0.9.0" version = "0.9.1"
dependencies = [ dependencies = [
"quick-xml", "quick-xml",
"thiserror 2.0.16", "thiserror 2.0.16",

View File

@@ -2,7 +2,7 @@
members = ["crates/*"] members = ["crates/*"]
[workspace.package] [workspace.package]
version = "0.9.0" version = "0.9.1"
edition = "2024" edition = "2024"
description = "A CalDAV server" description = "A CalDAV server"
repository = "https://github.com/lennart-k/rustical" repository = "https://github.com/lennart-k/rustical"

View File

@@ -38,6 +38,7 @@ pub fn make_app<AS: AddressbookStore, CS: CalendarStore, S: SubscriptionStore>(
oidc_config: Option<OidcConfig>, oidc_config: Option<OidcConfig>,
nextcloud_login_config: NextcloudLoginConfig, nextcloud_login_config: NextcloudLoginConfig,
dav_push_enabled: bool, dav_push_enabled: bool,
session_cookie_samesite_strict: bool,
) -> Router<()> { ) -> Router<()> {
let combined_cal_store = Arc::new(CombinedCalendarStore::new( let combined_cal_store = Arc::new(CombinedCalendarStore::new(
cal_store.clone(), cal_store.clone(),
@@ -128,7 +129,11 @@ pub fn make_app<AS: AddressbookStore, CS: CalendarStore, S: SubscriptionStore>(
SessionManagerLayer::new(session_store) SessionManagerLayer::new(session_store)
.with_name("rustical_session") .with_name("rustical_session")
.with_secure(true) .with_secure(true)
.with_same_site(SameSite::Strict) .with_same_site(if session_cookie_samesite_strict {
SameSite::Strict
} else {
SameSite::Lax
})
.with_expiry(Expiry::OnInactivity( .with_expiry(Expiry::OnInactivity(
tower_sessions::cookie::time::Duration::hours(2), tower_sessions::cookie::time::Duration::hours(2),
)), )),

View File

@@ -7,6 +7,7 @@ use serde::{Deserialize, Serialize};
pub struct HttpConfig { pub struct HttpConfig {
pub host: String, pub host: String,
pub port: u16, pub port: u16,
pub session_cookie_samesite_strict: bool,
} }
impl Default for HttpConfig { impl Default for HttpConfig {
@@ -14,6 +15,7 @@ impl Default for HttpConfig {
Self { Self {
host: "0.0.0.0".to_owned(), host: "0.0.0.0".to_owned(),
port: 4000, port: 4000,
session_cookie_samesite_strict: false,
} }
} }
} }

View File

@@ -116,6 +116,7 @@ async fn main() -> Result<()> {
config.oidc.clone(), config.oidc.clone(),
config.nextcloud_login.clone(), config.nextcloud_login.clone(),
config.dav_push.enabled, config.dav_push.enabled,
config.http.session_cookie_samesite_strict,
); );
let app = ServiceExt::<Request>::into_make_service( let app = ServiceExt::<Request>::into_make_service(
NormalizePathLayer::trim_trailing_slash().layer(app), NormalizePathLayer::trim_trailing_slash().layer(app),