From 3e572f248975f2a83c75f6ae720d407cd2709812 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Sat, 5 Jan 2013 19:55:12 +0000 Subject: [PATCH] Prevent reading private room. --- .../java/com/gempukku/lotro/chat/ChatRoomMediator.java | 5 ++++- .../src/main/java/com/gempukku/lotro/chat/ChatServer.java | 2 +- .../main/java/com/gempukku/lotro/game/LotroServer.java | 6 +++--- .../src/main/java/com/gempukku/lotro/hall/HallServer.java | 8 ++++---- .../main/java/com/gempukku/lotro/server/ChatResource.java | 7 +++++-- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatRoomMediator.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatRoomMediator.java index 8048fe129..08ff0cd5c 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatRoomMediator.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatRoomMediator.java @@ -27,9 +27,12 @@ public class ChatRoomMediator { _channelInactivityTimeoutPeriod = 1000 * secondsTimeoutPeriod; } - public List joinUser(String playerId) { + public List joinUser(String playerId, boolean admin) throws PrivateInformationException { _lock.writeLock().lock(); try { + if (!admin && _allowedPlayers != null && !_allowedPlayers.contains(playerId)) + throw new PrivateInformationException(); + GatheringChatRoomListener value = new GatheringChatRoomListener(); _listeners.put(playerId, value); _chatRoom.joinChatRoom(playerId, value); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatServer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatServer.java index fd7091623..35ea3b7c8 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatServer.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/chat/ChatServer.java @@ -21,7 +21,7 @@ public class ChatServer extends AbstractServer { return chatRoom; } - public ChatRoomMediator createVoicedChatRoom(String name, Set allowedUsers, int secondsTimeoutPeriod) { + public ChatRoomMediator createPrivateChatRoom(String name, Set allowedUsers, int secondsTimeoutPeriod) { ChatRoomMediator chatRoom = new ChatRoomMediator(secondsTimeoutPeriod, allowedUsers); try { chatRoom.sendMessage("System", "Welcome to private room: " + name, true); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroServer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroServer.java index eb0fbafcc..b6f0ec4ae 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroServer.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroServer.java @@ -79,18 +79,18 @@ public class LotroServer extends AbstractServer { return "Game" + gameId; } - public String createNewGame(LotroFormat lotroFormat, String tournamentName, final LotroGameParticipant[] participants, boolean allowSpectators, boolean allowCancelling, boolean muteSpectators, boolean competitiveTime) { + public String createNewGame(LotroFormat lotroFormat, String tournamentName, final LotroGameParticipant[] participants, boolean allowSpectators, boolean allowCancelling, boolean allowChatAccess, boolean competitiveTime) { _lock.writeLock().lock(); try { if (participants.length < 2) throw new IllegalArgumentException("There has to be at least two players"); final String gameId = String.valueOf(_nextGameId); - if (muteSpectators) { + if (!allowChatAccess) { Set allowedUsers = new HashSet(); for (LotroGameParticipant participant : participants) allowedUsers.add(participant.getPlayerId()); - _chatServer.createVoicedChatRoom(getChatRoomName(gameId), allowedUsers, 30); + _chatServer.createPrivateChatRoom(getChatRoomName(gameId), allowedUsers, 30); } else _chatServer.createChatRoom(getChatRoomName(gameId), 30); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java index 64c4daf9b..0da59ac06 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java @@ -468,12 +468,12 @@ public class HallServer extends AbstractServer { }; } - createGame(tableId, participants, listener, awaitingTable.getLotroFormat(), getTournamentName(awaitingTable), true, league == null, false, league != null); + createGame(tableId, participants, listener, awaitingTable.getLotroFormat(), getTournamentName(awaitingTable), true, league == null, true, league != null); _awaitingTables.remove(tableId); } - private void createGame(String tableId, LotroGameParticipant[] participants, GameResultListener listener, LotroFormat lotroFormat, String tournamentName, boolean allowSpectators, boolean allowCancelling, boolean muteSpectators, boolean competitiveTime) { - String gameId = _lotroServer.createNewGame(lotroFormat, tournamentName, participants, allowSpectators, allowCancelling, muteSpectators, competitiveTime); + private void createGame(String tableId, LotroGameParticipant[] participants, GameResultListener listener, LotroFormat lotroFormat, String tournamentName, boolean allowSpectators, boolean allowCancelling, boolean allowChatAccess, boolean competitiveTime) { + String gameId = _lotroServer.createNewGame(lotroFormat, tournamentName, participants, allowSpectators, allowCancelling, allowChatAccess, competitiveTime); LotroGameMediator lotroGameMediator = _lotroServer.getGameById(gameId); if (listener != null) lotroGameMediator.addGameResultListener(listener); @@ -631,7 +631,7 @@ public class HallServer extends AbstractServer { public void gameCancelled() { createGameInternal(participants, allowSpectators); } - }, _formatLibrary.getFormat(_tournament.getFormat()), _tournament.getTournamentName(), allowSpectators, false, true, true); + }, _formatLibrary.getFormat(_tournament.getFormat()), _tournament.getTournamentName(), allowSpectators, false, false, true); } } finally { _hallDataAccessLock.writeLock().unlock(); diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/ChatResource.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/ChatResource.java index 27662fa17..8de41c491 100644 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/ChatResource.java +++ b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/ChatResource.java @@ -40,8 +40,8 @@ public class ChatResource extends AbstractResource { ChatRoomMediator chatRoom = _chatServer.getChatRoom(room); if (chatRoom == null) throw new WebApplicationException(Response.Status.NOT_FOUND); - - List chatMessages = chatRoom.joinUser(resourceOwner.getName()); + try { + List chatMessages = chatRoom.joinUser(resourceOwner.getName(), resourceOwner.getType().contains("a")); Collection usersInRoom = chatRoom.getUsersInRoom(); DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); @@ -52,6 +52,9 @@ public class ChatResource extends AbstractResource { serializeChatRoomData(room, chatMessages, usersInRoom, doc); return doc; + } catch (PrivateInformationException exp) { + throw new WebApplicationException(Response.Status.FORBIDDEN); + } } @Path("/{room}")