clientid works
This commit is contained in:
@ -63,8 +63,15 @@ async def register(
|
||||
return user
|
||||
|
||||
|
||||
@router.get("/me", response_model=schemas.User)
|
||||
@router.get("/me")
|
||||
async def read_users_me(
|
||||
current_user: Annotated[schemas.User, Depends(services.get_current_active_user)],
|
||||
):
|
||||
) -> schemas.User:
|
||||
return current_user
|
||||
|
||||
|
||||
@router.get("/anon")
|
||||
async def get_qnon_user(
|
||||
anon_user: Annotated[schemas.AnonUser, Depends(services.get_anon_user)]
|
||||
) -> schemas.AnonUser:
|
||||
return anon_user
|
||||
|
||||
@ -27,3 +27,11 @@ class Token(BaseModel):
|
||||
|
||||
class TokenData(BaseModel):
|
||||
username: Union[str, None] = None
|
||||
|
||||
|
||||
class AnonUser(BaseModel):
|
||||
id: UUID
|
||||
name: Union[str, None] = None
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
from fastapi import status, HTTPException, Depends
|
||||
from fastapi import status, HTTPException, Depends, Header
|
||||
from fastapi.security import OAuth2PasswordBearer
|
||||
from sqlalchemy.orm import Session
|
||||
from jose import JWTError, jwt
|
||||
@ -65,7 +65,7 @@ def create_user(db: Session, user_data: schemas.UserRegister) -> schemas.UserInD
|
||||
return schemas.UserInDB.model_validate(user)
|
||||
|
||||
|
||||
async def get_current_user(
|
||||
def get_current_user(
|
||||
token: Annotated[str, Depends(oauth2_scheme)],
|
||||
db: Annotated[Session, Depends(get_db)],
|
||||
) -> schemas.UserInDB:
|
||||
@ -90,7 +90,7 @@ async def get_current_user(
|
||||
return user
|
||||
|
||||
|
||||
async def get_current_user_or_none(
|
||||
def get_current_user_or_none(
|
||||
token: Annotated[str, Depends(oauth2_scheme)],
|
||||
db: Annotated[Session, Depends(get_db)],
|
||||
) -> Union[schemas.UserInDB, None]:
|
||||
@ -108,9 +108,36 @@ async def get_current_user_or_none(
|
||||
return user
|
||||
|
||||
|
||||
async def get_current_active_user(
|
||||
def get_current_active_user(
|
||||
current_user: Annotated[schemas.User, Depends(get_current_user)],
|
||||
):
|
||||
if not current_user.is_active:
|
||||
raise HTTPException(status_code=400, detail="Inactive user")
|
||||
return current_user
|
||||
|
||||
|
||||
def create_anon_user(db: Annotated[Session, Depends(get_db)]) -> schemas.AnonUser:
|
||||
u = models.AnonymousUser()
|
||||
db.add(u)
|
||||
db.commit()
|
||||
# return schemas.AnonUser.model_validate(u)
|
||||
return u
|
||||
|
||||
|
||||
def get_anon_user(
|
||||
db: Annotated[Session, Depends(get_db)],
|
||||
x_client_id: Annotated[Union[str, None], Header()] = None,
|
||||
) -> schemas.AnonUser:
|
||||
if x_client_id:
|
||||
anon = (
|
||||
db.query(models.AnonymousUser)
|
||||
.filter(models.AnonymousUser.id == x_client_id)
|
||||
.first()
|
||||
)
|
||||
if anon:
|
||||
return anon
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_418_IM_A_TEAPOT,
|
||||
detail={"message": "tf dude? trying to spoof your client id?"},
|
||||
)
|
||||
return create_anon_user(db)
|
||||
|
||||
Reference in New Issue
Block a user