// Contents:
parent
3737359e30
commit
eeede35323
6
.env
6
.env
|
|
@ -7,9 +7,9 @@ ALGORITHM=HS256
|
||||||
ACCESS_TOKEN_EXPIRE_MINUTES=30
|
ACCESS_TOKEN_EXPIRE_MINUTES=30
|
||||||
|
|
||||||
# Configuration pour AWS S3 (à remplir si nécessaire)
|
# Configuration pour AWS S3 (à remplir si nécessaire)
|
||||||
AWS_ACCESS_KEY_ID=your-aws-access-key
|
#AWS_ACCESS_KEY_ID=your-aws-access-key
|
||||||
AWS_SECRET_ACCESS_KEY=your-aws-secret-key
|
#AWS_SECRET_ACCESS_KEY=your-aws-secret-key
|
||||||
AWS_BUCKET_NAME=your-bucket-name
|
#AWS_BUCKET_NAME=your-bucket-name
|
||||||
|
|
||||||
# Configuration pour Celery (à remplir si nécessaire)CELERY_BROKER_URL=redis://venguard.m-a-i.tech/
|
# Configuration pour Celery (à remplir si nécessaire)CELERY_BROKER_URL=redis://venguard.m-a-i.tech/
|
||||||
CELERY_BROKER_URL=redis://localhost:6379/0
|
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")
|
@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)):
|
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)
|
user = await AuthService.authenticate_user(form_data.username, form_data.password, db)
|
||||||
|
logger.info(f"User {form_data.username} logged in")
|
||||||
if not user:
|
if not user:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||||
|
|
|
||||||
12
htaccess
12
htaccess
|
|
@ -1,10 +1,10 @@
|
||||||
# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION BEGIN
|
# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION BEGIN
|
||||||
PassengerAppRoot "/home/sywmtnsg/api"
|
#PassengerAppRoot "/home/sywmtnsg/api"
|
||||||
PassengerBaseURI "/"
|
#PassengerBaseURI "/"
|
||||||
PassengerPython "/home/sywmtnsg/virtualenv/api/3.11/bin/python"
|
#PassengerPython "/home/sywmtnsg/virtualenv/api/3.11/bin/python"
|
||||||
# DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION END
|
# 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 BEGIN
|
||||||
<IfModule Litespeed>
|
#<IfModule Litespeed>
|
||||||
</IfModule>
|
#</IfModule>
|
||||||
# DO NOT REMOVE OR MODIFY. CLOUDLINUX ENV VARS CONFIGURATION END
|
# 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 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 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 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.")
|
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
|
# Include routers
|
||||||
app.include_router(auth.router, prefix="/api/v1/auth", tags=["auth"])
|
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"])
|
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('hashed_password', String(255), nullable=False),
|
||||||
Column('role', String(50), nullable=False),
|
Column('role', String(50), nullable=False),
|
||||||
Column('is_banned', Boolean, default=False),
|
Column('is_banned', Boolean, default=False),
|
||||||
|
Column('is_blocked', Boolean, default=False),
|
||||||
Column('is_deleted', Boolean, default=False)
|
Column('is_deleted', Boolean, default=False)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ class UserResponse(BaseModel):
|
||||||
organization: Optional[str] = None
|
organization: Optional[str] = None
|
||||||
role: RoleResponse
|
role: RoleResponse
|
||||||
is_banned: bool
|
is_banned: bool
|
||||||
|
is_blocked: bool
|
||||||
is_deleted: bool
|
is_deleted: bool
|
||||||
|
|
||||||
# Validation au niveau du modèle
|
# Validation au niveau du modèle
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ class UserService:
|
||||||
query = (
|
query = (
|
||||||
update(users_table)
|
update(users_table)
|
||||||
.where(users_table.c.email == user_action.email)
|
.where(users_table.c.email == user_action.email)
|
||||||
.values(is_active=False)
|
.values(is_blocked=True)
|
||||||
)
|
)
|
||||||
result = await db.execute(query)
|
result = await db.execute(query)
|
||||||
await db.commit()
|
await db.commit()
|
||||||
|
|
@ -107,7 +107,7 @@ class UserService:
|
||||||
query = (
|
query = (
|
||||||
update(users_table)
|
update(users_table)
|
||||||
.where(users_table.c.email == user_action.email)
|
.where(users_table.c.email == user_action.email)
|
||||||
.values(is_active=True)
|
.values(is_blocked=False)
|
||||||
)
|
)
|
||||||
result = await db.execute(query)
|
result = await db.execute(query)
|
||||||
await db.commit()
|
await db.commit()
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,35 @@
|
||||||
import logging
|
import logging
|
||||||
|
from logging.handlers import TimedRotatingFileHandler
|
||||||
import os
|
import os
|
||||||
|
|
||||||
# Configuration du logger pour la console
|
# Chemin du fichier de log
|
||||||
logging.basicConfig(
|
log_file_path = "logserver.log"
|
||||||
level=logging.INFO,
|
|
||||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
|
||||||
handlers=[
|
|
||||||
logging.StreamHandler() # Affiche les logs dans la console
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
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