import React, { useState, useEffect } from "react"; import ReactGA from 'react-ga4'; import 'react-alice-carousel/lib/alice-carousel.css'; import TrendingFlatIcon from '@mui/icons-material/TrendingFlat'; import theme from '../theme.jsx'; import {isMobile} from "react-device-detect"; import ArrowBackIcon from '@mui/icons-material/ArrowBack'; import CheckBoxSharpIcon from '@mui/icons-material/CheckBoxSharp'; import { findSpecificApp } from "../components/AppFramework.jsx" import { Checkbox, Button, Collapse, IconButton, FormGroup, FormControl, InputLabel, FormLabel, FormControlLabel, Select, MenuItem, Grid, Paper, Typography, TextField, Zoom, List, ListItem, ListItemText, Divider, Tooltip, Chip, ButtonGroup, Dialog, DialogTitle, DialogActions, DialogContent, } from "@mui/material"; import { useNavigate, Link } from "react-router-dom"; import WorkflowTemplatePopup from "../components/WorkflowTemplatePopup.jsx"; const ExploreWorkflow = (props) => { const { userdata, globalUrl, appFramework, isLoggedIn, } = props const [activeUsecases, setActiveUsecases] = useState(0); const [modalOpen, setModalOpen] = React.useState(false); const [suggestedUsecases, setSuggestedUsecases] = useState([]) const [usecasesSet, setUsecasesSet] = useState(false) const [apps, setApps] = useState([]) const sizing = 475 let navigate = useNavigate(); const imagestyle = { height: 40, borderRadius: 40, //border: "2px solid rgba(255,255,255,0.3)", } const loadApps = () => { fetch(`${globalUrl}/api/v1/apps`, { method: "GET", headers: { "Content-Type": "application/json", Accept: "application/json", }, credentials: "include", }) .then((response) => { return response.json(); }) .then((responseJson) => { if (responseJson === null) { console.log("null-response from server") const pretend_apps = [{ "name": "TBD", "app_name": "TBD", "app_version": "TBD", "description": "TBD", "version": "TBD", "large_image": "", }] setApps(pretend_apps) return } if (responseJson.success === false) { console.log("error loading apps: ", responseJson) return } setApps(responseJson); }) .catch((error) => { console.log("App loading error: " + error.toString()); }) } // Find priorities in userdata.priorities and check if the item.type === "usecase" // If so, set the item.isActive to true if (usecasesSet === false && userdata.priorities !== undefined && userdata.priorities !== null && userdata.priorities.length > 0 && suggestedUsecases.length === 0) { var tmpUsecases = [] for (let i = 0; i < userdata.priorities.length; i++) { if (userdata.priorities[i].type !== "usecase" || userdata.priorities[i].active === false) { continue } const descsplit = userdata.priorities[i].description.split("&") if (descsplit.length === 5) { console.log("descsplit: ", descsplit) if (descsplit[1] === "") { const item = findSpecificApp(appFramework, descsplit[0]) console.log("item: ", item) if (item !== null) { descsplit[1] = item.large_image } } if (descsplit[3] === "") { const item = findSpecificApp(appFramework, descsplit[2]) console.log("item: ", item) if (item !== null) { descsplit[3] = item.large_image } } console.log("descsplit: ", descsplit) userdata.priorities[i].description = descsplit.join("&") } tmpUsecases.push(userdata.priorities[i]) } console.log("USECASES: ", tmpUsecases) if (tmpUsecases.length === 0) { console.log("Add some random ones, as everything is done") const comms = findSpecificApp(appFramework, "communication") const cases = findSpecificApp(appFramework, "cases") const edr = findSpecificApp(appFramework, "edr") const siem = findSpecificApp(appFramework, "siem") tmpUsecases = [{ "name": "Suggested Usecase: Email management", "description": comms.name+"&"+comms.large_image+"&"+cases.name+"&"+cases.large_image, "type": "usecase", "url": "/usecases?selected_object=Email management", "severity": 0, "active": false, },{ "name": "Suggested Usecase: EDR to ticket", "description": edr.name+"&"+edr.large_image+"&"+cases.name+"&"+cases.large_image, "type": "usecase", "url": "/usecases?selected_object=EDR to ticket", "severity": 0, "active": false, },{ "name": "Suggested Usecase: SIEM to ticket", "description": siem.name+"&"+siem.large_image+"&"+cases.name+"&"+cases.large_image, "type": "usecase", "url": "/usecases?selected_object=SIEM to ticket", "severity": 0, "active": false, } ] } setSuggestedUsecases(tmpUsecases) setUsecasesSet(true) loadApps() } const modalView = ( // console.log("key:", dataValue.key), //console.log("value:",dataValue.value), { setModalOpen(false); }} PaperProps={{ style: { backgroundColor: theme.palette.surfaceColor, color: "white", minWidth: "800px", minHeight: "320px", }, }} >
Sign Up
Setup
Explore
Here’s a recommended workflow: {/*
{ slidePrev() }} >
{ slideNext() }} >
*/}
); return (
{ navigate('/welcome?tab=2'); window.location.reload(); }} > Back {modalView} Start using workflows Based on what you selected workflows, here are our recommendations! You will see more of these later.
{suggestedUsecases.length === 0 && usecasesSet ? All Workflows are already added for your current apps! : suggestedUsecases.map((priority, index) => { const srcapp = priority.description.split("&")[0] var image1 = priority.description.split("&")[1] var image2 = "" var dstapp = "" if (priority.description.split("&").length > 3) { dstapp = priority.description.split("&")[2] image2 = priority.description.split("&")[3] } const name = priority.name.replace("Suggested Usecase: ", "") var description = "" if (priority.description.split("&").length > 4) { description = priority.description[4] } // FIXME: Should have a proper description description = "" return ( ) })}
Explore usecases
) } export default ExploreWorkflow