diff --git a/.dockerignore b/.dockerignore deleted file mode 100755 index 41ae8f7..0000000 --- a/.dockerignore +++ /dev/null @@ -1,73 +0,0 @@ -# Git -.git -.gitignore -README.md - -# Documentation -docs/ -*.md - -# IDE -.vscode/ -.idea/ -*.swp -*.swo - -# OS -.DS_Store -Thumbs.db - -# Logs -*.log -logs/ - -# Temporary files -*.tmp -*.temp -.cache/ - -# Node modules (pour le frontend) -frontend/node_modules/ -frontend/dist/ - -# Python cache -__pycache__/ -*.pyc -*.pyo -*.pyd -.Python -*.so - -# Virtual environments -venv/ -env/ -ENV/ - -# Database -*.db -*.sqlite -*.sqlite3 -postgres_data/ - -# Uploads -uploads/ -!uploads/.gitkeep - -# Environment files -.env -.env.local -.env.production - -# Docker -docker-compose.override.yml -Dockerfile* - -# Testing -.coverage -htmlcov/ -.pytest_cache/ -.tox/ - -# Celery -celerybeat-schedule -celerybeat.pid diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100755 index 27421cf..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,107 +0,0 @@ -name: CI/CD Pipeline - -on: - push: - branches: [ main, develop ] - pull_request: - branches: [ main, develop ] - -jobs: - test: - runs-on: ubuntu-latest - - services: - postgres: - image: postgres:15 - env: - POSTGRES_PASSWORD: postgres - POSTGRES_DB: lediscord_test - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - - 5432:5432 - - steps: - - uses: actions/checkout@v3 - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: '3.11' - - - name: Install Python dependencies - run: | - cd backend - pip install -r requirements.txt - - - name: Run backend tests - run: | - cd backend - python -m pytest tests/ -v - env: - DATABASE_URL: postgresql://postgres:postgres@localhost:5432/lediscord_test - - - name: Set up Node.js - uses: actions/setup-node@v3 - with: - node-version: '18' - cache: 'npm' - cache-dependency-path: frontend/package-lock.json - - - name: Install frontend dependencies - run: | - cd frontend - npm ci - - - name: Run frontend tests - run: | - cd frontend - npm run test:unit - - - name: Build frontend - run: | - cd frontend - npm run build - - security: - runs-on: ubuntu-latest - needs: test - - steps: - - uses: actions/checkout@v3 - - - name: Run security scan - uses: snyk/actions/node@master - env: - SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - with: - args: --severity-threshold=high - path: frontend/ - - - name: Run Python security scan - run: | - cd backend - pip install safety - safety check - - docker: - runs-on: ubuntu-latest - needs: [test, security] - - steps: - - uses: actions/checkout@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Build and test Docker images - run: | - docker-compose build - docker-compose up -d - sleep 30 - curl -f http://localhost:8000/health || exit 1 - curl -f http://localhost:5173 || exit 1 - docker-compose down diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 diff --git a/Makefile b/Makefile deleted file mode 100755 index 3ac5991..0000000 --- a/Makefile +++ /dev/null @@ -1,232 +0,0 @@ -.PHONY: help local dev prod start stop restart logs status build clean test verify - -# Configuration -PROJECT_NAME := LeDiscord - -help: ## Afficher cette aide - @echo "đ $(PROJECT_NAME) - Makefile Zero-Config" - @echo "==========================================" - @echo "" - @echo "đ Environnements disponibles :" - @echo " local - DĂ©veloppement local (localhost)" - @echo " dev - Environnement de dĂ©veloppement (dev.lediscord.com)" - @echo " prod - Production (lediscord.com)" - @echo "" - @echo "đ§ Commandes disponibles :" - @echo "" - @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' - @echo "" - @echo "đĄ Exemples :" - @echo " make local # DĂ©marrer en mode local" - @echo " make dev # DĂ©marrer en mode dĂ©veloppement" - @echo " make prod # DĂ©marrer en mode production" - @echo " make stop-local # ArrĂȘter en mode local" - @echo " make logs-dev # Voir les logs en mode dĂ©veloppement" - -# =========================================== -# LOCAL (dĂ©veloppement sur votre machine) -# =========================================== - -local: ## DĂ©marrer en mode local - @echo "đ DĂ©marrage de $(PROJECT_NAME) en mode LOCAL..." - @docker compose -f docker-compose.local.yml up --build -d - @echo "â $(PROJECT_NAME) local dĂ©marrĂ© !" - @echo " Frontend: http://localhost:5173" - @echo " Backend: http://localhost:8000" - @echo " API Docs: http://localhost:8000/docs" - -stop-local: ## ArrĂȘter en mode local - @echo "đ ArrĂȘt de $(PROJECT_NAME) en mode LOCAL..." - @docker compose -f docker-compose.local.yml down - @echo "â $(PROJECT_NAME) local arrĂȘtĂ©" - -restart-local: ## RedĂ©marrer en mode local - @echo "đ RedĂ©marrage de $(PROJECT_NAME) en mode LOCAL..." - @$(MAKE) stop-local - @$(MAKE) local - -logs-local: ## Voir les logs en mode local - @echo "đ Logs de $(PROJECT_NAME) en mode LOCAL..." - @docker compose -f docker-compose.local.yml logs -f - -status-local: ## Voir le statut en mode local - @echo "đ Statut de $(PROJECT_NAME) en mode LOCAL..." - @docker compose -f docker-compose.local.yml ps - -build-local: ## Reconstruire en mode local - @echo "đš Reconstruction de $(PROJECT_NAME) en mode LOCAL..." - @docker compose -f docker-compose.local.yml build --no-cache - @echo "â Reconstruction terminĂ©e" - -# =========================================== -# DEVELOPMENT (dev.lediscord.com) -# =========================================== - -dev: ## DĂ©marrer en mode dĂ©veloppement - @echo "đ DĂ©marrage de $(PROJECT_NAME) en mode DEVELOPMENT..." - @docker compose -f docker-compose.dev.yml up --build -d - @echo "â $(PROJECT_NAME) development dĂ©marrĂ© !" - @echo " Frontend: http://localhost:8082" - @echo " Backend: http://localhost:8002" - @echo " API Docs: http://localhost:8002/docs" - -stop-dev: ## ArrĂȘter en mode dĂ©veloppement - @echo "đ ArrĂȘt de $(PROJECT_NAME) en mode DEVELOPMENT..." - @docker compose -f docker-compose.dev.yml down - @echo "â $(PROJECT_NAME) development arrĂȘtĂ©" - -restart-dev: ## RedĂ©marrer en mode dĂ©veloppement - @echo "đ RedĂ©marrage de $(PROJECT_NAME) en mode DEVELOPMENT..." - @$(MAKE) stop-dev - @$(MAKE) dev - -logs-dev: ## Voir les logs en mode dĂ©veloppement - @echo "đ Logs de $(PROJECT_NAME) en mode DEVELOPMENT..." - @docker compose -f docker-compose.dev.yml logs -f - -status-dev: ## Voir le statut en mode dĂ©veloppement - @echo "đ Statut de $(PROJECT_NAME) en mode DEVELOPMENT..." - @docker compose -f docker-compose.dev.yml ps - -build-dev: ## Reconstruire en mode dĂ©veloppement - @echo "đš Reconstruction de $(PROJECT_NAME) en mode DEVELOPMENT..." - @docker compose -f docker-compose.dev.yml build --no-cache - @echo "â Reconstruction terminĂ©e" - -# =========================================== -# PRODUCTION (lediscord.com) -# =========================================== - -prod: ## DĂ©marrer en mode production - @echo "đ DĂ©marrage de $(PROJECT_NAME) en mode PRODUCTION..." - @docker compose -f docker-compose.prod.yml up --build -d - @echo "â $(PROJECT_NAME) production dĂ©marrĂ© !" - @echo " Frontend: http://localhost:80" - @echo " Backend: http://localhost:8001" - @echo " API Docs: http://localhost:8001/docs" - -stop-prod: ## ArrĂȘter en mode production - @echo "đ ArrĂȘt de $(PROJECT_NAME) en mode PRODUCTION..." - @docker compose -f docker-compose.prod.yml down - @echo "â $(PROJECT_NAME) production arrĂȘtĂ©" - -restart-prod: ## RedĂ©marrer en mode production - @echo "đ RedĂ©marrage de $(PROJECT_NAME) en mode PRODUCTION..." - @$(MAKE) stop-prod - @$(MAKE) prod - -logs-prod: ## Voir les logs en mode production - @echo "đ Logs de $(PROJECT_NAME) en mode PRODUCTION..." - @docker compose -f docker-compose.prod.yml logs -f - -status-prod: ## Voir le statut en mode production - @echo "đ Statut de $(PROJECT_NAME) en mode PRODUCTION..." - @docker compose -f docker-compose.prod.yml ps - -build-prod: ## Reconstruire en mode production - @echo "đš Reconstruction de $(PROJECT_NAME) en mode PRODUCTION..." - @docker compose -f docker-compose.prod.yml build --no-cache - @echo "â Reconstruction terminĂ©e" - -# =========================================== -# COMMANDES GLOBALES -# =========================================== - -start: local ## DĂ©marrer en mode local (alias) -stop: stop-local ## ArrĂȘter en mode local (alias) -restart: restart-local ## RedĂ©marrer en mode local (alias) -logs: logs-local ## Voir les logs en mode local (alias) - -all: ## DĂ©marrer tous les environnements - @echo "đ DĂ©marrage de tous les environnements $(PROJECT_NAME)..." - @$(MAKE) local - @$(MAKE) dev - @$(MAKE) prod - @echo "â Tous les environnements sont dĂ©marrĂ©s !" - -stop-all: ## ArrĂȘter tous les environnements - @echo "đ ArrĂȘt de tous les environnements $(PROJECT_NAME)..." - @$(MAKE) stop-local - @$(MAKE) stop-dev - @$(MAKE) stop-prod - @echo "â Tous les environnements sont arrĂȘtĂ©s !" - -status: ## Voir le statut de tous les environnements - @echo "đ Statut de tous les environnements $(PROJECT_NAME)..." - @echo "" - @echo "đ” LOCAL:" - @$(MAKE) status-local - @echo "" - @echo "đĄ DEVELOPMENT:" - @$(MAKE) status-dev - @echo "" - @echo "đą PRODUCTION:" - @$(MAKE) status-prod - -clean: ## Nettoyer tous les environnements (ATTENTION: supprime les volumes) - @echo "đ§č Nettoyage complet de $(PROJECT_NAME)..." - @echo "â ïž ATTENTION: Cette action supprimera tous les volumes et donnĂ©es !" - @read -p "Ătes-vous sĂ»r ? (y/N): " -n 1 -r; \ - if [[ $$REPLY =~ ^[Yy]$$ ]]; then \ - echo ""; \ - echo "đ§č Nettoyage en cours..."; \ - $(MAKE) stop-all; \ - docker compose -f docker-compose.local.yml down -v --remove-orphans; \ - docker compose -f docker-compose.dev.yml down -v --remove-orphans; \ - docker compose -f docker-compose.prod.yml down -v --remove-orphans; \ - docker system prune -f; \ - echo "â Nettoyage terminĂ©"; \ - else \ - echo ""; \ - echo "â Nettoyage annulĂ©"; \ - fi - -# =========================================== -# UTILITAIRES -# =========================================== - -test: ## Tester la configuration des environnements - @echo "đ§Ș Test de la configuration $(PROJECT_NAME)..." - @if [ -f "test-environments.sh" ]; then \ - ./test-environments.sh; \ - else \ - echo "â Script de test non trouvĂ©"; \ - fi - -verify: ## VĂ©rifier le mode Zero-Config - @echo "đ VĂ©rification Zero-Config $(PROJECT_NAME)..." - @if [ -f "verify-zero-config.sh" ]; then \ - ./verify-zero-config.sh; \ - else \ - echo "â Script de vĂ©rification non trouvĂ©"; \ - fi - -check: ## VĂ©rifier la configuration des fichiers d'environnement - @echo "đ VĂ©rification des fichiers d'environnement..." - @echo "" - @echo "đ Backend:" - @for env in local development production; do \ - if [ -f "backend/.env.$$env" ]; then \ - echo "â backend/.env.$$env"; \ - else \ - echo "â backend/.env.$$env manquant"; \ - fi; \ - done - @echo "" - @echo "đ Frontend:" - @for env in local development production; do \ - if [ -f "frontend/.env.$$env" ]; then \ - echo "â frontend/.env.$$env"; \ - else \ - echo "â frontend/.env.$$env manquant"; \ - fi; \ - done - @echo "" - @echo "đ Docker Compose:" - @for env in local dev prod; do \ - if [ -f "docker-compose.$$env.yml" ]; then \ - echo "â docker-compose.$$env.yml"; \ - else \ - echo "â docker-compose.$$env.yml manquant"; \ - fi; \ - done diff --git a/README.md b/README.md old mode 100755 new mode 100644 diff --git a/backend/Dockerfile.dev b/backend/Dockerfile old mode 100755 new mode 100644 similarity index 97% rename from backend/Dockerfile.dev rename to backend/Dockerfile index eb1d8fb..ec663f0 --- a/backend/Dockerfile.dev +++ b/backend/Dockerfile @@ -40,9 +40,6 @@ RUN mkdir -p /app/uploads /app/logs # Code source COPY . . -# Env dev -COPY .env.development .env - # Permissions RUN chmod -R 755 /app diff --git a/backend/Dockerfile.prod b/backend/Dockerfile.prod deleted file mode 100755 index 3c19e95..0000000 --- a/backend/Dockerfile.prod +++ /dev/null @@ -1,75 +0,0 @@ -# Multi-stage build pour la production -FROM python:3.11-slim AS builder - -LABEL maintainer="LeDiscord Team" -LABEL version="1.0" -LABEL description="LeDiscord Backend - Environnement Production" - -WORKDIR /app - -# Env -ENV ENVIRONMENT=production \ - PYTHONPATH=/app \ - PYTHONUNBUFFERED=1 \ - PYTHONDONTWRITEBYTECODE=1 - -# DĂ©pendances de build -RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc \ - libpq-dev \ - && rm -rf /var/lib/apt/lists/* - -# Requirements -COPY requirements.txt . -RUN pip install --no-cache-dir --upgrade pip \ - && pip install --no-cache-dir -r requirements.txt - -# ---- Stage runtime ---- -FROM python:3.11-slim AS production - -WORKDIR /app - -# Env runtime -ENV ENVIRONMENT=production \ - PYTHONPATH=/app \ - PYTHONUNBUFFERED=1 \ - PYTHONDONTWRITEBYTECODE=1 - -# DĂ©pendances runtime -RUN apt-get update && apt-get install -y --no-install-recommends \ - libpq5 \ - libmagic1 \ - libgl1 \ - libglib2.0-0 \ - libsm6 \ - libxext6 \ - libxrender1 \ - libgomp1 \ - && rm -rf /var/lib/apt/lists/* - -# Paquets Python depuis le builder -COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages -COPY --from=builder /usr/local/bin /usr/local/bin - -# Dossiers appli -RUN mkdir -p /app/uploads /app/logs - -# Code source -COPY . . - -# Env prod (attention Ă ce que tu y mets) -COPY .env.production .env - -# Utilisateur non-root -RUN groupadd -r lediscord && useradd -r -g lediscord lediscord \ - && chown -R lediscord:lediscord /app -USER lediscord - -EXPOSE 8000 - -# Healthcheck (optionnel mais pratique) -HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \ - CMD python -c "import socket; s=socket.socket(); s.settimeout(2); s.connect(('127.0.0.1',8000)); s.close()" || exit 1 - -# DĂ©marrage uvicorn â pas de guillemets imbriquĂ©s ici -CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4", "--log-level", "info", "--proxy-headers", "--forwarded-allow-ips=*"] diff --git a/backend/__init__.py b/backend/__init__.py old mode 100755 new mode 100644 diff --git a/backend/api/routers/__init__.py b/backend/api/routers/__init__.py old mode 100755 new mode 100644 diff --git a/backend/api/routers/admin.py b/backend/api/routers/admin.py old mode 100755 new mode 100644 diff --git a/backend/api/routers/albums.py b/backend/api/routers/albums.py old mode 100755 new mode 100644 diff --git a/backend/api/routers/auth.py b/backend/api/routers/auth.py old mode 100755 new mode 100644 diff --git a/backend/api/routers/events.py b/backend/api/routers/events.py old mode 100755 new mode 100644 diff --git a/backend/api/routers/information.py b/backend/api/routers/information.py old mode 100755 new mode 100644 diff --git a/backend/api/routers/notifications.py b/backend/api/routers/notifications.py old mode 100755 new mode 100644 diff --git a/backend/api/routers/posts.py b/backend/api/routers/posts.py old mode 100755 new mode 100644 diff --git a/backend/api/routers/settings.py b/backend/api/routers/settings.py old mode 100755 new mode 100644 diff --git a/backend/api/routers/stats.py b/backend/api/routers/stats.py old mode 100755 new mode 100644 diff --git a/backend/api/routers/tickets.py b/backend/api/routers/tickets.py old mode 100755 new mode 100644 diff --git a/backend/api/routers/users.py b/backend/api/routers/users.py old mode 100755 new mode 100644 diff --git a/backend/api/routers/vlogs.py b/backend/api/routers/vlogs.py old mode 100755 new mode 100644 diff --git a/backend/app.py b/backend/app.py old mode 100755 new mode 100644 diff --git a/backend/config/database.py b/backend/config/database.py old mode 100755 new mode 100644 diff --git a/backend/config/settings.py b/backend/config/settings.py old mode 100755 new mode 100644 index 6aac893..0272b68 --- a/backend/config/settings.py +++ b/backend/config/settings.py @@ -8,7 +8,7 @@ class Settings: # Environnement - OBLIGATOIRE ENVIRONMENT: str = os.getenv("ENVIRONMENT") if not ENVIRONMENT: - raise ValueError("ENVIRONMENT variable is required. Use .env.local, .env.development, or .env.production") + raise ValueError("ENVIRONMENT variable is required. Use development or production") # Debug et reload DEBUG: bool = os.getenv("DEBUG", "false").lower() == "true" @@ -106,10 +106,6 @@ try: settings = Settings() except ValueError as e: print(f"â Erreur de configuration: {e}") - print("đĄ Assurez-vous d'utiliser un fichier d'environnement spĂ©cifique:") - print(" - .env.local pour le dĂ©veloppement local") - print(" - .env.development pour l'environnement de dĂ©veloppement") - print(" - .env.production pour la production") raise # Validation automatique au dĂ©marrage diff --git a/backend/models/__init__.py b/backend/models/__init__.py old mode 100755 new mode 100644 diff --git a/backend/models/album.py b/backend/models/album.py old mode 100755 new mode 100644 diff --git a/backend/models/event.py b/backend/models/event.py old mode 100755 new mode 100644 diff --git a/backend/models/information.py b/backend/models/information.py old mode 100755 new mode 100644 diff --git a/backend/models/notification.py b/backend/models/notification.py old mode 100755 new mode 100644 diff --git a/backend/models/post.py b/backend/models/post.py old mode 100755 new mode 100644 diff --git a/backend/models/settings.py b/backend/models/settings.py old mode 100755 new mode 100644 diff --git a/backend/models/ticket.py b/backend/models/ticket.py old mode 100755 new mode 100644 diff --git a/backend/models/user.py b/backend/models/user.py old mode 100755 new mode 100644 diff --git a/backend/models/vlog.py b/backend/models/vlog.py old mode 100755 new mode 100644 diff --git a/backend/requirements.txt b/backend/requirements.txt old mode 100755 new mode 100644 index 2cd0b41..8917254 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -5,6 +5,7 @@ alembic==1.12.1 psycopg2-binary==2.9.9 python-jose[cryptography]==3.3.0 passlib[bcrypt]==1.7.4 +bcrypt==4.0.1 python-multipart==0.0.6 python-dotenv==1.0.0 pydantic==2.5.0 diff --git a/backend/schemas/__init__.py b/backend/schemas/__init__.py old mode 100755 new mode 100644 diff --git a/backend/schemas/album.py b/backend/schemas/album.py old mode 100755 new mode 100644 diff --git a/backend/schemas/event.py b/backend/schemas/event.py old mode 100755 new mode 100644 diff --git a/backend/schemas/information.py b/backend/schemas/information.py old mode 100755 new mode 100644 diff --git a/backend/schemas/notification.py b/backend/schemas/notification.py old mode 100755 new mode 100644 diff --git a/backend/schemas/post.py b/backend/schemas/post.py old mode 100755 new mode 100644 diff --git a/backend/schemas/settings.py b/backend/schemas/settings.py old mode 100755 new mode 100644 diff --git a/backend/schemas/ticket.py b/backend/schemas/ticket.py old mode 100755 new mode 100644 diff --git a/backend/schemas/user.py b/backend/schemas/user.py old mode 100755 new mode 100644 diff --git a/backend/schemas/vlog.py b/backend/schemas/vlog.py old mode 100755 new mode 100644 diff --git a/backend/test_config.py b/backend/test_config.py deleted file mode 100755 index 7892b1d..0000000 --- a/backend/test_config.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env python3 -""" -Script de test pour vĂ©rifier la configuration des environnements -Usage: python test_config.py [local|development|production] -""" - -import os -import sys -from pathlib import Path - -def test_environment(env_name: str): - """Teste la configuration d'un environnement spĂ©cifique""" - print(f"đ Test de la configuration {env_name.upper()}") - print("=" * 50) - - # DĂ©finir l'environnement - os.environ["ENVIRONMENT"] = env_name - - try: - # Importer la configuration - from config.settings import settings - - print(f"â Configuration chargĂ©e avec succĂšs") - print(f" Environnement dĂ©tectĂ©: {settings.ENVIRONMENT}") - print(f" Debug: {settings.DEBUG}") - print(f" Reload: {settings.RELOAD}") - print(f" Log Level: {settings.LOG_LEVEL}") - print(f" Workers: {settings.WORKERS}") - print(f" CORS Origins: {', '.join(settings.CORS_ORIGINS)}") - print(f" Upload Path: {settings.UPLOAD_PATH}") - print(f" Database: {settings.DATABASE_URL.split('@')[1] if '@' in settings.DATABASE_URL else 'Unknown'}") - - # Validation - if settings.validate(): - print(f"â Configuration {env_name} validĂ©e avec succĂšs") - else: - print(f"â Configuration {env_name} invalide") - - except Exception as e: - print(f"â Erreur lors du chargement de la configuration {env_name}: {e}") - return False - - print() - return True - -def main(): - """Fonction principale""" - print("đ Test de configuration LeDiscord Backend") - print("=" * 60) - - # VĂ©rifier que nous sommes dans le bon rĂ©pertoire - if not Path("config/settings.py").exists(): - print("â Erreur: Ce script doit ĂȘtre exĂ©cutĂ© depuis le rĂ©pertoire backend/") - sys.exit(1) - - # Test des environnements - environments = ["local", "development", "production"] - - if len(sys.argv) > 1: - env_arg = sys.argv[1].lower() - if env_arg in environments: - environments = [env_arg] - else: - print(f"â Environnement invalide: {env_arg}") - print(f" Environnements valides: {', '.join(environments)}") - sys.exit(1) - - success_count = 0 - for env in environments: - if test_environment(env): - success_count += 1 - - print("=" * 60) - print(f"đ RĂ©sultats: {success_count}/{len(environments)} configurations valides") - - if success_count == len(environments): - print("đ Toutes les configurations sont valides !") - return 0 - else: - print("â ïž Certaines configurations ont des problĂšmes") - return 1 - -if __name__ == "__main__": - sys.exit(main()) diff --git a/backend/utils/email.py b/backend/utils/email.py old mode 100755 new mode 100644 diff --git a/backend/utils/init_db.py b/backend/utils/init_db.py old mode 100755 new mode 100644 diff --git a/backend/utils/notification_service.py b/backend/utils/notification_service.py old mode 100755 new mode 100644 diff --git a/backend/utils/security.py b/backend/utils/security.py old mode 100755 new mode 100644 diff --git a/backend/utils/settings_service.py b/backend/utils/settings_service.py old mode 100755 new mode 100644 diff --git a/backend/utils/video_utils.py b/backend/utils/video_utils.py old mode 100755 new mode 100644 diff --git a/backup/_data/Dockerfile.dev b/backup/_data/Dockerfile.dev deleted file mode 100755 index b910b39..0000000 --- a/backup/_data/Dockerfile.dev +++ /dev/null @@ -1,30 +0,0 @@ -FROM node:18-alpine - -# MĂ©tadonnĂ©es -LABEL maintainer="LeDiscord Team" -LABEL version="1.0" -LABEL description="LeDiscord Frontend - Environnement Development" - -WORKDIR /app - -# Variables d'environnement pour le dĂ©veloppement -ENV NODE_ENV=development -ENV VITE_ENVIRONMENT=development - -# Copy package files first for better caching -COPY package*.json ./ - -# Install dependencies -RUN npm ci - -# Copy application files -COPY . . - -# Copy development environment file -COPY .env.development .env - -# Expose port -EXPOSE 5173 - -# Run the application in development mode -CMD ["npm", "run", "dev"] diff --git a/backup/_data/Dockerfile.prod b/backup/_data/Dockerfile.prod deleted file mode 100755 index d5b5b81..0000000 --- a/backup/_data/Dockerfile.prod +++ /dev/null @@ -1,50 +0,0 @@ -# Multi-stage build pour la production -FROM node:18-alpine AS builder - -# MĂ©tadonnĂ©es -LABEL maintainer="LeDiscord Team" -LABEL version="1.0" -LABEL description="LeDiscord Frontend - Build Production" - -WORKDIR /app - -# Variables d'environnement pour la production -ENV NODE_ENV=production -ENV VITE_ENVIRONMENT=production - -# Copy package files first for better caching -COPY package*.json ./ - -# Install dependencies -RUN npm ci - -# Copy application files -COPY . . - -# Copy production environment file -COPY .env.production .env - -# Debug: VĂ©rifier le contenu du fichier .env -RUN echo "=== Contenu du fichier .env ===" && cat .env -RUN echo "=== Variables d'environnement ===" && env | grep VITE - -# Charger les variables d'environnement depuis le fichier .env (en filtrant les commentaires) -RUN export $(cat .env | grep -v '^#' | grep -v '^$' | xargs) && echo "=== Variables aprĂšs export ===" && env | grep VITE - -# Build the application avec les variables d'environnement chargĂ©es -RUN export $(cat .env | grep -v '^#' | grep -v '^$' | xargs) && npm run build - -# Production stage -FROM nginx:alpine - -# Copy built application -COPY --from=builder /app/dist /usr/share/nginx/html - -# Copy nginx configuration -COPY nginx-frontend.conf /etc/nginx/nginx.conf - -# Expose port -EXPOSE 80 - -# Start nginx -CMD ["nginx", "-g", "daemon off;"] diff --git a/backup/_data/index.html b/backup/_data/index.html deleted file mode 100755 index 1eae32e..0000000 --- a/backup/_data/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - -
- - - -
-
- {{ text || 'Chargement...' }}
-{{ userName }}
-@{{ username }}
-Notre espace privé
-
- {{ notification.message }}
-{{ formatDate(notification.created_at) }}
-Total utilisateurs
-{{ dashboard.users.total }}
-ĂvĂ©nements
-{{ dashboard.content.events }}
-Médias
-{{ dashboard.content.media_files }}
-Stockage total
-{{ dashboard.storage.total_formatted }}
-- Attention : Les nouvelles inscriptions sont désactivées. Aucun nouvel utilisateur ne pourra s'inscrire. -
-| Titre | -Catégorie | -Statut | -Priorité | -Date | -Actions | -
|---|---|---|---|---|---|
|
-
-
- {{ info.title }} -{{ info.content.substring(0, 100) }}{{ info.content.length > 100 ? '...' : '' }} - |
-
- - - {{ getCategoryLabel(info.category) }} - - | - -- - {{ info.is_published ? 'Publié' : 'Brouillon' }} - - | - -- {{ info.priority }} - | - -- {{ formatDate(info.created_at) }} - | - -
-
-
-
-
-
-
-
- |
-
| Utilisateur | -Statut | -RÎle | -Stockage | -Activité | -Actions | -
|---|---|---|---|---|---|
|
-
-
-
-
-
-
- {{ user.full_name }} -{{ user.email }} - |
-
- - - {{ user.is_active ? 'Actif' : 'Inactif' }} - - | - -- - {{ user.is_admin ? 'Admin' : 'Utilisateur' }} - - | - -- {{ user.storage_used }} - | - -
-
-
- {{ user.content_count.posts }} posts
- {{ user.content_count.vlogs }} vlogs
- {{ user.content_count.albums }} albums
- |
-
-
-
-
-
-
-
-
-
- |
-
Suivi et résolution des demandes utilisateurs
-- Par {{ ticket.user_name }} âą {{ formatRelativeDate(ticket.created_at) }} -
-- {{ ticket.description }} -
-Aucun ticket ne correspond Ă vos critĂšres de recherche.
-Mettre Ă jour les informations et le statut
-- Créé par : {{ selectedTicket.user_name }} -
-- Email : {{ selectedTicket.user_email }} -
-- Date : {{ formatDate(selectedTicket.created_at) }} -
-Assigné à :
-{{ getAssignedAdminName(selectedTicket.assigned_to) }}
-â ïž Non assignĂ©
-{{ selectedTicket.description }}
-Cliquez sur l'image pour l'agrandir
-{{ selectedTicket.admin_notes }}
-Analyse en cours...
-- {{ orphanedFiles.length }} fichier(s) orphelin(s) trouvé(s) pour un total de {{ totalOrphanedSize }}. -
- -Votre stockage est propre !
-L'album que vous recherchez n'existe pas ou a été supprimé.
-Les médias les plus appréciés de cet album
- -Cet album ne contient pas encore de photos ou vidéos
-{{ media.caption || 'Sans titre' }}
-{{ formatBytes(media.file_size) }} ⹠{{ media.media_type === 'image' ? 'Image' : 'Vidéo' }}
-{{ formatDate(media.created_at) }}
-Partagez vos souvenirs en photos et vidéos
-Créez le premier album pour partager vos photos !
-L'événement que vous recherchez n'existe pas ou a été supprimé.
-{{ event.description }}
-{{ participation.full_name }}
-@{{ participation.username }}
-{{ album.description }}
-Organisez et participez aux événements du groupe
-- {{ activeTab === 'upcoming' ? 'Créez le premier événement pour commencer !' : - activeTab === 'past' ? 'Les événements passés apparaßtront ici' : - 'Créez le premier événement pour commencer !' }} -
-Voici ce qui se passe dans le groupe
-Prochain événement
-{{ nextEvent?.title || 'Aucun' }}
-- {{ formatDate(nextEvent.date) }} -
-Taux de présence
-{{ Math.round(user?.attendance_rate || 0) }}%
-Nouveaux posts
-{{ recentPosts }}
-Cette semaine
-Membres actifs
-{{ activeMembers }}
-{{ post.author_name }}
- {{ formatRelativeDate(post.created_at) }} -{{ formatDate(event.date) }}
-- đ {{ event.location }} -
-Par {{ vlog.author_name }}
-{{ vlog.views_count }} vues
-Restez informés des derniÚres nouvelles de LeDiscord
-- {{ selectedCategory ? `Aucune information dans la catégorie "${getCategoryLabel(selectedCategory)}"` : 'Aucune information disponible pour le moment' }} -
-
- Pas encore de compte ?
-
- Les nouvelles inscriptions sont temporairement désactivées -
-Suivez vos demandes et signalements
-- {{ selectedStatus ? `Aucun ticket avec le statut "${getStatusLabel(selectedStatus)}"` : 'Vous n\'avez pas encore créé de ticket' }} -
- -Partagez vos moments avec le groupe
-Soyez le premier Ă partager quelque chose !
-@{{ user?.username }}
- -Membre depuis {{ formatDate(user?.created_at) }}
-Taux de présence : {{ Math.round(user?.attendance_rate || 0) }}%
-
- Déjà un compte ?
-
- Les nouvelles inscriptions sont temporairement désactivées. Veuillez contacter l'administrateur. -
-Membres actifs
-{{ overview.total_users }}
-ĂvĂ©nements
-{{ overview.total_events }}
-Albums
-{{ overview.total_albums }}
-Vlogs
-{{ overview.total_vlogs }}
-Posteur le plus actif
-{{ funStats.most_active_poster.full_name }} ({{ funStats.most_active_poster.post_count }} posts)
-Le plus mentionné
-{{ funStats.most_mentioned.full_name }} ({{ funStats.most_mentioned.mention_count }} mentions)
-Vlogger le plus prolifique
-{{ funStats.biggest_vlogger.full_name }} ({{ funStats.biggest_vlogger.vlog_count }} vlogs)
-Accro aux photos
-{{ funStats.photo_addict.full_name }} ({{ funStats.photo_addict.album_count }} albums)
-Organisateur d'événements
-{{ funStats.event_organizer.full_name }} ({{ funStats.event_organizer.event_count }} événements)
-Vlog le plus vu
-{{ funStats.most_viewed_vlog.title }} ({{ funStats.most_viewed_vlog.views_count }} vues)
-| Utilisateur | -Taux de prĂ©sence | -Publications | -Vlogs | -Albums | -ĂvĂ©nements créés | -
|---|---|---|---|---|---|
|
- |
- - {{ Math.round(user.user.attendance_rate) }}% - | -- {{ user.content_stats.posts_count }} - | -- {{ user.content_stats.vlogs_count }} - | -- {{ user.content_stats.albums_count }} - | -- {{ user.content_stats.events_created }} - | -
L'utilisateur que vous recherchez n'existe pas ou a été supprimé.
-@{{ profileUser.username }}
- -{{ activity.description }}
-{{ formatRelativeDate(activity.created_at) }}
-{{ formatDate(profileUser.created_at) }}
-Le vlog que vous recherchez n'existe pas ou a été supprimé.
-{{ vlog.description }}
-{{ formatRelativeDate(relatedVlog.created_at) }}
-{{ relatedVlog.views_count }} vue{{ relatedVlog.views_count > 1 ? 's' : '' }}
-Partagez vos moments en vidéo avec le groupe
-Soyez le premier Ă partager un vlog !
-
- Commentaires ({{ comments.length }}) -
- -Aucun commentaire
-Soyez le premier Ă commenter ce vlog !
-