From 2e5d49aa71683ed96dcd5f3d232879157af31629 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20St=C3=A4hr?= <software@mstaehr.net>
Date: Wed, 6 Jun 2018 20:55:27 +0200
Subject: [PATCH] feat: implemented dummyservice and registration mechanism

---
 .../gf/core/management/ManagementImpl.java    |  4 +-
 .../gf/core/management/user/User.java         | 26 +++++++++
 .../gf/core/management/user/UserService.java  | 54 +++++++++++++-----
 .../service/CommunicationDummyService.java    | 55 +++++++++++++++++++
 gemeinsamforschen/src/main/webapp/index.jsp   | 17 +++++-
 .../src/main/webapp/register.jsp              | 21 +++++--
 .../CommunicationDummyServiceTest.java        | 38 +++++++++++++
 7 files changed, 193 insertions(+), 22 deletions(-)
 create mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java
 create mode 100644 gemeinsamforschen/src/test/java/unipotsdam/gf/modules/communication/service/CommunicationDummyServiceTest.java

diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java
index d16651d0..dfffd4df 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java
@@ -112,8 +112,10 @@ public class ManagementImpl implements Management {
         String name = vereinfachtesResultSet.getString("name");
         String password = vereinfachtesResultSet.getString("password");
         String email = vereinfachtesResultSet.getString("email");
+        String rocketChatId = vereinfachtesResultSet.getString("rocketchatid");
         Boolean isStudent = vereinfachtesResultSet.getBoolean("isStudent");
-        return new User(name, password, email, isStudent);
+
+        return new User(name, password, email, rocketChatId, isStudent);
     }
 
     @Override
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/User.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/User.java
index bf184705..22f61571 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/User.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/User.java
@@ -13,6 +13,8 @@ public class User {
     private String password;
     private String email;
     private String token;
+    private String rocketChatAuthToken;
+    private String rocketChatId;
     private Boolean isStudent;
 
     public User() {
@@ -25,6 +27,14 @@ public class User {
         this.isStudent = isStudent;
     }
 
+    public User(String name, String password, String email, String rocketChatId, Boolean isStudent) {
+        this.name = name;
+        this.password = password;
+        this.email = email;
+        this.rocketChatId = rocketChatId;
+        this.isStudent = isStudent;
+    }
+
     public String getName() {
         return name;
     }
@@ -66,4 +76,20 @@ public class User {
     public void setStudent(Boolean student) {
         isStudent = student;
     }
+
+    public String getRocketChatId() {
+        return rocketChatId;
+    }
+
+    public void setRocketChatId(String rocketChatId) {
+        this.rocketChatId = rocketChatId;
+    }
+
+    public String getRocketChatAuthToken() {
+        return rocketChatAuthToken;
+    }
+
+    public void setRocketChatAuthToken(String rocketChatAuthToken) {
+        this.rocketChatAuthToken = rocketChatAuthToken;
+    }
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java
index 41af68ce..55ce5e59 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java
@@ -1,14 +1,13 @@
 package unipotsdam.gf.core.management.user;
 
 import unipotsdam.gf.core.management.ManagementImpl;
-import unipotsdam.gf.core.management.user.User;
-import unipotsdam.gf.interfaces.IMunschkin;
-import unipotsdam.gf.modules.munchkin.controller.MunchkinImpl;
-import unipotsdam.gf.modules.munchkin.model.Munschkin;
+import unipotsdam.gf.interfaces.ICommunication;
+import unipotsdam.gf.modules.communication.service.CommunicationDummyService;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.ws.rs.*;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import java.net.URI;
@@ -19,6 +18,7 @@ public class UserService {
 
     /**
      * creates a user with given credentials
+     *
      * @param name
      * @param password
      * @param email
@@ -33,14 +33,21 @@ public class UserService {
     public Response createUser(@FormParam("name") String name, @FormParam("password") String password,
                                @FormParam("email") String email, @FormParam("isStudent") String isStudent)
             throws URISyntaxException {
+
         ManagementImpl management = new ManagementImpl();
         User user = new User(name, password, email, isStudent == null);
-        return login(true, user);
+        ICommunication iCommunication = new CommunicationDummyService();
+        boolean chatUserCreated = iCommunication.registerUser(user);
+        if (chatUserCreated) {
+            return login(true, user);
+        } else {
+            return registrationError();
+        }
     }
-
-
+    
     /**
      * checks if a user exists in order to log him in
+     *
      * @param name
      * @param password
      * @param email
@@ -56,12 +63,21 @@ public class UserService {
             throws URISyntaxException {
 
         ManagementImpl management = new ManagementImpl();
-        User user = new User(name, password, email,  null);
-        return login(false, user);
+        User user = new User(name, password, email, null);
+        ICommunication iCommunication = new CommunicationDummyService();
+        boolean isLoggedIn = iCommunication.loginUser(user);
+        if (isLoggedIn) {
+            return login(false, user);
+        } else {
+            return loginError();
+        }
+
+
     }
 
     /**
      * if create User is true, the user is created and logged in if he does not exist
+     *
      * @param createUser
      * @param user
      * @return
@@ -86,8 +102,19 @@ public class UserService {
         }
     }
 
+    private Response registrationError() throws URISyntaxException {
+        String existsUrl = "../register.jsp?registrationError=true";
+        return forwardToLocation(existsUrl);
+    }
+
+    private Response loginError() throws URISyntaxException {
+        String existsUrl = "../index.jsp?loginError=true";
+        return forwardToLocation(existsUrl);
+    }
+
     /**
      * helper function for redirecting to the right project page
+     *
      * @param user
      * @param management
      * @return
@@ -105,7 +132,8 @@ public class UserService {
     }
 
     /**
-     *   * helper function for redirecting to a new page
+     * * helper function for redirecting to a new page
+     *
      * @param existsUrl
      * @return
      * @throws URISyntaxException
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java
new file mode 100644
index 00000000..b2b4fe61
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java
@@ -0,0 +1,55 @@
+package unipotsdam.gf.modules.communication.service;
+
+import unipotsdam.gf.core.management.user.User;
+import unipotsdam.gf.interfaces.ICommunication;
+import unipotsdam.gf.modules.communication.model.Message;
+import unipotsdam.gf.modules.communication.model.chat.ChatMessage;
+import unipotsdam.gf.modules.communication.model.chat.ChatRoom;
+
+import java.util.List;
+
+public class CommunicationDummyService implements ICommunication {
+
+    @Override
+    public List<ChatMessage> getChatHistory(String roomId) {
+        return null;
+    }
+
+    @Override
+    public boolean sendMessageToChat(Message message) {
+        return false;
+    }
+
+    @Override
+    public String createChatRoom(String name, List<User> studentIdentifierList) {
+        return null;
+    }
+
+    @Override
+    public boolean addUserToChatRoom(String roomId, User user) {
+        return false;
+    }
+
+    @Override
+    public boolean setChatRoomTopic(String roomId, String topic) {
+        return false;
+    }
+
+    @Override
+    public ChatRoom getChatRoomInfo(String roomId) {
+        return null;
+    }
+
+    @Override
+    public boolean loginUser(User user) {
+        user.setRocketChatId("1");
+        user.setRocketChatAuthToken("abc");
+        return true;
+    }
+
+    @Override
+    public boolean registerUser(User user) {
+        user.setRocketChatId("1");
+        return true;
+    }
+}
diff --git a/gemeinsamforschen/src/main/webapp/index.jsp b/gemeinsamforschen/src/main/webapp/index.jsp
index 456d3a5e..d8080c28 100644
--- a/gemeinsamforschen/src/main/webapp/index.jsp
+++ b/gemeinsamforschen/src/main/webapp/index.jsp
@@ -30,12 +30,23 @@
             <button class="btn btn-primary btn-block" type="submit">login</button>
             <!-- scriptlets are terrible. Just tmp for porting the php -->
             <%
-                String param = request.getParameter("userExists");
-                if (param != null) {
+                String message = "";
+
+                String userExists = request.getParameter("userExists");
+                if (userExists != null) {
+                    message = "Nutzer oder Passwort inkorrekt";
+                }
+
+                String loginError = request.getParameter("loginError");
+                if (loginError != null) {
+                    message = "Login bei RocketChat fehlgeschlagen! Bitte kontaktieren Sie den Administrator";
+                }
+
+                if (!message.isEmpty()) {
                     try {
                         PrintWriter p = response.getWriter();
                         p.println(
-                         "<div class=\"alert alert-danger\" role=\"alert\"> Nutzer oder Passwort inkorrekt</div>");
+                                "<div class=\"alert alert-danger\" role=\"alert\"> " + message + "</div>");
                     } finally {
 
                     }
diff --git a/gemeinsamforschen/src/main/webapp/register.jsp b/gemeinsamforschen/src/main/webapp/register.jsp
index b26260ff..0396159d 100644
--- a/gemeinsamforschen/src/main/webapp/register.jsp
+++ b/gemeinsamforschen/src/main/webapp/register.jsp
@@ -43,8 +43,8 @@
         <div class="form-group">
             <!-- scriptlets are terrible. Just tmp for porting the php -->
             <%--     <%
-                     String param = request.getParameter("userExists");
-                     if (param != null) {
+                     String userExists = request.getParameter("userExists");
+                     if (userExists != null) {
                          try (PrintWriter p = response.getWriter()) {
                              p.println(
                                      "<div class=\"alert alert-danger\" role=\"alert\"> Es existiert ein Nutzer mit dieser Email oder diesem Benutzernamen! </div>");
@@ -53,12 +53,23 @@
                  %>--%>
 
             <%
-                String param = request.getParameter("userExists");
-                if (param != null) {
+                String message = "";
+
+                String userExists = request.getParameter("userExists");
+                if (userExists != null) {
+                    message = "Es existiert ein Nutzer mit dieser Email oder diesem Benutzernamen!";
+                }
+
+                String registrationError = request.getParameter("registrationError");
+                if (registrationError != null) {
+                    message = "Es ist ein Fehler beim Erstellen des Rocket Chat-Nutzers aufgetreten. Bitte kontaktieren Sie den Administrator";
+                }
+
+                if (!message.isEmpty()) {
                     try {
                         PrintWriter p = response.getWriter();
                         p.println(
-                                "<div class=\"alert alert-danger\" role=\"alert\"> Es existiert ein Nutzer mit dieser Email oder diesem Benutzernamen! </div>");
+                                "<div class=\"alert alert-danger\" role=\"alert\"> " + message + " </div>");
                     } finally {
 
                     }
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/communication/service/CommunicationDummyServiceTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/communication/service/CommunicationDummyServiceTest.java
new file mode 100644
index 00000000..76eb6fcd
--- /dev/null
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/communication/service/CommunicationDummyServiceTest.java
@@ -0,0 +1,38 @@
+package unipotsdam.gf.modules.communication.service;
+
+import org.junit.Before;
+import org.junit.Test;
+import unipotsdam.gf.core.management.user.User;
+import unipotsdam.gf.interfaces.ICommunication;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+public class CommunicationDummyServiceTest {
+
+    private ICommunication iCommunication;
+    private User user;
+
+    @Before
+    public void setUp() {
+        iCommunication = new CommunicationDummyService();
+        user = new User("name", "password", "email", true);
+    }
+
+    @Test
+    public void loginUser() {
+        boolean isLoggedIn = iCommunication.loginUser(user);
+        assertNotNull(user.getRocketChatId());
+        assertNotNull(user.getRocketChatAuthToken());
+        assertTrue(isLoggedIn);
+    }
+
+    @Test
+    public void registerUser() {
+        boolean userCreated = iCommunication.registerUser(user);
+        assertNotNull(user.getRocketChatId());
+        assertNull(user.getRocketChatAuthToken());
+        assertTrue(userCreated);
+    }
+}
-- 
GitLab