Development #37884
permettre d'utiliser un gabarit django pour la correspondance attribut oidc / attribut authentic (côté IdP)
0%
Fichiers
Demandes liées
Révisions associées
idp_oidc: use custom widget in client admin page (#37884)
add a template module, copycatting wcs.qommon.template (#37884)
idp_oidc: render templated claims in user-info-creation utilities (#37884)
Historique
Mis à jour par Paul Marillonnet il y a plus de 4 ans
- Lié à Development #37871: permettre d'utiliser un gabarit django pour la correspondance attribut oidc / attribut authentic (côté réception) ajouté
Mis à jour par Paul Marillonnet il y a environ 4 ans
- 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
Mis à jour par Paul Marillonnet il y a environ 4 ans
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/
.
Mis à jour par Paul Marillonnet il y a environ 4 ans
- Fichier 0001-idp_oidc-add-is_templated-option-to-claim-model-3788.patch 0001-idp_oidc-add-is_templated-option-to-claim-model-3788.patch ajouté
- Fichier 0002-idp_oidc-templated-claim-model-migration-file-37884.patch 0002-idp_oidc-templated-claim-model-migration-file-37884.patch ajouté
- Fichier 0003-template-initial-class-derived-from-wcs.qommon.templ.patch 0003-template-initial-class-derived-from-wcs.qommon.templ.patch ajouté
- Fichier 0004-idp_oidc-render-templated-claims-in-user-info-creati.patch 0004-idp_oidc-render-templated-claims-in-user-info-creati.patch ajouté
- Fichier 0005-idp_oidc-add-claim-admin-page-37884.patch 0005-idp_oidc-add-claim-admin-page-37884.patch ajouté
- Fichier 0006-idp_oidc-test-templated-claims-37884.patch 0006-idp_oidc-test-templated-claims-37884.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
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
.
Mis à jour par Emmanuel Cazenave il y a environ 4 ans
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).
Mis à jour par Paul Marillonnet il y a environ 4 ans
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
etautoescape
(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.
Mis à jour par Emmanuel Cazenave il y a environ 4 ans
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.
Mis à jour par Frédéric Péters il y a environ 4 ans
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/
Mis à jour par Paul Marillonnet il y a environ 4 ans
- Statut changé de Solution proposée à 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.
Mis à jour par Paul Marillonnet il y a environ 4 ans
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.
Mis à jour par Paul Marillonnet il y a environ 4 ans
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.
Mis à jour par Frédéric Péters il y a environ 4 ans
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é.
Mis à jour par Paul Marillonnet il y a environ 4 ans
- Fichier configuration_apparairage.png configuration_apparairage.png ajouté
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).
Mis à jour par Frédéric Péters il y a environ 4 ans
(my bad, j'étais encore sur l'écran côté SP...)
Mis à jour par Paul Marillonnet il y a environ 4 ans
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.
Mis à jour par Paul Marillonnet il y a environ 4 ans
- Fichier 0001-forms-add-a-datalist-textinput-widget-37884.patch 0001-forms-add-a-datalist-textinput-widget-37884.patch ajouté
- Fichier 0002-idp_oidc-use-custom-widget-in-client-admin-page-3788.patch 0002-idp_oidc-use-custom-widget-in-client-admin-page-3788.patch ajouté
- Fichier 0003-add-a-template-module-copycatting-wcs.qommon.templat.patch 0003-add-a-template-module-copycatting-wcs.qommon.templat.patch ajouté
- Fichier 0004-idp_oidc-render-templated-claims-in-user-info-creati.patch 0004-idp_oidc-render-templated-claims-in-user-info-creati.patch ajouté
- Statut changé de En cours à Solution proposée
Et ça donne quelque chose comme ça. Rien de compliqué.
Mis à jour par Frédéric Péters il y a environ 4 ans
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.
Mis à jour par Paul Marillonnet il y a environ 4 ans
- Fichier 0003-add-a-template-module-copycatting-wcs.qommon.templat.patch 0003-add-a-template-module-copycatting-wcs.qommon.templat.patch ajouté
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.
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
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.
Mis à jour par Paul Marillonnet il y a environ 4 ans
- Fichier 0004-idp_oidc-render-templated-claims-in-user-info-creati.patch 0004-idp_oidc-render-templated-claims-in-user-info-creati.patch ajouté
- Fichier 0003-add-a-template-module-copycatting-wcs.qommon.templat.patch 0003-add-a-template-module-copycatting-wcs.qommon.templat.patch ajouté
- Fichier 0002-idp_oidc-use-custom-widget-in-client-admin-page-3788.patch 0002-idp_oidc-use-custom-widget-in-client-admin-page-3788.patch ajouté
- Fichier 0001-forms-add-a-datalist-textinput-widget-37884.patch 0001-forms-add-a-datalist-textinput-widget-37884.patch ajouté
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.
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Statut changé de Solution proposée à 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.
Mis à jour par Paul Marillonnet il y a environ 4 ans
- Statut changé de Solution validée à 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)
Mis à jour par Frédéric Péters il y a environ 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
forms: add a datalist textinput widget (#37884)