Project

General

Profile

Bug #60665

Perte du jeton data_source_query_info entre formulaire et API autocomplete

Added by Benjamin Dauvergne 13 days ago. Updated 5 days ago.

Status:
Solution validée
Priority:
Normal
Target version:
-
Start date:
14 Jan 2022
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

Description

Cf. ticket client #60659

À l'arrivée sur un formulaire de soumission backoffice, un champ liste à choix en autocomplétion vers une vue personnalisée sur des fiches répond "Les résultats ne peuvent pas être chargés" résultant d'une 403 de l'API autocomplete.

Le seule cas de 403 dans le code c'est ça :

class AutocompleteDirectory(Directory):
    def _q_lookup(self, component):
        info = get_session().get_data_source_query_info_from_token(component)
        if not info:
            raise AccessForbiddenError()

Ça ressemble furieusement aux soucis d'écrasement de session (perte du user_id #58168 par exemple, m'enfin on peut perdre un peu n'importe quoi qui a été écrit en session lors d'écritures concurrentes), vu que la communication du jeton entre l'ouverture de la page du formulaire et l'API autocomplete passe par celle-ci (la session). Comme pour les autres cas je suggérerai de ne pas stocker ça en session mais dans une table à part session_tokens avec une ligne par jeton, sauf à trouver une solution magique.


Files

History

#2

Updated by Frédéric Péters 13 days ago

  • Assignee set to Frédéric Péters

dans une table à part session_tokens

Plutôt migrer le jeton vers wcs/qommon/tokens.py qui est déjà prévu pour être "jeton générique". Peut-être après un autre ticket qui en ferait la migration SQL; je regarderai ça.

#3

Updated by Benjamin Dauvergne 12 days ago

  • Tracker changed from Development to Bug
#4

Updated by Benjamin Dauvergne 12 days ago

  • Related to Development #60693: Déplacer le stockage de wcs.qommon.tokens.Token en base SQL added
#5

Updated by Frédéric Péters 12 days ago

  • Related to deleted (Development #60693: Déplacer le stockage de wcs.qommon.tokens.Token en base SQL)
#6

Updated by Benjamin Dauvergne 12 days ago

À regarder Token je ne vois rien d'intéressant à reprendre autant partir sur une table et une classe spécifique et ne pas s'embêter à trouver quelque chose de commun.

#7

Updated by Frédéric Péters 12 days ago

(je me suis assigné le ticket)

#8

Updated by Frédéric Péters 10 days ago

  • % Done changed from 100 to 0
#9

Updated by Frédéric Péters 9 days ago

0001 pour modifier la manière dont le jeton est utilisé pour diverses actions dans la gestion native des utilisateurs de w.c.s.; ça déplace les infos dans un dictionnaire "context" pour correspondre à ce qui est fait côté "actions emails". Il n'y a pas de migration des données parce qu'on n'utilise pas cette gestion dans Publik.

0002 pour déplacer le stockage dans la db; pour avoir quelque chose de vraiment propre ça modifie aussi l'expiration pour être un datetime avec timezone. (plutôt qu'un timestamp).

0003 pour ajouter un job pour supprimer les vieux jetons, ça n'existe actuellement pas et j'ai vu un répertoire avec 200000+ fichiers. Il y a migration des données parce que des liens d'action dans les emails doivent continuer à fonctionner.

0004 pour retirer la gestion de l'expiration sur les jetons utilisés pour la confirmation de la création de compte dans la gestion native des utilisateurs.

0005 pour arriver à ce ticket et utiliser ces jetons plutôt que des entrées dans la session. Le patch est en partie chargé par des modifications d'indentation dans data_sources.py

#10

Updated by Benjamin Dauvergne 8 days ago

Dans le système actuel les jetons pour l'autocomplete ont pour durée de vie celle de la session, dans celui-ci c'est fixé à une heure indépendamment de la session, c'est un changement de comportement inutile je pense, autant fixer une durée qui dépasse celle des sessions par défaut pour éviter cela, ces jetons ne coûtent rien.

PS: la durée de vie max des sessions par défaut c'est 30j ou 3j sans accès; mais c'est bloqué par la partie SAML qui récupère le sessionNotOnOrAfter par défaut à 8h coté authentic; on peut mettre 3j pour tenir compte des formulaires soumis anonymement.

#11

Updated by Frédéric Péters 5 days ago

Poussé dans la branche avec pas d'expiration explicite et donc l'expiration par défaut à un jour des jetons, supérieure à SESSION_COOKIE_AGE = 36000 qu'on a par défaut.

#12

Updated by Benjamin Dauvergne 5 days ago

  • Status changed from Solution proposée to Solution validée

Also available in: Atom PDF