working now
This commit is contained in:
@@ -3,7 +3,7 @@ Authentication API endpoints
|
||||
"""
|
||||
from datetime import datetime, timedelta
|
||||
from typing import List
|
||||
from fastapi import APIRouter, Depends, HTTPException, status
|
||||
from fastapi import APIRouter, Depends, HTTPException, status, Request
|
||||
from fastapi.security import OAuth2PasswordRequestForm
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
@@ -24,15 +24,39 @@ from app.auth.schemas import (
|
||||
ThemePreferenceUpdate
|
||||
)
|
||||
from app.config import settings
|
||||
from app.core.logging import get_logger, log_auth_attempt
|
||||
|
||||
router = APIRouter()
|
||||
logger = get_logger("auth")
|
||||
|
||||
|
||||
@router.post("/login", response_model=Token)
|
||||
async def login(login_data: LoginRequest, db: Session = Depends(get_db)):
|
||||
async def login(login_data: LoginRequest, request: Request, db: Session = Depends(get_db)):
|
||||
"""Login endpoint"""
|
||||
client_ip = request.client.host if request.client else "unknown"
|
||||
user_agent = request.headers.get("user-agent", "")
|
||||
|
||||
logger.info(
|
||||
"Login attempt started",
|
||||
username=login_data.username,
|
||||
client_ip=client_ip,
|
||||
user_agent=user_agent
|
||||
)
|
||||
|
||||
user = authenticate_user(db, login_data.username, login_data.password)
|
||||
if not user:
|
||||
log_auth_attempt(
|
||||
username=login_data.username,
|
||||
success=False,
|
||||
ip_address=client_ip,
|
||||
user_agent=user_agent,
|
||||
error="Invalid credentials"
|
||||
)
|
||||
logger.warning(
|
||||
"Login failed - invalid credentials",
|
||||
username=login_data.username,
|
||||
client_ip=client_ip
|
||||
)
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
detail="Incorrect username or password",
|
||||
@@ -47,6 +71,20 @@ async def login(login_data: LoginRequest, db: Session = Depends(get_db)):
|
||||
access_token = create_access_token(
|
||||
data={"sub": user.username}, expires_delta=access_token_expires
|
||||
)
|
||||
|
||||
log_auth_attempt(
|
||||
username=login_data.username,
|
||||
success=True,
|
||||
ip_address=client_ip,
|
||||
user_agent=user_agent
|
||||
)
|
||||
logger.info(
|
||||
"Login successful",
|
||||
username=login_data.username,
|
||||
user_id=user.id,
|
||||
client_ip=client_ip
|
||||
)
|
||||
|
||||
return {"access_token": access_token, "token_type": "bearer"}
|
||||
|
||||
|
||||
@@ -87,6 +125,7 @@ async def register(
|
||||
@router.get("/me", response_model=UserResponse)
|
||||
async def read_users_me(current_user: User = Depends(get_current_user)):
|
||||
"""Get current user info"""
|
||||
logger.debug("User info requested", username=current_user.username, user_id=current_user.id)
|
||||
return current_user
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user