// Contents:
parent
3737359e30
commit
eeede35323
6
.env
6
.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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
12
htaccess
12
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
|
||||
<IfModule Litespeed>
|
||||
</IfModule>
|
||||
#<IfModule Litespeed>
|
||||
#</IfModule>
|
||||
# DO NOT REMOVE OR MODIFY. CLOUDLINUX ENV VARS CONFIGURATION END
|
||||
|
|
|
|||
19
main.py
19
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"])
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
# 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.")
|
||||
|
|
|
|||
Loading…
Reference in New Issue