API REST orientée sécurité : authentification par cookies, rotation des refresh tokens, isolation stricte des données par utilisateur et administration centralisée.
Fonctionnalités • Sécurité • Installation • API • Tests • Contact
taskmanager API est le backend d'une application de gestion de tâches. Il expose une API REST complète pour gérer des comptes utilisateurs et leurs tâches, avec un accent particulier sur la sécurité et la propreté de l'architecture (middlewares, validation, tests).
🎯 Ce dépôt contient uniquement le backend. Il peut être consommé par n'importe quel client (web, mobile).
- Création de compte, connexion, modification et suppression de son propre compte (CRUD complet)
- Mots de passe hachés avec bcrypt
- Validation stricte des données avec Joi
- CRUD complet sur les tâches
- Isolation totale : chaque utilisateur accède uniquement à ses propres tâches
- Validation des entrées avec Joi
- Un administrateur suprême unique
- CRUD complet sur tous les utilisateurs, y compris sur son propre compte
- Suppression en cascade : supprimer un utilisateur supprime automatiquement toutes ses tâches (même s'il en possède des milliers)
| Mécanisme | Détail |
|---|---|
| Access token | JWT à courte durée de vie, transmis par cookie |
| Refresh token | Jeton aléatoire généré avec crypto, transmis par cookie |
| Rotation des refresh tokens | À chaque renouvellement de l'access token, l'ancien refresh token est invalidé et un nouveau est émis |
| Déconnexion propre | Le logout invalide la session côté serveur et supprime les cookies |
| Mots de passe | Hachage bcrypt |
| Validation | Schémas Joi sur les utilisateurs et les tâches |
| Autorisation | Middlewares de contrôle d'accès (propriétaire de la ressource / administrateur) |
| En-têtes HTTP | Sécurisés avec Helmet |
| Limitation de débit | Globale : 100 requêtes / 15 min. Routes sensibles (connexion, création de compte, refresh token) : 5 requêtes / min |
Login ──► Access token (JWT) + Refresh token (crypto) en cookies
│
▼
Requête protégée ──► Middleware vérifie l'access token
│
expiré ? ──► Route de refresh ──► Rotation : nouvel access + nouveau refresh
│
▼
Logout ──► Refresh token invalidé + cookies supprimés
| Couche | Technologie |
|---|---|
| Runtime | Node.js |
| Framework | Express.js |
| Base de données | MySQL |
| ORM | Sequelize |
| Authentification | JWT + crypto |
| Hachage | bcrypt |
| Validation | Joi |
| Sécurité HTTP | Helmet, CORS, rate limiting |
| Logs | Morgan |
| Tests | Jest |
taskmanager/
├── configs/ # Configuration (base de données, variables d'environnement)
├── controllers/ # Logique métier des routes
├── middelwares/ # Authentification, autorisation, validation, sécurité
├── models/ # Modèles Sequelize
├── routes/ # Définition des routes
├── validators/ # Schémas Joi (utilisateurs, tâches)
├── tests/ # Tests unitaires Jest
├── .env.example # Modèle des variables d'environnement
├── .gitignore
├── package.json
├── server.js # Point d'entrée
└── README.md
# 1. Cloner le dépôt
git clone https://github.com/Dorovane/backend-taskmanager.git
cd backend-taskmanager
# 2. Installer les dépendances
npm install
# 3. Configurer l'environnement
cp .env.example .env
# puis renseigner les valeurs dans .env
# 4. Démarrer le serveur
npm run start
# Ou en mode développement (rechargement automatique)
npm run dev# Base de données MySQL
DB_HOST=
DB_NAME=
DB_USER=
DB_PASSWORD=
⚠️ Ne publie jamais ton fichier.env. Il doit rester dans le.gitignore.
Toutes les routes protégées nécessitent d'être connecté (cookies d'authentification).
| Méthode | Route | Description | Accès |
|---|---|---|---|
POST |
/api/users |
Créer un compte | Public |
POST |
/api/login |
Se connecter | Public |
POST |
/api/refresh-token |
Renouveler l'access token (rotation du refresh) | Public (cookie refresh) |
POST |
/api/logout |
Se déconnecter | Connecté |
| Méthode | Route | Description | Accès |
|---|---|---|---|
GET |
/api/users/me |
Voir son profil | Connecté |
PUT |
/api/users/me |
Modifier son compte | Connecté |
PATCH |
/api/users/me |
Modifier son compte | Connecté |
DELETE |
/api/users/me |
Supprimer son compte (et ses tâches) | Connecté |
| Méthode | Route | Description | Accès |
|---|---|---|---|
POST |
/api/tasks |
Créer une tâche | Connecté |
GET |
/api/tasks/me |
Lister ses tâches | Connecté |
GET |
/api/tasks/me/:id |
Voir une de ses tâches | Propriétaire |
PUT |
/api/tasks/me/:id |
Modifier une de ses tâches | Propriétaire |
PATCH |
/api/tasks/me/:id |
Modifier une de ses tâches | Propriétaire |
DELETE |
/api/tasks/me/:id |
Supprimer une de ses tâches | Propriétaire |
| Méthode | Route | Description | Accès |
|---|---|---|---|
GET |
/api/tasks |
Lister tous les taches | Admin |
GET |
/api/users |
Lister tous les utilisateurs | Admin |
GET |
/api/users/:id |
Voir un utilisateur | Admin |
PUT |
/api/users/:id |
Modifier un utilisateur | Admin |
PATCH |
/api/users/:id |
Modifier un utilisateur | Admin |
DELETE |
/api/users/:id |
Supprimer un utilisateur (cascade sur ses tâches) | Admin |
POST /api/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "MotDePasse123!"
}HTTP/1.1 200 OK
Set-Cookie: accessToken=...
Set-Cookie: refreshToken=...Les tests unitaires sont écrits avec Jest.
npm testIls couvrent notamment la logique metier, la validation des données et les middlewares.
- Documentation interactive de l'API (Swagger / OpenAPI)
- Validation de l'inscription par mail via nodemailer
- Gestion de mot de passe oublier (un patch sur "/users/:id necessite une authentification")
- Pagination et filtres sur les tâches
- Tests d'intégration / supertest
- Conteneurisation avec Docker
- Déploiement automatisé (CI/CD)
Les contributions sont les bienvenues !
- Fork le projet
- Crée une branche (
git checkout -b feature/ma-fonctionnalite) - Commit tes changements (
git commit -m "Ajout de ma fonctionnalité") - Push la branche (
git push origin feature/ma-fonctionnalite) - Ouvre une Pull Request