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 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-07-01 14:38:21 +02:00
parent 9306d638ad
commit 94655ce7c5

View File

@@ -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