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, + }; +}; pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy