def get_optional_current_user_from_state( session: Session = Depends(get_database_session), application: Application = Depends(get_application), state: Optional[str] = Query(None), ): """ Get and return user from state query parameter if any """ if not state or state.strip() == "": return credentials_exception = HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Could not validate credentials", headers={"WWW-Authenticate": "Bearer"}, ) try: payload_from_state = serializer.loads(state) access_token = payload_from_state["access_token"] if not access_token: return user: User = application.authenticate_token(session, access_token) if user.role == UserRole.ADMIN: user = session.query(Admin).get(user.id) elif user.role == UserRole.TENANT: user = session.query(Tenant).get(user.id) elif user.role == UserRole.LANDLORD: user = session.query(Landlord).get(user.id) except ApplicationError: raise credentials_exception except BadSignature: raise credentials_exception except KeyError: raise credentials_exception return user
async def get_user_from_websocket( token: str, application: Application = Depends(get_application), session: Session = Depends(get_database_session), ) -> Optional[User]: try: user = application.authenticate_token(session, token) if user.role == UserRole.ADMIN: user = session.query(Admin).get(user.id) elif user.role == UserRole.TENANT: user = session.query(Tenant).get(user.id) elif user.role == UserRole.LANDLORD: user = session.query(Landlord).get(user.id) except Exception: return return user
async def get_current_user( token: bytes = Depends(oauth2_scheme), session: Session = Depends(get_database_session), application: Application = Depends(get_application), ) -> User: # todo? change to application method instead of service method? credentials_exception = HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Could not validate credentials", headers={"WWW-Authenticate": "Bearer"}, ) try: user: User = application.authenticate_token(session, token) if user.role == UserRole.ADMIN: user = session.query(Admin).get(user.id) elif user.role == UserRole.TENANT: user = session.query(Tenant).get(user.id) elif user.role == UserRole.LANDLORD: user = session.query(Landlord).get(user.id) except ApplicationError: raise credentials_exception return user