From 41bb8d2b637f256d1ec89b74f9d9fff0f2223982 Mon Sep 17 00:00:00 2001 From: serega6531 Date: Mon, 16 Mar 2020 23:32:31 +0300 Subject: [PATCH 1/7] =?UTF-8?q?=D0=92=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B8=20=D0=B2=D1=8B=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B0=D1=82=D1=82=D0=B5=D1=80?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20?= =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PatternController.java | 6 ++--- .../ru/serega6531/packmate/model/Pattern.java | 2 ++ .../model/enums/SubscriptionMessageType.java | 2 +- .../packmate/service/PatternService.java | 24 +++++++------------ 4 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/main/java/ru/serega6531/packmate/controller/PatternController.java b/src/main/java/ru/serega6531/packmate/controller/PatternController.java index 6b4075c..1b00237 100644 --- a/src/main/java/ru/serega6531/packmate/controller/PatternController.java +++ b/src/main/java/ru/serega6531/packmate/controller/PatternController.java @@ -23,9 +23,9 @@ public class PatternController { return service.findAll(); } - @DeleteMapping("/{id}") - public void deletePattern(@PathVariable int id) { - service.deleteById(id); + @PostMapping("/{id}") + public void enable(@PathVariable int id, @RequestParam boolean enabled) { + service.enable(id, enabled); } @PostMapping diff --git a/src/main/java/ru/serega6531/packmate/model/Pattern.java b/src/main/java/ru/serega6531/packmate/model/Pattern.java index bf499fa..80f10f6 100644 --- a/src/main/java/ru/serega6531/packmate/model/Pattern.java +++ b/src/main/java/ru/serega6531/packmate/model/Pattern.java @@ -28,6 +28,8 @@ public class Pattern { @GeneratedValue(generator = "pattern_generator") private int id; + private boolean enabled; + private String name; private String value; 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 af46d09..89ce895 100644 --- a/src/main/java/ru/serega6531/packmate/model/enums/SubscriptionMessageType.java +++ b/src/main/java/ru/serega6531/packmate/model/enums/SubscriptionMessageType.java @@ -1,5 +1,5 @@ package ru.serega6531.packmate.model.enums; public enum SubscriptionMessageType { - SAVE_SERVICE, SAVE_PATTERN, DELETE_SERVICE, DELETE_PATTERN, NEW_STREAM + SAVE_SERVICE, SAVE_PATTERN, DELETE_SERVICE, ENABLE_PATTERN, DISABLE_PATTERN, NEW_STREAM } diff --git a/src/main/java/ru/serega6531/packmate/service/PatternService.java b/src/main/java/ru/serega6531/packmate/service/PatternService.java index 8983c50..8e8b9b8 100644 --- a/src/main/java/ru/serega6531/packmate/service/PatternService.java +++ b/src/main/java/ru/serega6531/packmate/service/PatternService.java @@ -3,10 +3,8 @@ package ru.serega6531.packmate.service; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import ru.serega6531.packmate.model.FoundPattern; import ru.serega6531.packmate.model.Pattern; -import ru.serega6531.packmate.model.Stream; import ru.serega6531.packmate.model.enums.PatternDirectionType; import ru.serega6531.packmate.model.enums.PatternSearchType; import ru.serega6531.packmate.model.enums.SubscriptionMessageType; @@ -52,28 +50,24 @@ public class PatternService { return new PatternMatcher(bytes, list).findMatches(); } - @Transactional - public void deleteById(int id) { + public void enable(int id, boolean enabled) { final Optional optional = repository.findById(id); if (optional.isPresent()) { final Pattern pattern = optional.get(); - log.info("Удален паттерн {} со значением {}", pattern.getName(), pattern.getValue()); + pattern.setEnabled(enabled); - for (Stream stream : pattern.getMatchedStreams()) { - stream.getFoundPatterns().remove(pattern); - stream.getPackets().forEach(p -> - p.getMatches().removeIf(m -> - m.getPatternId() == pattern.getId())); + if(enabled) { + log.info("Включен паттерн {} со значением {}", pattern.getName(), pattern.getValue()); + subscriptionService.broadcast(new SubscriptionMessage(SubscriptionMessageType.ENABLE_PATTERN, id)); + } else { + log.info("Выключен паттерн {} со значением {}", pattern.getName(), pattern.getValue()); + subscriptionService.broadcast(new SubscriptionMessage(SubscriptionMessageType.DISABLE_PATTERN, id)); } - - patterns.remove(id); - repository.delete(pattern); - subscriptionService.broadcast(new SubscriptionMessage(SubscriptionMessageType.DELETE_PATTERN, id)); } } public Pattern save(Pattern pattern) { - if(pattern.getSearchType() == PatternSearchType.REGEX) { + if (pattern.getSearchType() == PatternSearchType.REGEX) { try { PatternMatcher.compilePattern(pattern); } catch (PatternSyntaxException e) { From 388fd7ba52d748094d17df82bec18b2f28943488 Mon Sep 17 00:00:00 2001 From: serega6531 Date: Tue, 7 Apr 2020 00:37:44 +0300 Subject: [PATCH 2/7] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=82=D1=82=D0=B5=D1=80=D0=BD=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serega6531/packmate/controller/PatternController.java | 1 + .../java/ru/serega6531/packmate/service/PatternService.java | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/serega6531/packmate/controller/PatternController.java b/src/main/java/ru/serega6531/packmate/controller/PatternController.java index 1b00237..143ab1e 100644 --- a/src/main/java/ru/serega6531/packmate/controller/PatternController.java +++ b/src/main/java/ru/serega6531/packmate/controller/PatternController.java @@ -30,6 +30,7 @@ public class PatternController { @PostMapping public Pattern addPattern(@RequestBody Pattern pattern) { + pattern.setEnabled(true); return service.save(pattern); } diff --git a/src/main/java/ru/serega6531/packmate/service/PatternService.java b/src/main/java/ru/serega6531/packmate/service/PatternService.java index 8e8b9b8..aa2bec4 100644 --- a/src/main/java/ru/serega6531/packmate/service/PatternService.java +++ b/src/main/java/ru/serega6531/packmate/service/PatternService.java @@ -51,10 +51,10 @@ public class PatternService { } public void enable(int id, boolean enabled) { - final Optional optional = repository.findById(id); - if (optional.isPresent()) { - final Pattern pattern = optional.get(); + final Pattern pattern = find(id); + if (pattern != null) { pattern.setEnabled(enabled); + repository.save(pattern); if(enabled) { log.info("Включен паттерн {} со значением {}", pattern.getName(), pattern.getValue()); From cddd85c96510bb9ddf68ed6cbbdd33f10d64d629 Mon Sep 17 00:00:00 2001 From: saber-nyan Date: Tue, 7 Apr 2020 00:49:39 +0300 Subject: [PATCH 3/7] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D1=84=D1=80=D0=BE=D0=BD=D1=82=D0=B5=D0=BD=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend b/frontend index 4e6a685..74c754c 160000 --- a/frontend +++ b/frontend @@ -1 +1 @@ -Subproject commit 4e6a685e698ad764a69a0b5ce182b60bf130f3b5 +Subproject commit 74c754c0468e14e1db07ee9c38f6b9f44355754b From d668fd4e18117ec59ae3973766122450ec52fc70 Mon Sep 17 00:00:00 2001 From: serega6531 Date: Tue, 7 Apr 2020 00:53:24 +0300 Subject: [PATCH 4/7] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B7=D0=B0=D0=B1=D1=8B=D1=82=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ru/serega6531/packmate/service/PatternService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/serega6531/packmate/service/PatternService.java b/src/main/java/ru/serega6531/packmate/service/PatternService.java index 6063521..cbbaa7b 100644 --- a/src/main/java/ru/serega6531/packmate/service/PatternService.java +++ b/src/main/java/ru/serega6531/packmate/service/PatternService.java @@ -44,6 +44,7 @@ public class PatternService { public Set findMatches(byte[] bytes, boolean incoming) { final List list = patterns.values().stream() + .filter(Pattern::isEnabled) .filter(p -> p.getDirectionType() == (incoming ? PatternDirectionType.INPUT : PatternDirectionType.OUTPUT) || p.getDirectionType() == PatternDirectionType.BOTH) .collect(Collectors.toList()); @@ -54,7 +55,8 @@ public class PatternService { final Pattern pattern = find(id); if (pattern != null) { pattern.setEnabled(enabled); - repository.save(pattern); + final Pattern saved = repository.save(pattern); + patterns.put(id, saved); if (enabled) { log.info("Включен паттерн {} со значением {}", pattern.getName(), pattern.getValue()); From 897aa30b9bfc923a0280e79392073b3b790734e1 Mon Sep 17 00:00:00 2001 From: serega6531 Date: Wed, 8 Apr 2020 17:24:17 +0300 Subject: [PATCH 5/7] =?UTF-8?q?=D0=9E=D0=B1=D1=80=D0=B0=D0=B1=D0=B0=D1=82?= =?UTF-8?q?=D1=8B=D0=B2=D0=B0=D1=8E=D1=82=D1=81=D1=8F=20=D0=B2=D1=81=D0=B5?= =?UTF-8?q?=20WebSocket,=20=D0=B0=20=D0=BD=D0=B5=20=D1=82=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=BA=D0=BE=20=D1=81=D0=B6=D0=B0=D1=82=D1=8B=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packmate/service/WebSocketsParser.java | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/main/java/ru/serega6531/packmate/service/WebSocketsParser.java b/src/main/java/ru/serega6531/packmate/service/WebSocketsParser.java index 0486001..0a66388 100644 --- a/src/main/java/ru/serega6531/packmate/service/WebSocketsParser.java +++ b/src/main/java/ru/serega6531/packmate/service/WebSocketsParser.java @@ -31,8 +31,6 @@ public class WebSocketsParser { private static final java.util.regex.Pattern WEBSOCKET_ACCEPT_PATTERN = java.util.regex.Pattern.compile("Sec-WebSocket-Accept: (.+)\\r\\n"); - private static final String WEBSOCKET_EXTENSION_HEADER = "Sec-WebSocket-Extension: permessage-deflate"; - private static final String WEBSOCKET_EXTENSIONS_HEADER = "Sec-WebSocket-Extensions: permessage-deflate"; private static final String WEBSOCKET_UPGRADE_HEADER = "upgrade: websocket\r\n"; private static final String WEBSOCKET_CONNECTION_HEADER = "connection: upgrade\r\n"; @@ -103,7 +101,6 @@ public class WebSocketsParser { final List handshakes = packets.subList(0, httpEnd); parse(wsPackets, handshakes, draft); - parsed = true; } private void parse(final List wsPackets, final List handshakes, Draft_6455 draft) { @@ -142,6 +139,8 @@ public class WebSocketsParser { } } } + + parsed = true; } public List getParsedPackets() { @@ -190,11 +189,6 @@ public class WebSocketsParser { return null; } - if (!handshake.contains(WEBSOCKET_EXTENSION_HEADER) && - !handshake.contains(WEBSOCKET_EXTENSIONS_HEADER)) { - return null; - } - return handshake; } @@ -212,10 +206,10 @@ public class WebSocketsParser { String key = matcher.group(1); matcher = WEBSOCKET_EXTENSIONS_PATTERN.matcher(clientHandshake); - if (!matcher.find()) { - return null; + String extensions = null; + if (matcher.find()) { + extensions = matcher.group(1); } - String extensions = matcher.group(1); HandshakeImpl1Client clientHandshakeImpl = new HandshakeImpl1Client(); @@ -223,7 +217,10 @@ public class WebSocketsParser { clientHandshakeImpl.put("Connection", "Upgrade"); clientHandshakeImpl.put("Sec-WebSocket-Version", version); clientHandshakeImpl.put("Sec-WebSocket-Key", key); - clientHandshakeImpl.put("Sec-WebSocket-Extensions", extensions); + + if(extensions != null) { + clientHandshakeImpl.put("Sec-WebSocket-Extensions", extensions); + } return clientHandshakeImpl; } @@ -236,10 +233,10 @@ public class WebSocketsParser { String accept = matcher.group(1); matcher = WEBSOCKET_EXTENSIONS_PATTERN.matcher(serverHandshake); - if (!matcher.find()) { - return null; + String extensions = null; + if (matcher.find()) { + extensions = matcher.group(1); } - String extensions = matcher.group(1); HandshakeImpl1Server serverHandshakeImpl = new HandshakeImpl1Server(); From c1979b04a36a723483686378f25e6056adee9719 Mon Sep 17 00:00:00 2001 From: serega6531 Date: Wed, 8 Apr 2020 17:50:37 +0300 Subject: [PATCH 6/7] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B8=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D1=8B=20=D0=BF=D0=BE=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ru/serega6531/packmate/model/CtfService.java | 2 +- .../java/ru/serega6531/packmate/model/Packet.java | 2 +- .../serega6531/packmate/service/StreamOptimizer.java | 12 ++++++------ .../packmate/service/WebSocketsParser.java | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/ru/serega6531/packmate/model/CtfService.java b/src/main/java/ru/serega6531/packmate/model/CtfService.java index 58bef42..cef59cc 100644 --- a/src/main/java/ru/serega6531/packmate/model/CtfService.java +++ b/src/main/java/ru/serega6531/packmate/model/CtfService.java @@ -22,6 +22,6 @@ public class CtfService { private boolean mergeAdjacentPackets; - private boolean inflateWebSockets; + private boolean parseWebSockets; } \ No newline at end of file diff --git a/src/main/java/ru/serega6531/packmate/model/Packet.java b/src/main/java/ru/serega6531/packmate/model/Packet.java index b0a6f7b..eb2f21e 100644 --- a/src/main/java/ru/serega6531/packmate/model/Packet.java +++ b/src/main/java/ru/serega6531/packmate/model/Packet.java @@ -52,7 +52,7 @@ public class Packet { private boolean ungzipped; - private boolean webSocketInflated; + private boolean webSocketParsed; private byte[] content; diff --git a/src/main/java/ru/serega6531/packmate/service/StreamOptimizer.java b/src/main/java/ru/serega6531/packmate/service/StreamOptimizer.java index 7050fc8..e2c07ea 100644 --- a/src/main/java/ru/serega6531/packmate/service/StreamOptimizer.java +++ b/src/main/java/ru/serega6531/packmate/service/StreamOptimizer.java @@ -36,8 +36,8 @@ public class StreamOptimizer { unpackGzip(); } - if (service.isInflateWebSockets()) { - inflateWebSocket(); + if (service.isParseWebSockets()) { + parseWebSockets(); } if (service.isUrldecodeHttpRequests()) { @@ -89,7 +89,7 @@ public class StreamOptimizer { final List cut = packets.subList(start, end); final long timestamp = cut.get(0).getTimestamp(); final boolean ungzipped = cut.stream().anyMatch(Packet::isUngzipped); - final boolean webSocketInflated = cut.stream().anyMatch(Packet::isWebSocketInflated); + final boolean webSocketParsed = cut.stream().anyMatch(Packet::isWebSocketParsed); boolean incoming = cut.get(0).isIncoming(); //noinspection OptionalGetWithoutIsPresent final byte[] content = cut.stream() @@ -102,7 +102,7 @@ public class StreamOptimizer { .incoming(incoming) .timestamp(timestamp) .ungzipped(ungzipped) - .webSocketInflated(webSocketInflated) + .webSocketParsed(webSocketParsed) .content(content) .build()); } @@ -223,7 +223,7 @@ public class StreamOptimizer { .incoming(false) .timestamp(cut.get(0).getTimestamp()) .ungzipped(true) - .webSocketInflated(false) + .webSocketParsed(false) .content(newContent) .build(); } catch (ZipException e) { @@ -235,7 +235,7 @@ public class StreamOptimizer { return null; } - private void inflateWebSocket() { + private void parseWebSockets() { if (!packets.get(0).getContentString().contains("HTTP/")) { return; } diff --git a/src/main/java/ru/serega6531/packmate/service/WebSocketsParser.java b/src/main/java/ru/serega6531/packmate/service/WebSocketsParser.java index 0a66388..5d59845 100644 --- a/src/main/java/ru/serega6531/packmate/service/WebSocketsParser.java +++ b/src/main/java/ru/serega6531/packmate/service/WebSocketsParser.java @@ -133,7 +133,7 @@ public class WebSocketsParser { .timestamp(lastPacket.getTimestamp()) .ttl(lastPacket.getTtl()) .ungzipped(lastPacket.isUngzipped()) - .webSocketInflated(true) + .webSocketParsed(true) .build() ); } From 04efb5fef902db2e01c5b2e268a6a17845c1a637 Mon Sep 17 00:00:00 2001 From: serega6531 Date: Fri, 10 Apr 2020 18:22:42 +0300 Subject: [PATCH 7/7] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=84=D1=80=D0=BE=D0=BD=D1=82=D0=B5=D0=BD=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend b/frontend index 74c754c..2816964 160000 --- a/frontend +++ b/frontend @@ -1 +1 @@ -Subproject commit 74c754c0468e14e1db07ee9c38f6b9f44355754b +Subproject commit 28169642b4ba9f590d994b8a008bf782db852e7e