diff --git a/packages/bruno-app/src/components/CollectionSettings/Headers/index.js b/packages/bruno-app/src/components/CollectionSettings/Headers/index.js index 4a29293ed..9eb0a6dd3 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Headers/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Headers/index.js @@ -11,6 +11,7 @@ import { headers as StandardHTTPHeaders } from 'know-your-http-well'; import { MimeTypes } from 'utils/codemirror/autocompleteConstants'; import BulkEditor from 'components/BulkEditor/index'; import Button from 'ui/Button'; +import { headerNameRegex, headerValueRegex } from 'utils/common/regex'; const headerAutoCompleteList = StandardHTTPHeaders.map((e) => e.header); @@ -32,6 +33,22 @@ const Headers = ({ collection }) => { const handleSave = () => dispatch(saveCollectionSettings(collection.uid)); + const getRowError = useCallback((row, index, key) => { + if (key === 'name') { + if (!row.name || row.name.trim() === '') return null; + if (!headerNameRegex.test(row.name)) { + return 'Header name cannot contain spaces or newlines'; + } + } + if (key === 'value') { + if (!row.value) return null; + if (!headerValueRegex.test(row.value)) { + return 'Header value cannot contain newlines'; + } + } + return null; + }, []); + const columns = [ { key: 'name', @@ -101,6 +118,7 @@ const Headers = ({ collection }) => { rows={headers} onChange={handleHeadersChange} defaultRow={defaultRow} + getRowError={getRowError} />
); }, [isLastEmptyRow, getRowError, handleValueChange]); diff --git a/packages/bruno-app/src/components/FolderSettings/Headers/index.js b/packages/bruno-app/src/components/FolderSettings/Headers/index.js index d63786e38..1ac148368 100644 --- a/packages/bruno-app/src/components/FolderSettings/Headers/index.js +++ b/packages/bruno-app/src/components/FolderSettings/Headers/index.js @@ -11,6 +11,7 @@ import { headers as StandardHTTPHeaders } from 'know-your-http-well'; import { MimeTypes } from 'utils/codemirror/autocompleteConstants'; import BulkEditor from 'components/BulkEditor/index'; import Button from 'ui/Button'; +import { headerNameRegex, headerValueRegex } from 'utils/common/regex'; const headerAutoCompleteList = StandardHTTPHeaders.map((e) => e.header); @@ -36,6 +37,22 @@ const Headers = ({ collection, folder }) => { const handleSave = () => dispatch(saveFolderRoot(collection.uid, folder.uid)); + const getRowError = useCallback((row, index, key) => { + if (key === 'name') { + if (!row.name || row.name.trim() === '') return null; + if (!headerNameRegex.test(row.name)) { + return 'Header name cannot contain spaces or newlines'; + } + } + if (key === 'value') { + if (!row.value) return null; + if (!headerValueRegex.test(row.value)) { + return 'Header value cannot contain newlines'; + } + } + return null; + }, []); + const columns = [ { key: 'name', @@ -106,6 +123,7 @@ const Headers = ({ collection, folder }) => { rows={headers} onChange={handleHeadersChange} defaultRow={defaultRow} + getRowError={getRowError} />