feat: integrate authentication and password management features, including bcrypt for hashing and NextAuth for session handling
This commit is contained in:
103
README.md
103
README.md
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user