From 94655ce7c535fc13cac67f3ff2c1a7bda379e71f Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Wed, 1 Jul 2026 14:38:21 +0200 Subject: [PATCH] fix(caldav): match Basic Auth username case-insensitively Login names are stored lowercase and the web login already compares with func.lower(); CalDAV Basic Auth used an exact match, so "Scarriffle" failed to authenticate while "scarriffle" worked. Compare case-insensitively too. Co-Authored-By: Claude Opus 4.8 --- backend/routers/dav_router.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/backend/routers/dav_router.py b/backend/routers/dav_router.py index 86ce8b7..55d95f8 100644 --- a/backend/routers/dav_router.py +++ b/backend/routers/dav_router.py @@ -27,6 +27,7 @@ from xml.sax.saxutils import escape as xml_escape from fastapi import APIRouter, Depends, Request from fastapi.responses import RedirectResponse, Response +from sqlalchemy import func from sqlalchemy.orm import Session import dav_util @@ -87,7 +88,12 @@ def _basic_auth_user(request: Request, db: Session) -> models.User | None: username, sep, password = raw.partition(":") if not sep: return None - user = db.query(models.User).filter(models.User.username == username).first() + # Login names are stored lowercase; match case-insensitively like the web login. + user = ( + db.query(models.User) + .filter(func.lower(models.User.username) == username.lower()) + .first() + ) if not user: return None