This is an automated email from the ASF dual-hosted git repository.

bbovenzi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new ffe3a68f9a Mask task attribute on task detail view (#31125)
ffe3a68f9a is described below

commit ffe3a68f9ada2d9d35333d6a32eac2b6ac9c70d6
Author: herlambang <[email protected]>
AuthorDate: Mon May 8 21:59:58 2023 +0700

    Mask task attribute on task detail view (#31125)
---
 airflow/www/views.py                   |  2 +-
 tests/www/views/test_views_rendered.py | 84 ++++++++++++++++++++++++++++++++++
 2 files changed, 85 insertions(+), 1 deletion(-)

diff --git a/airflow/www/views.py b/airflow/www/views.py
index 6303f8beb8..ed2990890b 100644
--- a/airflow/www/views.py
+++ b/airflow/www/views.py
@@ -1723,7 +1723,7 @@ class Airflow(AirflowBaseView):
             )
 
         task_attrs = [
-            (attr_name, attr)
+            (attr_name, secrets_masker.redact(attr, attr_name))
             for attr_name, attr in (
                 (attr_name, getattr(task, attr_name)) for attr_name in 
filter(include_task_attrs, dir(task))
             )
diff --git a/tests/www/views/test_views_rendered.py 
b/tests/www/views/test_views_rendered.py
index c54212dc9f..6a2cb9717f 100644
--- a/tests/www/views/test_views_rendered.py
+++ b/tests/www/views/test_views_rendered.py
@@ -21,6 +21,7 @@ from unittest import mock
 from urllib.parse import quote_plus
 
 import pytest
+from markupsafe import escape
 
 from airflow.models import DAG, RenderedTaskInstanceFields, Variable
 from airflow.operators.bash import BashOperator
@@ -206,3 +207,86 @@ def test_rendered_template_secret(admin_client, 
create_dag_run, task_secret):
     check_content_not_in_response("secret_unlikely_to_happen_accidentally", 
resp)
     ti.refresh_from_task(task_secret)
     assert ti.state == TaskInstanceState.QUEUED
+
+
[email protected](
+    "env, expected",
+    [
+        pytest.param(
+            {"plain_key": "plain_value"},
+            "{'plain_key': 'plain_value'}",
+            id="env-plain-key-val",
+        ),
+        pytest.param(
+            {"plain_key": Variable.setdefault("plain_var", "banana")},
+            "{'plain_key': 'banana'}",
+            id="env-plain-key-plain-var",
+        ),
+        pytest.param(
+            {"plain_key": Variable.setdefault("secret_var", "monkey")},
+            "{'plain_key': '***'}",
+            id="env-plain-key-sensitive-var",
+        ),
+        pytest.param(
+            {"plain_key": "{{ var.value.plain_var }}"},
+            "{'plain_key': '{{ var.value.plain_var }}'}",
+            id="env-plain-key-plain-tpld-var",
+        ),
+        pytest.param(
+            {"plain_key": "{{ var.value.secret_var }}"},
+            "{'plain_key': '{{ var.value.secret_var }}'}",
+            id="env-plain-key-sensitive-tpld-var",
+        ),
+        pytest.param(
+            {"secret_key": "plain_value"},
+            "{'secret_key': '***'}",
+            id="env-sensitive-key-plain-val",
+        ),
+        pytest.param(
+            {"secret_key": Variable.setdefault("plain_var", "monkey")},
+            "{'secret_key': '***'}",
+            id="env-sensitive-key-plain-var",
+        ),
+        pytest.param(
+            {"secret_key": Variable.setdefault("secret_var", "monkey")},
+            "{'secret_key': '***'}",
+            id="env-sensitive-key-sensitive-var",
+        ),
+        pytest.param(
+            {"secret_key": "{{ var.value.plain_var }}"},
+            "{'secret_key': '***'}",
+            id="env-sensitive-key-plain-tpld-var",
+        ),
+        pytest.param(
+            {"secret_key": "{{ var.value.secret_var }}"},
+            "{'secret_key': '***'}",
+            id="env-sensitive-key-sensitive-tpld-var",
+        ),
+    ],
+)
+def test_rendered_task_detail_env_secret(patch_app, admin_client, request, 
env, expected):
+    if request.node.callspec.id.endswith("-tpld-var"):
+        Variable.set("plain_var", "banana")
+        Variable.set("secret_var", "monkey")
+
+    dag: DAG = patch_app.dag_bag.get_dag("testdag")
+    task_secret: BashOperator = dag.get_task(task_id="task1")
+    task_secret.env = env
+    date = quote_plus(str(DEFAULT_DATE))
+    url = f"task?task_id=task1&dag_id=testdag&execution_date={date}"
+
+    with create_session() as session:
+        dag.create_dagrun(
+            state=DagRunState.RUNNING,
+            execution_date=DEFAULT_DATE,
+            data_interval=(DEFAULT_DATE, DEFAULT_DATE),
+            run_type=DagRunType.SCHEDULED,
+            session=session,
+        )
+
+    resp = admin_client.get(url, follow_redirects=True)
+    check_content_in_response(str(escape(expected)), resp)
+
+    if request.node.callspec.id.endswith("-tpld-var"):
+        Variable.delete("plain_var")
+        Variable.delete("secret_var")

Reply via email to