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:
Benjamin
2025-11-07 23:29:53 +01:00
parent 5ed7127ec7
commit 34146fb02d
11 changed files with 119 additions and 13 deletions
+5 -1
View File
@@ -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)
}
})
})
+50
View File
@@ -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 quun 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 sassurer que leurs collaborateurs ont bien **pris connaissance dune politique interne, dune charte ou dune procédure**.
Jusquici, la plupart des outils disponibles étaient centrés sur la signature légale, complexes à déployer ou couteux et hébergés à lexté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.
Loutil peut être **hébergé en interne**, connecté à lannuaire de lorganisation, 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 à dautres 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 sadapte aux environnements internationaux tout en restant totalement auto-hébergeable.
---
### Une alternative éthique et pragmatique
> « Ackify est né dun besoin simple : prouver quun document a été lu, sans la lourdeur ni les contraintes dune signature électronique.
> Cest 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.*
+44
View File
@@ -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 dun 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 à dautres 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 dusage
- 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.
+20 -12
View File
@@ -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 -->