diff --git a/frontend/src/components/DetectionFramework.jsx b/frontend/src/components/DetectionFramework.jsx
index bf841eef..031dc01c 100644
--- a/frontend/src/components/DetectionFramework.jsx
+++ b/frontend/src/components/DetectionFramework.jsx
@@ -32,6 +32,13 @@ import * as cytoscape from "cytoscape";
cytoscape.use(edgehandles);
+
+const svgSize = 23
+const parsedDatatypeImages = {
+ "Cases": encodeURI(`data:image/svg+xml;utf-8,`),
+ "EDR & AV": encodeURI(`data:image/svg+xml;utf-8,`),
+}
+
export const usecases = {
"None": {
"manual": [],
@@ -517,9 +524,10 @@ const Framework = (props) => {
const [graphDone, setGraphDone] = React.useState(false)
const [cyDone, setCyDone] = React.useState(false)
const [discoveryData, setDiscoveryData] = React.useState({})
- const [selectionOpen, setSelectionOpen] = React.useState(false)
+ const [selectionOpen, setSelectionOpen] = React.useState(true)
const [newSelectedApp, setNewSelectedApp] = React.useState({})
const [defaultSearch, setDefaultSearch] = React.useState("")
+ const [animationStarted, setAnimationStarted] = React.useState(false)
const alert = useAlert()
@@ -706,12 +714,62 @@ const Framework = (props) => {
}
const animationDuration = 150;
+ const nodeAddDuration = 2500;
+
+ if (cy !== undefined && cyDone && !animationStarted) {
+ const foundelement = cy.getElementById("CASES")
+
+ console.log("FOUND: ", foundelement)
+ if (foundelement !== undefined && foundelement !== null) {
+ setAnimationStarted(true)
+
+ var parsedStyle = {
+ "ghost": "yes",
+ "border-color": "#f86a3e",
+ "border-width": "10px",
+ "border-opacity": ".7",
+ }
+
+ var parsedStyle2 = {
+ "ghost": "yes",
+ "border-width": "7px",
+ }
+
+ for (var i = 0; i < 10; i++) {
+ foundelement.animate(
+ {
+ style: parsedStyle,
+ },
+ {
+ duration: nodeAddDuration,
+ }
+ ).delay(1000)
+
+ foundelement.animate(
+ {
+ style: parsedStyle2,
+ },
+ {
+ duration: nodeAddDuration,
+ }
+ )
+ }
+ }
+ }
+
+ const onNodeAdded = (event) => {
+ //if (event.target.data("animate") === true) {
+ //}
+ }
+
const onNodeHover = (event) => {
const nodedata = event.target.data();
- console.log("Node IN: ", nodedata)
- //if (nodedata.is_valid !== true) {
- // console.log("Is missing valid?")
- //}
+
+
+ const cytoscapeElement = document.getElementById("cytoscape_view")
+ if (cytoscapeElement !== undefined && cytoscapeElement !== null) {
+ cytoscapeElement.style.cursor = "pointer"
+ }
var parsedStyle = {
"border-width": "7px",
@@ -736,7 +794,12 @@ const Framework = (props) => {
const onNodeHoverOut = (event) => {
const nodedata = event.target.data();
- console.log("Node OUT: ", nodedata)
+ //console.log("Node OUT: ", nodedata)
+
+ const cytoscapeElement = document.getElementById("cytoscape_view")
+ if (cytoscapeElement !== undefined && cytoscapeElement !== null) {
+ cytoscapeElement.style.cursor = "default"
+ }
var parsedStyle = {
"border-width": "3px",
@@ -762,15 +825,15 @@ const Framework = (props) => {
}
setDiscoveryData(data)
- setSelectionOpen(false)
+ setSelectionOpen(true)
setNewSelectedApp({})
setDefaultSearch(data.label.charAt(0).toUpperCase()+(data.label.substring(1)).toLowerCase())
}
const onEdgeSelect = (event) => {
- console.log("Edge selected!")
- event.target.remove()
+ console.log("Edge selected!", event.target.data())
+ //event.target.remove()
}
if (graphDone && cyDone === false) {
@@ -785,6 +848,7 @@ const Framework = (props) => {
cy.on("mouseover", "node", (e) => {onNodeHover(e)})
cy.on("mouseout", "node", (e) => onNodeHoverOut(e));
+ cy.on("add", "node", (e) => onNodeAdded(e));
setCyDone(true)
}
@@ -823,6 +887,7 @@ const Framework = (props) => {
`) : parsedFrameworkData.Cases.large_image,
label: securityFramework[0].text.toUpperCase(),
id: securityFramework[0].text.toUpperCase(),
+ animate: true,
},
renderedPosition: {
x: baselocationX,
@@ -848,6 +913,7 @@ const Framework = (props) => {
`) : parsedFrameworkData.IAM.large_image,
label: securityFramework[3].text.toUpperCase(),
id: securityFramework[3].text.toUpperCase(),
+ animate: false,
},
renderedPosition: {
x: baselocationX+shiftradius+(shiftradius/shiftmodifier),
@@ -873,6 +939,7 @@ const Framework = (props) => {
`) : parsedFrameworkData.Assets.large_image,
label: securityFramework[2].text.toUpperCase(),
id: securityFramework[2].text.toUpperCase(),
+ animate: false,
},
renderedPosition: {
x: baselocationX+shiftradius*2,
@@ -898,6 +965,7 @@ const Framework = (props) => {
`): parsedFrameworkData.Intel.large_image,
label: securityFramework[4].text.toUpperCase(),
id: securityFramework[4].text.toUpperCase(),
+ animate: false,
},
renderedPosition: {
x: baselocationX+shiftradius+(shiftradius/shiftmodifier),
@@ -923,6 +991,7 @@ const Framework = (props) => {
`) : parsedFrameworkData.Comms.large_image,
label: securityFramework[5].text.toUpperCase(),
id: securityFramework[5].text.toUpperCase(),
+ animate: false,
},
renderedPosition: {
x: baselocationX,
@@ -948,6 +1017,7 @@ const Framework = (props) => {
`) : parsedFrameworkData["EDR & AV"].large_image,
label: securityFramework[7].text.toUpperCase(),
id: securityFramework[7].text.toUpperCase(),
+ animate: false,
},
renderedPosition: {
x: baselocationX-shiftradius-(shiftradius/shiftmodifier),
@@ -973,6 +1043,7 @@ const Framework = (props) => {
`) : parsedFrameworkData.Network.large_image,
label: securityFramework[6].text.toUpperCase(),
id: securityFramework[6].text.toUpperCase(),
+ animate: false,
},
renderedPosition: {
x: baselocationX-shiftradius*2,
@@ -998,6 +1069,7 @@ const Framework = (props) => {
`) : parsedFrameworkData.SIEM.large_image,
label: securityFramework[1].text.toUpperCase(),
id: securityFramework[1].text.toUpperCase(),
+ animate: false,
},
renderedPosition: {
x: baselocationX-shiftradius-(shiftradius/shiftmodifier),
@@ -1092,7 +1164,7 @@ const Framework = (props) => {
}
})
- console.log("NODES: " , nodes)
+ //console.log("NODES: " , nodes)
for (var key in nodes) {
cy.add(nodes[key]).lock()
}
@@ -1108,6 +1180,23 @@ const Framework = (props) => {
const UsecaseHandler = (props) => {
const { data, index, diff } = props
+ const leftImage = data.left_image !== undefined ? parsedDatatypeImages[data.left_image] : undefined
+ const rightImage = data.right_image !== undefined ? parsedDatatypeImages[data.right_image] : undefined
+
+ if (leftImage === undefined) {
+ console.log("LEFT MISSING: ", leftImage)
+ }
+
+ if (rightImage === undefined) {
+ console.log("Right MISSING: ", rightImage)
+ }
+
+ const parsedRightImage =
+ const parsedRightText =