Project

General

Profile

Development #37884

permettre d'utiliser un gabarit django pour la correspondance attribut oidc / attribut authentic (côté IdP)

Added by Frédéric Péters 5 months ago. Updated 20 days ago.

Status:
Solution déployée
Priority:
Normal
Category:
-
Target version:
-
Start date:
22 Nov 2019
Due date:
% Done:

0%

Patch proposed:
Yes
Planning:
No

Description

Comme #37871 mais dans les attributs fournis par Authentic quand il est IdP OIDC.

0001-idp_oidc-add-is_templated-option-to-claim-model-3788.patch View (1.04 KB) Paul Marillonnet, 20 Feb 2020 04:52 PM

0002-idp_oidc-templated-claim-model-migration-file-37884.patch View (1.73 KB) Paul Marillonnet, 20 Feb 2020 04:52 PM

0003-template-initial-class-derived-from-wcs.qommon.templ.patch View (2.84 KB) Paul Marillonnet, 20 Feb 2020 04:53 PM

0004-idp_oidc-render-templated-claims-in-user-info-creati.patch View (1.54 KB) Paul Marillonnet, 20 Feb 2020 04:53 PM

0005-idp_oidc-add-claim-admin-page-37884.patch View (1.24 KB) Paul Marillonnet, 20 Feb 2020 04:53 PM

0006-idp_oidc-test-templated-claims-37884.patch View (3.67 KB) Paul Marillonnet, 20 Feb 2020 04:53 PM

configuration_apparairage.png View (42.1 KB) Paul Marillonnet, 21 Feb 2020 03:25 PM

0001-forms-add-a-datalist-textinput-widget-37884.patch View (3.96 KB) Paul Marillonnet, 25 Feb 2020 12:40 PM

0002-idp_oidc-use-custom-widget-in-client-admin-page-3788.patch View (1.36 KB) Paul Marillonnet, 25 Feb 2020 12:40 PM

0003-add-a-template-module-copycatting-wcs.qommon.templat.patch View (6.78 KB) Paul Marillonnet, 25 Feb 2020 12:40 PM

0004-idp_oidc-render-templated-claims-in-user-info-creati.patch View (4.92 KB) Paul Marillonnet, 25 Feb 2020 12:40 PM

0003-add-a-template-module-copycatting-wcs.qommon.templat.patch View (6.76 KB) Paul Marillonnet, 27 Feb 2020 02:51 PM

0003-add-a-template-module-copycatting-wcs.qommon.templat.patch View (6.76 KB) Paul Marillonnet, 09 Mar 2020 11:40 AM

0004-idp_oidc-render-templated-claims-in-user-info-creati.patch View (4.94 KB) Paul Marillonnet, 09 Mar 2020 11:40 AM

0002-idp_oidc-use-custom-widget-in-client-admin-page-3788.patch View (1.64 KB) Paul Marillonnet, 09 Mar 2020 11:40 AM

0001-forms-add-a-datalist-textinput-widget-37884.patch View (3.96 KB) Paul Marillonnet, 09 Mar 2020 11:40 AM

41665

Related issues

Related to Authentic 2 - Development #37871: permettre d'utiliser un gabarit django pour la correspondance attribut oidc / attribut authentic (côté réception) Solution déployée 22 Nov 2019

Associated revisions

Revision 307987ce (diff)
Added by Paul Marillonnet 22 days ago

forms: add a datalist textinput widget (#37884)

Revision 139e9f0e (diff)
Added by Paul Marillonnet 22 days ago

idp_oidc: use custom widget in client admin page (#37884)

Revision 6803bcd2 (diff)
Added by Paul Marillonnet 22 days ago

add a template module, copycatting wcs.qommon.template (#37884)

Revision afa8e45a (diff)
Added by Paul Marillonnet 22 days ago

idp_oidc: render templated claims in user-info-creation utilities (#37884)

History

#1 Updated by Paul Marillonnet 5 months ago

  • Related to Development #37871: permettre d'utiliser un gabarit django pour la correspondance attribut oidc / attribut authentic (côté réception) added

#2 Updated by Paul Marillonnet 5 months ago

  • Assignee set to Paul Marillonnet

#4 Updated by Paul Marillonnet about 2 months ago

Une vague idée de plan :
  • avoir une classe de champ ou de formulaire permettant, à partir d'un contexte donné, de rendre du langage de gabarit django inline, par exemple en s'inspirant de ce qui a déjà été fait dans w.c.s.
  • une courte modification du modèle de revendications OIDC pour gérer les cas où les claims sont en langage de gabarit, par exemple comme ça.
  • ajouter, quand nécessaire, quelques lignes d'appel au code de rendu de langage de gabarit au moment de l'évaluation des revendications dans authentic_idp_oidc.utils.create_user_info

#5 Updated by Paul Marillonnet about 2 months ago

Après réflexion, je me demande côté UI d'administration s'il ne serait pas préférable que les revendications dont la valeur est exprimée en langage de gabarit à partir des attributs du profil bénéficient de leur propre écran de configuration (/admin/authentic2_idp_oidc/oidcclaim/). Ça me paraît difficilement réalisable que de se baser sur le bout d'écran déjà existant en fin de page /admin/authentic2_idp_oidc/oidcclient/{id}/change/.

#6 Updated by Paul Marillonnet about 2 months ago

Voilà ce à quoi ça pourrait ressembler. Je veux bien qu'on me confirme que c'est une direction souhaitable, pendant que j'écris les tests du module nouvellement introduit authentic2.utils.template.

#7 Updated by Emmanuel Cazenave about 2 months ago

Je dirai que si le rendering du template foire il faudrait fallback sur le comportement sans template (je n'ai pas l'impression que ce soit le cas).

L'objet Template me parait un peu lourd, le code appelant ne se sert pas des variations de comportement proposées par raises et autoescape (et donc genre une simple fonction me semble faire l'affaire).

#8 Updated by Paul Marillonnet about 2 months ago

Emmanuel Cazenave a écrit :

Je dirai que si le rendering du template foire il faudrait fallback sur le comportement sans template (je n'ai pas l'impression que ce soit le cas).

Si oui c'est bien le cas. C'est du code qui est très largement inspiré (RIP Larry Tesler) de ce qui est déjà dans w.c.s.

L'objet Template me parait un peu lourd, le code appelant ne se sert pas des variations de comportement proposées par raises et autoescape (et donc genre une simple fonction me semble faire l'affaire).

J'ai volontairement laissé la généricité comme dans w.c.s. J'aime bien l'idée d'un objet qu'on initialise avec un bout de gabarit inline, pour ensuite n'effectuer le rendu que dans un second temps, avec un dictionnaire de contexte particulier. Mais si ça choque je simplifie et j'en fais un fonction, pas de souci.

#9 Updated by Emmanuel Cazenave about 2 months ago

Paul Marillonnet a écrit :

Emmanuel Cazenave a écrit :

Je dirai que si le rendering du template foire il faudrait fallback sur le comportement sans template (je n'ai pas l'impression que ce soit le cas).

Si oui c'est bien le cas.

Je n'arrive toujours pas à le voir. Soit tu te trompes, soit je ne le le vois pas parce que ce Template est vraiment trop tordu, soit je n'ai pas les yeux en face des trous. Je passe, on verra ce que dira le prochain.

#10 Updated by Frédéric Péters about 2 months ago

Après réflexion, je me demande côté UI d'administration s'il ne serait pas préférable que les revendications dont la valeur est exprimée en langage de gabarit à partir des attributs du profil bénéficient de leur propre écran de configuration (/admin/authentic2_idp_oidc/oidcclaim/). Ça me paraît difficilement réalisable que de se baser sur le bout d'écran déjà existant en fin de page /admin/authentic2_idp_oidc/oidcclient/{id}/change/.

Perso je ne capte pas le problème qu'il y a avec le bas de page actuel; pour reprendre le cas de Serghei, on écrirait le petit bout gender : {% if title "Monsieur" }male{ elif title "Madame %}female{ endif %}; alors oui ça déborde peut-être un petit peu mais la présentation pourra être améliorée quand ces pages passeront dans /manage/

#11 Updated by Paul Marillonnet about 2 months ago

  • Status changed from Solution proposée to En cours

Emmanuel Cazenave a écrit :

Soit tu te trompes, soit je ne le le vois pas parce que ce Template est vraiment trop tordu[…].

Motif suffisant pour que ça mérite une modification. Je corrige ça.

#12 Updated by Paul Marillonnet about 2 months ago

Frédéric Péters a écrit :

Perso je ne capte pas le problème qu'il y a avec le bas de page actuel; pour reprendre le cas de Serghei, on écrirait le petit bout gender : {% if title "Monsieur" }male{ elif title "Madame %}female{ endif %}; alors oui ça déborde peut-être un petit peu mais la présentation pourra être améliorée quand ces pages passeront dans /manage/

En fait, je ne voulais pas modifier le comportement du formulaire inline dans le bas de page, qui est de présenter une liste déroulante pour sélectionner un attribut. Je ne sais pas trop comment on peut avoir un comportement double, qui conserverait cette liste mais qui offrirait aussi la possibilité de saisir un bout de langage de gabarit inline. Peut-être avec un bout de JS et un peu de django-floppyforms ?

Je pense que ça rendrait possible quelque chose comme de conserver la présentation de liste déroulante de sélection de l'attribut à associer à la revendication, mais d'y ajouter une entrée "Expression de gabarit" dont la sélection par l'admin afficherait un champ texte supplémentaire.

#13 Updated by Paul Marillonnet about 2 months ago

Paul Marillonnet a écrit :

En fait, je ne voulais pas modifier le comportement du formulaire inline dans le bas de page,

Pour être plus clair, ce que je veux éviter est que pour prendre en charge le cas rare où saisir du langage de gabarit est nécessaire, on perde l'affichage de la liste déroulante qui elle est d'une grande utilité dans tous les autres cas.

#14 Updated by Frédéric Péters about 2 months ago

Je propose de ne rien modifier, simplement que là où il y avait aujourd'hui du texte, si jamais un gabarit est présent à la place, il est interprété.

#15 Updated by Paul Marillonnet about 2 months ago

41665

Frédéric Péters a écrit :

Je propose de ne rien modifier, simplement que là où il y avait aujourd'hui du texte, si jamais un gabarit est présent à la place, il est interprété.

Il n'y pas pas de texte aujourd'hui mais bien une liste déroulante (cf capture).

#16 Updated by Frédéric Péters about 2 months ago

(my bad, j'étais encore sur l'écran côté SP...)

#17 Updated by Paul Marillonnet about 1 month ago

Bon, ce qui me paraît encore le plus simple est d'écrire un widget custom ayant recours à la balise HTML5 datalist pour le rendu d'un champ en saisie libre. Sauf avis contraire je vais partir là-dessus.

#19 Updated by Frédéric Péters about 1 month ago

Perso 0003 n'est pas un bout que j'apprécie, on se trouve à chercher 'def render(' et ce bout de code n'apparait pas. Dans le même, je ne pense pas qu'il soit utile de renommer les exceptions.

#20 Updated by Paul Marillonnet about 1 month ago

Frédéric Péters a écrit :

Perso 0003 n'est pas un bout que j'apprécie, on se trouve à chercher 'def render(' et ce bout de code n'apparait pas. Dans le même, je ne pense pas qu'il soit utile de renommer les exceptions.

Ok, le patch 0003 modifié en conséquence, les autres restent inchangés.

#21 Updated by Benjamin Dauvergne about 1 month ago

0002: il y a un bug bien caché (qui était déjà dans le commit initial de Josué) :

        data = dict(get_service_attributes(self.instance.client_id)).keys()

c'est self.instance.client qu'il faut ; je verrai bien une refonte de ce formulaire de toute façon. Il y a une partie Meta à ModelForm qui permet d'indiquer le widget souhaité pour un champ : https://docs.djangoproject.com/fr/1.11/topics/forms/modelforms/#overriding-the-default-fields, ça nécessitera quand même de manipuler data dans init mais c'est plus Django-esque.

#22 Updated by Paul Marillonnet about 1 month ago

Avec un getattr pour tenter d'obtenir le client lié à la revendication, car le formulaire inline est prérempli avec des revendications associées à aucun client.

#23 Updated by Benjamin Dauvergne 22 days ago

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

C'est moche comment marchent les widgets (mais bon c'est Django). Devoir passer explicitement l'id pour la liste n'est pas terrible. Ok quand même.

#24 Updated by Paul Marillonnet 22 days ago

  • Status changed from Solution validée to Résolu (à déployer)
commit afa8e45afd26ee8403bfdd604f02fb7118afe514
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Mon Feb 17 17:14:34 2020 +0100

    idp_oidc: render templated claims in user-info-creation utilities (#37884)

commit 6803bcd2f01d872b12f174793153750dd4f56a78
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Feb 20 11:15:03 2020 +0100

    add a template module, copycatting wcs.qommon.template (#37884)

commit 139e9f0e3b29dadb307446f404ac712883bed5cd
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Thu Feb 20 15:29:10 2020 +0100

    idp_oidc: use custom widget in client admin page (#37884)

commit 307987ce5506b4e168a87b4fff42d852c9169546
Author: Paul Marillonnet <pmarillonnet@entrouvert.com>
Date:   Mon Feb 24 16:12:37 2020 +0100

    forms: add a datalist textinput widget (#37884)

#25 Updated by Frédéric Péters 20 days ago

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

Also available in: Atom PDF