Spaces:
Sleeping
Sleeping
debug
Browse files- app/api.py +4 -11
app/api.py
CHANGED
|
@@ -1,20 +1,17 @@
|
|
| 1 |
# app/api.py
|
| 2 |
from fastapi import APIRouter, HTTPException, status, Depends, WebSocket, WebSocketDisconnect
|
| 3 |
-
# Remove JSONResponse if not explicitly needed
|
| 4 |
import logging
|
| 5 |
|
| 6 |
from . import schemas, crud, auth, models
|
| 7 |
from .websocket import manager
|
| 8 |
-
# --- Use the new dependency ---
|
| 9 |
from .dependencies import get_required_current_user
|
| 10 |
|
| 11 |
router = APIRouter()
|
| 12 |
logger = logging.getLogger(__name__)
|
| 13 |
|
| 14 |
-
# ---
|
| 15 |
-
@router.post("/register",
|
| 16 |
async def register_user(user_in: schemas.UserCreate):
|
| 17 |
-
# ... same logic ...
|
| 18 |
existing_user = await crud.get_user_by_email(user_in.email)
|
| 19 |
if existing_user:
|
| 20 |
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Email already registered")
|
|
@@ -26,29 +23,25 @@ async def register_user(user_in: schemas.UserCreate):
|
|
| 26 |
if not created_user: raise HTTPException(status_code=500, detail="Failed to retrieve created user")
|
| 27 |
return models.User(id=created_user.id, email=created_user.email)
|
| 28 |
|
| 29 |
-
@router.post("/login",
|
| 30 |
async def login_for_access_token(form_data: schemas.UserLogin):
|
| 31 |
-
# ... same logic ...
|
| 32 |
user = await crud.get_user_by_email(form_data.email)
|
| 33 |
if not user or not auth.verify_password(form_data.password, user.hashed_password):
|
| 34 |
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Incorrect email or password", headers={"WWW-Authenticate": "Bearer"})
|
| 35 |
access_token = auth.create_session_token(user_id=user.id)
|
| 36 |
return {"access_token": access_token, "token_type": "bearer"}
|
|
|
|
| 37 |
|
| 38 |
-
# --- UPDATE this endpoint ---
|
| 39 |
@router.get("/users/me", response_model=models.User)
|
| 40 |
async def read_users_me(current_user: models.User = Depends(get_required_current_user)):
|
| 41 |
"""
|
| 42 |
Returns the current authenticated user's details based on the
|
| 43 |
Authorization: Bearer <token> header.
|
| 44 |
"""
|
| 45 |
-
# The dependency now handles getting the user from the header token
|
| 46 |
return current_user
|
| 47 |
|
| 48 |
-
# --- (websocket endpoint remains the same) ---
|
| 49 |
@router.websocket("/ws/{user_id_token}")
|
| 50 |
async def websocket_endpoint(websocket: WebSocket, user_id_token: str):
|
| 51 |
-
# ... same logic ...
|
| 52 |
user_id = await auth.get_user_id_from_token(user_id_token)
|
| 53 |
if user_id is None:
|
| 54 |
logger.warning(f"WebSocket connection rejected: Invalid token {user_id_token}")
|
|
|
|
| 1 |
# app/api.py
|
| 2 |
from fastapi import APIRouter, HTTPException, status, Depends, WebSocket, WebSocketDisconnect
|
|
|
|
| 3 |
import logging
|
| 4 |
|
| 5 |
from . import schemas, crud, auth, models
|
| 6 |
from .websocket import manager
|
|
|
|
| 7 |
from .dependencies import get_required_current_user
|
| 8 |
|
| 9 |
router = APIRouter()
|
| 10 |
logger = logging.getLogger(__name__)
|
| 11 |
|
| 12 |
+
# --- FIX THE DECORATORS HERE ---
|
| 13 |
+
@router.post("/register", status_code=status.HTTP_201_CREATED, response_model=models.User) # <-- FIX HERE
|
| 14 |
async def register_user(user_in: schemas.UserCreate):
|
|
|
|
| 15 |
existing_user = await crud.get_user_by_email(user_in.email)
|
| 16 |
if existing_user:
|
| 17 |
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Email already registered")
|
|
|
|
| 23 |
if not created_user: raise HTTPException(status_code=500, detail="Failed to retrieve created user")
|
| 24 |
return models.User(id=created_user.id, email=created_user.email)
|
| 25 |
|
| 26 |
+
@router.post("/login", response_model=schemas.Token) # <-- FIX HERE
|
| 27 |
async def login_for_access_token(form_data: schemas.UserLogin):
|
|
|
|
| 28 |
user = await crud.get_user_by_email(form_data.email)
|
| 29 |
if not user or not auth.verify_password(form_data.password, user.hashed_password):
|
| 30 |
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Incorrect email or password", headers={"WWW-Authenticate": "Bearer"})
|
| 31 |
access_token = auth.create_session_token(user_id=user.id)
|
| 32 |
return {"access_token": access_token, "token_type": "bearer"}
|
| 33 |
+
# --- END FIXES ---
|
| 34 |
|
|
|
|
| 35 |
@router.get("/users/me", response_model=models.User)
|
| 36 |
async def read_users_me(current_user: models.User = Depends(get_required_current_user)):
|
| 37 |
"""
|
| 38 |
Returns the current authenticated user's details based on the
|
| 39 |
Authorization: Bearer <token> header.
|
| 40 |
"""
|
|
|
|
| 41 |
return current_user
|
| 42 |
|
|
|
|
| 43 |
@router.websocket("/ws/{user_id_token}")
|
| 44 |
async def websocket_endpoint(websocket: WebSocket, user_id_token: str):
|
|
|
|
| 45 |
user_id = await auth.get_user_id_from_token(user_id_token)
|
| 46 |
if user_id is None:
|
| 47 |
logger.warning(f"WebSocket connection rejected: Invalid token {user_id_token}")
|