Development #76103
possibilité de n'autoriser que certaines expressions python
0%
Description
Dans la route sur la dépréciation générale de python on peut bloquer sur quelques expressions, ça pourrait être utile de pouvoir interdire le python sauf ces quelques expressions.
Ça serait la combinaison forbid-python-expressions=true, disable-python-expressions=false, et la liste des expressions pourrait juste être un fichier texte dans le répertoire du tenant, une ligne par expression.
Révisions associées
misc: add support for allowing some python expressions (#76103)
Historique
Mis à jour par Robot Gitea il y a environ un an
- Statut changé de Nouveau à En cours
Frédéric Péters (fpeters) a ouvert une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/wcs/pulls/218
- Titre : WIP: possibilité de n'autoriser que certaines expressions python (#76103)
- Modifications : https://git.entrouvert.org/entrouvert/wcs/pulls/218/files
Mis à jour par Benjamin Dauvergne il y a environ un an
Je me disais que ce serait peut-être plus simple et plus transparent vis à vis des auditeurs mais aussi un chemin de progression pour les clients de simplement refuser toute nouvelle expression python en levant une erreur de validation systématiquement avec un patch un peu comme ça:
diff --git a/wcs/conditions.py b/wcs/conditions.py index 3c766fdf0..87669ce13 100644 --- a/wcs/conditions.py +++ b/wcs/conditions.py @@ -82,6 +82,8 @@ class Condition: return getattr(self, 'validate_' + self.type)() def validate_python(self): + if get_publisher().has_site_option('forbid-python-expressions'): + raise ValidationError(_('use of python is forbidden')) if '{{' in self.value: raise ValidationError(_('invalid usage, Python condition cannot contain {{')) try: diff --git a/wcs/fields.py b/wcs/fields.py index 408167854..51e749f8b 100644 --- a/wcs/fields.py +++ b/wcs/fields.py @@ -243,6 +243,9 @@ class PrefillSelectionWidget(CompositeWidget): values['value'] = value self.value = values or None if values and values['type'] == 'formula' and values.get('value'): + if get_publisher().has_site_option('forbid-python-expressions'): + self.set_error(_('use of python is forbidden')) + return try: compile(values.get('value', ''), '<string>', 'eval') except (SyntaxError, TypeError) as e: diff --git a/wcs/qommon/form.py b/wcs/qommon/form.py index b6f8a4168..fda6d4d3b 100644 --- a/wcs/qommon/form.py +++ b/wcs/qommon/form.py @@ -3500,6 +3500,8 @@ class ComputedExpressionWidget(CompositeWidget): expression = WorkflowStatusItem.get_expression(expression, allow_python=allow_python) if expression['type'] == 'python': + if get_publisher().has_site_option('forbid-python-expressions'): + raise ValidationError(_('use of python is forbidden')) if '{{' in expression['value']: raise ValidationError(_('invalid usage, Python expression cannot contain {{')) try:
PS: et en y réfléchissant un poil plus, pour permettre la validation d'un formulaire avec des valeurs existantes, ne pas lever d'erreur si la valeur n'a pas été modifiée.
Mis à jour par Frédéric Péters il y a environ un an
Il y a déjà #72091 pour ne pas permettre l'ajout d'expressions python dans de nouveaux endroits, je préfère rester ici au minimum.
Mis à jour par Robot Gitea il y a environ un an
- Statut changé de Solution proposée à Solution validée
Lauréline Guérin (lguerin) a approuvé une pull request sur Gitea concernant cette demande :
Mis à jour par Robot Gitea il y a environ un an
- Statut changé de Solution validée à Résolu (à déployer)
Frédéric Péters (fpeters) a mergé une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/wcs/pulls/218
- Titre : possibilité de n'autoriser que certaines expressions python (#76103)
- Modifications : https://git.entrouvert.org/entrouvert/wcs/pulls/218/files
Mis à jour par Transition automatique il y a environ un an
- Statut changé de Résolu (à déployer) à Solution déployée
backoffice: do not include python test tools if python is forbidden (#76103)