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 import APIRouter, Depends, Request
from fastapi.responses import RedirectResponse, Response from fastapi.responses import RedirectResponse, Response
from sqlalchemy import func
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
import dav_util import dav_util
@@ -87,7 +88,12 @@ def _basic_auth_user(request: Request, db: Session) -> models.User | None:
username, sep, password = raw.partition(":") username, sep, password = raw.partition(":")
if not sep: if not sep:
return None 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: if not user:
return None return None