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:
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user