diff --git a/uncoder-os/src/components/FileUploader/InputEditorFileUploadButton/useInputEditorFileUploadButton.ts b/uncoder-os/src/components/FileUploader/InputEditorFileUploadButton/useInputEditorFileUploadButton.ts index 9a910329..d20eea64 100644 --- a/uncoder-os/src/components/FileUploader/InputEditorFileUploadButton/useInputEditorFileUploadButton.ts +++ b/uncoder-os/src/components/FileUploader/InputEditorFileUploadButton/useInputEditorFileUploadButton.ts @@ -2,6 +2,7 @@ import { useDispatch } from 'react-redux'; import { Dispatch } from '@reduxjs/toolkit'; import { setText } from '../../../reduxData/inputEditor'; import { useInfoProvider } from '../../Info'; +import { useDetectParserByText } from '../../../hooks'; export const FILE_TYPES_ALLOWED_FOR_UPLOAD = [ 'text/csv', @@ -14,6 +15,7 @@ export const MAX_FILE_SIZE_FOR_UPLOAD = 3 * 1024 * 1024; export const useInputEditorFileUploadButton = () => { const dispatch = useDispatch>(); const { showErrorMessage, showSuccessMessage } = useInfoProvider(); + const { detectParser } = useDetectParserByText(); const uploadHandler = async (file: File) => { if (!file) { return; @@ -34,6 +36,7 @@ export const useInputEditorFileUploadButton = () => { const fileContent = await file.text(); dispatch(setText(fileContent)); + detectParser(fileContent); showSuccessMessage('File uploaded successfully'); }; diff --git a/uncoder-os/src/components/TextEditor/InputTextEditor/InputTextEditor.tsx b/uncoder-os/src/components/TextEditor/InputTextEditor/InputTextEditor.tsx index 451a1b71..cbaeb366 100644 --- a/uncoder-os/src/components/TextEditor/InputTextEditor/InputTextEditor.tsx +++ b/uncoder-os/src/components/TextEditor/InputTextEditor/InputTextEditor.tsx @@ -6,7 +6,11 @@ import './InputTextEditor.sass'; export const InputTextEditor: FC = () => { const { - inputText, mode, onChangeInputText, onFocusInputText, + inputText, + mode, + onChangeInputText, + onFocusInputText, + onPasteInputText, } = useInputEditor(); return ( @@ -18,6 +22,7 @@ export const InputTextEditor: FC = () => { name="ua-text-editor-input" onChange={onChangeInputText} onFocus={onFocusInputText} + onPaste={onPasteInputText} /> ); diff --git a/uncoder-os/src/components/TextEditor/InputTextEditor/useInputEditor.ts b/uncoder-os/src/components/TextEditor/InputTextEditor/useInputEditor.ts index b3e9b1e1..cf05b94d 100644 --- a/uncoder-os/src/components/TextEditor/InputTextEditor/useInputEditor.ts +++ b/uncoder-os/src/components/TextEditor/InputTextEditor/useInputEditor.ts @@ -10,6 +10,7 @@ import ace from 'ace-builds'; import 'ace-builds/src-noconflict/ext-language_tools'; import { loadSuggesterData, suggesterSelector } from '../../../reduxData/suggester'; import { useEditorSuggestion } from '../useEditorSuggestion'; +import { useDetectParserByText } from '../../../hooks'; const defineMode = (parser: string) => { if (['sigma', 'roota'].includes(parser)) { @@ -27,6 +28,7 @@ export const useInputEditor = () => { const { text: inputText, platformCode: parser, changed } = useSelector(inputEditorSelector); const suggestionData = useSelector(suggesterSelector); const { languageCompleter } = useEditorSuggestion(suggestionData); + const { detectParser } = useDetectParserByText(); useEffect(() => { const langTools = ace.require('ace/ext/language_tools'); @@ -54,11 +56,16 @@ export const useInputEditor = () => { dispatch(setText('')); }; + const onPasteInputText = (value: string) => { + detectParser(value); + }; + return { isIoc: parser === 'ioc', inputText, mode: defineMode(parser), onChangeInputText, onFocusInputText, + onPasteInputText, }; }; diff --git a/uncoder-os/src/components/TextEditor/TextEditor.sass b/uncoder-os/src/components/TextEditor/TextEditor.sass index 213571ab..581a6f76 100644 --- a/uncoder-os/src/components/TextEditor/TextEditor.sass +++ b/uncoder-os/src/components/TextEditor/TextEditor.sass @@ -17,7 +17,8 @@ background-color: $darkHighlight .ace_scrollbar z-index: 0 - &.ace_scrollbar-v + &.ace_scrollbar-v, + &.ace_scrollbar-h +scrollbars .ace_folding-enabled .ace_gutter-cell diff --git a/uncoder-os/src/constants/templates.ts b/uncoder-os/src/constants/templates.ts index 90d581f9..9e840c61 100644 --- a/uncoder-os/src/constants/templates.ts +++ b/uncoder-os/src/constants/templates.ts @@ -61,9 +61,12 @@ uuid:`, { name: TemplatesKeys.MinimalSigma, value: `title: sigma title +description: +references: + - logsource: #service: - category: + category: product: windows detection: selection: diff --git a/uncoder-os/src/hooks/index.ts b/uncoder-os/src/hooks/index.ts index 01618316..379e32dc 100644 --- a/uncoder-os/src/hooks/index.ts +++ b/uncoder-os/src/hooks/index.ts @@ -1 +1,2 @@ export { useHandleClickOutside } from './useHandleClickOutside'; +export * from './useDetectParserByText'; diff --git a/uncoder-os/src/hooks/useDetectParserByText/index.ts b/uncoder-os/src/hooks/useDetectParserByText/index.ts new file mode 100644 index 00000000..ccf7fdae --- /dev/null +++ b/uncoder-os/src/hooks/useDetectParserByText/index.ts @@ -0,0 +1 @@ +export * from './useDetectParserByText'; diff --git a/uncoder-os/src/hooks/useDetectParserByText/useDetectParserByText.ts b/uncoder-os/src/hooks/useDetectParserByText/useDetectParserByText.ts new file mode 100644 index 00000000..9e5b2e91 --- /dev/null +++ b/uncoder-os/src/hooks/useDetectParserByText/useDetectParserByText.ts @@ -0,0 +1,31 @@ +import { useDispatch } from 'react-redux'; +import { Dispatch } from '@reduxjs/toolkit'; +import { setPlatformCode } from '../../reduxData/inputEditor'; + +const isSigma = (text: string): boolean => { + return text.includes('title:') && text.includes('logsource:') && text.includes('detection:'); +}; + +const isRoota = (text: string): boolean => { + return text.includes('name:') && text.includes('mitre-attack:') && text.includes('detection:'); +}; +export const useDetectParserByText = () => { + const dispatch = useDispatch>(); + const detectParser = (text: string) => { + if (isRoota(text)) { + dispatch(setPlatformCode('roota')); + return; + } + + if (isSigma(text)) { + dispatch(setPlatformCode('sigma')); + return; + } + + dispatch(setPlatformCode('ioc')); + }; + + return { + detectParser, + }; +};