Bug #96174
openqrcode: les dates de validité du lecteur ne sont pas considérées lors du pointage
0%
Description
Actuellement, on ne vérifie pas que le lecteur qui effectue un pointage est actif lors de ce pointage, i.e qu'on est dans l'intervalle des dates de validités du lecteur lors d'un appel à l'endpoint /tally. On vérifie ces dates de validités uniquement à l'ouverture de la page du lecteur.
Actuellement, ça permet d'utiliser l'UUID d'un lecteur pour faire des pointages hors période de validité en faisant des appels manuels à l'endpoint /tally. Comme les UUID de lecteurs sont considérés comme secrets, ça n'est pas forcément dramatique.
Le problème sera plus préoccupant quand on mettra en cache la page du lecteur : dans ce cas, ré-ouvrir un lecteur périmé permettra de faire des pointages normalement, sans même que l'agent réalise que la validité du lecteur est dépassée. Il faudra, quand le lecteur sera caché :
- Vérifier dynamiquement les dates de validités du lecteur côté client, et désactiver l'interface de pointage si on est hors dates de validité
- Interdire côté backend l'enregistrement d'événements si la date courante est inférieure à la date de début de validité du lecteur.
- Pour la fin de validité, les choses sont plus complexes, puisqu'on peut scanner des événements lorsque le lecteur est valide, les stocker côté client, puis les envoyer à Passerelle une fois la date de validité du lecteur dépassée. Mais si on autorise l'enregistrement d'événements uniquement en se basant sur la date à laquelle le pointage a été fait (champ 'happened' lors de l'appel à /save_event), on pourra fabriquer des requêtes pour enregistrer des événements dans le passé, avec l'UUID d'un lecteur expiré. Pour gérer ça, je pense que le mieux est d'utiliser la date de réception par Passerelle comme faisant foi, et de signifier dans la documentation que la date de fin de validité est la date après laquelle plus aucun événement ne sera enregistré par Passerelle, même s'il a été scanné à un moment où le lecteur était valide. Si des cas d'usages se présentent avec une synchronisation peu fréquente, charge à l'utilisateur de laisser une marge sur la date de fin de validité pour que ces événements envoyés tardivement à Passerelle ne soient pas refusés.
Updated by Corentin Séchet over 1 year ago
- Subject changed from qrcode: les dates de validité du lecteur ne sont pas considérées lors d'un appel à /tally to qrcode: les dates de validité du lecteur ne sont pas considérées lors du pointage
- Description updated (diff)