doc: readme translate and completion/refresh
This commit is contained in:
139
README.md
139
README.md
@@ -1,6 +1,6 @@
|
|||||||
# Stripstream
|
# 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
|
## 🚀 Technologies
|
||||||
|
|
||||||
@@ -11,96 +11,133 @@ Une application web moderne pour lire des bandes dessinées numériques, constru
|
|||||||
- [Shadcn/ui](https://ui.shadcn.com/)
|
- [Shadcn/ui](https://ui.shadcn.com/)
|
||||||
- [Docker](https://www.docker.com/)
|
- [Docker](https://www.docker.com/)
|
||||||
|
|
||||||
## 🛠 Prérequis
|
## 🛠 Prerequisites
|
||||||
|
|
||||||
- Node.js 20.x ou supérieur
|
- Node.js 20.x or higher
|
||||||
- npm 10.x ou supérieur
|
- Yarn 1.22.x or higher
|
||||||
- Docker et Docker Compose (optionnel)
|
- Docker and Docker Compose (optional)
|
||||||
|
|
||||||
## 📦 Installation
|
## 📦 Installation
|
||||||
|
|
||||||
### Méthode classique
|
### Standard Method
|
||||||
|
|
||||||
1. Cloner le repository
|
1. Clone the repository
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone [url-du-repo]
|
git clone [repo-url]
|
||||||
cd stripstream
|
cd stripstream
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Installer les dépendances
|
2. Install dependencies
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm install
|
yarn install
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Créer un fichier `.env.local` à la racine du projet
|
3. Copy the example environment file and adjust it to your needs
|
||||||
|
|
||||||
4. Lancer le serveur de développement
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run dev
|
cp .env.example .env.local
|
||||||
```
|
```
|
||||||
|
|
||||||
### Avec Docker
|
4. Start the development server
|
||||||
|
|
||||||
1. Cloner le repository et se placer dans le dossier
|
|
||||||
|
|
||||||
```bash
|
```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
|
cd stripstream
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Lancer avec Docker Compose
|
2. Launch with Docker Compose
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose up --build
|
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
|
- `yarn dev` - Starts the development server
|
||||||
- `npm run build` - Crée une version de production
|
- `yarn build` - Creates a production build
|
||||||
- `npm start` - Lance la version de production
|
- `yarn start` - Runs the production version
|
||||||
- `npm run lint` - Vérifie le code avec ESLint
|
- `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 :
|
The application uses the Komga API for comic book management. The API documentation is available here:
|
||||||
[Documentation Komga API](https://cloud.julienfroidefond.com/swagger-ui/index.html#/)
|
[Komga API Documentation](https://cloud.julienfroidefond.com/swagger-ui/index.html#/)
|
||||||
|
|
||||||
## 🏗 Structure du projet
|
## 🏗 Project Structure
|
||||||
|
|
||||||
```
|
```
|
||||||
src/
|
src/
|
||||||
├── app/ # Pages et routes Next.js
|
├── app/ # Next.js pages and routes
|
||||||
├── components/ # Composants React réutilisables
|
├── components/ # Reusable React components
|
||||||
│ ├── home/ # Composants spécifiques à la page d'accueil
|
├── constants/ # Application constants
|
||||||
│ ├── layout/ # Composants de mise en page
|
├── contexts/ # React contexts
|
||||||
│ ├── reader/ # Composants du lecteur de BD
|
├── hooks/ # Custom React hooks
|
||||||
│ └── ui/ # Composants UI réutilisables
|
├── i18n/ # Internationalization configuration
|
||||||
├── lib/ # Utilitaires et services
|
├── lib/ # Utilities and services
|
||||||
│ └── services/ # Services pour l'API et autres fonctionnalités
|
├── messages/ # Translation messages
|
||||||
└── styles/ # Styles globaux
|
├── 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é
|
1. Create a branch for your feature
|
||||||
2. Commiter vos changements
|
2. Commit your changes
|
||||||
3. Pousser vers la branche
|
3. Push to the branch
|
||||||
4. Ouvrir une Pull Request
|
4. Open a Pull Request
|
||||||
|
|
||||||
## 📝 Guidelines de développement
|
## 📝 Development Guidelines
|
||||||
|
|
||||||
- Suivre les principes DRY (Don't Repeat Yourself)
|
- Follow DRY (Don't Repeat Yourself) principles
|
||||||
- Utiliser TypeScript pour tout nouveau code
|
- Use TypeScript for all new code
|
||||||
- Utiliser les classes Tailwind pour le styling
|
- Use Tailwind classes for styling
|
||||||
- Implémenter les fonctionnalités d'accessibilité
|
- Implement accessibility features
|
||||||
- Mettre à jour le devbook.md pour toute modification significative
|
- 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.
|
||||||
|
```
|
||||||
|
|||||||
148
docs/refacto.md
148
docs/refacto.md
@@ -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
|
|
||||||
Reference in New Issue
Block a user