Project

General

Profile

Development #76103

possibilité de n'autoriser que certaines expressions python

Added by Frédéric Péters 2 months ago. Updated 2 months ago.

Status:
Fermé
Priority:
Normal
Target version:
-
Start date:
01 April 2023
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:
No

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

#1

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 :

#2

Updated by Robot Gitea 2 months ago

  • Status changed from En cours to Solution proposée
#3

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.

#4

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.

#5

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 :

#6

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 :

#7

Updated by Transition automatique 2 months ago

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

Updated by Transition automatique 6 days ago

Automatic expiration

Also available in: Atom PDF