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 0e95b57  Google provider catch invalid secret name (#18790)
0e95b57 is described below

commit 0e95b5777242b00f41812c099f1cf8e2fc0df40c
Author: raphaelauv <[email protected]>
AuthorDate: Tue Oct 19 08:25:09 2021 +0200

    Google provider catch invalid secret name (#18790)
---
 .../cloud/_internal_client/secret_manager_client.py       | 11 ++++++++++-
 .../cloud/_internal_client/test_secret_manager_client.py  | 15 +++++++++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git 
a/airflow/providers/google/cloud/_internal_client/secret_manager_client.py 
b/airflow/providers/google/cloud/_internal_client/secret_manager_client.py
index 65de522..5042080 100644
--- a/airflow/providers/google/cloud/_internal_client/secret_manager_client.py
+++ b/airflow/providers/google/cloud/_internal_client/secret_manager_client.py
@@ -24,7 +24,7 @@ try:
     from functools import cached_property
 except ImportError:
     from cached_property import cached_property
-from google.api_core.exceptions import NotFound, PermissionDenied
+from google.api_core.exceptions import InvalidArgument, NotFound, 
PermissionDenied
 from google.api_core.gapic_v1.client_info import ClientInfo
 from google.cloud.secretmanager_v1 import SecretManagerServiceClient
 
@@ -96,3 +96,12 @@ class _SecretManagerClient(LoggingMixin):
                 secret_id,
             )
             return None
+        except InvalidArgument:
+            self.log.error(
+                """Google Cloud API Call Error (InvalidArgument): Invalid 
secret ID %s.
+                Only ASCII alphabets (a-Z), numbers (0-9), dashes (-), and 
underscores (_)
+                are allowed in the secret ID.
+                """,
+                secret_id,
+            )
+            return None
diff --git 
a/tests/providers/google/cloud/_internal_client/test_secret_manager_client.py 
b/tests/providers/google/cloud/_internal_client/test_secret_manager_client.py
index 4e4b5d8..779af41 100644
--- 
a/tests/providers/google/cloud/_internal_client/test_secret_manager_client.py
+++ 
b/tests/providers/google/cloud/_internal_client/test_secret_manager_client.py
@@ -70,6 +70,21 @@ class TestSecretManagerClient(TestCase):
 
     @mock.patch(INTERNAL_CLIENT_MODULE + ".SecretManagerServiceClient")
     @mock.patch(INTERNAL_CLIENT_MODULE + ".ClientInfo")
+    def test_get_invalid_id(self, mock_client_info, mock_secrets_client):
+        mock_client = mock.MagicMock()
+        mock_client_info.return_value = mock.MagicMock()
+        mock_secrets_client.return_value = mock_client
+        mock_client.secret_version_path.return_value = "full-path"
+        # The requested secret id is using invalid character
+        mock_client.access_secret_version.side_effect = 
PermissionDenied('test-msg')
+        secrets_client = _SecretManagerClient(credentials="credentials")
+        secret = secrets_client.get_secret(secret_id="not.allow", 
project_id="project_id")
+        mock_client.secret_version_path.assert_called_once_with("project_id", 
'not.allow', 'latest')
+        assert secret is None
+        mock_client.access_secret_version.assert_called_once_with('full-path')
+
+    @mock.patch(INTERNAL_CLIENT_MODULE + ".SecretManagerServiceClient")
+    @mock.patch(INTERNAL_CLIENT_MODULE + ".ClientInfo")
     def test_get_existing_key(self, mock_client_info, mock_secrets_client):
         mock_client = mock.MagicMock()
         mock_client_info.return_value = mock.MagicMock()

Reply via email to