
- Built complete CEX platform with FastAPI and Python - JWT-based authentication system with secure password hashing - Multi-currency crypto wallet support (BTC, ETH, USDT) - Fiat account management (USD, EUR, GBP) - Local transaction signing without external APIs - Comprehensive transaction handling (send/receive/deposit/withdraw) - SQLAlchemy models with Alembic migrations - Security middleware (rate limiting, headers, logging) - Input validation and sanitization - Encrypted private key storage with PBKDF2 - Standardized codebase architecture with service layer pattern - Complete API documentation with health endpoints - Comprehensive README with setup instructions Features: - User registration and authentication - Crypto wallet creation and management - Secure transaction signing using local private keys - Fiat deposit/withdrawal system - Transaction history and tracking - Rate limiting and security headers - Input validation for all endpoints - Error handling and logging
30 lines
1.1 KiB
Python
30 lines
1.1 KiB
Python
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.orm import Session
|
|
from app.schemas.user import UserCreate, UserResponse, UserLogin, Token
|
|
from app.services.auth import AuthService, get_current_user
|
|
from app.core.security import create_access_token
|
|
from app.db.session import get_db
|
|
from app.models.user import User
|
|
|
|
router = APIRouter(prefix="/auth", tags=["Authentication"])
|
|
|
|
|
|
@router.post("/register", response_model=UserResponse)
|
|
def register(user_data: UserCreate, db: Session = Depends(get_db)):
|
|
auth_service = AuthService(db)
|
|
user = auth_service.create_user(user_data)
|
|
return user
|
|
|
|
|
|
@router.post("/login", response_model=Token)
|
|
def login(login_data: UserLogin, db: Session = Depends(get_db)):
|
|
auth_service = AuthService(db)
|
|
user = auth_service.authenticate_user(login_data)
|
|
|
|
access_token = create_access_token(data={"sub": user.email})
|
|
return {"access_token": access_token, "token_type": "bearer"}
|
|
|
|
|
|
@router.get("/me", response_model=UserResponse)
|
|
def get_current_user_info(current_user: User = Depends(get_current_user)):
|
|
return current_user |