This commit is contained in:
Timothy Jaeryang Baek
2026-08-23 13:49:50 -04:00
parent 2578174637
commit fb4f476316
4 changed files with 151 additions and 82 deletions
+25 -14
View File
@@ -517,20 +517,30 @@ async def get_users(
# Simple filter parsing - supports userName eq, externalId eq
if 'userName eq' in filter:
email = filter.split('"')[1]
user = await Users.get_user_by_email(email, db=db)
users_list = [user] if user else []
total = 1 if user else 0
response = await Users.get_scim_users(filter={'email': email}, limit=1, db=db)
users_list = response['users']
total = response['total']
elif 'externalId eq' in filter:
external_id = filter.split('"')[1]
user = await find_user_by_external_id(external_id, db=db)
users_list = [user] if user else []
total = 1 if user else 0
else:
response = await Users.get_users(skip=skip, limit=limit, db=db)
response = await Users.get_scim_users(
sort={'order_by': 'created_at'},
skip=skip,
limit=limit,
db=db,
)
users_list = response['users']
total = response['total']
else:
response = await Users.get_users(skip=skip, limit=limit, db=db)
response = await Users.get_scim_users(
sort={'order_by': 'created_at'},
skip=skip,
limit=limit,
db=db,
)
users_list = response['users']
total = response['total']
@@ -553,7 +563,7 @@ async def get_user(
db: AsyncSession = Depends(get_async_session),
):
"""Get SCIM User by ID"""
user = await Users.get_user_by_id(user_id, db=db)
user = await Users.get_scim_user_by_id(user_id, db=db)
if not user:
return scim_error(status_code=status.HTTP_404_NOT_FOUND, detail=f'User {user_id} not found')
@@ -624,11 +634,12 @@ async def create_user(
detail='Failed to create user',
)
# Store externalId in the scim field
if user_data.externalId:
provider = get_scim_provider()
await Users.update_user_scim_by_id(user_id, provider, user_data.externalId, db=db)
new_user = await Users.get_user_by_id(user_id, db=db)
new_user = await Users.update_user_scim_by_id(user_id, get_scim_provider(), user_data.externalId, db=db)
if not new_user:
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail='Failed to stamp SCIM user',
)
await publish_event(
request,
@@ -654,7 +665,7 @@ async def update_user(
db: AsyncSession = Depends(get_async_session),
):
"""Update SCIM User (full update)"""
user = await Users.get_user_by_id(user_id, db=db)
user = await Users.get_scim_user_by_id(user_id, db=db)
if not user:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
@@ -734,7 +745,7 @@ async def patch_user(
db: AsyncSession = Depends(get_async_session),
):
"""Update SCIM User (partial update)"""
user = await Users.get_user_by_id(user_id, db=db)
user = await Users.get_scim_user_by_id(user_id, db=db)
if not user:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
@@ -808,7 +819,7 @@ async def delete_user(
db: AsyncSession = Depends(get_async_session),
):
"""Delete SCIM User"""
user = await Users.get_user_by_id(user_id, db=db)
user = await Users.get_scim_user_by_id(user_id, db=db)
if not user:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,