diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js index 0f14a4dfa..12e35cfea 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js @@ -1,4 +1,6 @@ import React from 'react'; +import SensitiveFieldWarning from 'components/SensitiveFieldWarning'; +import { useDetectSensitiveField } from 'hooks/useDetectSensitiveField'; import get from 'lodash/get'; import { useTheme } from 'providers/Theme'; import { useDispatch } from 'react-redux'; @@ -12,6 +14,8 @@ const AwsV4Auth = ({ collection }) => { const { storedTheme } = useTheme(); const awsv4Auth = get(collection, 'root.request.auth.awsv4', {}); + const { isSensitive } = useDetectSensitiveField(collection); + const { showWarning, warningMessage } = isSensitive(awsv4Auth?.secretAccessKey); const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); @@ -131,7 +135,7 @@ const AwsV4Auth = ({ collection }) => { -
+
{ collection={collection} isSecret={true} /> + {showWarning && }
diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/BasicAuth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/BasicAuth/index.js index 9ea532646..d0cf9d722 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/BasicAuth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/BasicAuth/index.js @@ -1,4 +1,6 @@ import React from 'react'; +import SensitiveFieldWarning from 'components/SensitiveFieldWarning'; +import { useDetectSensitiveField } from 'hooks/useDetectSensitiveField'; import get from 'lodash/get'; import { useTheme } from 'providers/Theme'; import { useDispatch } from 'react-redux'; @@ -12,6 +14,8 @@ const BasicAuth = ({ collection }) => { const { storedTheme } = useTheme(); const basicAuth = get(collection, 'root.request.auth.basic', {}); + const { isSensitive } = useDetectSensitiveField(collection); + const { showWarning, warningMessage } = isSensitive(basicAuth?.password); const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); @@ -55,7 +59,7 @@ const BasicAuth = ({ collection }) => {
-
+
{ collection={collection} isSecret={true} /> + {showWarning && }
); diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/BearerAuth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/BearerAuth/index.js index 82f8be12c..788182479 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/BearerAuth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/BearerAuth/index.js @@ -1,4 +1,6 @@ import React from 'react'; +import SensitiveFieldWarning from 'components/SensitiveFieldWarning'; +import { useDetectSensitiveField } from 'hooks/useDetectSensitiveField'; import get from 'lodash/get'; import { useTheme } from 'providers/Theme'; import { useDispatch } from 'react-redux'; @@ -12,6 +14,8 @@ const BearerAuth = ({ collection }) => { const { storedTheme } = useTheme(); const bearerToken = get(collection, 'root.request.auth.bearer.token', ''); + const { isSensitive } = useDetectSensitiveField(collection); + const { showWarning, warningMessage } = isSensitive(bearerToken); const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); @@ -30,7 +34,7 @@ const BearerAuth = ({ collection }) => { return ( -
+
{ collection={collection} isSecret={true} /> + {showWarning && }
); diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js index 582b17b82..22981f56b 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js @@ -1,4 +1,6 @@ import React from 'react'; +import SensitiveFieldWarning from 'components/SensitiveFieldWarning'; +import { useDetectSensitiveField } from 'hooks/useDetectSensitiveField'; import get from 'lodash/get'; import { useTheme } from 'providers/Theme'; import { useDispatch } from 'react-redux'; @@ -12,6 +14,8 @@ const DigestAuth = ({ collection }) => { const { storedTheme } = useTheme(); const digestAuth = get(collection, 'root.request.auth.digest', {}); + const { isSensitive } = useDetectSensitiveField(collection); + const { showWarning, warningMessage } = isSensitive(digestAuth?.password); const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); @@ -55,7 +59,7 @@ const DigestAuth = ({ collection }) => {
-
+
{ collection={collection} isSecret={true} /> + {showWarning && }
); diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/NTLMAuth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/NTLMAuth/index.js index 173c99a12..38a9c18f0 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/NTLMAuth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/NTLMAuth/index.js @@ -1,4 +1,6 @@ import React from 'react'; +import SensitiveFieldWarning from 'components/SensitiveFieldWarning'; +import { useDetectSensitiveField } from 'hooks/useDetectSensitiveField'; import get from 'lodash/get'; import { useTheme } from 'providers/Theme'; import { useDispatch } from 'react-redux'; @@ -18,6 +20,8 @@ const NTLMAuth = ({ collection }) => { const { storedTheme } = useTheme(); const ntlmAuth = get(collection, 'root.request.auth.ntlm', {}); + const { isSensitive } = useDetectSensitiveField(collection); + const { showWarning, warningMessage } = isSensitive(ntlmAuth?.password); const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); @@ -82,7 +86,7 @@ const NTLMAuth = ({ collection }) => {
-
+
{ collection={collection} isSecret={true} /> + {showWarning && }
diff --git a/packages/bruno-app/src/components/CollectionSettings/Auth/WsseAuth/index.js b/packages/bruno-app/src/components/CollectionSettings/Auth/WsseAuth/index.js index 2e1a2c65c..226cedd7b 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Auth/WsseAuth/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Auth/WsseAuth/index.js @@ -1,4 +1,6 @@ import React from 'react'; +import SensitiveFieldWarning from 'components/SensitiveFieldWarning'; +import { useDetectSensitiveField } from 'hooks/useDetectSensitiveField'; import get from 'lodash/get'; import { useTheme } from 'providers/Theme'; import { useDispatch } from 'react-redux'; @@ -12,6 +14,8 @@ const WsseAuth = ({ collection }) => { const { storedTheme } = useTheme(); const wsseAuth = get(collection, 'root.request.auth.wsse', {}); + const { isSensitive } = useDetectSensitiveField(collection); + const { showWarning, warningMessage } = isSensitive(wsseAuth?.password); const handleSave = () => dispatch(saveCollectionRoot(collection.uid)); @@ -55,14 +59,16 @@ const WsseAuth = ({ collection }) => {
-
+
handlePasswordChange(val)} collection={collection} + isSecret={true} /> + {showWarning && }
); diff --git a/packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/EnvironmentDetails/EnvironmentVariables/index.js b/packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/EnvironmentDetails/EnvironmentVariables/index.js index 27cab21ce..5ba3b0797 100644 --- a/packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/EnvironmentDetails/EnvironmentVariables/index.js +++ b/packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/EnvironmentDetails/EnvironmentVariables/index.js @@ -1,5 +1,6 @@ import React, { useRef, useEffect, useMemo } from 'react'; import cloneDeep from 'lodash/cloneDeep'; +import { get } from 'lodash'; import { IconTrash, IconAlertCircle, IconDeviceFloppy, IconRefresh, IconCircleCheck } from '@tabler/icons'; import { useTheme } from 'providers/Theme'; import { useDispatch, useSelector } from 'react-redux'; @@ -14,8 +15,7 @@ import { saveEnvironment } from 'providers/ReduxStore/slices/collections/actions import toast from 'react-hot-toast'; import { Tooltip } from 'react-tooltip'; import SensitiveFieldWarning from 'components/SensitiveFieldWarning'; -import { getGlobalEnvironmentVariables, flattenItems } from 'utils/collections'; -import { isItemARequest } from 'utils/collections'; +import { getGlobalEnvironmentVariables, flattenItems, isItemARequest } from 'utils/collections'; import { sensitiveFields } from './constants'; const EnvironmentVariables = ({ environment, collection, setIsModified, originalEnvironmentVariables, onClose }) => { @@ -39,19 +39,35 @@ const EnvironmentVariables = ({ environment, collection, setIsModified, original return result; } const varNames = new Set(nonSecretVars.map((v) => v.name)); + + const checkSensitiveField = (obj, fieldPath) => { + const value = get(obj, fieldPath); + if (typeof value === 'string') { + varNames.forEach((varName) => { + if (new RegExp(`\{\{\s*${varName}\s*\}\}`).test(value)) { + result[varName] = true; + } + }); + } + }; + + const getObjectToProcess = (item) => { + if (isItemARequest(item)) { + return item.draft || item; + } + return item.root; + }; + + const collectionObj = getObjectToProcess(collection); + sensitiveFields.forEach((fieldPath) => { + checkSensitiveField(collectionObj, fieldPath); + }); + const items = flattenItems(collection.items || []); items.forEach((item) => { - if (!isItemARequest(item)) return; - const requestObj = item.draft ? item.draft : item; + const objToProcess = getObjectToProcess(item); sensitiveFields.forEach((fieldPath) => { - const value = fieldPath.split('.').reduce((obj, key) => (obj ? obj[key] : undefined), requestObj); - if (typeof value === 'string') { - varNames.forEach((varName) => { - if (new RegExp(`\{\{\s*${varName}\s*\}\}`).test(value)) { - result[varName] = true; - } - }); - } + checkSensitiveField(objToProcess, fieldPath); }); }); return result;