From e1643e49b71cb9184ad7147392325a5d79d147e2 Mon Sep 17 00:00:00 2001 From: Martin Staehr <software@mstaehr.net> Date: Mon, 24 Sep 2018 23:04:32 +0200 Subject: [PATCH] #63 feat: implement login for rocketChat api; add new fields for rocketChat information to user database --- gemeinsamforschen/pom.xml | 19 ++++- .../java/unipotsdam/gf/config/Constants.java | 6 -- .../gf/config/GFApplicationBinder.java | 2 + .../gf/core/management/user/User.java | 49 ++++++++---- .../gf/core/management/user/UserDAO.java | 9 ++- .../gf/core/management/user/UserService.java | 5 +- .../core/management/util/ResultSetUtil.java | 7 +- .../unipotsdam/gf/core/states/PhasesImpl.java | 6 +- .../gf/interfaces/ICommunication.java | 11 +-- .../gf/modules/communication/ChatWindow.java | 3 +- .../model/rocketChat/RocketChatResponse.java | 75 +++++++++++++++++++ .../service/CommunicationDummyService.java | 57 ++++++++++---- .../communication/service/UnirestService.java | 38 ++++++++++ .../src/scripts/dbschema/createDummyUser.sql | 10 +-- .../createDummyUsersGroupsProject.sql | 16 ++-- .../core/management/group/GroupDAOTest.java | 8 +- .../CommunicationDummyServiceTest.java | 16 ++-- .../DummyProjectCreationServiceTest.java | 3 +- .../src/test/resources/database/fltrail.sql | 4 +- 19 files changed, 263 insertions(+), 81 deletions(-) delete mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/config/Constants.java create mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/model/rocketChat/RocketChatResponse.java create mode 100644 gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/UnirestService.java diff --git a/gemeinsamforschen/pom.xml b/gemeinsamforschen/pom.xml index b62bf5b5..0f1368f6 100644 --- a/gemeinsamforschen/pom.xml +++ b/gemeinsamforschen/pom.xml @@ -24,6 +24,7 @@ <properties> <org.springframework.version>3.2.4.RELEASE</org.springframework.version> <jersey.version>2.6</jersey.version> + <jackson.version>2.9.4</jackson.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> @@ -106,25 +107,25 @@ <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> - <version>2.4.5</version> + <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> - <version>2.4.5</version> + <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> - <version>2.4.5</version> + <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> - <version>2.4.5</version> + <version>${jackson.version}</version> </dependency> <dependency> @@ -226,6 +227,16 @@ <artifactId>commons-dbutils</artifactId> <version>1.7</version> </dependency> + <dependency> + <groupId>io.github.openunirest</groupId> + <artifactId>unirest-java</artifactId> + <version>2.4.02</version> + </dependency> + <dependency> + <groupId>io.github.openunirest</groupId> + <artifactId>object-mappers-jackson</artifactId> + <version>1.0.01</version> + </dependency> </dependencies> diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/Constants.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/Constants.java deleted file mode 100644 index 12586278..00000000 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/Constants.java +++ /dev/null @@ -1,6 +0,0 @@ -package unipotsdam.gf.config; - -public interface Constants { - - String ROCKET_CHAT_URL = "http://rocketchat.westeurope.cloudapp.azure.com"; -} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java index a3c34133..9ec68034 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java @@ -16,6 +16,7 @@ import unipotsdam.gf.interfaces.IPeerAssessment; import unipotsdam.gf.interfaces.IPhases; import unipotsdam.gf.modules.assessment.controller.service.PeerAssessmentDummy; import unipotsdam.gf.modules.communication.service.CommunicationDummyService; +import unipotsdam.gf.modules.communication.service.UnirestService; import unipotsdam.gf.modules.groupfinding.DummyGroupfinding; import unipotsdam.gf.modules.groupfinding.GroupfindingImpl; import unipotsdam.gf.modules.groupfinding.dummy.service.DummyProjectCreationService; @@ -46,5 +47,6 @@ public class GFApplicationBinder extends AbstractBinder { bind(GroupDAO.class).to(GroupDAO.class); bind(MysqlConnect.class).to(MysqlConnect.class); bind(GroupfindingImpl.class).to(IGroupFinding.class); + bind(UnirestService.class).to(UnirestService.class); } } 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 39606a39..db40d181 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 @@ -14,28 +14,31 @@ public class User { private String password; private String email; private String token; + private String rocketChatUsername; private String rocketChatAuthToken; - private String rocketChatId; + private String rocketChatPersonalAccessToken; + private String rocketChatUserId; private Boolean isStudent; public User() { } public User(String name, String password, String email, Boolean isStudent) { - this(name, password, email, "", "", isStudent); + this(name, password, email, "", "", "", + "", "", isStudent); } - public User(String name, String password, String email, String rocketChatId, String rocketChatAuthToken, Boolean isStudent) { - this(name, password, email, "", rocketChatAuthToken, rocketChatId, isStudent); - } - - public User(String name, String password, String email, String token, String rocketChatAuthToken, String rocketChatId, Boolean isStudent) { + public User(String name, String password, String email, String token, String rocketChatUsername, + String rocketChatAuthToken, String rocketChatPersonalAccessToken, String rocketChatUserId, + Boolean isStudent) { this.name = name; this.password = password; this.email = email; this.token = token; + this.rocketChatUsername = rocketChatUsername; this.rocketChatAuthToken = rocketChatAuthToken; - this.rocketChatId = rocketChatId; + this.rocketChatPersonalAccessToken = rocketChatPersonalAccessToken; + this.rocketChatUserId = rocketChatUserId; this.isStudent = isStudent; } @@ -85,12 +88,12 @@ public class User { isStudent = student; } - public String getRocketChatId() { - return rocketChatId; + public String getRocketChatUserId() { + return rocketChatUserId; } - public void setRocketChatId(String rocketChatId) { - this.rocketChatId = rocketChatId; + public void setRocketChatUserId(String rocketChatUserId) { + this.rocketChatUserId = rocketChatUserId; } public String getRocketChatAuthToken() { @@ -101,6 +104,22 @@ public class User { this.rocketChatAuthToken = rocketChatAuthToken; } + public String getRocketChatUsername() { + return rocketChatUsername; + } + + public void setRocketChatUsername(String rocketChatUsername) { + this.rocketChatUsername = rocketChatUsername; + } + + public String getRocketChatPersonalAccessToken() { + return rocketChatPersonalAccessToken; + } + + public void setRocketChatPersonalAccessToken(String rocketChatPersonalAccessToken) { + this.rocketChatPersonalAccessToken = rocketChatPersonalAccessToken; + } + @Override public String toString() { return "User{" + @@ -108,8 +127,10 @@ public class User { ", password='" + password + '\'' + ", email='" + email + '\'' + ", token='" + token + '\'' + + ", rocketChatUsername='" + rocketChatUsername + '\'' + ", rocketChatAuthToken='" + rocketChatAuthToken + '\'' + - ", rocketChatId='" + rocketChatId + '\'' + + ", rocketChatPersonalAccessToken='" + rocketChatPersonalAccessToken + '\'' + + ", rocketChatUserId='" + rocketChatUserId + '\'' + ", isStudent=" + isStudent + '}'; } @@ -123,7 +144,7 @@ public class User { Objects.equals(password, user.password) && Objects.equals(email, user.email) && Objects.equals(rocketChatAuthToken, user.rocketChatAuthToken) && - Objects.equals(rocketChatId, user.rocketChatId) && + Objects.equals(rocketChatUserId, user.rocketChatUserId) && Objects.equals(isStudent, user.isStudent); } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserDAO.java index 01ed0681..461b5ff7 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserDAO.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserDAO.java @@ -30,10 +30,13 @@ public class UserDAO { String token = uuid.toString(); connect.connect(); String mysqlRequest = "INSERT INTO users (`name`, `password`, `email`, `token`,`isStudent`," + - "`rocketChatId`,`rocketChatAuthToken`) values (?,?,?,?,?,?,?)"; + "`rocketChatUserId`,`rocketChatUsername`,`rocketChatAuthToken`,`rocketChatPersonalAccessToken`) " + + "values (?,?,?,?,?,?,?,?,?)"; connect.issueInsertOrDeleteStatement(mysqlRequest, user.getName(), user.getPassword(), user.getEmail(), - token, user.getStudent(), user.getRocketChatId(), user.getRocketChatAuthToken()); + token, user.getStudent(), user.getRocketChatUserId(), user.getRocketChatUsername(), user.getRocketChatAuthToken(), + user.getRocketChatPersonalAccessToken()); connect.close(); + user.setToken(token); // TODO implmement UserProfile @Mar } @@ -51,7 +54,7 @@ public class UserDAO { //TODO: if user is updated, it also must update all other tables which includes some information about the user, for example project user connect.connect(); connect.issueUpdateStatement(mysqlRequest, user.getName(), user.getPassword(), user.getEmail(), - user.getToken(), user.getStudent(), user.getRocketChatId(), user.getRocketChatAuthToken(), user.getEmail()); + user.getToken(), user.getStudent(), user.getRocketChatUserId(), user.getRocketChatAuthToken(), user.getEmail()); connect.close(); } 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 c38d65b9..0ead888b 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 @@ -2,7 +2,6 @@ package unipotsdam.gf.core.management.user; import unipotsdam.gf.core.management.Management; import unipotsdam.gf.interfaces.ICommunication; -import unipotsdam.gf.modules.communication.service.CommunicationDummyService; import javax.annotation.ManagedBean; import javax.inject.Inject; @@ -26,7 +25,6 @@ public class UserService { private UserDAO userDAO; - @Inject private Management management; @Inject @@ -77,8 +75,7 @@ public class UserService { throws URISyntaxException { User user = new User(name, password, email, null); - ICommunication iCommunication = new CommunicationDummyService(); - boolean isLoggedIn = iCommunication.loginUser(user); + boolean isLoggedIn = communicationService.loginUser(user); if (isLoggedIn) { return login(false, user); } else { diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/util/ResultSetUtil.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/util/ResultSetUtil.java index 7a79f816..f67213c1 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/util/ResultSetUtil.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/util/ResultSetUtil.java @@ -10,9 +10,12 @@ public class ResultSetUtil { String password = vereinfachtesResultSet.getString("password"); String email = vereinfachtesResultSet.getString("email"); String token = vereinfachtesResultSet.getString("token"); - String rocketChatId = vereinfachtesResultSet.getString("rocketChatId"); + String rocketChatUsername = vereinfachtesResultSet.getString("rocketChatUsername"); String rocketChatAuthToken = vereinfachtesResultSet.getString("rocketChatAuthToken"); + String rocketChatPersonalAccessToken = vereinfachtesResultSet.getString("rocketChatPersonalAccessToken"); + String rocketChatUserId = vereinfachtesResultSet.getString("rocketChatUserId"); Boolean isStudent = vereinfachtesResultSet.getBoolean("isStudent"); - return new User(name, password, email, token, rocketChatId, rocketChatAuthToken, isStudent); + return new User(name, password, email, token, rocketChatUsername, rocketChatAuthToken, + rocketChatPersonalAccessToken, rocketChatUserId, isStudent); } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PhasesImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PhasesImpl.java index 0c06f3ee..fcf78ce7 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PhasesImpl.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PhasesImpl.java @@ -2,7 +2,6 @@ package unipotsdam.gf.core.states; import unipotsdam.gf.core.database.mysql.MysqlConnect; import unipotsdam.gf.core.management.project.Project; -import unipotsdam.gf.core.states.model.Constraints; import unipotsdam.gf.core.states.model.ConstraintsMessages; import unipotsdam.gf.core.states.model.ProjectPhase; import unipotsdam.gf.interfaces.Feedback; @@ -12,15 +11,14 @@ import unipotsdam.gf.interfaces.IPeerAssessment; import unipotsdam.gf.interfaces.IPhases; import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; import unipotsdam.gf.modules.assessment.controller.service.PeerAssessment; -import unipotsdam.gf.modules.assessment.controller.service.PeerAssessmentDummy; import unipotsdam.gf.modules.communication.service.CommunicationDummyService; +import unipotsdam.gf.modules.communication.service.UnirestService; import unipotsdam.gf.modules.journal.service.IJournalImpl; import unipotsdam.gf.modules.peer2peerfeedback.DummyFeedback; import unipotsdam.gf.view.Messages; import javax.annotation.ManagedBean; import javax.inject.Inject; -import java.util.HashMap; import java.util.Map; /** @@ -36,7 +34,7 @@ public class PhasesImpl implements IPhases { private Feedback feedback = new DummyFeedback(); - private ICommunication iCommunication = new CommunicationDummyService(); + private ICommunication iCommunication = new CommunicationDummyService(new UnirestService()); private IJournal iJournal = new IJournalImpl(); diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java index 71a78118..0b90a016 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java @@ -2,8 +2,6 @@ package unipotsdam.gf.interfaces; import unipotsdam.gf.core.management.project.Project; import unipotsdam.gf.core.management.user.User; -import unipotsdam.gf.assignments.NotImplementedLogger; -import unipotsdam.gf.core.states.model.Constraints; import unipotsdam.gf.core.states.model.ConstraintsMessages; import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; import unipotsdam.gf.modules.communication.model.Message; @@ -28,13 +26,13 @@ public interface ICommunication { List<ChatMessage> getChatHistory(String roomId); - boolean sendMessageToChat(Message message, String roomId) ; + boolean sendMessageToChat(Message message, String roomId); /** * endpoint: https://rocket.chat/docs/developer-guides/rest-api/groups/create/ * creates chatroom * - * @param name chat room name + * @param name chat room name * @param userList member of chat by id * @return chat room id */ @@ -50,7 +48,7 @@ public interface ICommunication { */ boolean addUserToChatRoom(String roomId, User user); - boolean removeUserFromChatRoom(User user, String roomId) ; + boolean removeUserFromChatRoom(User user, String roomId); /** * endpoint: https://rocket.chat/docs/developer-guides/rest-api/groups/settopic/ @@ -80,6 +78,9 @@ public interface ICommunication { boolean loginUser(User user); /** + * api 1: https://rocket.chat/docs/developer-guides/rest-api/users/generatepersonalaccesstoken/ + * api 2: https://rocket.chat/docs/developer-guides/rest-api/users/getpersonalaccesstokens/ + * * registers new user to rocket chat * * @param user registers user to rocket.chat diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/ChatWindow.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/ChatWindow.java index 366395ce..5cb62355 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/ChatWindow.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/ChatWindow.java @@ -2,6 +2,7 @@ package unipotsdam.gf.modules.communication; import unipotsdam.gf.interfaces.ICommunication; import unipotsdam.gf.modules.communication.service.CommunicationDummyService; +import unipotsdam.gf.modules.communication.service.UnirestService; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspWriter; @@ -21,7 +22,7 @@ public class ChatWindow extends SimpleTagSupport { String groupToken = request.getParameter("groupToken"); String projectToken = request.getParameter("projectToken"); //get ProjetbyToken - ICommunication communicationService = new CommunicationDummyService(); + ICommunication communicationService = new CommunicationDummyService(new UnirestService()); String chatRoomLink = communicationService.getChatRoomLink(token, projectToken, groupToken); JspWriter out = getJspContext().getOut(); diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/model/rocketChat/RocketChatResponse.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/model/rocketChat/RocketChatResponse.java new file mode 100644 index 00000000..dee14a38 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/model/rocketChat/RocketChatResponse.java @@ -0,0 +1,75 @@ +package unipotsdam.gf.modules.communication.model.rocketChat; + +import java.util.Map; + +public class RocketChatResponse { + + private String status; + + // for success data + private Map data; + + // for error data + private String error; + private String message; + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Map getData() { + return data; + } + + public void setData(Map data) { + this.data = data; + } + + public String getError() { + return error; + } + + public void setError(String error) { + this.error = error; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + @Override + public String toString() { + return "RocketChatResponse{" + + "status='" + status + '\'' + + ", data=" + data + + ", error='" + error + '\'' + + ", message='" + message + '\'' + + '}'; + } + + public boolean isSuccessful() { + return status.equals("success"); + } + + public boolean hasError() { + return status.equals("error"); + } + + public String getAuthToken() { + // TODO: throw exception for error + return isSuccessful() ? data.get("authToken").toString() : ""; + } + + public String getUserId() { + // TODO: throw exception for error + return isSuccessful() ? data.get("userId").toString() : ""; + } +} 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 index 9fa18319..8081ca76 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java @@ -1,27 +1,27 @@ package unipotsdam.gf.modules.communication.service; +import io.github.openunirest.http.HttpResponse; import unipotsdam.gf.assignments.Assignee; import unipotsdam.gf.assignments.NotImplementedLogger; -import unipotsdam.gf.config.Constants; -import unipotsdam.gf.core.management.Management; +import unipotsdam.gf.config.GFRocketChatConfig; import unipotsdam.gf.core.management.project.Project; import unipotsdam.gf.core.management.user.User; -import unipotsdam.gf.assignments.Assignee; -import unipotsdam.gf.assignments.NotImplementedLogger; -import unipotsdam.gf.core.states.model.Constraints; import unipotsdam.gf.core.states.model.ConstraintsMessages; import unipotsdam.gf.interfaces.ICommunication; import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; import unipotsdam.gf.modules.communication.model.Message; import unipotsdam.gf.modules.communication.model.chat.ChatMessage; import unipotsdam.gf.modules.communication.model.chat.ChatRoom; +import unipotsdam.gf.modules.communication.model.rocketChat.RocketChatResponse; import javax.annotation.ManagedBean; import javax.annotation.Resource; import javax.inject.Inject; import javax.inject.Singleton; +import javax.ws.rs.core.Response; import java.time.Instant; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -31,8 +31,12 @@ import java.util.Objects; @Singleton public class CommunicationDummyService implements ICommunication { + private UnirestService unirestService; + @Inject - Management managementService; + public CommunicationDummyService(UnirestService unirestService) { + this.unirestService = unirestService; + } @Override public List<ChatMessage> getChatHistory(String roomId) { @@ -61,13 +65,13 @@ public class CommunicationDummyService implements ICommunication { } @Override - public boolean addUserToChatRoom(String roomId, User user) { + public boolean addUserToChatRoom(String roomId, User user) { NotImplementedLogger.logAssignment(Assignee.MARTIN, CommunicationDummyService.class, "addUserToChatRoom"); return false; } @Override - public boolean removeUserFromChatRoom(User user, String roomId) { + public boolean removeUserFromChatRoom(User user, String roomId) { NotImplementedLogger.logAssignment(Assignee.MARTIN, CommunicationDummyService.class, "removing user from chat " + "room"); return false; @@ -86,13 +90,38 @@ public class CommunicationDummyService implements ICommunication { @Override public boolean loginUser(User user) { - user.setRocketChatAuthToken("abc"); + if (user.getEmail().isEmpty() || user.getPassword().isEmpty()) { + return false; + } + + HashMap<String, String> rocketChatAuth = new HashMap<>(); + rocketChatAuth.put("user", user.getEmail()); + rocketChatAuth.put("password", user.getPassword()); + + HttpResponse<RocketChatResponse> response = + unirestService + .post(GFRocketChatConfig.ROCKET_CHAT_API_LINK + "login") + .body(rocketChatAuth) + .asObject(RocketChatResponse.class); + // TODO: add Error class which holds Errors and posts them + int status = response.getStatus(); + if (status == Response.Status.UNAUTHORIZED.getStatusCode() || status == Response.Status.BAD_REQUEST.getStatusCode()) { + return false; + } + RocketChatResponse rocketChatResponse = response.getBody(); + user.setRocketChatUserId(rocketChatResponse.getUserId()); + user.setRocketChatAuthToken(rocketChatResponse.getAuthToken()); return true; } @Override public boolean registerUser(User user) { - user.setRocketChatId("1"); + // register User + + // login User and fill information + + // create custom access token with authToken + user.setRocketChatUserId("1"); return true; } @@ -111,13 +140,13 @@ public class CommunicationDummyService implements ICommunication { // TODO: Implement getProjectbyToken and getGroupByToken //Project project = managementService.getProject(projectToken String channelName = "general"; - return Constants.ROCKET_CHAT_URL + "/channel/" + channelName + "?layout=embedded"; + return GFRocketChatConfig.ROCKET_CHAT_API_LINK + "/channel/" + channelName + "?layout=embedded"; } @Override - public void sendSingleMessage(Message message, User user) { + public void sendSingleMessage(Message message, User user) { // TODO implement as email or directed message, popup after login or whatever - String message2 = "sending email with message: "+ message.getMessage() + " to: "+ user.getEmail(); + String message2 = "sending email with message: " + message.getMessage() + " to: " + user.getEmail(); NotImplementedLogger.logAssignment(Assignee.MARTIN, CommunicationDummyService.class, message2); } @@ -129,7 +158,7 @@ public class CommunicationDummyService implements ICommunication { @Override public void sendMessageToUsers(Project project, String message) { // TODO implement as email or directed message, popup after login or whatever - String message2 = "sending email with message: "+ message + " to: "+ project.getId(); + String message2 = "sending email with message: " + message + " to: " + project.getId(); NotImplementedLogger.logAssignment(Assignee.MARTIN, CommunicationDummyService.class, message2); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/UnirestService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/UnirestService.java new file mode 100644 index 00000000..354c6d52 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/UnirestService.java @@ -0,0 +1,38 @@ +package unipotsdam.gf.modules.communication.service; + +import io.github.openunirest.http.Unirest; +import io.github.openunirest.mappers.JacksonObjectMapper; +import io.github.openunirest.request.GetRequest; +import io.github.openunirest.request.HttpRequestWithBody; + +import javax.annotation.ManagedBean; +import javax.annotation.Resource; +import javax.inject.Singleton; + +@ManagedBean +@Resource +@Singleton +public class UnirestService { + + public UnirestService() { + // has to be set for application + Unirest.setObjectMapper(new JacksonObjectMapper()); + Unirest.setDefaultHeader("Content-Type", "application/json"); + } + + public GetRequest get(String url) { + return Unirest.get(url); + } + + public HttpRequestWithBody post(String url) { + return Unirest.post(url); + } + + public HttpRequestWithBody delete(String url) { + return Unirest.delete(url); + } + + public HttpRequestWithBody put(String url) { + return Unirest.put(url); + } +} diff --git a/gemeinsamforschen/src/scripts/dbschema/createDummyUser.sql b/gemeinsamforschen/src/scripts/dbschema/createDummyUser.sql index c68466c5..5c240fee 100644 --- a/gemeinsamforschen/src/scripts/dbschema/createDummyUser.sql +++ b/gemeinsamforschen/src/scripts/dbschema/createDummyUser.sql @@ -6,21 +6,21 @@ CREATE TABLE if not exists `users` ( `password` varchar(200) NOT NULL, `email` varchar(255) NOT NULL, `token` varchar(800) NOT NULL, - `rocketChatId` varchar(400) NOT NULL, + `rocketChatUserId` varchar(400) NOT NULL, `rocketChatAuthToken` varchar(800) NOT NULL, UNIQUE (email) )ENGINE = InnoDB DEFAULT CHARSET = utf8; -INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatId`, `rocketChatAuthToken`) VALUES +INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatUserId`, `rocketChatAuthToken`) VALUES ('teststudent1', 'egal', 'test1@uni.de', 'test1','1','abc'); -INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatId`, `rocketChatAuthToken`) VALUES +INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatUserId`, `rocketChatAuthToken`) VALUES ('teststudent1', 'egal', 'test2@uni.de', 'test1','1','abc'); -INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatId`, `rocketChatAuthToken`) VALUES +INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatUserId`, `rocketChatAuthToken`) VALUES ('teststudent1', 'egal', 'test3@uni.de', 'test1','1','abc'); -INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatId`, `rocketChatAuthToken`) VALUES +INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatUserId`, `rocketChatAuthToken`) VALUES ('teststudent1', 'egal', 'test4@uni.de', 'test1','1','abc'); \ No newline at end of file diff --git a/gemeinsamforschen/src/scripts/dbschema/createDummyUsersGroupsProject.sql b/gemeinsamforschen/src/scripts/dbschema/createDummyUsersGroupsProject.sql index 3e5d9846..66d1d970 100644 --- a/gemeinsamforschen/src/scripts/dbschema/createDummyUsersGroupsProject.sql +++ b/gemeinsamforschen/src/scripts/dbschema/createDummyUsersGroupsProject.sql @@ -3,28 +3,28 @@ Functions with empty grouptable only (because of autoincrement id of group) */ -INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatId`, `rocketChatAuthToken`) VALUES +INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatUserId`, `rocketChatAuthToken`) VALUES ('teststudent1', 'egal', 'test1@uni.de', 'test1','1','abc'); -INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatId`, `rocketChatAuthToken`) VALUES +INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatUserId`, `rocketChatAuthToken`) VALUES ('teststudent2', 'egal', 'test2@uni.de', 'test1','1','abc'); -INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatId`, `rocketChatAuthToken`) VALUES +INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatUserId`, `rocketChatAuthToken`) VALUES ('teststudent3', 'egal', 'test3@uni.de', 'test1','1','abc'); -INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatId`, `rocketChatAuthToken`) VALUES +INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatUserId`, `rocketChatAuthToken`) VALUES ('teststudent4', 'egal', 'test4@uni.de', 'test1','1','abc'); -INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatId`, `rocketChatAuthToken`) VALUES +INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatUserId`, `rocketChatAuthToken`) VALUES ('teststudent5', 'egal', 'test5@uni.de', 'test1','1','abc'); -INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatId`, `rocketChatAuthToken`) VALUES +INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatUserId`, `rocketChatAuthToken`) VALUES ('teststudent6', 'egal', 'test6@uni.de', 'test1','1','abc'); -INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatId`, `rocketChatAuthToken`) VALUES +INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatUserId`, `rocketChatAuthToken`) VALUES ('teststudent7', 'egal', 'test7@uni.de', 'test1','1','abc'); -INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatId`, `rocketChatAuthToken`) VALUES +INSERT INTO `users` (`name`, `password`, `email`, `token`, `rocketChatUserId`, `rocketChatAuthToken`) VALUES ('teststudent8', 'egal', 'test8@uni.de', 'test1','1','abc'); INSERT INTO `projects` (`id`, `password`,`active`,`timecreated`,`author`,`adminpassword`,`token`,`phase`) VALUES diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/core/management/group/GroupDAOTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/core/management/group/GroupDAOTest.java index 6eacdade..0e7eaed4 100644 --- a/gemeinsamforschen/src/test/java/unipotsdam/gf/core/management/group/GroupDAOTest.java +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/core/management/group/GroupDAOTest.java @@ -33,9 +33,11 @@ public class GroupDAOTest { userDAO = new UserDAO(inMemoryMySqlConnect); User userStudent = new User("Student", "password", "testStudent@mail.com", "1", - "1", "1", true); - User userDocent = new User("Docent", "password", "testDocent@mail.com", - "1", "1", "1", false); + "1", "1", "1", "1", + true); + User userDocent = new User("Docent", "password", "testDocent@mail.com", "1", + "1", "1", "1", "1", + false); userDAO.persist(userStudent, null); userDAO.persist(userDocent, null); 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 index 76eb6fcd..db2809ed 100644 --- a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/communication/service/CommunicationDummyServiceTest.java +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/communication/service/CommunicationDummyServiceTest.java @@ -5,9 +5,11 @@ import org.junit.Test; import unipotsdam.gf.core.management.user.User; import unipotsdam.gf.interfaces.ICommunication; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import static unipotsdam.gf.config.GFRocketChatConfig.TEST_USER; public class CommunicationDummyServiceTest { @@ -16,22 +18,24 @@ public class CommunicationDummyServiceTest { @Before public void setUp() { - iCommunication = new CommunicationDummyService(); + iCommunication = new CommunicationDummyService(new UnirestService()); user = new User("name", "password", "email", true); } @Test public void loginUser() { - boolean isLoggedIn = iCommunication.loginUser(user); - assertNotNull(user.getRocketChatId()); - assertNotNull(user.getRocketChatAuthToken()); - assertTrue(isLoggedIn); + assertTrue(iCommunication.loginUser(TEST_USER)); + assertTrue(!TEST_USER.getRocketChatAuthToken().isEmpty()); + assertTrue(TEST_USER.getRocketChatUserId().isEmpty()); + + User falseLoginUser = new User("name", "password", "email", true); + assertFalse(iCommunication.loginUser(falseLoginUser)); } @Test public void registerUser() { boolean userCreated = iCommunication.registerUser(user); - assertNotNull(user.getRocketChatId()); + assertNotNull(user.getRocketChatUserId()); assertNull(user.getRocketChatAuthToken()); assertTrue(userCreated); } diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/groupfinding/dummy/service/DummyProjectCreationServiceTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/groupfinding/dummy/service/DummyProjectCreationServiceTest.java index 07b517ef..24ccc2d4 100644 --- a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/groupfinding/dummy/service/DummyProjectCreationServiceTest.java +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/groupfinding/dummy/service/DummyProjectCreationServiceTest.java @@ -10,6 +10,7 @@ import unipotsdam.gf.core.management.user.User; import unipotsdam.gf.core.management.user.UserDAO; import unipotsdam.gf.interfaces.ICommunication; import unipotsdam.gf.modules.communication.service.CommunicationDummyService; +import unipotsdam.gf.modules.communication.service.UnirestService; import unipotsdam.gf.modules.groupfinding.service.GroupDAO; import unipotsdam.gf.util.TestHelper; @@ -21,7 +22,7 @@ public class DummyProjectCreationServiceTest { @Test public void testCreateExampleProject() { - ICommunication communication = new CommunicationDummyService(); + ICommunication communication = new CommunicationDummyService(new UnirestService()); InMemoryMySqlConnect inMemoryMySqlConnect = new InMemoryMySqlConnect(); Management management = TestHelper.getManagementImpl(inMemoryMySqlConnect); GroupDAO groupDAO = new GroupDAO(inMemoryMySqlConnect); diff --git a/gemeinsamforschen/src/test/resources/database/fltrail.sql b/gemeinsamforschen/src/test/resources/database/fltrail.sql index 0aa37e4e..c5e1c666 100644 --- a/gemeinsamforschen/src/test/resources/database/fltrail.sql +++ b/gemeinsamforschen/src/test/resources/database/fltrail.sql @@ -117,7 +117,9 @@ CREATE TABLE `users` ( `password` varchar(200) NOT NULL, `email` varchar(255) NOT NULL, `token` varchar(800) NOT NULL, - `rocketChatId` varchar(400) NOT NULL, + `rocketChatUserId` varchar(400) NOT NULL, + `rocketChatUsername` VARCHAR(400) NOT NULL, + `rocketChatPersonalAccessToken` VARCHAR(400) NOT NULL, `rocketChatAuthToken` varchar(800) NOT NULL, `isStudent` tinyint(1) DEFAULT '1' ) -- GitLab