From ff45853c7ed449572614a9253c027cb77bd37ca8 Mon Sep 17 00:00:00 2001 From: Raj Tekal Date: Mon, 15 Apr 2024 12:05:27 -0400 Subject: [PATCH 01/11] Reason: https://cwe.mitre.org/data/definitions/327.html --- .../datahub/graphql/resolvers/ingest/secret/SecretUtils.java | 4 ++-- .../io/datahubproject/metadata/services/SecretService.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/ingest/secret/SecretUtils.java b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/ingest/secret/SecretUtils.java index 225a5801adec9..87a3e5cb79ebf 100644 --- a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/ingest/secret/SecretUtils.java +++ b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/ingest/secret/SecretUtils.java @@ -25,7 +25,7 @@ static String encrypt(String value, String secret) { } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } - Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); return Base64.getEncoder() .encodeToString(cipher.doFinal(value.getBytes(StandardCharsets.UTF_8))); @@ -48,7 +48,7 @@ static String decrypt(String encryptedValue, String secret) { } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } - Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); + Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, secretKey); return new String(cipher.doFinal(Base64.getDecoder().decode(encryptedValue))); } catch (Exception e) { diff --git a/metadata-operation-context/src/main/java/io/datahubproject/metadata/services/SecretService.java b/metadata-operation-context/src/main/java/io/datahubproject/metadata/services/SecretService.java index bea03235abfb4..48e7f80173cfd 100644 --- a/metadata-operation-context/src/main/java/io/datahubproject/metadata/services/SecretService.java +++ b/metadata-operation-context/src/main/java/io/datahubproject/metadata/services/SecretService.java @@ -50,7 +50,7 @@ public String encrypt(String value) { } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } - Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); return _encoder.encodeToString(cipher.doFinal(value.getBytes(StandardCharsets.UTF_8))); } catch (Exception e) { @@ -72,7 +72,7 @@ public String decrypt(String encryptedValue) { } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } - Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); + Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, secretKey); return new String(cipher.doFinal(_decoder.decode(encryptedValue))); } catch (Exception e) { From 8b1e9aa4e7a1a242c1476ff41ef36849da4b18f1 Mon Sep 17 00:00:00 2001 From: Raj Tekal Date: Mon, 15 Apr 2024 12:10:38 -0400 Subject: [PATCH 02/11] Reason: https://cwe.mitre.org/data/definitions/338.html --- .../tests/cypress/cypress/e2e/mutations/dataset_ownership.js | 2 +- .../tests/cypress/cypress/e2e/mutations/ingestion_source.js | 2 +- .../tests/cypress/cypress/e2e/mutations/managing_secrets.js | 2 +- .../tests/cypress/cypress/e2e/settings/managing_groups.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/smoke-test/tests/cypress/cypress/e2e/mutations/dataset_ownership.js b/smoke-test/tests/cypress/cypress/e2e/mutations/dataset_ownership.js index 552c3d460ade9..d8af3c6657ae0 100644 --- a/smoke-test/tests/cypress/cypress/e2e/mutations/dataset_ownership.js +++ b/smoke-test/tests/cypress/cypress/e2e/mutations/dataset_ownership.js @@ -1,4 +1,4 @@ -const test_id = Math.floor(Math.random() * 100000); +const test_id = crypto.getRandomValues(new Uint32Array(1))[0]; const username = `Example Name ${test_id}`; const email = `example${test_id}@example.com`; const password = "Example password"; diff --git a/smoke-test/tests/cypress/cypress/e2e/mutations/ingestion_source.js b/smoke-test/tests/cypress/cypress/e2e/mutations/ingestion_source.js index 6c5dd77810644..20fa4b23ec83f 100644 --- a/smoke-test/tests/cypress/cypress/e2e/mutations/ingestion_source.js +++ b/smoke-test/tests/cypress/cypress/e2e/mutations/ingestion_source.js @@ -1,5 +1,5 @@ -const number = Math.floor(Math.random() * 100000); +const number = crypto.getRandomValues(new Uint32Array(1))[0]; const accound_id = `account${number}`; const warehouse_id = `warehouse${number}`; const username = `user${number}`; diff --git a/smoke-test/tests/cypress/cypress/e2e/mutations/managing_secrets.js b/smoke-test/tests/cypress/cypress/e2e/mutations/managing_secrets.js index 77fd63b9cae02..81446f925947b 100644 --- a/smoke-test/tests/cypress/cypress/e2e/mutations/managing_secrets.js +++ b/smoke-test/tests/cypress/cypress/e2e/mutations/managing_secrets.js @@ -1,4 +1,4 @@ -const number = Math.floor(Math.random() * 100000); +const number = crypto.getRandomValues(new Uint32Array(1))[0]; const accound_id = `account${number}`; const warehouse_id = `warehouse${number}`; const username = `user${number}`; diff --git a/smoke-test/tests/cypress/cypress/e2e/settings/managing_groups.js b/smoke-test/tests/cypress/cypress/e2e/settings/managing_groups.js index d9f69cd9a5ec4..3ccaa48774d14 100644 --- a/smoke-test/tests/cypress/cypress/e2e/settings/managing_groups.js +++ b/smoke-test/tests/cypress/cypress/e2e/settings/managing_groups.js @@ -1,4 +1,4 @@ -const test_id = Math.floor(Math.random() * 100000); +const test_id = crypto.getRandomValues(new Uint32Array(1))[0]; const username = `Example Name ${test_id}`; const email = `example${test_id}@example.com` const password = "Example password" From f8224766d14f9b12a66713793d7bb0839fdd6962 Mon Sep 17 00:00:00 2001 From: Raj Tekal Date: Mon, 15 Apr 2024 14:32:36 -0400 Subject: [PATCH 03/11] Typo in regular expression --- metadata-ingestion/src/datahub/ingestion/source/mode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata-ingestion/src/datahub/ingestion/source/mode.py b/metadata-ingestion/src/datahub/ingestion/source/mode.py index 8dcdc5eeef404..1fed07488ac0f 100644 --- a/metadata-ingestion/src/datahub/ingestion/source/mode.py +++ b/metadata-ingestion/src/datahub/ingestion/source/mode.py @@ -593,7 +593,7 @@ def _replace_definitions(self, raw_query: str) -> str: def _parse_definition_name(self, definition_variable: str) -> Tuple[str, str]: name, alias = "", "" # i.e '{{ @join_on_definition as alias}}' - name_match = re.findall("@[a-zA-z]+", definition_variable) + name_match = re.findall("@[a-zA-Z]+", definition_variable) if len(name_match): name = name_match[0][1:] alias_match = re.findall( From 06216026dc52b3e9a199b20f50e4a4b1369783af Mon Sep 17 00:00:00 2001 From: Raj Tekal Date: Mon, 15 Apr 2024 14:35:44 -0400 Subject: [PATCH 04/11] Resolves: https://cwe.mitre.org/data/definitions/20.html --- .../src/app/entity/shared/ExternalUrlButton.tsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/datahub-web-react/src/app/entity/shared/ExternalUrlButton.tsx b/datahub-web-react/src/app/entity/shared/ExternalUrlButton.tsx index dce74c02cdb34..677468c6435fa 100644 --- a/datahub-web-react/src/app/entity/shared/ExternalUrlButton.tsx +++ b/datahub-web-react/src/app/entity/shared/ExternalUrlButton.tsx @@ -1,10 +1,11 @@ import React from 'react'; import { EntityType } from '../../../types.generated'; import analytics, { EventType, EntityActionType } from '../../analytics'; +import { message } from 'antd'; import UrlButton from './UrlButton'; -const GITHUB_LINK = 'github.com'; -const GITHUB = 'GitHub'; +const GITHUB = 'github.com'; +const ALLOWED_GITHUB_HOSTS = ['github.com', 'www.github.com']; interface Props { externalUrl: string; @@ -24,8 +25,13 @@ export default function ExternalUrlButton({ externalUrl, platformName, entityTyp } let displayedName = platformName; - if (externalUrl.toLocaleLowerCase().includes(GITHUB_LINK)) { - displayedName = GITHUB; + try { + const host = new URL(externalUrl).host; + if (ALLOWED_GITHUB_HOSTS.includes(host.toLocaleLowerCase())) { + displayedName = GITHUB; + } + } catch(e) { + message.error({ content: `Not a valid URL! \n ${e.message || ''}`, duration: 3 }); } return ( From 454a90b3bee4bcbd9a0f49b082fbac9a00dfa850 Mon Sep 17 00:00:00 2001 From: Raj Tekal Date: Mon, 15 Apr 2024 14:49:35 -0400 Subject: [PATCH 05/11] Do not have passwords --- metadata-ingestion/docs/sources/presto/presto_recipe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata-ingestion/docs/sources/presto/presto_recipe.yml b/metadata-ingestion/docs/sources/presto/presto_recipe.yml index 38697719e5e80..8afefaa760a74 100644 --- a/metadata-ingestion/docs/sources/presto/presto_recipe.yml +++ b/metadata-ingestion/docs/sources/presto/presto_recipe.yml @@ -7,7 +7,7 @@ source: # Credentials username: foo - password: datahub + password: password sink: # sink configs \ No newline at end of file From c6f702a9cbcbe9e7fa10eb96148fe455914e3157 Mon Sep 17 00:00:00 2001 From: Raj Tekal Date: Mon, 15 Apr 2024 14:50:49 -0400 Subject: [PATCH 06/11] No password in sources --- metadata-ingestion/docs/sources/trino/trino_recipe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata-ingestion/docs/sources/trino/trino_recipe.yml b/metadata-ingestion/docs/sources/trino/trino_recipe.yml index 06158669143a9..378dfa766f42b 100644 --- a/metadata-ingestion/docs/sources/trino/trino_recipe.yml +++ b/metadata-ingestion/docs/sources/trino/trino_recipe.yml @@ -7,7 +7,7 @@ source: # Credentials username: foo - password: datahub + password: password # If you need to connect to Trino over http and not https, uncomment this section. # options: From 06acc855c2d25c62edd27d06a1105c76b9729d55 Mon Sep 17 00:00:00 2001 From: Raj Tekal Date: Mon, 15 Apr 2024 14:53:10 -0400 Subject: [PATCH 07/11] Use security verify given in config --- metadata-ingestion/src/datahub/ingestion/source/pulsar.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/metadata-ingestion/src/datahub/ingestion/source/pulsar.py b/metadata-ingestion/src/datahub/ingestion/source/pulsar.py index c400705ac217b..00a49cd897d6f 100644 --- a/metadata-ingestion/src/datahub/ingestion/source/pulsar.py +++ b/metadata-ingestion/src/datahub/ingestion/source/pulsar.py @@ -116,7 +116,7 @@ def __init__(self, config: PulsarSourceConfig, ctx: PipelineContext): f"{self.config.issuer_url}/.well-known/openid-configuration" ) oid_config_response = requests.get( - oid_config_url, verify=False, allow_redirects=False + oid_config_url, verify=self.session.verify, allow_redirects=False ) if oid_config_response: @@ -163,7 +163,7 @@ def get_access_token(self) -> str: token_response = requests.post( url=token_endpoint, data=data, - verify=False, + verify=self.session.verify, allow_redirects=False, auth=( self.config.client_id, From 38a6ca134286296b4123357225856f0483241cd6 Mon Sep 17 00:00:00 2001 From: Raj Tekal Date: Mon, 15 Apr 2024 14:54:46 -0400 Subject: [PATCH 08/11] Ensure secure request --- .../ingestion/source/powerbi_report_server/report_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata-ingestion/src/datahub/ingestion/source/powerbi_report_server/report_server.py b/metadata-ingestion/src/datahub/ingestion/source/powerbi_report_server/report_server.py index 80367558251a5..b793929faa691 100644 --- a/metadata-ingestion/src/datahub/ingestion/source/powerbi_report_server/report_server.py +++ b/metadata-ingestion/src/datahub/ingestion/source/powerbi_report_server/report_server.py @@ -157,7 +157,7 @@ def requests_get(self, url_http: str, url_https: str, content_type: str) -> Any: response = requests.get( url=url_https, auth=self.get_auth_credentials, - verify=False, + verify=True, ) except ConnectionError: LOGGER.info("Request to Report URL={}".format(url_http)) From 72e5d0e1d625e93f480afc969360ef7e3fa2496d Mon Sep 17 00:00:00 2001 From: Raj Tekal Date: Mon, 15 Apr 2024 15:00:08 -0400 Subject: [PATCH 09/11] Resolves: https://cwe.mitre.org/data/definitions/116.html --- .../dataset/profile/schema/utils/translateFieldPathSegment.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datahub-web-react/src/app/entity/dataset/profile/schema/utils/translateFieldPathSegment.tsx b/datahub-web-react/src/app/entity/dataset/profile/schema/utils/translateFieldPathSegment.tsx index 7153a38a32c3b..734580eb26f5d 100644 --- a/datahub-web-react/src/app/entity/dataset/profile/schema/utils/translateFieldPathSegment.tsx +++ b/datahub-web-react/src/app/entity/dataset/profile/schema/utils/translateFieldPathSegment.tsx @@ -28,7 +28,7 @@ export default function translateFieldPathSegment(fieldPathSegment, i, fieldPath // structs that qualify a union are represented as [union]union_field.[type=QualifiedStruct].qualified_struct_field // we convert into union_field. (QualifiedStruct) qualified_struct_field if (fieldPathSegment.startsWith('[type=') && fieldPathSegment.endsWith(']')) { - const typeName = fieldPathSegment.replace('[type=', '').replace(']', ''); + const typeName = fieldPathSegment.replace(/\[type=/g, '').replace(/\]/g, ''); // if the qualified struct is the last element, just show the qualified struct if (i === fieldPathParts.length - 1) { return ` ${typeName}`; From 708f5388dcd542af004547d9e16e9e29a2c541fb Mon Sep 17 00:00:00 2001 From: Raj Tekal Date: Thu, 18 Apr 2024 15:19:04 -0400 Subject: [PATCH 10/11] Reverted some commits since they are coming from #10296 --- .../resolvers/ingest/secret/SecretUtils.java | 4 ++-- .../schema/utils/translateFieldPathSegment.tsx | 2 +- .../src/app/entity/shared/ExternalUrlButton.tsx | 14 ++++---------- .../metadata/services/SecretService.java | 4 ++-- .../cypress/e2e/mutations/dataset_ownership.js | 2 +- .../cypress/e2e/mutations/ingestion_source.js | 2 +- .../cypress/e2e/mutations/managing_secrets.js | 2 +- .../cypress/e2e/settings/managing_groups.js | 2 +- 8 files changed, 13 insertions(+), 19 deletions(-) diff --git a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/ingest/secret/SecretUtils.java b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/ingest/secret/SecretUtils.java index 87a3e5cb79ebf..225a5801adec9 100644 --- a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/ingest/secret/SecretUtils.java +++ b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/ingest/secret/SecretUtils.java @@ -25,7 +25,7 @@ static String encrypt(String value, String secret) { } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } - Cipher cipher = Cipher.getInstance("AES"); + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); return Base64.getEncoder() .encodeToString(cipher.doFinal(value.getBytes(StandardCharsets.UTF_8))); @@ -48,7 +48,7 @@ static String decrypt(String encryptedValue, String secret) { } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } - Cipher cipher = Cipher.getInstance("AES"); + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); cipher.init(Cipher.DECRYPT_MODE, secretKey); return new String(cipher.doFinal(Base64.getDecoder().decode(encryptedValue))); } catch (Exception e) { diff --git a/datahub-web-react/src/app/entity/dataset/profile/schema/utils/translateFieldPathSegment.tsx b/datahub-web-react/src/app/entity/dataset/profile/schema/utils/translateFieldPathSegment.tsx index 734580eb26f5d..7153a38a32c3b 100644 --- a/datahub-web-react/src/app/entity/dataset/profile/schema/utils/translateFieldPathSegment.tsx +++ b/datahub-web-react/src/app/entity/dataset/profile/schema/utils/translateFieldPathSegment.tsx @@ -28,7 +28,7 @@ export default function translateFieldPathSegment(fieldPathSegment, i, fieldPath // structs that qualify a union are represented as [union]union_field.[type=QualifiedStruct].qualified_struct_field // we convert into union_field. (QualifiedStruct) qualified_struct_field if (fieldPathSegment.startsWith('[type=') && fieldPathSegment.endsWith(']')) { - const typeName = fieldPathSegment.replace(/\[type=/g, '').replace(/\]/g, ''); + const typeName = fieldPathSegment.replace('[type=', '').replace(']', ''); // if the qualified struct is the last element, just show the qualified struct if (i === fieldPathParts.length - 1) { return ` ${typeName}`; diff --git a/datahub-web-react/src/app/entity/shared/ExternalUrlButton.tsx b/datahub-web-react/src/app/entity/shared/ExternalUrlButton.tsx index 677468c6435fa..dce74c02cdb34 100644 --- a/datahub-web-react/src/app/entity/shared/ExternalUrlButton.tsx +++ b/datahub-web-react/src/app/entity/shared/ExternalUrlButton.tsx @@ -1,11 +1,10 @@ import React from 'react'; import { EntityType } from '../../../types.generated'; import analytics, { EventType, EntityActionType } from '../../analytics'; -import { message } from 'antd'; import UrlButton from './UrlButton'; -const GITHUB = 'github.com'; -const ALLOWED_GITHUB_HOSTS = ['github.com', 'www.github.com']; +const GITHUB_LINK = 'github.com'; +const GITHUB = 'GitHub'; interface Props { externalUrl: string; @@ -25,13 +24,8 @@ export default function ExternalUrlButton({ externalUrl, platformName, entityTyp } let displayedName = platformName; - try { - const host = new URL(externalUrl).host; - if (ALLOWED_GITHUB_HOSTS.includes(host.toLocaleLowerCase())) { - displayedName = GITHUB; - } - } catch(e) { - message.error({ content: `Not a valid URL! \n ${e.message || ''}`, duration: 3 }); + if (externalUrl.toLocaleLowerCase().includes(GITHUB_LINK)) { + displayedName = GITHUB; } return ( diff --git a/metadata-operation-context/src/main/java/io/datahubproject/metadata/services/SecretService.java b/metadata-operation-context/src/main/java/io/datahubproject/metadata/services/SecretService.java index 48e7f80173cfd..bea03235abfb4 100644 --- a/metadata-operation-context/src/main/java/io/datahubproject/metadata/services/SecretService.java +++ b/metadata-operation-context/src/main/java/io/datahubproject/metadata/services/SecretService.java @@ -50,7 +50,7 @@ public String encrypt(String value) { } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } - Cipher cipher = Cipher.getInstance("AES"); + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); return _encoder.encodeToString(cipher.doFinal(value.getBytes(StandardCharsets.UTF_8))); } catch (Exception e) { @@ -72,7 +72,7 @@ public String decrypt(String encryptedValue) { } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } - Cipher cipher = Cipher.getInstance("AES"); + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); cipher.init(Cipher.DECRYPT_MODE, secretKey); return new String(cipher.doFinal(_decoder.decode(encryptedValue))); } catch (Exception e) { diff --git a/smoke-test/tests/cypress/cypress/e2e/mutations/dataset_ownership.js b/smoke-test/tests/cypress/cypress/e2e/mutations/dataset_ownership.js index d8af3c6657ae0..552c3d460ade9 100644 --- a/smoke-test/tests/cypress/cypress/e2e/mutations/dataset_ownership.js +++ b/smoke-test/tests/cypress/cypress/e2e/mutations/dataset_ownership.js @@ -1,4 +1,4 @@ -const test_id = crypto.getRandomValues(new Uint32Array(1))[0]; +const test_id = Math.floor(Math.random() * 100000); const username = `Example Name ${test_id}`; const email = `example${test_id}@example.com`; const password = "Example password"; diff --git a/smoke-test/tests/cypress/cypress/e2e/mutations/ingestion_source.js b/smoke-test/tests/cypress/cypress/e2e/mutations/ingestion_source.js index 20fa4b23ec83f..6c5dd77810644 100644 --- a/smoke-test/tests/cypress/cypress/e2e/mutations/ingestion_source.js +++ b/smoke-test/tests/cypress/cypress/e2e/mutations/ingestion_source.js @@ -1,5 +1,5 @@ -const number = crypto.getRandomValues(new Uint32Array(1))[0]; +const number = Math.floor(Math.random() * 100000); const accound_id = `account${number}`; const warehouse_id = `warehouse${number}`; const username = `user${number}`; diff --git a/smoke-test/tests/cypress/cypress/e2e/mutations/managing_secrets.js b/smoke-test/tests/cypress/cypress/e2e/mutations/managing_secrets.js index 81446f925947b..77fd63b9cae02 100644 --- a/smoke-test/tests/cypress/cypress/e2e/mutations/managing_secrets.js +++ b/smoke-test/tests/cypress/cypress/e2e/mutations/managing_secrets.js @@ -1,4 +1,4 @@ -const number = crypto.getRandomValues(new Uint32Array(1))[0]; +const number = Math.floor(Math.random() * 100000); const accound_id = `account${number}`; const warehouse_id = `warehouse${number}`; const username = `user${number}`; diff --git a/smoke-test/tests/cypress/cypress/e2e/settings/managing_groups.js b/smoke-test/tests/cypress/cypress/e2e/settings/managing_groups.js index 3ccaa48774d14..d9f69cd9a5ec4 100644 --- a/smoke-test/tests/cypress/cypress/e2e/settings/managing_groups.js +++ b/smoke-test/tests/cypress/cypress/e2e/settings/managing_groups.js @@ -1,4 +1,4 @@ -const test_id = crypto.getRandomValues(new Uint32Array(1))[0]; +const test_id = Math.floor(Math.random() * 100000); const username = `Example Name ${test_id}`; const email = `example${test_id}@example.com` const password = "Example password" From 6c5c95ad26bb42dcb3ffb45fa789d4ce9a2ada58 Mon Sep 17 00:00:00 2001 From: Raj Tekal Date: Thu, 18 Apr 2024 15:22:51 -0400 Subject: [PATCH 11/11] Revert as the commit comes from #10296 --- metadata-ingestion/src/datahub/ingestion/source/mode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata-ingestion/src/datahub/ingestion/source/mode.py b/metadata-ingestion/src/datahub/ingestion/source/mode.py index 1fed07488ac0f..8dcdc5eeef404 100644 --- a/metadata-ingestion/src/datahub/ingestion/source/mode.py +++ b/metadata-ingestion/src/datahub/ingestion/source/mode.py @@ -593,7 +593,7 @@ def _replace_definitions(self, raw_query: str) -> str: def _parse_definition_name(self, definition_variable: str) -> Tuple[str, str]: name, alias = "", "" # i.e '{{ @join_on_definition as alias}}' - name_match = re.findall("@[a-zA-Z]+", definition_variable) + name_match = re.findall("@[a-zA-z]+", definition_variable) if len(name_match): name = name_match[0][1:] alias_match = re.findall(