Commit Graph

10 Commits

Author SHA1 Message Date
Benjamin 6e12fb69ed feat: add email reminder system for pending signers
Enable admins to send reminder emails to expected signers who haven't signed yet.
This addresses the need to follow up with pending signers without manual tracking.

- Add reminder_logs table to track all email sends (success and failures)
- Implement ReminderService with SMTP integration
- Extend admin dashboard with reminder stats and send interface
- Support bulk send (all pending) or selective send (manual selection)
- Track reminder count and last sent date per signer
- Change terminology from "signature" to "lecture/confirmation de lecture" across all templates and emails
2025-10-08 00:57:04 +02:00
Benjamin 2583482198 fix: isolate blockchain chains per document
Each document now maintains its own independent blockchain chain
with its own genesis signature. GetLastSignature now filters by
doc_id to prevent cross-document chain corruption.

Changes:
- Add docID parameter to GetLastSignature interface and implementation
- Update SQL query to filter by document ID
- Add comprehensive test for multi-document blockchain isolation
- Update all test mocks and integration tests
2025-10-03 15:47:09 +02:00
Benjamin d6dd3625a9 fix: ensure blockchain hash determinism by refactoring UserName to string
Changed UserName field from *string to string to fix blockchain integrity
validation issues. The pointer was causing non-deterministic hash computation
due to memory address comparison instead of value comparison.

This change:
- Fixes blockchain validation for signatures with UserName
- Simplifies code by removing pointer dereferencing logic
- Maintains backward compatibility (NULL DB values map to empty string)
- Updates i18n templates to display values directly
2025-10-02 18:22:40 +02:00
Benjamin 1ae8287ca5 fix: memory leak or deferrer errors on tests files 2025-09-28 21:12:09 +02:00
Benjamin 3aaf1b25f8 docs: migrate to AGPL-3.0-or-later and add COPYRIGHT
- Replace SSPL with GNU AGPLv3 (LICENSE)
- Add COPYRIGHT with attribution
- Update Dockerfile label, README(s), BUILD.md
- Add SPDX headers across repo

refacto: remove redundant descriptive comments; keep only meaningful rationales
- Convert doc-comments to GoDoc style without colons
- Keep only security/algorithm rationales (CSRF state, CSP, chain hash, Bresenham)

tests: harden OAuth handlers tests (state missing/invalid) and fix fakes
- Add VerifyState token checks; ensure CreateAuthURL used
- Clean noisy comments in tests

docs: align docker-compose and scripts headers
2025-09-27 17:39:17 +02:00
Benjamin 8d6f71d69d fix: chain update prev_hash via UPDATE during chain rebuild (no INSERT) 2025-09-26 23:32:20 +02:00
Benjamin 1a41d15df9 refactor: remove redundant comments and improve code readability
Remove trivial comments that duplicate what the code already expresses clearly.
Keep only essential documentation for public exports as per Go conventions.
This improves code maintainability and follows the principle that code should
be self-documenting.
2025-09-15 22:59:50 +02:00
Benjamin c38558fea6 feat: refactor Ackify to support CE/EE separation
- Move web server logic to pkg/web package for external imports
- Rename cmd/ackify to cmd/community for clarity
- Create NewServer(multitenant bool) function for EE integration
- Add basic unit tests for Community Edition
- Update Dockerfile to build from cmd/community
- Add comprehensive build and deployment documentation

This change enables the Enterprise Edition to import and extend
the Community Edition while maintaining clean separation.
2025-09-13 22:28:27 +02:00
Benjamin faefc9061d fix: suffix _utc & _b64 on sql fields and struct name 2025-09-10 21:28:48 +02:00
Benjamin 62f8a56c7a feat: initial project setup
Add complete Go application for cryptographic document signature validation with OAuth2 authentication, Ed25519 signatures, and PostgreSQL storage following clean architecture principles.
2025-09-10 17:10:22 +02:00