Cybersecurity-Projects/PROJECTS/intermediate/siem-dashboard/backend/app/routes/auth.py

75 lines
1.6 KiB
Python

"""
©AngelaMos | 2026
auth.py
Route handlers for the authentication API (/v1/auth)
Mounts POST /register, POST /login, PATCH /me, and GET /me.
Registration and login apply a stricter rate limit via Flask-Limiter
on top of the global default.
Connects to:
controllers/auth_ctrl.py - business logic
schemas/auth.py - RegisterRequest, LoginRequest, UpdateProfileRequest
core/rate_limiting.py - imports limiter for per-endpoint auth limits
routes/__init__.py - auth_bp registered here
"""
from typing import Any
from flask import Blueprint
from app.controllers import auth_ctrl
from app.core.decorators import endpoint, S, R
from app.core.rate_limiting import limiter
from app.config import settings
from app.schemas.auth import RegisterRequest, LoginRequest, UpdateProfileRequest
auth_bp = Blueprint("auth", __name__)
@auth_bp.post("/register")
@limiter.limit(settings.RATELIMIT_AUTH)
@endpoint(auth_required = False)
@S(RegisterRequest)
@R(status = 201)
def register() -> Any:
"""
Register a new analyst account
"""
return auth_ctrl.register()
@auth_bp.post("/login")
@limiter.limit(settings.RATELIMIT_AUTH)
@endpoint(auth_required = False)
@S(LoginRequest)
@R()
def login() -> Any:
"""
Authenticate and return a JWT
"""
return auth_ctrl.login()
@auth_bp.patch("/me")
@endpoint()
@S(UpdateProfileRequest)
@R()
def update_profile() -> Any:
"""
Update the authenticated user's own profile
"""
return auth_ctrl.update_profile()
@auth_bp.get("/me")
@endpoint()
@R()
def me() -> Any:
"""
Return the current authenticated user profile
"""
return auth_ctrl.me()