From 40136ad9d9e7b54202da957e4029bf3adac64043 Mon Sep 17 00:00:00 2001 From: Sergey Shkurov Date: Fri, 28 Apr 2023 03:59:01 +0200 Subject: [PATCH] Update ServiceController endpoints --- .../controller/ServiceController.java | 17 +++++---- .../packmate/model/pojo/ServiceCreateDto.java | 17 +++++++++ .../packmate/model/pojo/ServiceUpdateDto.java | 17 +++++++++ .../packmate/service/PcapService.java | 6 +-- .../packmate/service/ServicesService.java | 38 +++++++++++++++---- 5 files changed, 78 insertions(+), 17 deletions(-) create mode 100644 src/main/java/ru/serega6531/packmate/model/pojo/ServiceCreateDto.java create mode 100644 src/main/java/ru/serega6531/packmate/model/pojo/ServiceUpdateDto.java diff --git a/src/main/java/ru/serega6531/packmate/controller/ServiceController.java b/src/main/java/ru/serega6531/packmate/controller/ServiceController.java index d23ce3a..e8b55e6 100644 --- a/src/main/java/ru/serega6531/packmate/controller/ServiceController.java +++ b/src/main/java/ru/serega6531/packmate/controller/ServiceController.java @@ -8,8 +8,9 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import ru.serega6531.packmate.model.CtfService; +import ru.serega6531.packmate.model.pojo.ServiceCreateDto; import ru.serega6531.packmate.model.pojo.ServiceDto; +import ru.serega6531.packmate.model.pojo.ServiceUpdateDto; import ru.serega6531.packmate.service.ServicesService; import java.util.List; @@ -27,9 +28,7 @@ public class ServiceController { @GetMapping public List getServices() { - return service.findAll().stream() - .map(service::toDto) - .toList(); + return service.findAll(); } @DeleteMapping("/{port}") @@ -38,9 +37,13 @@ public class ServiceController { } @PostMapping - public CtfService addService(@RequestBody ServiceDto dto) { - CtfService newService = this.service.fromDto(dto); - return this.service.save(newService); + public ServiceDto addService(@RequestBody ServiceCreateDto dto) { + return this.service.create(dto); + } + + @PostMapping("/{port}") + public ServiceDto updateService(@PathVariable int port, @RequestBody ServiceUpdateDto dto) { + return this.service.update(port, dto); } } diff --git a/src/main/java/ru/serega6531/packmate/model/pojo/ServiceCreateDto.java b/src/main/java/ru/serega6531/packmate/model/pojo/ServiceCreateDto.java new file mode 100644 index 0000000..98ce728 --- /dev/null +++ b/src/main/java/ru/serega6531/packmate/model/pojo/ServiceCreateDto.java @@ -0,0 +1,17 @@ +package ru.serega6531.packmate.model.pojo; + +import lombok.Data; + +@Data +public class ServiceCreateDto { + + private int port; + private String name; + private boolean decryptTls; + private boolean processChunkedEncoding; + private boolean ungzipHttp; + private boolean urldecodeHttpRequests; + private boolean mergeAdjacentPackets; + private boolean parseWebSockets; + +} \ No newline at end of file diff --git a/src/main/java/ru/serega6531/packmate/model/pojo/ServiceUpdateDto.java b/src/main/java/ru/serega6531/packmate/model/pojo/ServiceUpdateDto.java new file mode 100644 index 0000000..db46765 --- /dev/null +++ b/src/main/java/ru/serega6531/packmate/model/pojo/ServiceUpdateDto.java @@ -0,0 +1,17 @@ +package ru.serega6531.packmate.model.pojo; + +import lombok.Data; + +@Data +public class ServiceUpdateDto { + + private int port; + private String name; + private boolean decryptTls; + private boolean processChunkedEncoding; + private boolean ungzipHttp; + private boolean urldecodeHttpRequests; + private boolean mergeAdjacentPackets; + private boolean parseWebSockets; + +} \ No newline at end of file diff --git a/src/main/java/ru/serega6531/packmate/service/PcapService.java b/src/main/java/ru/serega6531/packmate/service/PcapService.java index b633055..a3652e7 100644 --- a/src/main/java/ru/serega6531/packmate/service/PcapService.java +++ b/src/main/java/ru/serega6531/packmate/service/PcapService.java @@ -4,8 +4,8 @@ import lombok.extern.slf4j.Slf4j; import org.pcap4j.core.PcapNativeException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import ru.serega6531.packmate.model.CtfService; import ru.serega6531.packmate.model.enums.SubscriptionMessageType; +import ru.serega6531.packmate.model.pojo.ServiceDto; import ru.serega6531.packmate.model.pojo.SubscriptionMessage; import ru.serega6531.packmate.pcap.NoOpPcapWorker; import ru.serega6531.packmate.pcap.PcapWorker; @@ -40,14 +40,14 @@ public class PcapService { } } - public void updateFilter(Collection services) { + public void updateFilter(Collection services) { String filter; if (services.isEmpty()) { filter = "tcp or udp"; } else { final String ports = services.stream() - .map(CtfService::getPort) + .map(ServiceDto::getPort) .map(p -> "port " + p) .collect(Collectors.joining(" or ")); diff --git a/src/main/java/ru/serega6531/packmate/service/ServicesService.java b/src/main/java/ru/serega6531/packmate/service/ServicesService.java index 1255f14..1aefda5 100644 --- a/src/main/java/ru/serega6531/packmate/service/ServicesService.java +++ b/src/main/java/ru/serega6531/packmate/service/ServicesService.java @@ -6,9 +6,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import ru.serega6531.packmate.model.CtfService; import ru.serega6531.packmate.model.enums.SubscriptionMessageType; +import ru.serega6531.packmate.model.pojo.ServiceCreateDto; import ru.serega6531.packmate.model.pojo.ServiceDto; +import ru.serega6531.packmate.model.pojo.ServiceUpdateDto; import ru.serega6531.packmate.model.pojo.SubscriptionMessage; import ru.serega6531.packmate.repository.ServiceRepository; @@ -67,8 +70,11 @@ public class ServicesService { return Optional.ofNullable(services.get(port)); } - public Collection findAll() { - return services.values(); + public List findAll() { + return services.values() + .stream() + .map(this::toDto) + .toList(); } public void deleteByPort(int port) { @@ -82,9 +88,27 @@ public class ServicesService { updateFilter(); } - public CtfService save(CtfService service) { - log.info("Added or edited service '{}' at port {}", service.getName(), service.getPort()); + @Transactional + public ServiceDto create(ServiceCreateDto dto) { + CtfService service = fromDto(dto); + log.info("Added service '{}' at port {}", service.getName(), service.getPort()); + + return save(service); + } + + @Transactional + public ServiceDto update(int port, ServiceUpdateDto dto) { + CtfService service = repository.findById(port).orElseThrow(); + + log.info("Edited service '{}' at port {}", service.getName(), service.getPort()); + + modelMapper.map(dto, service); + service.setPort(port); + return save(service); + } + + private ServiceDto save(CtfService service) { final CtfService saved = repository.save(service); services.put(saved.getPort(), saved); @@ -92,18 +116,18 @@ public class ServicesService { updateFilter(); - return saved; + return toDto(saved); } public void updateFilter() { pcapService.updateFilter(findAll()); } - public ServiceDto toDto(CtfService service) { + private ServiceDto toDto(CtfService service) { return modelMapper.map(service, ServiceDto.class); } - public CtfService fromDto(ServiceDto dto) { + private CtfService fromDto(ServiceCreateDto dto) { return modelMapper.map(dto, CtfService.class); }