diff --git a/src/main/java/adt/mainnode/repository/SnapshotRepository.java b/src/main/java/adt/mainnode/repository/SnapshotRepository.java index cc81566cc078ed68b9df625cef3b7a6c01e0c4a6..eb0d26282ce17f082f053193b2afe6b24edcedde 100644 --- a/src/main/java/adt/mainnode/repository/SnapshotRepository.java +++ b/src/main/java/adt/mainnode/repository/SnapshotRepository.java @@ -11,5 +11,6 @@ public interface SnapshotRepository extends JpaRepository { Snapshot findBySnapshotId(String snapshotId); Snapshot findTopByVlanNameOrderByTimestampDistNodeEndDesc(String vlanName); + Snapshot findTopByVlanNameAndDiscoveryMethodOrderByTimestampDistNodeEndDesc (String vlanName, String discoveryMethod); } diff --git a/src/main/java/adt/mainnode/service/AssetService.java b/src/main/java/adt/mainnode/service/AssetService.java index 423e76b84023e094e05f9cd35169c9f2b4108993..48740618954ca3f8dd5eb828e4405efe22050f8e 100644 --- a/src/main/java/adt/mainnode/service/AssetService.java +++ b/src/main/java/adt/mainnode/service/AssetService.java @@ -91,9 +91,27 @@ public class AssetService { List allScans = asset.getScanInfo(); + boolean nueva_snapshot = true; + String generatedHash = null; + Snapshot snapshot = null; + if (asset.getDiscoveryMethod().equals("sniffing")){ + Snapshot snapshot_scan = snapshotRepository.findTopByVlanNameAndDiscoveryMethodOrderByTimestampDistNodeEndDesc(allScans.get(0).getVlanName(),"scan"); + Snapshot snapshot_sniffing = snapshotRepository.findTopByVlanNameAndDiscoveryMethodOrderByTimestampDistNodeEndDesc(allScans.get(0).getVlanName(),"sniffing"); + if (snapshot_scan != null && snapshot_sniffing != null && snapshot_scan.getTimestamp_mainNode().getTime() < snapshot_sniffing.getTimestamp_mainNode().getTime() ){ + // Utilizas la snapshot_sniffing que ya tienes y la actualizas + generatedHash = snapshot_sniffing.getSnapshotId(); + nueva_snapshot = false; + snapshot = snapshot_sniffing; + } + } Date mainNode_timestamp = new Date(); - String generatedHash = DigestUtils.sha256Hex(DigestUtils.sha256Hex(mainNode_timestamp.toString()) + DigestUtils.sha256Hex(allScans.get(0).getIniTimestampScan().toString()) + DigestUtils.sha256Hex(allScans.get(0).getEndTimestampScan().toString()) + System.currentTimeMillis()); + if (nueva_snapshot) { + generatedHash = DigestUtils.sha256Hex(DigestUtils.sha256Hex(mainNode_timestamp.toString()) + + DigestUtils.sha256Hex(allScans.get(0).getIniTimestampScan().toString()) + + DigestUtils.sha256Hex(allScans.get(0).getEndTimestampScan().toString()) + + System.currentTimeMillis()); + } SnapshotChange snapChange = evaluateChanges(allScans, mainNode_timestamp, asset.getDiscoveryMethod()); // TODO: retrieve from web form instead of hard-coding it here @@ -118,7 +136,7 @@ public class AssetService { Node node = nodeRepository.findByNodeId(credential.getName()); log.info("let me {}", scanInfo); SnapshotIdentity snapshotIdentity = SnapshotIdentity.createSnapshotIdentity(scanInfo.getVlanName(), node.getNodeId(), scanInfo.getSnapshotId()); - Snapshot snapshot = Snapshot.createSnapshot(scanInfo, snapshotIdentity, asset.getDiscoveryMethod()); + if (nueva_snapshot) snapshot = Snapshot.createSnapshot(scanInfo, snapshotIdentity, asset.getDiscoveryMethod()); ////// // CREATING HOST AND PORT ENTITIES FROM THE RECEIVED DTO @@ -132,9 +150,10 @@ public class AssetService { hosts.add(host); + String finalGeneratedHash = generatedHash; List ports = host_dtos.get(i).getPorts().parallelStream() .map(portDto -> { - PortIdentity portIdentity = PortIdentity.createPortIdentity(portDto.getPortNumber(), host.getIp(), host.getVlanName(), generatedHash); + PortIdentity portIdentity = PortIdentity.createPortIdentity(portDto.getPortNumber(), host.getIp(), host.getVlanName(), finalGeneratedHash); return Port.createPort(portIdentity, portDto); }) .collect(Collectors.toList()); @@ -144,8 +163,9 @@ public class AssetService { } ////// - - snapshotRepository.save(snapshot); + if (nueva_snapshot) { + snapshotRepository.save(snapshot); + } scanInfoRepository.save(scanInfo); // WRITING SCAN INFO ENTITY TO FILE FOR ITS POSTERIOR UPLOAD TO VIRTUOSO'S DB @@ -189,9 +209,9 @@ public class AssetService { t.printStackTrace(); } - ////// + ////// - } // End of initial for + } // End of initial for } // End of method