Методы в SignalPeer без авторизации

This commit is contained in:
2026-04-02 00:31:18 +02:00
parent b07f76ba1e
commit 398b869e59

View File

@@ -1,6 +1,8 @@
package im.rosetta.executors; package im.rosetta.executors;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
import im.rosetta.Failures; import im.rosetta.Failures;
@@ -24,6 +26,19 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
private ClientManager clientManager; private ClientManager clientManager;
private ForwardUnitService fus; private ForwardUnitService fus;
private PushNotifyDispatcher pushNotifyDispatcher = new PushNotifyDispatcher(); private PushNotifyDispatcher pushNotifyDispatcher = new PushNotifyDispatcher();
/**
* Сигналы, которые может выполнять только авторизованный пользователь,
* все сигналы, которые не входят в этот перечень, будут доступны для
* исполнения без авторизации.
*/
private Set<NetworkSignalType> authentificatedTypes = new HashSet<>(){{
add(NetworkSignalType.CALL);
/**
* Так как комнату создает звонящий, то комнату может создать только
* авторизованный пользователь
*/
add(NetworkSignalType.CREATE_ROOM);
}};
public Executor26SignalPeer(ClientManager clientManager, ForwardUnitService fus) { public Executor26SignalPeer(ClientManager clientManager, ForwardUnitService fus) {
this.clientManager = clientManager; this.clientManager = clientManager;
@@ -35,15 +50,17 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
String src = packet.getSrc(); String src = packet.getSrc();
String dst = packet.getDst(); String dst = packet.getDst();
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class); 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); client.disconnect(Failures.HANDSHAKE_NOT_COMPLETED);
return; return;
} }
if(!src.equals(eciAuthentificate.getPublicKey())) { if(!src.equals(eciAuthentificate.getPublicKey()) && authentificatedTypes.contains(type)) {
/** /**
* Если src в пакете не совпадает с авторизованным PK клиента, то это может означать, что клиент пытается * Если src в пакете не совпадает с авторизованным PK клиента, то это может означать, что клиент пытается
* отправить сигнал от другого пользователя, отключаем его от сервера. * отправить сигнал от другого пользователя, отключаем его от сервера.
@@ -51,7 +68,6 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
client.disconnect(Failures.DATA_MISSMATCH); client.disconnect(Failures.DATA_MISSMATCH);
return; return;
} }
NetworkSignalType type = packet.getSignalType();
if(type == NetworkSignalType.CALL) { if(type == NetworkSignalType.CALL) {
/** /**
* Инициируется звонок от src к dst, проверяем, что dst не занят другим звонком, если занят, то отправляем сигнал END_CALL_BECAUSE_BUSY обратно src * Инициируется звонок от src к dst, проверяем, что dst не занят другим звонком, если занят, то отправляем сигнал END_CALL_BECAUSE_BUSY обратно src