Files
Maison/samba-api/main.py
2026-02-10 12:12:11 +01:00

85 lines
2.5 KiB
Python

from fastapi import FastAPI, HTTPException, Depends
from fastapi.middleware.cors import CORSMiddleware
from fastapi.security import HTTPBearer
import uvicorn
import logging
from src.routers import users, groups, ous, computers, auth
from src.core.config import settings
from src.core.exceptions import setup_exception_handlers
# Configure logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)
# Initialize FastAPI app
app = FastAPI(
title="Samba API",
description="REST API for Samba Active Directory management",
version="1.0.0",
docs_url="/docs",
redoc_url="/redoc"
)
# Configure CORS
app.add_middleware(
CORSMiddleware,
allow_origins=settings.ALLOWED_HOSTS,
allow_credentials=True,
allow_methods=["GET", "POST", "PUT", "DELETE", "PATCH"],
allow_headers=["*"],
)
# Setup exception handlers
setup_exception_handlers(app)
# Include routers
app.include_router(auth.router, prefix="/api/v1/auth", tags=["Authentication"])
app.include_router(users.router, prefix="/api/v1/users", tags=["Users"])
app.include_router(groups.router, prefix="/api/v1/groups", tags=["Groups"])
app.include_router(ous.router, prefix="/api/v1/ous", tags=["Organizational Units"])
app.include_router(computers.router, prefix="/api/v1/computers", tags=["Computers"])
@app.get("/")
async def root():
return {"message": "Samba API is running", "version": "1.0.0"}
@app.get("/health")
async def health_check():
return {"status": "healthy", "service": "samba-api"}
if __name__ == "__main__":
import ssl
import os
# Check if SSL certificates exist
ssl_keyfile = "/app/ssl/server.key"
ssl_certfile = "/app/ssl/server.crt"
if os.path.exists(ssl_keyfile) and os.path.exists(ssl_certfile):
# HTTPS configuration
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.load_cert_chain(ssl_certfile, ssl_keyfile)
uvicorn.run(
"main:app",
host=settings.HOST,
port=settings.HTTPS_PORT if hasattr(settings, 'HTTPS_PORT') else 8443,
reload=settings.DEBUG,
log_level="info",
ssl_keyfile=ssl_keyfile,
ssl_certfile=ssl_certfile
)
else:
# HTTP fallback
uvicorn.run(
"main:app",
host=settings.HOST,
port=settings.PORT,
reload=settings.DEBUG,
log_level="info"
)