From 398b869e5998a226ea2469a422f4dc465329470f Mon Sep 17 00:00:00 2001 From: Royce59 Date: Thu, 2 Apr 2026 00:31:18 +0200 Subject: [PATCH] =?UTF-8?q?=D0=9C=D0=B5=D1=82=D0=BE=D0=B4=D1=8B=20=D0=B2?= =?UTF-8?q?=20SignalPeer=20=D0=B1=D0=B5=D0=B7=20=D0=B0=D0=B2=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executors/Executor26SignalPeer.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/im/rosetta/executors/Executor26SignalPeer.java b/src/main/java/im/rosetta/executors/Executor26SignalPeer.java index aea72be..c4371f6 100644 --- a/src/main/java/im/rosetta/executors/Executor26SignalPeer.java +++ b/src/main/java/im/rosetta/executors/Executor26SignalPeer.java @@ -1,6 +1,8 @@ package im.rosetta.executors; import java.util.HashMap; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; import im.rosetta.Failures; @@ -24,6 +26,19 @@ public class Executor26SignalPeer extends PacketExecutor { private ClientManager clientManager; private ForwardUnitService fus; private PushNotifyDispatcher pushNotifyDispatcher = new PushNotifyDispatcher(); + /** + * Сигналы, которые может выполнять только авторизованный пользователь, + * все сигналы, которые не входят в этот перечень, будут доступны для + * исполнения без авторизации. + */ + private Set authentificatedTypes = new HashSet<>(){{ + add(NetworkSignalType.CALL); + /** + * Так как комнату создает звонящий, то комнату может создать только + * авторизованный пользователь + */ + add(NetworkSignalType.CREATE_ROOM); + }}; public Executor26SignalPeer(ClientManager clientManager, ForwardUnitService fus) { this.clientManager = clientManager; @@ -35,15 +50,17 @@ public class Executor26SignalPeer extends PacketExecutor { String src = packet.getSrc(); String dst = packet.getDst(); ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class); - if (eciAuthentificate == null || !eciAuthentificate.hasAuthorized()) { + NetworkSignalType type = packet.getSignalType(); + if ((eciAuthentificate == null || !eciAuthentificate.hasAuthorized()) + && this.authentificatedTypes.contains(type)) { /** - * Если клиент не авторизован, то мы не будем обрабатывать его сигналы на анициализацию звонка + * Если клиент не авторизован, то мы не будем обрабатывать его сигналы на инициализацию звонка и создание комнаты * и просто отключим его от сервера. */ client.disconnect(Failures.HANDSHAKE_NOT_COMPLETED); return; } - if(!src.equals(eciAuthentificate.getPublicKey())) { + if(!src.equals(eciAuthentificate.getPublicKey()) && authentificatedTypes.contains(type)) { /** * Если src в пакете не совпадает с авторизованным PK клиента, то это может означать, что клиент пытается * отправить сигнал от другого пользователя, отключаем его от сервера. @@ -51,7 +68,6 @@ public class Executor26SignalPeer extends PacketExecutor { client.disconnect(Failures.DATA_MISSMATCH); return; } - NetworkSignalType type = packet.getSignalType(); if(type == NetworkSignalType.CALL) { /** * Инициируется звонок от src к dst, проверяем, что dst не занят другим звонком, если занят, то отправляем сигнал END_CALL_BECAUSE_BUSY обратно src