diff --git a/README.md b/README.md index a1ef8c4..031eefb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Stripstream -Une application web moderne pour lire des bandes dessinées numériques, construite avec Next.js 14 et l'API Komga. +A modern web application for reading digital comics, built with Next.js 14 and the Komga API. ## 🚀 Technologies @@ -11,96 +11,133 @@ Une application web moderne pour lire des bandes dessinées numériques, constru - [Shadcn/ui](https://ui.shadcn.com/) - [Docker](https://www.docker.com/) -## 🛠 Prérequis +## 🛠 Prerequisites -- Node.js 20.x ou supérieur -- npm 10.x ou supérieur -- Docker et Docker Compose (optionnel) +- Node.js 20.x or higher +- Yarn 1.22.x or higher +- Docker and Docker Compose (optional) ## 📦 Installation -### Méthode classique +### Standard Method -1. Cloner le repository +1. Clone the repository ```bash -git clone [url-du-repo] +git clone [repo-url] cd stripstream ``` -2. Installer les dépendances +2. Install dependencies ```bash -npm install +yarn install ``` -3. Créer un fichier `.env.local` à la racine du projet - -4. Lancer le serveur de développement +3. Copy the example environment file and adjust it to your needs ```bash -npm run dev +cp .env.example .env.local ``` -### Avec Docker - -1. Cloner le repository et se placer dans le dossier +4. Start the development server ```bash -git clone [url-du-repo] +yarn dev +``` + +### With Docker + +1. Clone the repository and navigate to the folder + +```bash +git clone [repo-url] cd stripstream ``` -2. Lancer avec Docker Compose +2. Launch with Docker Compose ```bash docker-compose up --build ``` -L'application sera accessible sur `http://localhost:3000` +The application will be accessible at `http://localhost:3000` -## 🔧 Scripts disponibles +## 🔧 Available Scripts -- `npm run dev` - Lance le serveur de développement -- `npm run build` - Crée une version de production -- `npm start` - Lance la version de production -- `npm run lint` - Vérifie le code avec ESLint +- `yarn dev` - Starts the development server +- `yarn build` - Creates a production build +- `yarn start` - Runs the production version +- `yarn lint` - Checks code with ESLint +- `yarn format` - Formats code with Prettier -## 🌐 API Komga +## 🌐 Komga API -L'application utilise l'API Komga pour la gestion des bandes dessinées. La documentation de l'API est disponible ici : -[Documentation Komga API](https://cloud.julienfroidefond.com/swagger-ui/index.html#/) +The application uses the Komga API for comic book management. The API documentation is available here: +[Komga API Documentation](https://cloud.julienfroidefond.com/swagger-ui/index.html#/) -## 🏗 Structure du projet +## 🏗 Project Structure ``` src/ -├── app/ # Pages et routes Next.js -├── components/ # Composants React réutilisables -│ ├── home/ # Composants spécifiques à la page d'accueil -│ ├── layout/ # Composants de mise en page -│ ├── reader/ # Composants du lecteur de BD -│ └── ui/ # Composants UI réutilisables -├── lib/ # Utilitaires et services -│ └── services/ # Services pour l'API et autres fonctionnalités -└── styles/ # Styles globaux +├── app/ # Next.js pages and routes +├── components/ # Reusable React components +├── constants/ # Application constants +├── contexts/ # React contexts +├── hooks/ # Custom React hooks +├── i18n/ # Internationalization configuration +├── lib/ # Utilities and services +├── messages/ # Translation messages +├── middleware.ts # Next.js middleware +├── styles/ # Global styles +├── types/ # TypeScript type definitions +└── utils/ # Helper functions and utilities + +docs/ # Project documentation +scripts/ # Utility scripts +public/ # Static assets ``` -## 🤝 Contribution +## 🤝 Contributing -1. Créer une branche pour votre fonctionnalité -2. Commiter vos changements -3. Pousser vers la branche -4. Ouvrir une Pull Request +1. Create a branch for your feature +2. Commit your changes +3. Push to the branch +4. Open a Pull Request -## 📝 Guidelines de développement +## 📝 Development Guidelines -- Suivre les principes DRY (Don't Repeat Yourself) -- Utiliser TypeScript pour tout nouveau code -- Utiliser les classes Tailwind pour le styling -- Implémenter les fonctionnalités d'accessibilité -- Mettre à jour le devbook.md pour toute modification significative +- Follow DRY (Don't Repeat Yourself) principles +- Use TypeScript for all new code +- Use Tailwind classes for styling +- Implement accessibility features +- Update devbook.md for any significant changes +- Follow the project's code style (enforced by ESLint and Prettier) -## 📄 Licence +## 📄 License -Ce projet est sous licence [insérer type de licence] +This project is licensed under the MIT License. + +```text +MIT License + +Copyright (c) 2025 Julien Froidefond + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` diff --git a/docs/refacto.md b/docs/refacto.md deleted file mode 100644 index 4b1db15..0000000 --- a/docs/refacto.md +++ /dev/null @@ -1,148 +0,0 @@ -# Propositions de Refactorisation - -## Renforcement de l'Authentification - -### 1. Sécurité des Tokens - -#### État Actuel - -- Utilisation de cookies simples pour stocker les informations utilisateur -- Validation basique des données utilisateur -- Pas de gestion de session sophistiquée - -#### Améliorations Proposées - -1. **Tokens JWT** - - - Implémenter des JWT (JSON Web Tokens) pour l'authentification - - Ajouter des claims essentiels (exp, iat, sub, jti) - - Utiliser une rotation des clés de signature - - Implémenter un refresh token avec une durée de vie plus longue - -2. **Sécurité des Cookies** - - - Ajouter les flags de sécurité : `HttpOnly`, `Secure`, `SameSite=Strict` - - Implémenter une stratégie de rotation des cookies - - Chiffrer les données sensibles dans les cookies - -3. **Gestion des Sessions** - - Implémenter une table de sessions en base de données - - Ajouter une détection des connexions simultanées - - Permettre la révocation des sessions - - Ajouter un système de "Se souvenir de moi" sécurisé - -### 2. Protection Contre les Attaques - -1. **Rate Limiting** - - - Implémenter un rate limiting par IP pour les routes d'authentification - - Ajouter un délai progressif après des tentatives échouées - - Mettre en place un système de bannissement temporaire - -2. **Protection Contre les Attaques Courantes** - - - Ajouter une protection CSRF avec des tokens - - Implémenter une protection contre le timing attacks - - Ajouter une validation stricte des entrées - - Protection contre les attaques par force brute - -3. **Validation et Sanitization** - - Utiliser Zod pour la validation des données - - Implémenter une sanitization stricte des entrées - - Valider les en-têtes HTTP sensibles - -### 3. Améliorations du Processus d'Authentification - -1. **Multi-Factor Authentication (MFA)** - - - Ajouter support pour l'authentification à deux facteurs - - Implémenter TOTP (Google Authenticator) - - Ajouter support pour les clés de sécurité (WebAuthn) - -2. **Gestion des Mots de Passe** - - - Renforcer les règles de complexité des mots de passe - - Implémenter un système de réinitialisation sécurisé - - Ajouter une vérification des mots de passe compromis (via API HaveIBeenPwned) - -3. **Audit et Logging** - - Enregistrer toutes les tentatives de connexion - - Logger les actions sensibles - - Implémenter un système d'alerte pour les activités suspectes - -### 4. Middleware et Routes - -1. **Amélioration du Middleware** - -```typescript -import { NextResponse } from "next/server"; -import type { NextRequest } from "next/server"; -import { verifyToken } from "@/lib/jwt"; -import { rateLimit } from "@/lib/rateLimit"; - -export async function middleware(request: NextRequest) { - // Rate limiting - const rateLimitResult = await rateLimit(request); - if (!rateLimitResult.success) { - return NextResponse.json({ error: "Trop de requêtes" }, { status: 429 }); - } - - // Vérification du token - const token = request.cookies.get("auth-token"); - if (!token) { - return handleUnauthorized(request); - } - - try { - const verified = await verifyToken(token.value); - if (!verified.valid) { - return handleUnauthorized(request); - } - - // Ajouter les informations utilisateur à la requête - const requestHeaders = new Headers(request.headers); - requestHeaders.set("x-user-id", verified.userId); - requestHeaders.set("x-user-roles", verified.roles.join(",")); - - // Vérifier les permissions - if (!hasRequiredPermissions(verified, request.nextUrl.pathname)) { - return NextResponse.json({ error: "Accès non autorisé" }, { status: 403 }); - } - - return NextResponse.next({ - headers: requestHeaders, - }); - } catch (error) { - return handleUnauthorized(request); - } -} - -function handleUnauthorized(request: NextRequest) { - if (request.nextUrl.pathname.startsWith("/api/")) { - return NextResponse.json({ error: "Non autorisé" }, { status: 401 }); - } - - const loginUrl = new URL("/login", request.url); - loginUrl.searchParams.set("from", request.nextUrl.pathname); - return NextResponse.redirect(loginUrl); -} -``` - -### 5. Prochaines Étapes - -1. **Phase 1 - Sécurité Immédiate** - - - Implémenter les JWT et la sécurité des cookies - - Ajouter le rate limiting - - Renforcer le middleware - -2. **Phase 2 - Fonctionnalités Avancées** - - - Implémenter le MFA - - Ajouter la gestion des sessions - - Mettre en place l'audit logging - -3. **Phase 3 - Monitoring et Maintenance** - - Implémenter un système de monitoring - - Mettre en place des alertes de sécurité - - Planifier des audits réguliers