diff --git a/.env b/.env index b4e0bf0..e7d86c8 100644 --- a/.env +++ b/.env @@ -7,9 +7,9 @@ ALGORITHM=HS256 ACCESS_TOKEN_EXPIRE_MINUTES=30 # Configuration pour AWS S3 (à remplir si nécessaire) -AWS_ACCESS_KEY_ID=your-aws-access-key -AWS_SECRET_ACCESS_KEY=your-aws-secret-key -AWS_BUCKET_NAME=your-bucket-name +#AWS_ACCESS_KEY_ID=your-aws-access-key +#AWS_SECRET_ACCESS_KEY=your-aws-secret-key +#AWS_BUCKET_NAME=your-bucket-name # Configuration pour Celery (à remplir si nécessaire)CELERY_BROKER_URL=redis://venguard.m-a-i.tech/ CELERY_BROKER_URL=redis://localhost:6379/0 diff --git a/api/v1/auth.py b/api/v1/auth.py index 858b67c..068dbe1 100644 --- a/api/v1/auth.py +++ b/api/v1/auth.py @@ -33,6 +33,7 @@ async def signup(user: UserCreate, db=Depends(get_db)): @router.post("/token", response_model=Token, summary="Login and get access token") async def login_for_access_token( form_data: OAuth2PasswordRequestForm = Depends(), db=Depends(get_db)): user = await AuthService.authenticate_user(form_data.username, form_data.password, db) + logger.info(f"User {form_data.username} logged in") if not user: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, diff --git a/htaccess b/htaccess index df49519..975e038 100644 --- a/htaccess +++ b/htaccess @@ -1,10 +1,10 @@ # DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION BEGIN -PassengerAppRoot "/home/sywmtnsg/api" -PassengerBaseURI "/" -PassengerPython "/home/sywmtnsg/virtualenv/api/3.11/bin/python" +#PassengerAppRoot "/home/sywmtnsg/api" +#PassengerBaseURI "/" +#PassengerPython "/home/sywmtnsg/virtualenv/api/3.11/bin/python" # DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION END -PassengerFriendlyErrorPages on +#PassengerFriendlyErrorPages on # DO NOT REMOVE OR MODIFY. CLOUDLINUX ENV VARS CONFIGURATION BEGIN - - +# +# # DO NOT REMOVE OR MODIFY. CLOUDLINUX ENV VARS CONFIGURATION END diff --git a/main.py b/main.py index 6bb2854..c367281 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,29 @@ from fastapi import FastAPI +from fastapi.responses import JSONResponse from api.v1 import users, roles, need_requests, reports, uploads, person_reports, technical_issues, points_of_interest, shelters, auth #, messages from config.database import init_db +from starlette.middleware.base import BaseHTTPMiddleware +from utils.logging import logger app = FastAPI(title="Disaster Management API", description="API for managing disaster during these days of ending world.") +# Middleware pour logger les erreurs +class LogErrorsMiddleware(BaseHTTPMiddleware): + async def dispatch(self, request, call_next): + try: + response = await call_next(request) + return response + except Exception as e: + logger.error(f"Auth error: {str(e)}") + return JSONResponse( + status_code=500, + content={"message": "Internal Server Error"} + ) + +# Ajouter le middleware à l'application +app.add_middleware(LogErrorsMiddleware) + # Include routers app.include_router(auth.router, prefix="/api/v1/auth", tags=["auth"]) app.include_router(person_reports.router, prefix="/api/v1/person_reports", tags=["person_reports"]) diff --git a/models/db.py b/models/db.py index f6f4ec3..4930dc6 100644 --- a/models/db.py +++ b/models/db.py @@ -17,6 +17,7 @@ users_table = Table( Column('hashed_password', String(255), nullable=False), Column('role', String(50), nullable=False), Column('is_banned', Boolean, default=False), + Column('is_blocked', Boolean, default=False), Column('is_deleted', Boolean, default=False) ) diff --git a/models/schemas.py b/models/schemas.py index f1f3fa7..7b15c4c 100644 --- a/models/schemas.py +++ b/models/schemas.py @@ -42,6 +42,7 @@ class UserResponse(BaseModel): organization: Optional[str] = None role: RoleResponse is_banned: bool + is_blocked: bool is_deleted: bool # Validation au niveau du modèle diff --git a/services/user_service.py b/services/user_service.py index ff22603..61ae4c9 100644 --- a/services/user_service.py +++ b/services/user_service.py @@ -78,7 +78,7 @@ class UserService: query = ( update(users_table) .where(users_table.c.email == user_action.email) - .values(is_active=False) + .values(is_blocked=True) ) result = await db.execute(query) await db.commit() @@ -107,7 +107,7 @@ class UserService: query = ( update(users_table) .where(users_table.c.email == user_action.email) - .values(is_active=True) + .values(is_blocked=False) ) result = await db.execute(query) await db.commit() diff --git a/utils/logging.py b/utils/logging.py index 9985ffa..bd6e745 100644 --- a/utils/logging.py +++ b/utils/logging.py @@ -1,13 +1,35 @@ import logging +from logging.handlers import TimedRotatingFileHandler import os -# Configuration du logger pour la console -logging.basicConfig( - level=logging.INFO, - format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', - handlers=[ - logging.StreamHandler() # Affiche les logs dans la console - ] -) +# Chemin du fichier de log +log_file_path = "logserver.log" -logger = logging.getLogger('ApplicationLogger') \ No newline at end of file +# Crée le répertoire du fichier de log s'il n'existe pas +log_dir = os.path.dirname(log_file_path) +if not os.path.exists(log_dir) and log_dir != '': + os.makedirs(log_dir) + +# Configuration du logger +logger = logging.getLogger('ApplicationLogger') +logger.setLevel(logging.INFO) + +# Gestionnaire de console +console_handler = logging.StreamHandler() +console_handler.setLevel(logging.INFO) + +# Gestionnaire de fichier +file_handler = TimedRotatingFileHandler(log_file_path, when="midnight", backupCount=7) +file_handler.setLevel(logging.INFO) + +# Format des logs +formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') +console_handler.setFormatter(formatter) +file_handler.setFormatter(formatter) + +# Ajout des gestionnaires au logger +logger.addHandler(console_handler) +logger.addHandler(file_handler) + +# Exemple de log +logger.info("Ceci est un message de log.")