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

uranusjr 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 971e3226dc Strip markup from app_name if instance_name_has_markup = 
True (#28894)
971e3226dc is described below

commit 971e3226dc3ca43900f0b79c42afffb14c59d691
Author: Adrian Castro <[email protected]>
AuthorDate: Thu Mar 16 12:34:39 2023 +0100

    Strip markup from app_name if instance_name_has_markup = True (#28894)
    
    Co-authored-by: Tzu-ping Chung <[email protected]>
---
 airflow/www/app.py                 | 11 ++++++++++-
 tests/www/views/test_views_base.py | 21 +++++++++++++++------
 2 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/airflow/www/app.py b/airflow/www/app.py
index 7d7a62a72f..abcf76ec0d 100644
--- a/airflow/www/app.py
+++ b/airflow/www/app.py
@@ -25,6 +25,7 @@ from flask import Flask
 from flask_appbuilder import SQLA
 from flask_caching import Cache
 from flask_wtf.csrf import CSRFProtect
+from markupsafe import Markup
 from sqlalchemy.engine.url import make_url
 
 from airflow import settings
@@ -81,10 +82,18 @@ def create_app(config=None, testing=False):
 
     flask_app.config["PERMANENT_SESSION_LIFETIME"] = 
timedelta(minutes=settings.get_session_lifetime_config())
     flask_app.config.from_pyfile(settings.WEBSERVER_CONFIG, silent=True)
-    flask_app.config["APP_NAME"] = conf.get(section="webserver", 
key="instance_name", fallback="Airflow")
     flask_app.config["TESTING"] = testing
     flask_app.config["SQLALCHEMY_DATABASE_URI"] = conf.get("database", 
"SQL_ALCHEMY_CONN")
 
+    instance_name = conf.get(section="webserver", key="instance_name", 
fallback="Airflow")
+    instance_name_has_markup = conf.getboolean(
+        section="webserver", key="instance_name_has_markup", fallback=False
+    )
+    if instance_name_has_markup:
+        instance_name = Markup(instance_name).striptags()
+
+    flask_app.config["APP_NAME"] = instance_name
+
     url = make_url(flask_app.config["SQLALCHEMY_DATABASE_URI"])
     if url.drivername == "sqlite" and url.database and not 
url.database.startswith("/"):
         raise AirflowConfigException(
diff --git a/tests/www/views/test_views_base.py 
b/tests/www/views/test_views_base.py
index 3258b61cc6..10eb3d5ea4 100644
--- a/tests/www/views/test_views_base.py
+++ b/tests/www/views/test_views_base.py
@@ -25,6 +25,7 @@ import pytest
 from airflow.jobs.base_job import BaseJob
 from airflow.utils import timezone
 from airflow.utils.session import create_session
+from airflow.www import app as application
 from tests.test_utils.asserts import assert_queries_count
 from tests.test_utils.config import conf_vars
 from tests.test_utils.www import check_content_in_response, 
check_content_not_in_response
@@ -400,12 +401,20 @@ def test_page_instance_name_xss_prevention(admin_client):
         check_content_not_in_response(xss_string, resp)
 
 
-@conf_vars(
-    {
-        ("webserver", "instance_name"): "<b>Bold Site Title Test</b>",
-        ("webserver", "instance_name_has_markup"): "True",
-    }
-)
+instance_name_with_markup_conf = {
+    ("webserver", "instance_name"): "<b>Bold Site Title Test</b>",
+    ("webserver", "instance_name_has_markup"): "True",
+}
+
+
+@conf_vars(instance_name_with_markup_conf)
 def test_page_instance_name_with_markup(admin_client):
     resp = admin_client.get("home", follow_redirects=True)
     check_content_in_response("<b>Bold Site Title Test</b>", resp)
+    check_content_not_in_response("&lt;b&gt;Bold Site Title Test&lt;/b&gt;", 
resp)
+
+
+@conf_vars(instance_name_with_markup_conf)
+def test_page_instance_name_with_markup_title():
+    appbuilder = application.create_app(testing=True).appbuilder
+    assert appbuilder.app_name == "Bold Site Title Test"

Reply via email to