Files
ackify/README_FR.md
Benjamin 68426bc882 feat: add PKCE support to OAuth2 flow for enhanced security
- Implement PKCE (Proof Key for Code Exchange) with S256 method
- Add crypto/pkce module with code verifier and challenge generation
- Modify OAuth flow to include code_challenge in authorization requests
- Update HandleCallback to validate code_verifier during token exchange
- Extend session lifetime from 7 to 30 days
- Add comprehensive unit tests for PKCE functions
- Maintain backward compatibility with fallback for non-PKCE sessions
- Add detailed logging for OAuth flow with PKCE tracking

PKCE enhances security by preventing authorization code interception
attacks, as recommended by OAuth 2.1 and OIDC standards.

feat: add encrypted refresh token storage with automatic cleanup

- Add oauth_sessions table for storing encrypted refresh tokens
- Implement AES-256-GCM encryption for refresh tokens using cookie secret
- Create OAuth session repository with full CRUD operations
- Add SessionWorker for automatic cleanup of expired sessions
- Configure cleanup to run every 24h for sessions older than 37 days
- Modify OAuth flow to store refresh tokens after successful authentication
- Track client IP and user agent for session security validation
- Link OAuth sessions to user sessions via session ID
- Add comprehensive encryption tests with security validations
- Integrate SessionWorker into server lifecycle with graceful shutdown

This enables persistent OAuth sessions with secure token storage,
reducing the need for frequent re-authentication from 7 to 30 days.
2025-10-26 02:32:10 +02:00

7.8 KiB

🔐 Ackify

Proof of Read. Compliance made simple.

Service sécurisé de validation de lecture avec signatures cryptographiques et preuves incontestables.

Build codecov Security Go License

🌍 English version available here

Site web : https://www.ackify.eu/fr


🎯 Pourquoi Ackify ?

Prouvez que vos collaborateurs ont lu et pris connaissance de documents importants avec des signatures cryptographiques Ed25519.

Cas d'usage :

  • Validation de politiques de sécurité
  • Attestations de formation
  • Prise de connaissance RGPD
  • Accusés de réception contractuels
  • Procédures de conformité

Fonctionnalités clés :

  • Signatures cryptographiques Ed25519
  • Authentification OAuth2 (Google, GitHub, GitLab, custom)
  • Une signature par utilisateur/document (contrainte base de données)
  • Piste d'audit immutable
  • Tracking signataires attendus avec rappels email
  • Vérification checksums documents (SHA-256/512, MD5)
  • Widgets intégrables publics (Notion, Outline, etc.)
  • Dashboard admin (Vue.js 3 + mode sombre)
  • Multilingue (fr, en, es, de, it)

Démarrage Rapide

Prérequis

  • Docker & Docker Compose
  • Credentials OAuth2 (Google, GitHub, ou GitLab)

Installation

Option 1 : Script d'Installation Automatisé (Recommandé)

# Télécharger et exécuter le script d'installation
curl -fsSL https://raw.githubusercontent.com/btouchard/ackify-ce/main/install/install.sh | bash

# Naviguer vers le répertoire d'installation
cd ackify-ce

# Éditer la configuration avec vos credentials OAuth2
nano .env

# Démarrer les services
docker compose up -d

# Accéder à l'interface web
open http://localhost:8080

Ce que fait le script :

  • Télécharge compose.yml et .env.example
  • Génère automatiquement des secrets sécurisés :
    • ACKIFY_OAUTH_COOKIE_SECRET (chiffrement session AES-256)
    • POSTGRES_PASSWORD (mot de passe base de données)
  • Crée un fichier .env prêt à l'emploi
  • Vous n'avez qu'à ajouter vos credentials OAuth2

Option 2 : Installation Manuelle

# Cloner le dépôt
git clone https://github.com/btouchard/ackify-ce.git
cd ackify-ce

# Configurer
cp .env.example .env
nano .env  # Éditer avec vos credentials OAuth2 et générer les secrets

# Démarrer les services
docker compose up -d

# Vérifier
curl http://localhost:8080/api/v1/health
# Attendu: {"status":"healthy","database":"connected"}

# Accéder à l'interface web
open http://localhost:8080

Variables d'Environnement Requises

# Application
APP_DNS=sign.votre-domaine.com
ACKIFY_BASE_URL=https://sign.votre-domaine.com
ACKIFY_ORGANISATION="Votre Organisation"

# Base de données
POSTGRES_USER=ackifyr
POSTGRES_PASSWORD=votre_mot_de_passe_securise
POSTGRES_DB=ackify

# OAuth2 (exemple avec Google)
ACKIFY_OAUTH_PROVIDER=google
ACKIFY_OAUTH_CLIENT_ID=votre_client_id
ACKIFY_OAUTH_CLIENT_SECRET=votre_client_secret

# Sécurité (générer avec: openssl rand -base64 32)
ACKIFY_OAUTH_COOKIE_SECRET=votre_secret_base64

Voir docs/fr/configuration.md pour toutes les options.


📸 Captures d'écran

Accueil
Signature
Confirmée
Signatures
Outline
Google Docs

Vidéos : 1-initialize-sign.webm | 2-user-sign-flow.webm


📚 Documentation

Démarrage

Fonctionnalités

Technique


🚀 Utilisation

Demander une Signature

https://votre-domaine.com/?doc=politique_securite_2025

L'utilisateur s'authentifie via OAuth2 et signe en un clic.

Intégrer dans vos Outils

iFrame :

<iframe src="https://votre-domaine.com/?doc=politique_2025"
        width="600" height="200" frameborder="0"></iframe>

oEmbed (Notion, Outline, Confluence) :

Collez simplement l'URL - embed automatique via oEmbed discovery

Open Graph (Slack, Teams) :

L'URL se déploie automatiquement avec le nombre de signatures

Voir docs/fr/features/embedding.md pour les détails.


🛡️ Sécurité

  • Ed25519 - Signatures courbe elliptique de pointe
  • SHA-256 - Hachage payload pour détection altération
  • PKCE - Sécurité OAuth2 (automatique)
  • AES-256-GCM - Refresh tokens chiffrés
  • Horodatages immutables - Triggers PostgreSQL
  • Rate limiting - 5 auth/min, 100 req/min
  • HTTPS forcé - Cookies sécurisés uniquement

Voir docs/fr/architecture.md pour tous les détails sécurité.


🔧 Stack Technique

Backend : Go 1.24.5, PostgreSQL 16, Chi Router, OAuth2, Ed25519

Frontend : Vue 3, TypeScript, Vite, Pinia, Tailwind CSS, shadcn/vue

DevOps : Docker, Builds multi-étapes, Image Distroless (< 30MB)

i18n : 5 langues (fr, en, es, de, it)

Coverage : 72.6% (180+ tests unitaires, 33 tests d'intégration)


🤝 Support


📄 Licence

AGPLv3 - Voir LICENSE pour les détails.


Développé avec ❤️ par Benjamin TOUCHARD