AnnexGroup

Journal des modifications

Ce qui change

Chaque version avec ce qui est nouveau et ce qui a été corrigé. Sans enjolivure — les erreurs dont nous ne sommes pas fiers figurent ici aussi.

1.0.4

Version de sécurité : la liste des messages d’une boîte vérifie désormais que la boîte appartient à l’utilisateur connecté — et la synchronisation du courrier avec AnnexOffice devient plus légère

Corrigé et amélioré

  • La liste des messages d’une boîte via l’interface de programmation (GET /api/v1/mailboxes/{id}/messages) ne vérifiait pas si la boîte appartenait à l’utilisateur connecté. Un utilisateur connecté sur le même serveur pouvait ainsi consulter les messages de boîtes d’autres utilisateurs s’il en connaissait le numéro. Depuis la 1.0.4, le serveur répond « introuvable » pour les boîtes qui ne sont pas les siennes. Nous recommandons de passer à la 1.0.4
  • Synchronisation du courrier avec AnnexOffice : le serveur fournit les messages depuis la dernière synchronisation (delta avec point de contrôle) au lieu de tous à chaque fois, et les suppressions arrivent en totalité, page par page. Cela prend effet avec une version d’AnnexOffice qui utilise la synchronisation (avec AnnexCREATE 0.7.4) — les clients plus anciens continuent de tout récupérer

1.0.3

Version de sécurité : la connexion de l’app AnnexTalk compte les tentatives échouées, verrouille les comptes et respecte les adresses bloquées — comme la connexion dans le navigateur

Corrigé

  • Le propre chemin de connexion de l’app AnnexTalk ne respectait pas les adresses bloquées, ne comptait pas les tentatives échouées et ne verrouillait pas les comptes — contrairement à la connexion dans le navigateur. L’app suit maintenant les mêmes règles, et chaque tentative échouée figure dans le journal de l’administration

1.0.2

Version corrective : Apple Contacts se configure avec la seule adresse — et propose le compte comme compte par défaut pour les nouveaux contacts

Corrigé

  • Apple Contacts s’annonçait en mode « Automatique » avec seule la partie nom de l’adresse — le serveur refusait la connexion. Il complète maintenant le domaine : la configuration sans nom de serveur réussit, et le carnet d’adresses et l’annuaire de l’entreprise arrivent
  • Apple ne proposait pas le compte comme compte par défaut pour les nouveaux contacts — la racine du compte livrait une liste de droits vide. Les nouvelles cartes atterrissaient dans le mauvais compte ; le compte est maintenant proposé, et la création sur le serveur et la suppression sont prouvées

1.0.0

L’ensemble est complet : de l’installation à la migration depuis Exchange et au poste de travail sur Mac et Windows — et signaler et bloquer dans AnnexTalk

Nouveautés

  • Dans AnnexTalk, un message peut être signalé : le signalement va à l’administration de votre propre serveur — il figure dans le journal d’administration et parvient par courrier aux administrateurs de votre domaine, jamais à ma-kom. Qui bloque un expéditeur ne compte plus ses messages
  • La migration depuis un Exchange sur site s’exécute entièrement sur le serveur : directement via EWS, sans Mac interposé — courrier, rendez-vous, contacts, tâches, notes et dossiers publics arrivent avec, vérifié sur une vraie boîte aux lettres
  • Le poste de travail dans l’interface web sur Mac et Windows — installé de la machine vierge jusqu’au premier message traité

0.12.1

AnnexTalk désormais dans le navigateur — lire et répondre dans les canaux et messages directs ; en outre, deux erreurs de l’archive corrigées, et la migration nomme chaque entrée non transférée, l’installateur macOS vérifie la version du système, et l’état du système confronte MX et SRV au certificat

Nouveautés

  • L’interface web a un point de menu AnnexTalk : les canaux et messages directs s’y lisent et s’y répondent — limite : pas de compteur de non-lus, pas de fils de discussion, pas de réactions ; le bouton « Actualiser » charge les nouveaux messages

Corrigé

  • Sous conservation, l’archivage comptait mal : `archive-run` annonçait par exemple « 24 archivés » alors que la conservation n’avait déplacé aucun message. La conservation a toujours joué son rôle — rien n’est perdu, seul le chiffre était faux. Désormais, la commande ne compte que ce qui se trouve réellement dans l’archive
  • La tâche d’archivage quotidienne ne se terminait plus quand un message à échéance dépassée ne pouvait pas être archivé (par exemple dans un dossier sans propriétaire) — elle le reprenait sans cesse et tournait sans fin. Désormais, elle s’interrompt et indique quels messages sont restés sur place
  • L’installateur macOS ne vérifiait pas la version minimale : sur un Mac avec un système trop ancien, AnnexGroup plantait au démarrage avec « dyld: Symbol not found » et « Abort trap » — sans indiquer que le système en était la cause. `install-macos.sh` et l’installateur .pkg refusent désormais avant d’installer quoi que ce soit : le script indique qu’AnnexGroup nécessite macOS 14 ou plus récent et quel macOS ce Mac possède ; l’installateur .pkg affiche l’avis de macOS indiquant que macOS 14 est requis
  • L’état du système déclarait le certificat valide même s’il ne couvrait pas le nom vers lequel les suggestions DNS de l’administration pointent MX et SRV — par défaut `mail.<votre-domaine>`, réglable via `smtp_hostname`. Un programme de messagerie qui suivait l’enregistrement SRV échouait à la connexion. L’état du système nomme désormais ce qui manque
  • Une migration depuis Exchange se terminait par « completed_with_errors — 2 errors » sans dire lesquelles — les noms n’étaient que dans le journal du serveur. Le chiffre était juste ; rien n’a disparu en silence. Le journal de migration nomme désormais chaque entrée non transférée avec son motif : dossier, objet et identifiant du message pour les messages, le titre pour les rendez-vous, contacts, tâches et notes
  • La page d’import n’affichait que le statut d’un travail terminé. Une liste se déplie désormais sous chaque travail, nommant toutes les entrées ignorées et échouées avec leur motif — par exemple « Échec · Boîte de réception / Facture mars — message too large »
  • Une pièce jointe qui ne pouvait pas être lue pendant la migration depuis Exchange faisait échouer tout le message ; le message arrive désormais sans elle, et la pièce jointe figure avec l’objet et le nom de fichier dans le journal de migration. Les pièces jointes vides (par exemple `ATT00001.txt`) arrivent comme fichiers vides

0.12.0

Fuseaux horaires Windows lus correctement, agents IA sans pression sur la licence — et une désinstallation qui ne laisse rien

Nouveautés

  • Les agents IA ne comptent plus contre la limite d’utilisateurs de la licence : par utilisateur payant, le même nombre d’agents est possible, et la dépasser déclenche un message — pas un blocage

Corrigé

  • Les rendez-vous avec des noms de fuseaux horaires Windows — comme les écrit le calendrier Windows — étaient décalés de deux heures : dans la synchronisation du calendrier, dans les invitations par mail et dans la migration via Microsoft Graph. Le serveur connaît maintenant la correspondance entre fuseaux Windows et fuseaux IANA et lit correctement les trois endroits
  • Un numéro de téléphone modifié dans le navigateur n’arrivait jamais dans le carnet d’adresses du client quand le contact avait déjà une carte enregistrée — l’ancien numéro restait. Les numéros modifiés remplacent maintenant l’enregistré, et les nouveaux portent un type
  • La désinstallation sous macOS laissait le helper de mise à jour automatique chargé, pointant vers un programme supprimé — il est maintenant supprimé aussi
  • Les rendez-vous sans participants apparaissaient dans les programmes de calendrier comme des demandes de réunion avec « Réponse demandée » — le serveur écrivait un organisateur dans chaque rendez-vous. Désormais, seuls les rendez-vous avec participants portent un organisateur
  • Les participants saisis dans l’interface web manquaient dans la synchronisation du calendrier : les programmes de calendrier recevaient le rendez-vous sans eux et affichaient un rendez-vous simple au lieu d’un avec invités. La synchronisation les inclut maintenant
  • Les programmes de calendrier n’affichaient pas le nom de l’organisateur d’un rendez-vous avec participants — il apparaissait « Inconnu ». Le serveur n’envoyait aucun nom pour l’organisateur ; il porte maintenant le nom du compte, et les noms contenant une virgule (« Sanwald, Pascal ») arrivent en entier
  • Les connexions simultanées pouvaient perdre des entrées dans le journal d’administration : mesuré avec 40 entrées simultanées, 2 sont arrivées. Toutes arrivent maintenant, et la chaîne de traçabilité reste close
  • La page de mise à jour de l’administration affichait pour une nouvelle version les notes de la dernière version installée et indiquait pendant le chargement « Jamais consulté ». Les deux problèmes sont corrigés à partir des mises à jour suivant la 0.12.0 — qui passe de la 0.11.0 à la 0.12.0 voit encore l’erreur pendant cette mise à jour

0.11.0

Fédération sécurisée dès l’installation, cinq langues partout, plusieurs agendas — et deux failles de sécurité en moins

Nouveautés

  • La fédération entre serveurs AnnexGroup est désactivée par défaut à partir de cette version ; qui l’utilise l’active dans la configuration et dépose la clé publique de chaque partenaire — sans clé, le serveur n’accepte plus rien
  • La liste d’adresses globale est désormais aussi dans l’interface web — jusqu’à la 0.10.0, elle n’était visible que via le carnet d’adresses des logiciels de messagerie (CardDAV)
  • L’interface parle désormais partout la langue de l’utilisateur dans les cinq langues — sept pages gardaient une partie de leurs textes figée en anglais ou en allemand, les termes suivent désormais ceux d’Outlook, et l’administration parle allemand plutôt que le Denglisch
  • Une installation se désinscrit désormais des moteurs de recherche — la page de connexion d’un serveur d’entreprise n’a pas sa place dans un index de recherche
  • Plusieurs agendas par utilisateur : créer, renommer, supprimer — dans l’interface web et via CalDAV ; la disponibilité prend en compte tous ses propres agendas, et la migration depuis Exchange crée les agendas supplémentaires comme agendas à part entière au lieu de tout mettre dans un seul
  • La recherche dans son propre carnet d’adresses filtre désormais sur le serveur — avec 1 051 contacts, chaque recherche renvoyait jusqu’ici tout le carnet (914 KB au lieu d’un seul résultat)
  • Chaque utilisateur peut décider pour lui-même qui voit sa disponibilité — plus étroit ou plus large que la règle du domaine : pas d’information, seulement libre/occupé, ou avec objet et lieu
  • IMAP connaît désormais UIDPLUS et MULTIAPPEND : les logiciels de messagerie comme mbsync attribuent sans ambiguïté les messages téléversés, et plusieurs messages entrent d’un coup ou pas du tout
  • Les listes de blocage acceptent désormais aussi des plages réseau (IPv4 et IPv6) — avec une protection contre l’auto-exclusion
  • Le nombre de comptes et de postes de travail AnnexOffice du code d’activation est une limite stricte ; l’administration montre qui occupe un poste et le libère en un clic
  • Le formulaire de rendez-vous planifie : tous les invités et salles sur une ligne de temps, un clic reprend l’heure, et une suggestion nomme le prochain créneau libre commun
  • Les employés voient leur journée à côté de la boîte de réception — les rendez-vous du jour et les tâches à échéance
  • La date et l’heure figurent dans les formulaires comme la langue de l’interface les écrit — même si le navigateur a une autre langue
  • La chaîne de preuve est vérifiée quotidiennement en fonctionnement ; une rupture apparaît dans l’état du système — et le journal des actions administratives est désormais chaîné aussi
  • IMAP connaît désormais NOTIFY : un canal pour de nombreux dossiers — Evolution affiche la boîte de réception avec le réglage d’usine
  • L’assistant de migration accepte Exchange comme source via EWS, et les dossiers publics deviennent des salles partagées
  • Le carnet d’adresses de l’entreprise est désormais aussi une interface — les clients en reçoivent des suggestions de destinataires lors de la rédaction

Corrigé

  • La connexion entre deux serveurs AnnexGroup vérifie désormais le certificat de l’autre partie et exige une signature valide pour chaque message entrant
  • Une course critique dans le flux d’événements pouvait faire planter le serveur lorsqu’un navigateur se déconnectait au moment même où un message était distribué
  • Qui cliquait deux fois sur « Envoyer » dans le navigateur envoyait le message deux fois — le verrou contre l’envoi double n’agissait jamais là
  • Sur la page d’accueil des employés, une carte restait durablement sur « Chargement … »
  • La liste de vérification de l’installation cochait la migration même quand une migration avait échoué
  • L’aperçu des interfaces de la zone développeur indiquait pour la liste des messages un chemin qui n’existe pas
  • Un message HTML entrant pouvait exécuter du script dans la session du destinataire ; le courrier HTML apparaît désormais dans un cadre isolé sans scripts, et les images distantes et pixels de suivi ne sont pas chargés
  • Derrière un proxy inverse, l’adresse de l’expéditeur d’une requête pouvait être falsifiée, contournant ainsi le verrou de connexion et la liste de blocage ; l’en-tête de transmission ne vaut désormais que depuis les proxies inverses enregistrés (trusted_proxies) — qui fait tourner AnnexGroup derrière nginx ou similaire en saisit l’adresse
  • La page de détail d’un message affiche le message au lieu de sa construction brute, et une réponse cite le texte lisiblement — avec « RE : » dans l’objet quand l’interface est en français
  • Un message déplacé reçoit un nouvel identifiant dans le dossier cible, après la suppression les notifications vers le logiciel de messagerie sont correctes, et QRESYNC signale les messages supprimés comme l’exige la norme
  • L’objet et l’expéditeur avec tréma apparaissent lisibles — auparavant ils figuraient dans la boîte de réception comme « =?utf-8?q?… », même dans les messages déjà présents dans la boîte
  • « Répondre » dans l’interface web atteint les expéditeurs qui écrivent avec un nom ; les objets et les noms avec tréma partent codés conformément à la norme
  • La vue hebdomadaire montre un rendez-vous comme un bloc sur toute sa durée, s’ouvre à 07:00 et affiche les couleurs des rendez-vous ; les dossiers de ses propres agents figurent avec leurs noms à part
  • Les écritures via CalDAV et CardDAV ne nécessitent plus que la moitié des allers-retours vers la base de données
  • Un compte avec le rôle « root » pouvait être créé via l’interface de programmation et disparaissait alors du comptage ; les salles comptaient contre le nombre d’utilisateurs de la licence — les deux sont désormais colmatées
  • IMAP tolère désormais plusieurs logiciels de messagerie sur la même boîte — mesuré avec trois clients simultanés : 98 erreurs avant, aucune après
  • IMAP : COPY crée désormais soit tous les messages, soit aucun — rien de durable à mi-chemin
  • Six constats du passage sur les appareils Apple sont corrigés : ORG avec département reste dans les contacts, CalDAV et CardDAV enregistrent les objets sous le nom choisi par le programme, les contacts supprimés atteignent les appareils, libre/occupé ne compte plus le rendez-vous en cours de planification comme un conflit — et les rendez-vous enregistrés ne portent plus de METHOD

0.10.0

Migration sans Mac, multi-client, conformité — et une interface cohérente

Nouveautés

  • La migration depuis Exchange sur site s’exécute sur le serveur : directement par EWS, sans Mac intermédiaire — courrier, rendez-vous, contacts, tâches et notes suivent
  • Créer de nombreuses boîtes à partir d’une liste au lieu de remplir cinquante formulaires
  • Multi-client : le rôle « administrateur de domaine » gère son propre domaine — utilisateurs, salles, listes de diffusion, partages — et la limite s’applique aussi à la recherche, au carnet d’adresses et à la disponibilité
  • Conformité : journalisation, boîte d’archive comme boîte IMAP à part entière, blocage de conservation, recherche sur tout le domaine avec export mbox et règles d’audit par client
  • L’état du système vérifie le certificat par rapport aux noms de découverte et nomme ceux qui manquent avant que la configuration n’échoue
  • L’administration est ordonnée : quatre zones nommées au lieu de onze boutons identiques, et les assistants indiquent à quelle étape on se trouve
  • Disponibilité dans le formulaire de rendez-vous de l’interface web — « pas d’information » est un état à part et ne ressemble pas à « libre »
  • Dans l’interface web : plusieurs destinataires, copie et copie cachée, et toutes les heures dans le fuseau du lecteur

Corrigé

  • Un rendez-vous reculait du décalage horaire à chaque enregistrement — la liste, la grille du calendrier et le formulaire calculaient dans trois fuseaux différents
  • Message, contact, agent et espace ne s’ouvraient pas : le message répondait 404, les trois autres renvoyaient sans un mot vers leur liste
  • L’assistant de migration n’envoyait pas les identifiants saisis et les stockait dans le navigateur
  • Un second clic sur « Envoyer » envoyait le même message une deuxième fois
  • Les règles de filtrage n’enregistraient pas l’action choisie
  • La charge, l’occupation disque et le journal du serveur étaient visibles depuis n’importe quelle boîte ; le flux en direct l’était même sans connexion
  • Le calendrier mélangeait les noms de jours et de mois allemands et anglais
  • La configuration d’exemple livrée omettait `loc=UTC` dans la connexion à la base — sur une machine qui n’est pas en UTC, toutes les heures se décalaient
  • Le script d’installation signale désormais qu’un autre serveur de messagerie occupe déjà le port 25, au lieu de laisser le service tourner en boucle de redémarrage sans rien dire

0.9.0

Groupware complète — et le serveur se met à jour tout seul

Nouveautés

  • Libre/occupé dans les calendriers : qui cherche un créneau voit qui a le temps, sans demander
  • Salles et équipements comme participants du calendrier — réservés, refusés, sans courir dans les couloirs
  • Liste d’adresses globale dans chaque client standard
  • Groupes de distribution qui se résolvent en interne : écrire à une adresse, joindre tout le monde
  • Envoyer en tant que et envoyer au nom de — avec des partages plutôt que des mots de passe partagés
  • Absence avec période : du début à la fin, pas seulement activée et désactivée
  • Règles sur le serveur (Sieve) : réglées dans le client, appliquées à la réception
  • Dossiers publics avec une hiérarchie à trois niveaux
  • Partages pour boîtes aux lettres, calendriers et carnets d’adresses
  • Mise à jour automatique avec retour arrière : le serveur télécharge la version, l’essaie et change — en cas d’échec, la précédente est sous la main

Corrigé

  • Huit pages d’administration renvoyaient une page vide avec HTTP 200 — l’appel au gabarit de base manquait dans les modèles
  • macOS : le programme et l’installateur désignaient des répertoires de données différents — sauvegarde et restauration annonçaient à tort « aucune donnée »
  • L’assistant privilégié de la mise à jour écoutait un niveau trop haut et n’entendait pas le signal — la mise à jour restait silencieusement sur « préparée »
  • Un retour arrière volontaire réussi signalait une erreur là où il n’y en avait pas

0.8.2

Les clients d’agenda et de contacts se connectent

Corrigé

  • CalDAV et CardDAV acceptent les mêmes identifiants qu’IMAP. Auparavant seuls les jetons étaient acceptés, et Evolution, Thunderbird et les clients Apple n’offrent aucun endroit pour en saisir un : aucun client standard ne pouvait se connecter
  • La configuration par l’adresse du serveur fonctionne : le point d’entrée indique désormais le principal au lieu de refuser l’accès

0.8.1

Multilingue de bout en bout

Nouveautés

  • Documentation disponible en anglais en plus de l’allemand
  • Site en cinq langues (anglais, allemand, espagnol, français, italien)
  • L’interface du serveur, les messages d’erreur et les courriers système suivent la langue du destinataire ; préférence de langue par utilisateur
  • Offre groupée de licences : les postes AnnexOffice sont inclus avec la licence serveur

Corrigé

  • Cinq écarts à la norme IMAP qui faisaient afficher incorrectement le courrier reçu dans Thunderbird
  • Application macOS : plantage au démarrage hors d’un paquet applicatif, et TLS face à un serveur au certificat propre
  • Une situation de compétition dans le flux d’événements qui interrompait la série de tests

0.8.0

Première version publique

Inclus

  • Serveur de messagerie avec SMTP, IMAP, file d’attente et signature DKIM
  • Calendrier, contacts, tâches, notes, espaces partagés, partage
  • Agents IA en tant que sous-comptes avec niveaux d’autonomie et boucle de validation
  • Interface web, installable comme application web, claire et sombre
  • CalDAV et CardDAV pour les appareils Apple
  • Recherche en texte intégral dans tous les domaines
  • Administration avec assistant de configuration, auto-diagnostic, sauvegarde et restauration
  • Protection contre les tentatives de connexion, listes de blocage, préréglages de sécurité
  • Intégration de Rspamd et ClamAV
  • Paquets pour macOS (Apple Silicon et Intel, notariés par Apple) et Linux (x86-64 et ARM64)

Limitations connues

  • Pas de MAPI et pas d’EWS comme protocole serveur — ni d’ActiveSync. AnnexGroup mise uniquement sur des protocoles ouverts ; Exchange est pour nous la source d’une migration, pas un protocole à réimplémenter.
  • Le multi-locataire n’était en 0.8.0 que préparé dans le modèle de données — levé depuis : rôle client dédié (administrateur de domaine), dans l’interface web et via l’API
  • Pas d’assistant pour l’import automatique des boîtes existantes
  • Certificats via Let’s Encrypt uniquement par le défi HTTP — les certificats wildcard exigent la voie DNS et ne sont pas encore intégrés