feat(members): split username/display_name, sync updates to authentik, add password reset API and refresh docs

This commit is contained in:
Chris
2026-03-30 22:15:41 +08:00
parent 8ed50cdcc6
commit 75f9f28588
13 changed files with 224 additions and 19 deletions

View File

@@ -28,7 +28,12 @@ class UsersRepository:
if keyword:
pattern = f"%{keyword}%"
cond = or_(User.authentik_sub.ilike(pattern), User.email.ilike(pattern), User.display_name.ilike(pattern))
cond = or_(
User.authentik_sub.ilike(pattern),
User.username.ilike(pattern),
User.email.ilike(pattern),
User.display_name.ilike(pattern),
)
stmt = stmt.where(cond)
count_stmt = count_stmt.where(cond)
@@ -44,6 +49,7 @@ class UsersRepository:
def upsert_by_sub(
self,
authentik_sub: str,
username: str | None,
email: str | None,
display_name: str | None,
is_active: bool,
@@ -54,6 +60,7 @@ class UsersRepository:
user = User(
authentik_sub=authentik_sub,
authentik_user_id=authentik_user_id,
username=username,
email=email,
display_name=display_name,
is_active=is_active,
@@ -62,6 +69,7 @@ class UsersRepository:
else:
if authentik_user_id is not None:
user.authentik_user_id = authentik_user_id
user.username = username
user.email = email
user.display_name = display_name
user.is_active = is_active
@@ -74,10 +82,13 @@ class UsersRepository:
self,
user: User,
*,
username: str | None = None,
email: str | None = None,
display_name: str | None = None,
is_active: bool | None = None,
) -> User:
if username is not None:
user.username = username
if email is not None:
user.email = email
if display_name is not None: