Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions openrag/routers/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,10 +223,19 @@ async def delete_user(user_id: int, vectordb=Depends(get_vectordb), admin_user=D
**Note:** Store the new token securely - the old token is now invalid.
""",
)
async def regenerate_user_token(user_id: int, vectordb=Depends(get_vectordb)):
async def regenerate_user_token(
user_id: int,
current=Depends(current_user),
vectordb=Depends(get_vectordb),
):
"""
Regenerate a user's token.
Regenerate a user's token. Caller must be admin or the target user themselves.
"""
if not current.get("is_admin") and current.get("id") != user_id:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="You can only regenerate your own token",
)
user = await vectordb.regenerate_user_token.remote(user_id)
logger.info("Regenerated user token", user_id=user_id)
return JSONResponse(status_code=status.HTTP_200_OK, content=user)
Expand Down
16 changes: 16 additions & 0 deletions tests/api/users.robot
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,22 @@ Get Created User
Should Be Equal As Strings ${json}[id] ${USER_ID}
Dictionary Should Not Contain Key ${json} token

Non-Admin Can Regenerate Own Token
Skip If Auth Disabled
&{user_headers}= Create Dictionary Authorization=Bearer ${USER_TOKEN}
${response}= POST ${USERS_ENDPOINT}/${USER_ID}/regenerate_token headers=${user_headers} expected_status=200
${json}= Set Variable ${response.json()}
Dictionary Should Contain Key ${json} token
Should Not Be Equal As Strings ${json}[token] ${USER_TOKEN}
Set Suite Variable ${USER_TOKEN} ${json}[token]

Non-Admin Cannot Regenerate Other User Token
Skip If Auth Disabled
&{user_headers}= Create Dictionary Authorization=Bearer ${USER_TOKEN}
${response}= POST ${USERS_ENDPOINT}/1/regenerate_token headers=${user_headers} expected_status=403
${json}= Set Variable ${response.json()}
Should Contain ${json}[detail] You can only regenerate your own token

Regenerate Token
${response}= POST ${USERS_ENDPOINT}/${USER_ID}/regenerate_token headers=${HEADERS} expected_status=200
${json}= Set Variable ${response.json()}
Expand Down