Skip to content

Tetardtek/Super-OAuth

Repository files navigation

🔐 SuperOAuth

CI/CD Pipeline codecov Node.js Version TypeScript License

Système d'authentification moderne avec OAuth et gestion des tokens JWT

SuperOAuth est une solution complète d'authentification qui combine l'authentification classique par email/mot de passe avec l'intégration OAuth pour les plateformes populaires (Discord, Twitch, Google, GitHub).

📋 Table des Matières

🚀 Fonctionnalités

✅ Authentification Complète

  • Inscription/Connexion classique avec validation des mots de passe
  • OAuth intégré : Discord, Twitch, Google, GitHub
  • Gestion des tokens JWT avec refresh automatique
  • Sessions sécurisées avec expiration et révocation

🛡️ Sécurité Avancée

  • Hachage bcrypt pour les mots de passe
  • Validation stricte des entrées utilisateur
  • Protection CSRF et XSS
  • Content Security Policy (CSP) configurée
  • Rate limiting sur les endpoints sensibles

🎯 Interface Moderne

  • Design responsive et accessible
  • Système de notifications toast avec animations
  • Dashboard utilisateur avec informations détaillées
  • Gestion d'erreurs contextuelle et intuitive

🔧 Fonctionnalités Techniques

  • Architecture modulaire avec Domain-Driven Design
  • Base de données MySQL avec migrations
  • Logging complet des actions utilisateur
  • Validation TypeScript stricte
  • Tests unitaires et d'intégration

🛠️ Technologies

Backend

  • Node.js 18+ avec TypeScript
  • Express.js avec middleware de sécurité
  • MySQL avec TypeORM
  • JWT pour l'authentification
  • bcrypt pour le hachage des mots de passe
  • Helmet pour la sécurité HTTP

Frontend

  • HTML5 sémantique
  • CSS3 moderne avec animations
  • JavaScript ES6+ vanilla
  • Design responsive mobile-first

DevOps & Qualité

  • ESLint et Prettier pour la qualité du code
  • Jest pour les tests
  • GitHub Actions pour CI/CD
  • Docker pour la containerisation

📦 Installation

Prérequis

  • Node.js 18+
  • MySQL 8.0+
  • npm ou yarn

Installation Rapide

# Cloner le projet
git clone <repository-url>
cd SuperOAuth

# Installer les dépendances
npm install

# Configuration de la base de données
cp .env.example .env
# Éditer .env avec vos paramètres

# Lancer les migrations
npm run migration:run

# Démarrer en développement
npm run dev

Variables d'Environnement

# Base de données
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=your_username
DB_PASSWORD=your_password
DB_DATABASE=superoauth

# JWT
JWT_SECRET=your_super_secret_key_here
JWT_REFRESH_SECRET=your_refresh_secret_key

# OAuth Providers
DISCORD_CLIENT_ID=your_discord_client_id
DISCORD_CLIENT_SECRET=your_discord_client_secret

GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret

# Serveur
PORT=3000
NODE_ENV=development

🔧 Configuration

OAuth Providers

Discord

  1. Aller sur Discord Developer Portal
  2. Créer une nouvelle application
  3. Ajouter l'URL de redirection : http://localhost:3000/api/v1/auth/oauth/discord/callback

Google

  1. Aller sur Google Cloud Console
  2. Créer un projet et activer l'API Google+
  3. Configurer l'écran de consentement OAuth
  4. Ajouter l'URL de redirection : http://localhost:3000/api/v1/auth/oauth/google/callback

GitHub

  1. Aller sur GitHub Developer Settings
  2. Créer une nouvelle OAuth App
  3. Ajouter l'URL de redirection : http://localhost:3000/api/v1/auth/oauth/github/callback

Twitch

  1. Aller sur Twitch Developer Console
  2. Créer une nouvelle application
  3. Ajouter l'URL de redirection : http://localhost:3000/api/v1/auth/oauth/twitch/callback

📖 Documentation API

Base URL

http://localhost:3000/api/v1

Endpoints d'Authentification

POST /auth/register

Inscription d'un nouvel utilisateur

{
  "email": "user@example.com",
  "password": "SecurePassword123!",
  "nickname": "MonPseudo"
}

POST /auth/login

Connexion utilisateur

{
  "email": "user@example.com",
  "password": "SecurePassword123!"
}

POST /auth/refresh

Rafraîchir le token d'accès

{
  "refreshToken": "your_refresh_token"
}

POST /auth/logout

Déconnexion et révocation des tokens

{
  "refreshToken": "your_refresh_token"
}

GET /auth/me

Obtenir les informations de l'utilisateur connecté

Headers: Authorization: Bearer <access_token>

OAuth Endpoints

GET /auth/oauth/{provider}

Initier la connexion OAuth

  • Providers supportés : discord, google, github, twitch

GET /auth/oauth/{provider}/callback

Callback OAuth automatique

Réponses API

Succès

{
  "success": true,
  "data": {
    "user": { /* user object */ },
    "tokens": {
      "accessToken": "jwt_token",
      "refreshToken": "refresh_token"
    }
  },
  "message": "Opération réussie"
}

Erreur

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Description de l'erreur",
    "details": { /* détails optionnels */ }
  }
}

🎨 Interface Utilisateur

Système de Toast

SuperOAuth inclut un système de notifications toast moderne :

// Utilisation du système de toast
Toast.success('Opération réussie !');
Toast.error('Une erreur est survenue');
Toast.warning('Attention !');
Toast.info('Information');

Fonctionnalités des Toast

  • ✅ 4 types : Success, Error, Warning, Info
  • 🎨 Animations fluides d'entrée/sortie
  • ⏱️ Auto-fermeture configurable
  • 👆 Fermeture manuelle au clic
  • 📱 Design responsive

Dashboard Utilisateur

Le dashboard affiche :

  • Informations personnelles
  • Historique de connexion
  • Gestion des tokens
  • Paramètres de compte

Interface Responsive

  • 📱 Mobile First : Optimisé pour mobile
  • 💻 Desktop : Interface complète sur grand écran

🔒 Sécurité

Mesures Implémentées

Protection des Mots de Passe

  • Hachage bcrypt avec salt
  • Validation stricte : minimum 8 caractères, majuscules, minuscules, chiffres, caractères spéciaux
  • Protection contre les attaques par dictionnaire

Sécurité des Sessions

  • JWT avec expiration courte (15 minutes)
  • Refresh tokens sécurisés (7 jours)
  • Révocation automatique en cas de suspicion

Protection Web

  • Content Security Policy stricte
  • Protection CSRF avec tokens
  • Sanitisation des entrées utilisateur
  • Rate limiting sur les endpoints sensibles

Headers de Sécurité

// Helmet configuration
app.use(helmet({
  contentSecurityPolicy: {
    directives: {
      defaultSrc: ["'self'"],
      scriptSrc: ["'self'"],
      styleSrc: ["'self'", "'unsafe-inline'"],
      imgSrc: ["'self'", "data:", "https:"]
    }
  }
}));

Validation des Données

// Exemple de validation
export class CreateUserDto {
  @IsEmail()
  email: string;

  @IsString()
  @MinLength(8)
  @Matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]/)
  password: string;

  @IsString()
  @MinLength(2)
  @MaxLength(50)
  nickname: string;
}

🧪 Tests

SuperOAuth dispose d'une suite complète de 372 tests (123 backend + 249 frontend) couvrant toutes les couches de l'application.

📊 Documentation détaillée: tests/README.md 📈 Métriques temps réel: .github/TESTS_STATUS.md

Lancer les Tests

# Tests frontend (Vitest)
npm run test:frontend

# Tests backend (Jest)
npm run test:backend

# Tests avec couverture
npm run test:coverage

# Tests en mode watch
npm run test:watch

# Tests d'intégration
npm run test:e2e

Tests Frontend

Architecture de Tests

  • Framework : Vitest avec jsdom
  • 249 tests unitaires : 100% de réussite
  • Coverage : ~60%
  • Durée d'exécution : ~5 secondes
  • Environnement : Simulation DOM browser

Tests Backend

Architecture de Tests

  • Framework : Jest avec ts-jest
  • 123 tests unitaires : 100% de réussite
  • Coverage : ~45% (objectif: 82%)
  • Durée d'exécution : ~15 secondes
  • Composants testés : Use Cases (49), Middleware (27), Services (32), Value Objects (13)

Modules Testés

Module Tests Description
Storage 21 localStorage, tokens, gestion des données
Validation 28 Email, mots de passe, validation des entrées
TokenManager 36 JWT tokens, refresh, authentification
HTTP 22 Client HTTP, GET/POST/PUT/DELETE, auth headers
ToastManager 35 Notifications toast, animations, auto-fermeture
UI 14 Manipulation DOM, visibilité, valeurs, styles
Format 14 Formatage dates, nombres, texte
Logger 9 Logging console, niveaux de log
ErrorHandler 7 Gestion erreurs, affichage, API errors
AuthService 15 Login, register, logout, OAuth
Dashboard 15 Dashboard utilisateur, affichage données
ServerMonitor 15 Monitoring serveur, statut, health check
SharedUtils 18 Utilitaires partagés, helpers

Exemple de Test

// tests/frontend/unit/utils/validation.test.js
describe('Validation', () => {
  it('should validate strong password', () => {
    const strong = 'MyP@ssw0rd123'
    expect(Validation.isPasswordStrong(strong)).toBe(true)
  })

  it('should reject weak password', () => {
    const weak = 'password'
    expect(Validation.isPasswordStrong(weak)).toBe(false)
  })
})

Coverage Frontend

  • Managers : ToastManager, TokenManager
  • Utils : Storage, Validation, UI, HTTP, Format, Logger, ErrorHandler
  • Components : AuthService, Dashboard, ServerMonitor
  • Shared : SharedUtils

Tests Backend

# Tests unitaires backend
npm run test:backend

# Coverage backend
npm run test:backend:coverage

Modules Backend Testés

  • Controllers (Auth, User, OAuth)
  • Services (Authentication, User Management)
  • Repositories (User, Token)
  • Middleware (Auth, Validation, Error Handling)
  • Domain Layer (Entities, Value Objects)

Configuration des Tests

Vitest (Frontend)

// vitest.config.js
export default defineConfig({
  test: {
    environment: 'jsdom',
    setupFiles: ['./tests/frontend/setup.js'],
    coverage: {
      provider: 'v8',
      reporter: ['text', 'html', 'lcov']
    }
  }
})

Setup Frontend

Les tests frontend incluent des mocks pour :

  • localStorage avec stockage fonctionnel
  • sessionStorage avec spies
  • fetch API pour les requêtes HTTP
  • console pour éviter les logs durant tests
  • window.location pour la navigation

Qualité du Code

Standards

  • 100% des tests passent (249/249)
  • Architecture modulaire testable
  • Mocks réalistes avec état persistant
  • Edge cases couverts (null, empty, invalid)
  • Tests d'intégration entre modules

Commandes Utiles

# Lancer uniquement les tests modifiés
npm run test:frontend -- --changed

# Lancer tests en parallèle
npm run test:frontend -- --threads

# Lancer un fichier spécifique
npm run test:frontend -- tests/frontend/unit/utils/validation.test.js

# Mode interactif
npm run test:frontend -- --ui

🤖 Pour les Agents IA

Si vous êtes un agent IA (Claude Code, Cursor, GitHub Copilot, etc.) travaillant sur ce projet, commencez par consulter :

📁 CLAUDE/ - Documentation Complète pour Agents IA

Cette documentation spécialisée contient tout ce dont vous avez besoin :

🚀 Démarrage Rapide

📚 Guides Techniques

📊 Statut du Projet

⚡ Ordre de Lecture Recommandé

  1. QUICK_START.md (5-10 min) - Installation et commandes essentielles
  2. .cursorrules (10 min) - Règles NON NÉGOCIABLES
  3. ARCHITECTURE.md (15 min) - Comprendre la structure DDD
  4. AI_AGENT_GUIDE.md (20-25 min) - Patterns et exemples de code
  5. PROJECT_STRUCTURE.md (5-10 min) - Localiser les fichiers rapidement

🎯 Règles d'Or

  • TOUJOURS respecter la séparation des couches (Domain, Application, Infrastructure, Presentation)
  • TOUJOURS utiliser l'injection de dépendances
  • TOUJOURS créer des tests pour le nouveau code
  • JAMAIS court-circuiter les couches (Controller → Repository directement)
  • JAMAIS utiliser le type any en TypeScript
  • JAMAIS mettre de logique métier dans les Controllers

📖 Documentation Complète

Pour plus de détails, consultez le README du dossier CLAUDE qui contient :

  • Index complet de la documentation
  • Guide de navigation
  • Checklist avant de commencer
  • Ressources et support

🚀 CI/CD Pipeline

SuperOAuth utilise GitHub Actions pour l'intégration et le déploiement continus.

Workflows Automatisés

Le pipeline CI/CD s'exécute automatiquement sur :

  • Push vers main, develop, ou branches feature/**
  • Pull Requests vers main ou develop

Jobs Exécutés

Job Description Durée estimée
🧪 Backend Tests Tests unitaires Jest (123 tests) ~15s
🎨 Frontend Tests Tests Vitest (249 tests) ~10s
📝 Linting Vérification ESLint ~15s
🎨 Formatting Vérification Prettier ~10s
🔍 Type Check Vérification TypeScript ~20s
🏗️ Build Compilation du projet ~25s
📊 Coverage Rapports de couverture (Codecov) ~15s

Statut des Builds

Consultez le statut en temps réel des builds sur :

Commandes Locales

Exécutez les mêmes vérifications localement avant de pousser :

# Tests complets
npm run test:all              # Tous les tests (backend + frontend)
npm run test:all:coverage     # Avec couverture

# Qualité du code
npm run lint                  # ESLint
npm run format               # Prettier
npm run typecheck            # TypeScript

# Build
npm run build                # Compilation

Configuration

Les workflows sont définis dans .github/workflows/ci.yml et incluent :

  • ✅ Cache npm pour optimisation
  • ✅ Matrix strategy (Node.js 20.x)
  • ✅ Rapports de couverture automatiques
  • ✅ Artifacts de build (rétention 7 jours)
  • ✅ Variables d'environnement pour tests

📝 Changelog

Version 1.0.0 (Actuelle)

  • ✅ Authentification complète avec OAuth
  • ✅ Interface utilisateur moderne
  • ✅ Système de toast notifications
  • ✅ Sécurité renforcée avec CSP
  • ✅ Documentation complète

Prochaines Versions

v1.1.0 (Planifiée)

  • 🔄 2FA : Authentification à deux facteurs
  • 📧 Email de vérification automatique
  • 🔐 Réinitialisation de mot de passe par email
  • 👥 Gestion des rôles utilisateur

v1.2.0 (Future)

  • 🌍 Internationalisation (i18n)
  • 📊 Dashboard administrateur
  • 🔍 Logs avancés avec recherche
  • 🐳 Déploiement Docker complet

🤝 Contribution

Les contributions sont les bienvenues ! Consultez le guide de contribution pour plus de détails.

Développement Local

# Fork le projet
git clone <your-fork>

# Créer une branche feature
git checkout -b feature/amazing-feature

# Commiter vos changements
git commit -m 'Add amazing feature'

# Pousser vers la branche
git push origin feature/amazing-feature

# Ouvrir une Pull Request

📄 Licence

Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.

🆘 Support


Développé avec ❤️ par l'équipe SuperOAuth

About

Système d'authentification, avec providers et documentation.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published