- 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.
7.8 KiB
🔐 Ackify
Proof of Read. Compliance made simple.
Service sécurisé de validation de lecture avec signatures cryptographiques et preuves incontestables.
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.ymlet.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
.envprê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
- Démarrage Rapide - Installation & premiers pas
- Configuration - Variables d'environnement
- OAuth Providers - Google, GitHub, GitLab, Custom
- Configuration Email - Configuration SMTP
Fonctionnalités
- Signatures - Flow cryptographique Ed25519
- Signataires Attendus - Tracking & rappels
- Checksums - Vérification intégrité documents
- Embedding - oEmbed, iframes, intégrations
- i18n - Internationalisation (5 langues)
Technique
- Architecture - Stack technique & principes de conception
- Base de Données - Schéma PostgreSQL & migrations
- API Reference - Endpoints REST & exemples
- Déploiement - Production avec Docker Compose
- Développement - Contribution & setup
🚀 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
- Issues : GitHub Issues
- Discussions : GitHub Discussions
- Email : contact@ackify.eu
📄 Licence
AGPLv3 - Voir LICENSE pour les détails.
Développé avec ❤️ par Benjamin TOUCHARD





