feat: integrate authentication and password management features, including bcrypt for hashing and NextAuth for session handling

This commit is contained in:
Julien Froidefond
2025-11-30 08:04:06 +01:00
parent 7cb1d5f433
commit d663fbcbd0
30 changed files with 3287 additions and 4164 deletions

103
README.md
View File

@@ -23,6 +23,9 @@ Application web moderne de gestion personnelle de comptes bancaires avec import
- **Graphiques** : Recharts
- **Formulaires** : React Hook Form + Zod
- **Thème** : next-themes
- **Base de données** : Prisma + SQLite
- **Authentification** : NextAuth.js v4
- **Hashing** : bcryptjs
## 📋 Prérequis
@@ -44,13 +47,57 @@ cd bank-account-management-app
pnpm install
```
3. Lancez le serveur de développement :
3. Configurez les variables d'environnement :
Créez un fichier `.env.local` à la racine du projet :
```bash
# NextAuth Configuration
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=votre-secret-genere-ici
# Database
DATABASE_URL="file:./prisma/dev.db"
```
**Génération d'un secret sécurisé** :
```bash
openssl rand -base64 32
```
Ou en Node.js :
```bash
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
```
4. Initialisez la base de données :
```bash
pnpm prisma db push
pnpm prisma generate
```
5. Créez le fichier de mot de passe initial :
Le fichier `prisma/password.json` sera créé automatiquement au premier lancement avec le mot de passe par défaut `admin`. Vous pouvez aussi le créer manuellement :
```bash
node -e "const bcrypt = require('bcryptjs'); bcrypt.hash('admin', 10).then(hash => { const data = { hash, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString() }; require('fs').promises.writeFile('prisma/password.json', JSON.stringify(data, null, 2)).then(() => console.log('✅ password.json created')); });"
```
6. Lancez le serveur de développement :
```bash
pnpm dev
```
4. Ouvrez [http://localhost:3000](http://localhost:3000) dans votre navigateur
7. Ouvrez [http://localhost:3000](http://localhost:3000) dans votre navigateur
8. Connectez-vous avec le mot de passe par défaut : `admin`
**⚠️ Important** : Changez le mot de passe par défaut dès la première connexion dans les paramètres !
## 📦 Scripts disponibles
@@ -58,6 +105,10 @@ pnpm dev
- `pnpm build` : Compile l'application pour la production
- `pnpm start` : Lance le serveur de production
- `pnpm lint` : Vérifie le code avec ESLint
- `pnpm db:push` : Synchronise le schéma Prisma avec la base de données
- `pnpm db:migrate` : Crée une nouvelle migration
- `pnpm db:seed` : Exécute le script de seed
- `pnpm db:studio` : Ouvre Prisma Studio pour visualiser la base de données
## 📁 Structure du projet
@@ -76,17 +127,45 @@ pnpm dev
├── lib/ # Utilitaires et logique métier
│ ├── hooks.ts # Hooks personnalisés
│ ├── ofx-parser.tsx # Parser de fichiers OFX
│ ├── store.ts # Gestion du stockage local
│ ├── types.ts # Types TypeScript
── utils.ts # Fonctions utilitaires
── utils.ts # Fonctions utilitaires
│ ├── prisma.ts # Client Prisma
│ └── auth.ts # Configuration NextAuth
├── services/ # Services métier
│ ├── banking.service.ts
│ ├── account.service.ts
│ ├── category.service.ts
│ ├── folder.service.ts
│ ├── transaction.service.ts
│ ├── backup.service.ts
│ └── auth.service.ts
├── prisma/ # Base de données
│ ├── schema.prisma # Schéma Prisma
│ ├── dev.db # Base de données SQLite (non versionné)
│ ├── password.json # Hash du mot de passe (non versionné)
│ └── backups/ # Sauvegardes automatiques (non versionné)
└── public/ # Assets statiques
```
## 💾 Stockage des données
L'application utilise `localStorage` pour stocker toutes les données localement dans le navigateur. Les données sont sauvegardées automatiquement à chaque modification.
L'application utilise **Prisma** avec **SQLite** pour stocker toutes les données dans un fichier local (`prisma/dev.db`). Les données sont sauvegardées automatiquement à chaque modification.
**Note** : Les données sont stockées uniquement dans votre navigateur. Si vous supprimez les données du navigateur ou changez d'appareil, vous devrez réimporter vos fichiers OFX.
### Base de données
- **Fichier** : `prisma/dev.db` (SQLite)
- **Schéma** : Défini dans `prisma/schema.prisma`
- **Migrations** : Gérées avec Prisma Migrate
### Authentification
L'application est protégée par un **mot de passe global** stocké dans `prisma/password.json` (hashé avec bcrypt).
- **Mot de passe par défaut** : `admin` (à changer dès la première connexion)
- **Fichier** : `prisma/password.json` (créé automatiquement au premier lancement)
- **Changement de mot de passe** : Disponible dans les paramètres
**Note** : Les fichiers `prisma/password.json` et `prisma/dev.db` sont dans `.gitignore` et ne seront pas versionnés.
## 📥 Import de fichiers OFX
@@ -120,9 +199,19 @@ Le thème sombre/clair peut être changé dans les paramètres. L'application d
## 🔒 Sécurité et confidentialité
- **100% local** : Toutes vos données restent dans votre navigateur
- **100% local** : Toutes vos données sont stockées localement dans un fichier SQLite
- **Authentification** : Protection par mot de passe global (hashé avec bcrypt)
- **Aucune connexion externe** : Aucune donnée n'est envoyée à des serveurs externes
- **Pas de tracking** : Aucun service d'analytics tiers (sauf Vercel Analytics optionnel)
- **Sauvegardes automatiques** : Système de sauvegarde automatique configurable (horaire, quotidienne, hebdomadaire, mensuelle)
### Variables d'environnement
Le fichier `.env.local` contient des secrets sensibles et ne doit **jamais** être versionné. En production, configurez ces variables dans votre plateforme de déploiement :
- `NEXTAUTH_SECRET` : Secret pour signer les tokens JWT (générez un secret sécurisé)
- `NEXTAUTH_URL` : URL de base de l'application
- `DATABASE_URL` : Chemin vers la base de données SQLite
## 🚧 Développement