From a3c6641689f512bcc7e1fdb7cb6cb7c7ee1a7a70 Mon Sep 17 00:00:00 2001 From: Daniel Gerhardt <code@dgerhardt.net> Date: Sun, 18 Feb 2018 20:38:10 +0100 Subject: [PATCH] Fix handling of RoomRepository.findByShortId(null) When null was set as database key, the whole view would be requested before this change. --- .../couchdb/CouchDbRoomRepository.java | 3 +++ .../thm/arsnova/services/RoomServiceImpl.java | 3 +++ .../websocket/ArsnovaSocketioServerImpl.java | 20 ++++++++++--------- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java index fe5e439ba..10f2c44fe 100644 --- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java +++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java @@ -58,6 +58,9 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement @Override public Room findByShortId(final String shortId) { + if (shortId == null) { + return null; + } final List<Room> roomList = queryView("by_shortid", shortId); return !roomList.isEmpty() ? roomList.get(0) : null; diff --git a/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java b/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java index 005d846b9..0a3c73226 100644 --- a/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java +++ b/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java @@ -201,6 +201,9 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R @Override @Cacheable("room.id-by-shortid") public String getIdByShortId(final String shortId) { + if (shortId == null) { + throw new NullPointerException("shortId cannot be null"); + } Room room = roomRepository.findByShortId(shortId); if (room == null) { throw new NotFoundException("No Room exists for short ID"); diff --git a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java index 31f7d3d52..cffb66223 100644 --- a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java +++ b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java @@ -172,16 +172,18 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova return; } final String oldRoomId = userService.getRoomIdByUserId(u.getId()); - if (null != room.getKeyword() && room.getKeyword().equals(oldRoomId)) { - return; - } - final String roomId = roomService.getIdByShortId(room.getKeyword()); + if (null != room.getKeyword()) { + if (room.getKeyword().equals(oldRoomId)) { + return; + } + final String roomId = roomService.getIdByShortId(room.getKeyword()); - if (null != roomId && null != roomService.join(roomId, client.getSessionId())) { - /* active user count has to be sent to the client since the broadcast is - * not always sent as long as the polling solution is active simultaneously */ - reportActiveUserCountForRoom(roomId); - reportRoomDataToClient(roomId, u, client); + if (null != roomId && null != roomService.join(roomId, client.getSessionId())) { + /* active user count has to be sent to the client since the broadcast is + * not always sent as long as the polling solution is active simultaneously */ + reportActiveUserCountForRoom(roomId); + reportRoomDataToClient(roomId, u, client); + } } if (null != oldRoomId) { reportActiveUserCountForRoom(oldRoomId); -- GitLab