diff --git a/flowsint-api/app/api/routes/flows.py b/flowsint-api/app/api/routes/flows.py index 7eadfd2..b7da55d 100644 --- a/flowsint-api/app/api/routes/flows.py +++ b/flowsint-api/app/api/routes/flows.py @@ -511,7 +511,7 @@ def process_node_data(node: Node, inputs: Dict[str, Any]) -> Dict[str, Any]: "creation_date": "2020-01-01", } - elif class_name == "GeolocationScanner": + elif class_name == "IpToInfosScanner": # Geolocation scanner outputs[output_name] = { "country": "France", diff --git a/flowsint-app/src/renderer/src/components/graphs/index.tsx b/flowsint-app/src/renderer/src/components/graphs/index.tsx index b28490d..a36c4fe 100644 --- a/flowsint-app/src/renderer/src/components/graphs/index.tsx +++ b/flowsint-app/src/renderer/src/components/graphs/index.tsx @@ -54,7 +54,7 @@ const GraphPanel = ({ graphData, isLoading }: GraphPanelProps) => { const setFilters = useGraphStore(s => s.setFilters) const filters = useGraphStore(s => s.filters) const { actionItems, isLoading: isLoadingActionItems } = useActionItems() - const NODE_COUNT_THRESHOLD = settings.general.graphViewerThreshold.value + const NODE_COUNT_THRESHOLD = settings?.general?.graphViewerThreshold?.value || 1000 const { sketch } = useLoaderData({ from: '/_auth/dashboard/investigations/$investigationId/$type/$id', diff --git a/flowsint-app/src/renderer/src/stores/graph-settings-store.ts b/flowsint-app/src/renderer/src/stores/graph-settings-store.ts index 058e77d..dceca73 100644 --- a/flowsint-app/src/renderer/src/stores/graph-settings-store.ts +++ b/flowsint-app/src/renderer/src/stores/graph-settings-store.ts @@ -13,15 +13,18 @@ const DEFAULT_SETTINGS = { description: "Display the MiniMap on the graph panel." }, graphViewerThreshold: { - type: "number", - value: 1500, - min: 10, - max: 20000, - step: 5, + type: "select", + value: 800, + options: [ + { value: 100, label: "100" }, + { value: 400, label: "400" }, + { value: 800, label: "800" }, + { value: 2000, label: "2000" } + ], description: "Threshold to switch from general graph to less interactive but more performant) viewer." }, - }, + }, graph: { nodeSize: { type: "number", diff --git a/flowsint-core/src/flowsint_core/core/registry.py b/flowsint-core/src/flowsint_core/core/registry.py index 31620a5..1d92f87 100644 --- a/flowsint-core/src/flowsint_core/core/registry.py +++ b/flowsint-core/src/flowsint_core/core/registry.py @@ -15,7 +15,7 @@ from flowsint_transforms.domain.to_history import DomainToHistoryScanner from flowsint_transforms.email.to_domains import EmailToDomainsScanner from flowsint_transforms.individual.to_domains import IndividualToDomainsScanner from flowsint_transforms.ip.to_domain import ReverseResolveScanner -from flowsint_transforms.ip.to_geolocation import GeolocationScanner +from flowsint_transforms.ip.to_infos import IpToInfosScanner from flowsint_transforms.ip.to_asn import IpToAsnScanner # ASN-related scanners @@ -147,7 +147,7 @@ TransformRegistry.register(DomainToAsnScanner) TransformRegistry.register(DomainToHistoryScanner) # IP-related scanners -TransformRegistry.register(GeolocationScanner) +TransformRegistry.register(IpToInfosScanner) TransformRegistry.register(IpToAsnScanner) # ASN-related scanners diff --git a/flowsint-core/src/flowsint_core/core/scanner_base.py b/flowsint-core/src/flowsint_core/core/scanner_base.py index cce0229..c4bbf18 100644 --- a/flowsint-core/src/flowsint_core/core/scanner_base.py +++ b/flowsint-core/src/flowsint_core/core/scanner_base.py @@ -373,6 +373,7 @@ class Scanner(ABC): final_properties["type"] = node_type.lower() final_properties["sketch_id"] = self.sketch_id final_properties["label"] = final_properties.get("label", key_value) + set_clauses = [f"n.{prop} = ${prop}" for prop in final_properties.keys()] params = {key_prop: key_value, **final_properties} diff --git a/flowsint-transforms/src/flowsint_transforms/ip/to_geolocation.py b/flowsint-transforms/src/flowsint_transforms/ip/to_infos.py similarity index 95% rename from flowsint-transforms/src/flowsint_transforms/ip/to_geolocation.py rename to flowsint-transforms/src/flowsint_transforms/ip/to_infos.py index 5d52820..6f563ce 100644 --- a/flowsint-transforms/src/flowsint_transforms/ip/to_geolocation.py +++ b/flowsint-transforms/src/flowsint_transforms/ip/to_infos.py @@ -9,8 +9,8 @@ InputType: TypeAlias = List[Ip] OutputType: TypeAlias = List[Ip] -class GeolocationScanner(Scanner): - """[ip-api.com] Get geolocation data for IP addresses.""" +class IpToInfosScanner(Scanner): + """[ip-api.com] Get information data for IP addresses.""" # Define types as class attributes - base class handles schema generation automatically InputType = List[Ip] @@ -18,7 +18,7 @@ class GeolocationScanner(Scanner): @classmethod def name(cls) -> str: - return "ip_to_geolocation" + return "ip_to_infos" @classmethod def category(cls) -> str: @@ -131,5 +131,5 @@ class GeolocationScanner(Scanner): return {} -InputType = GeolocationScanner.InputType -OutputType = GeolocationScanner.OutputType +InputType = IpToInfosScanner.InputType +OutputType = IpToInfosScanner.OutputType diff --git a/flowsint-transforms/tests/scanners/ip/geolocation.py b/flowsint-transforms/tests/scanners/ip/ip_to_infos.py similarity index 96% rename from flowsint-transforms/tests/scanners/ip/geolocation.py rename to flowsint-transforms/tests/scanners/ip/ip_to_infos.py index 607ef8b..cc44e2b 100644 --- a/flowsint-transforms/tests/scanners/ip/geolocation.py +++ b/flowsint-transforms/tests/scanners/ip/ip_to_infos.py @@ -1,7 +1,7 @@ -from flowsint_transforms.ips.geolocation import GeolocationScanner +from flowsint_transforms.ips.geolocation import IpToInfosScanner from flowsint_types.ip import Ip, Ip -scanner = GeolocationScanner("sketch_123", "scan_123") +scanner = IpToInfosScanner("sketch_123", "scan_123") def test_preprocess_valid_ips(): diff --git a/test.js b/test.js index 8d3f33f..58eef64 100644 --- a/test.js +++ b/test.js @@ -15,4 +15,7 @@ export function deepObjectDiff(obj1, obj2) { }) return diffObject -} \ No newline at end of file +} + +const diffObject = deepObjectDiff({ key1: "value1", key2: "value2" }, { key1: "value1", key2: "value3", key3: "value4" }) +console.log(diffObject) \ No newline at end of file