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.
History
Updated by Robot Gitea 2 months ago
- Status changed from Nouveau to 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
Updated by Benjamin Dauvergne 2 months ago
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.
Updated by Frédéric Péters 2 months ago
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.
Updated by Robot Gitea 2 months ago
- Status changed from Solution proposée to Solution validée
Lauréline Guérin (lguerin) a approuvé une pull request sur Gitea concernant cette demande :
Updated by Robot Gitea 2 months ago
- Status changed from Solution validée to 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
Updated by Transition automatique 2 months ago
- Status changed from Résolu (à déployer) to Solution déployée