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