From 4cd5e72fee46dbec20af75727ab5552dd3a540dd Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 27 Apr 2023 23:19:16 +0000 Subject: [PATCH] Implement pattern removal --- frontend | 2 +- .../packmate/controller/PatternController.java | 8 +++++++- .../java/ru/serega6531/packmate/model/Pattern.java | 12 ++++++++++-- .../model/enums/SubscriptionMessageType.java | 2 +- .../serega6531/packmate/model/pojo/PatternDto.java | 1 + .../packmate/service/PatternService.java | 14 +++++++++++++- 6 files changed, 33 insertions(+), 6 deletions(-) diff --git a/frontend b/frontend index cfdfc9e..db8370e 160000 --- a/frontend +++ b/frontend @@ -1 +1 @@ -Subproject commit cfdfc9e5781ea8c98b95fcd22ad1db814250ba64 +Subproject commit db8370e40cf3ce4e0e30ba89c6c0d1531704b2ce diff --git a/src/main/java/ru/serega6531/packmate/controller/PatternController.java b/src/main/java/ru/serega6531/packmate/controller/PatternController.java index 6ddb437..445cbda 100644 --- a/src/main/java/ru/serega6531/packmate/controller/PatternController.java +++ b/src/main/java/ru/serega6531/packmate/controller/PatternController.java @@ -1,6 +1,7 @@ package ru.serega6531.packmate.controller; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -32,11 +33,16 @@ public class PatternController { .toList(); } - @PostMapping("/{id}") + @PostMapping("/{id}/enable") public void enable(@PathVariable int id, @RequestParam boolean enabled) { service.enable(id, enabled); } + @DeleteMapping("/{id}") + public void delete(@PathVariable int id) { + service.delete(id); + } + @PostMapping("/{id}/lookback") public void lookBack(@PathVariable int id, @RequestBody int minutes) { if (minutes < 1) { diff --git a/src/main/java/ru/serega6531/packmate/model/Pattern.java b/src/main/java/ru/serega6531/packmate/model/Pattern.java index 345ed06..9352a3d 100644 --- a/src/main/java/ru/serega6531/packmate/model/Pattern.java +++ b/src/main/java/ru/serega6531/packmate/model/Pattern.java @@ -1,5 +1,10 @@ package ru.serega6531.packmate.model; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; @@ -11,14 +16,13 @@ import ru.serega6531.packmate.model.enums.PatternActionType; import ru.serega6531.packmate.model.enums.PatternDirectionType; import ru.serega6531.packmate.model.enums.PatternSearchType; -import jakarta.persistence.*; import java.util.Objects; @Getter @Setter @RequiredArgsConstructor @ToString -@Entity +@Entity(name = "pattern") @GenericGenerator( name = "pattern_generator", strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator", @@ -34,8 +38,12 @@ public class Pattern { @GeneratedValue(generator = "pattern_generator") private Integer id; + @Column(nullable = false) private boolean enabled; + @Column(nullable = false) + private boolean deleted = false; + @Column(nullable = false) private String name; diff --git a/src/main/java/ru/serega6531/packmate/model/enums/SubscriptionMessageType.java b/src/main/java/ru/serega6531/packmate/model/enums/SubscriptionMessageType.java index 921a0aa..324d56b 100644 --- a/src/main/java/ru/serega6531/packmate/model/enums/SubscriptionMessageType.java +++ b/src/main/java/ru/serega6531/packmate/model/enums/SubscriptionMessageType.java @@ -2,7 +2,7 @@ package ru.serega6531.packmate.model.enums; public enum SubscriptionMessageType { SAVE_SERVICE, SAVE_PATTERN, - DELETE_SERVICE, DELETE_PATTERN, + DELETE_SERVICE, NEW_STREAM, FINISH_LOOKBACK, COUNTERS_UPDATE, diff --git a/src/main/java/ru/serega6531/packmate/model/pojo/PatternDto.java b/src/main/java/ru/serega6531/packmate/model/pojo/PatternDto.java index 2186f73..c2c514f 100644 --- a/src/main/java/ru/serega6531/packmate/model/pojo/PatternDto.java +++ b/src/main/java/ru/serega6531/packmate/model/pojo/PatternDto.java @@ -10,6 +10,7 @@ public class PatternDto { private int id; private boolean enabled; + private boolean deleted; private String name; private String value; private String color; diff --git a/src/main/java/ru/serega6531/packmate/service/PatternService.java b/src/main/java/ru/serega6531/packmate/service/PatternService.java index 06fcc61..dc81f2b 100644 --- a/src/main/java/ru/serega6531/packmate/service/PatternService.java +++ b/src/main/java/ru/serega6531/packmate/service/PatternService.java @@ -62,7 +62,7 @@ public class PatternService { public Set findMatches(byte[] bytes, CtfService service, PatternDirectionType directionType, PatternActionType actionType) { final List list = patterns.values().stream() - .filter(Pattern::isEnabled) + .filter(pattern -> pattern.isEnabled() && !pattern.isDeleted()) .filter(p -> p.getServiceId() == null || p.getServiceId().equals(service.getPort())) .filter(p -> p.getActionType() == actionType) .filter(p -> p.getDirectionType() == directionType || p.getDirectionType() == PatternDirectionType.BOTH) @@ -91,6 +91,18 @@ public class PatternService { } } + public void delete(int id) { + final Pattern pattern = find(id); + if (pattern != null) { + pattern.setDeleted(true); + final Pattern saved = repository.save(pattern); + patterns.put(id, saved); + + log.info("Deleted pattern '{}' with value '{}'", pattern.getName(), pattern.getValue()); + subscriptionService.broadcast(new SubscriptionMessage(SubscriptionMessageType.SAVE_PATTERN, toDto(saved))); + } + } + public Pattern save(Pattern pattern) { try { PatternMatcher.compilePattern(pattern);