working now

This commit is contained in:
HotSwapp
2025-08-10 19:06:21 -05:00
parent c2f3c4411d
commit 350af60db3
10 changed files with 248 additions and 11 deletions

View File

@@ -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