fix: 单独保存 pcap common 文件,不对源文件进行覆盖

1. 单独保存 pcap common 文件,不对源文件进行覆盖
2. 删除解析结果时,重置 summary 内容
This commit is contained in:
shizhendong
2024-08-26 15:02:20 +08:00
parent 1db74870e0
commit 8e835e4ea3
4 changed files with 21 additions and 19 deletions

View File

@@ -139,7 +139,8 @@ public class PcapController {
HashMap<Object, Object> result = T.MapUtil.newHashMap();
PcapEntity pcap = pcapService.getById(id);
File pcapFile = T.FileUtil.file(pcap.getPath());
File pcapFile = pcap.getCommonPcapFilePath().toFile();
pcapFile = FileUtil.exist(pcapFile) ? pcapFile : T.FileUtil.file(pcap.getPath());
String uploadFileName = T.StrUtil.concat(true, id, ".", T.FileUtil.getSuffix(pcapFile));
File newFile = FileUtil.copy(pcapFile, FileUtil.file(Constants.TEMP_PATH, uploadFileName), false);
try {

View File

@@ -4,12 +4,16 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import net.geedge.asw.common.util.T;
import net.geedge.asw.module.app.entity.ApplicationEntity;
import net.geedge.asw.module.app.entity.PackageEntity;
import net.geedge.asw.module.workspace.entity.WorkspaceEntity;
import java.nio.file.Path;
@Data
@TableName("pcap")
public class PcapEntity {
@@ -46,4 +50,9 @@ public class PcapEntity {
@TableField(exist = false)
private PlaybookEntity playbook;
@JsonIgnore
public Path getCommonPcapFilePath() {
return Path.of(T.WebPathUtil.getRootPath(), this.workspaceId, "pcap_comment", this.id + ".pcapng");
}
}

View File

@@ -191,6 +191,7 @@ public class PcapServiceImpl extends ServiceImpl<PcapDao, PcapEntity> implements
PcapEntity pcap = this.getById(id);
// remove file
T.FileUtil.del(pcap.getPath());
T.FileUtil.del(pcap.getCommonPcapFilePath());
// remove
this.removeById(id);
@@ -278,6 +279,10 @@ public class PcapServiceImpl extends ServiceImpl<PcapDao, PcapEntity> implements
throw new RuntimeException("delete openSearch index error ", e);
}
pcapEntity.setStatus(RunnerConstant.PcapStatus.UPLOADED.getValue());
// reset summary
pcapEntity.setSummary("{}");
// del common pcap file
T.FileUtil.del(pcapEntity.getCommonPcapFilePath().toFile());
this.updateById(pcapEntity);
}
}

View File

@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import feign.Response;
import lombok.Data;
import net.geedge.asw.common.config.SpringContextUtils;
import net.geedge.asw.common.util.Constants;
import net.geedge.asw.common.util.RCode;
import net.geedge.asw.common.util.T;
import net.geedge.asw.module.feign.client.GeoipClient;
@@ -101,23 +100,10 @@ public class PcapParserThread implements Runnable {
throw new RuntimeException("Failed to add common to pcap");
}
// temp file
File file = T.FileUtil.file(Constants.TEMP_PATH, pcapEntity.getId() + ".pcapng");
FileUtils.copyInputStreamToFile(response.body().asInputStream(), file);
// override source file
T.FileUtil.del(T.FileUtil.file(pcapEntity.getPath()));
File updatePcapFile = T.FileUtil.file(T.WebPathUtil.getRootPath(), pcapEntity.getWorkspaceId(), file.getName());
T.FileUtil.move(file, updatePcapFile, true);
// update name,path,md5,size
String md5Hex = T.DigestUtil.md5Hex(updatePcapFile);
long filesize = T.FileUtil.size(updatePcapFile);
pcapEntity.setName(updatePcapFile.getName());
pcapEntity.setPath(updatePcapFile.getAbsolutePath());
pcapEntity.setMd5(md5Hex);
pcapEntity.setSize(filesize);
pcapService.updateById(pcapEntity);
// file path: /{path}/{workspace_id}/pcap_comment/{pcap_id}.pcapng
File destination = pcapEntity.getCommonPcapFilePath().toFile();
T.FileUtil.del(destination);
FileUtils.copyInputStreamToFile(response.body().asInputStream(), destination);
}
/**
@@ -230,6 +216,7 @@ public class PcapParserThread implements Runnable {
.put("sessions", jsonArray.size())
.put("packets", packets)
.put("services", services)
.put("commentPath", pcapEntity.getCommonPcapFilePath().toString())
.build();
pcapService.update(new LambdaUpdateWrapper<PcapEntity>()
.set(PcapEntity::getSummary, T.JSONUtil.toJsonStr(m))