Project

General

Profile

Bug #60665

Perte du jeton data_source_query_info entre formulaire et API autocomplete

Added by Benjamin Dauvergne → en congés jusqu'au 29/08 7 months ago. Updated 6 months ago.

Status:
Fermé
Priority:
Normal
Target version:
-
Start date:
14 January 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

Associated revisions

Revision 65eb70f4 (diff)
Added by Frédéric Péters 6 months ago

misc: move password token info into a context dictionary (#60665)

(this is to match email action token, before going sql)

Revision fc0b120b (diff)
Added by Frédéric Péters 6 months ago

misc: move tokens to an SQL table (#60665)

Revision 49bdcd2e (diff)
Added by Frédéric Péters 6 months ago

tokens: add job to clean expired tokens (#60665)

Revision b05cb6ed (diff)
Added by Frédéric Péters 6 months ago

misc: remove explicit handling of account-confirmation token expiration (#60665)

Revision 940c4066 (diff)
Added by Frédéric Péters 6 months ago

misc: use tokens to store autocompletion context (#60665)

History

#2

Updated by Frédéric Péters 7 months 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 → en congés jusqu'au 29/08 7 months ago

  • Tracker changed from Development to Bug
#4

Updated by Benjamin Dauvergne → en congés jusqu'au 29/08 7 months 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 7 months ago

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

Updated by Benjamin Dauvergne → en congés jusqu'au 29/08 7 months 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 7 months ago

(je me suis assigné le ticket)

#8

Updated by Frédéric Péters 7 months ago

  • % Done changed from 100 to 0
#9

Updated by Frédéric Péters 7 months 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 → en congés jusqu'au 29/08 7 months 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 7 months 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 → en congés jusqu'au 29/08 7 months ago

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

Updated by Frédéric Péters 6 months ago

  • Status changed from Solution validée to Résolu (à déployer)
commit 940c4066d6818369c546b8e7dd7ede96a201d521
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Mon Jan 17 17:50:11 2022 +0100

    misc: use tokens to store autocompletion context (#60665)

commit b05cb6ed2aaab40bf6bb68e5b88df66d8b2c260d
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Tue Jan 18 10:00:06 2022 +0100

    misc: remove explicit handling of account-confirmation token expiration (#60665)

commit 49bdcd2eba94f8898f9cf3c73454286787849ccd
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Mon Jan 17 18:09:23 2022 +0100

    tokens: add job to clean expired tokens (#60665)

commit fc0b120b2fe533351b270a635d9986342553570c
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Mon Jan 17 16:00:27 2022 +0100

    misc: move tokens to an SQL table (#60665)

commit 65eb70f47a3e96c0757e70aed973d1e31d27b73b
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Mon Jan 17 14:46:38 2022 +0100

    misc: move password token info into a context dictionary (#60665)

    (this is to match email action token, before going sql)
#14

Updated by Frédéric Péters 6 months ago

  • Status changed from Résolu (à déployer) to Solution déployée
#15

Updated by Transition automatique 4 months ago

Automatic expiration

Also available in: Atom PDF