mirror of
https://github.com/btouchard/ackify.git
synced 2026-05-19 07:18:23 -05:00
fix(auth): enable logout for MagicLink users
- Move /logout route outside OAuth-only block to support both OAuth and MagicLink authentication methods. - Also fix notification icon alignment in AuthChoicePage. - And add press-kit inside /docs
This commit is contained in:
@@ -93,7 +93,6 @@ func NewRouter(cfg RouterConfig) *chi.Mux {
|
||||
if cfg.OAuthEnabled {
|
||||
r.Post("/start", authHandler.HandleStartOAuth)
|
||||
r.Get("/callback", authHandler.HandleOAuthCallback)
|
||||
r.Get("/logout", authHandler.HandleLogout)
|
||||
|
||||
if cfg.AutoLogin {
|
||||
r.Get("/check", authHandler.HandleAuthCheck)
|
||||
@@ -107,6 +106,11 @@ func NewRouter(cfg RouterConfig) *chi.Mux {
|
||||
// Reminder auth link (authentification via email de reminder)
|
||||
r.Get("/reminder-link/verify", authHandler.HandleVerifyReminderAuthLink)
|
||||
}
|
||||
|
||||
// Logout endpoint (available for both OAuth and MagicLink)
|
||||
if cfg.OAuthEnabled || cfg.MagicLinkEnabled {
|
||||
r.Get("/logout", authHandler.HandleLogout)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
# Communiqué de presse — Novembre 2025
|
||||
## Ackify CE : la preuve de lecture open-source, simple et respectueuse de la vie privée
|
||||
|
||||
**Bordeaux (France)** — Avec **Ackify CE**, la confirmation de lecture devient enfin un geste simple, traçable et auto-hébergeable.
|
||||
Pensée pour les équipes modernes et les environnements sensibles, cette solution open-source permet de **prouver qu’un document a été lu** — sans avoir recours à de lourdes solutions de signature électronique.
|
||||
|
||||
---
|
||||
|
||||
### Un besoin concret : prouver la lecture, pas signer
|
||||
|
||||
Les entreprises, associations ou institutions doivent souvent s’assurer que leurs collaborateurs ont bien **pris connaissance d’une politique interne, d’une charte ou d’une procédure**.
|
||||
Jusqu’ici, la plupart des outils disponibles étaient centrés sur la signature légale, complexes à déployer ou couteux et hébergés à l’extérieur.
|
||||
|
||||
**Ackify CE** se concentre sur un besoin beaucoup plus simple : la **preuve de lecture**, horodatée et vérifiable, mais sans tiers de confiance ni dépendance à un service SaaS.
|
||||
L’outil peut être **hébergé en interne**, connecté à l’annuaire de l’organisation, et intégré directement dans **Outline, Notion, Confluence ou autre service web supportant oEmbed/IFrame**.
|
||||
|
||||
---
|
||||
|
||||
### Un outil moderne, sécurisé et auto-suffisant
|
||||
|
||||
- **Authentification flexible** : connexion par **Magic Link** (sans mot de passe, via e-mail à durée limitée) ou **OAuth2** (Google, GitHub, GitLab, Microsoft, custom…).
|
||||
- **Tableau de bord administrateur** : suivi en temps réel des lecteurs attendus, rappels par e-mail et export des preuves.
|
||||
- **API REST et Webhooks** pour automatiser les notifications et connecter Ackify à d’autres systèmes internes.
|
||||
- **Installation guidée** en 5 minutes via un simple script Docker — sans configuration manuelle ni dépendances cachées.
|
||||
- **Sécurité intégrée** : hachage cryptographique (SHA-256 / Ed25519), cookies sécurisés, PKCE, et image Docker distroless de moins de 30 Mo.
|
||||
|
||||
Disponible en **français, anglais, espagnol, allemand et italien**, Ackify CE s’adapte aux environnements internationaux tout en restant totalement auto-hébergeable.
|
||||
|
||||
---
|
||||
|
||||
### Une alternative éthique et pragmatique
|
||||
|
||||
> « Ackify est né d’un besoin simple : prouver qu’un document a été lu, sans la lourdeur ni les contraintes d’une signature électronique.
|
||||
> C’est un outil sobre, transparent et respectueux des données. »
|
||||
> — *Benjamin Touchard, créateur du projet*
|
||||
|
||||
Ackify CE est publié sous **licence AGPL v3**, garantissant son indépendance et son ouverture à la contribution.
|
||||
|
||||
---
|
||||
|
||||
### Pour aller plus loin
|
||||
|
||||
- **Site officiel :** [https://ackify.eu](https://ackify.eu)
|
||||
- **Code source :** [https://github.com/btouchard/ackify-ce](https://github.com/btouchard/ackify-ce)
|
||||
- **Documentation :** incluse dans le dépôt (`/docs/`)
|
||||
- **Contact presse :** [benjamin@kolapsis.com](mailto:benjamin@kolapsis.com)
|
||||
|
||||
---
|
||||
|
||||
**Ackify CE** — *la preuve de lecture open-source, sans compromis sur la simplicité ni la vie privée.*
|
||||
@@ -0,0 +1,44 @@
|
||||
# 🚀 Ackify CE — Présentation
|
||||
|
||||
Ackify CE est une plateforme open-source et auto-hébergeable qui permet de prouver la lecture d’un document, sans signature électronique.
|
||||
|
||||
Pensé pour les équipes modernes (Outline, Notion, Confluence…), Ackify apporte une preuve de lecture horodatée et vérifiable, idéale pour les politiques internes, formations ou procédures de conformité.
|
||||
|
||||
## Fonctionnalités principales
|
||||
|
||||
- 🔐 Preuve de lecture vérifiable : une confirmation unique par utilisateur et par document, avec horodatage et hachage cryptographique (SHA-256 / Ed25519).
|
||||
- ✉️ Authentification flexible : connexion par **Magic Link** (sans mot de passe, e-mail 15 min) ou **OAuth2** (Google, GitHub, GitLab, etc.).
|
||||
- 🧭 Tableau de bord administrateur : gestion des documents, liste des lecteurs attendus, suivi des confirmations et envois de rappels.
|
||||
- 🌐 Intégrations : insertion simple dans **Outline, Notion, Confluence ou tout site via iframe et oEmbed**.
|
||||
- 🔁 **API REST & Webhooks** pour automatiser les notifications et intégrer Ackify à d’autres outils.
|
||||
- 🧱 Installation guidée en 5 minutes via un script interactif Docker (distroless + PostgreSQL 16).
|
||||
- 🌍 Interface multilingue (FR, EN, ES, DE, IT).
|
||||
- 🧑💻 Mode “admin-only” (variable ACKIFY_ONLY_ADMIN_CAN_CREATE) pour restreindre la création de documents.
|
||||
|
||||
## Cas d’usage
|
||||
|
||||
- Validation de politiques internes (sécurité, RGPD, conformité).
|
||||
- Attestation de lecture de formation ou de procédures.
|
||||
- Suivi de documents sensibles sans recourir à une signature électronique complète.
|
||||
|
||||
## Stack & sécurité
|
||||
|
||||
- Backend : Go + PostgreSQL 16
|
||||
- Frontend : Vue 3 + TypeScript + Tailwind
|
||||
- Architecture : API-first, distroless, healthchecks intégrés
|
||||
- Sécurité : Ed25519, SHA-256, PKCE, cookies sécurisés, taux de requêtes limités
|
||||
|
||||
## Démarrage rapide 🚀
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/btouchard/ackify-ce/main/install/install.sh | bash
|
||||
```
|
||||
|
||||
Le script installe Ackify, configure le `.env` en mode interactif, génère les secrets.
|
||||
|
||||
## Licence & liens
|
||||
|
||||
- Licence : AGPL v3
|
||||
- Code source : https://github.com/btouchard/ackify-ce
|
||||
- Site officiel : https://www.ackify.eu
|
||||
- Documentation : /docs/ du dépôt GitHub
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 86 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 101 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 92 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 99 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -133,21 +133,29 @@ function isValidEmail(email: string): boolean {
|
||||
</div>
|
||||
|
||||
<Alert v-if="errorMessage" variant="destructive">
|
||||
<AlertCircle class="h-4 w-4" />
|
||||
<AlertTitle>{{ t('common.error') }}</AlertTitle>
|
||||
<AlertDescription>{{ errorMessage }}</AlertDescription>
|
||||
<div class="flex items-start">
|
||||
<AlertCircle :size="20" class="mr-3 mt-0.5" />
|
||||
<div class="flex-1">
|
||||
<AlertTitle>{{ t('common.error') }}</AlertTitle>
|
||||
<AlertDescription>{{ errorMessage }}</AlertDescription>
|
||||
</div>
|
||||
</div>
|
||||
</Alert>
|
||||
|
||||
<Alert v-if="magicLinkSent" variant="default" class="border-green-200 bg-green-50">
|
||||
<CheckCircle2 class="h-4 w-4 text-green-600" />
|
||||
<AlertTitle class="text-green-800">{{ t('auth.magiclink.sent.title') }}</AlertTitle>
|
||||
<AlertDescription class="text-green-700">
|
||||
{{ t('auth.magiclink.sent.message') }}
|
||||
<br>
|
||||
<span class="text-xs text-green-600">
|
||||
{{ t('auth.magiclink.sent.expire') }}
|
||||
</span>
|
||||
</AlertDescription>
|
||||
<div class="flex items-start">
|
||||
<CheckCircle2 :size="20" class="mr-3 mt-0.5 text-green-600" />
|
||||
<div class="flex-1">
|
||||
<AlertTitle class="text-green-800">{{ t('auth.magiclink.sent.title') }}</AlertTitle>
|
||||
<AlertDescription class="text-green-700">
|
||||
{{ t('auth.magiclink.sent.message') }}
|
||||
<br>
|
||||
<span class="text-xs text-green-600">
|
||||
{{ t('auth.magiclink.sent.expire') }}
|
||||
</span>
|
||||
</AlertDescription>
|
||||
</div>
|
||||
</div>
|
||||
</Alert>
|
||||
|
||||
<!-- OAuth Login -->
|
||||
|
||||
Reference in New Issue
Block a user