|
1 | 1 | from typing import Annotated, Any, Dict |
2 | 2 |
|
3 | | -from fastapi import APIRouter, Depends, HTTPException |
| 3 | +from fastapi import APIRouter, Body, Depends, HTTPException |
4 | 4 | from httpx import AsyncClient |
5 | 5 | from pydantic import AliasPath, Field |
6 | 6 | from pydantic import BaseModel as PydanticBaseModel |
7 | 7 | from sqlmodel import Session |
8 | 8 |
|
9 | 9 | from auth.management import get_management_token |
10 | 10 | from auth.user_permissions import get_db_user, get_session_user, user_is_general_admin |
| 11 | +from auth0.client import Auth0Client, UpdateUserData, get_auth0_client |
11 | 12 | from auth0.user_info import UserInfo, get_auth0_user_info |
12 | 13 | from config import Settings, get_settings |
13 | 14 | from db.models import ( |
|
18 | 19 | ) |
19 | 20 | from db.setup import get_db_session |
20 | 21 | from db.types import ApprovalStatusEnum |
21 | | -from schemas.biocommons import Auth0UserData, UserProfileData |
| 22 | +from schemas.biocommons import Auth0UserData, BiocommonsUsername, UserProfileData |
22 | 23 | from schemas.user import SessionUser |
23 | 24 |
|
24 | 25 | router = APIRouter( |
@@ -221,3 +222,23 @@ async def get_all_pending( |
221 | 222 | approval_status=ApprovalStatusEnum.PENDING, |
222 | 223 | session=db_session) |
223 | 224 | return {"platforms": platforms, "groups": groups} |
| 225 | + |
| 226 | + |
| 227 | +@router.post("/profile/username/update", |
| 228 | + response_model=Auth0UserData) |
| 229 | +async def update_username( |
| 230 | + username: Annotated[BiocommonsUsername, Body(embed=True)], |
| 231 | + user: Annotated[SessionUser, Depends(get_session_user)], |
| 232 | + db_user: Annotated[BiocommonsUser, Depends(get_db_user)], |
| 233 | + db_session: Annotated[Session, Depends(get_db_session)], |
| 234 | + auth0_client: Annotated[Auth0Client, Depends(get_auth0_client)] |
| 235 | +): |
| 236 | + """Update the username of the current user.""" |
| 237 | + # Update in Auth0 (need to include connection when updating username) |
| 238 | + # TODO: update with connection from settings |
| 239 | + update_data = UpdateUserData(username=username, connection="Username-Password-Authentication") |
| 240 | + resp = auth0_client.update_user(user_id=user.access_token.sub, update_data=update_data) |
| 241 | + db_user.username = username |
| 242 | + db_session.add(db_user) |
| 243 | + db_session.commit() |
| 244 | + return resp |
0 commit comments