Skip to content

Commit 825b7a2

Browse files
author
Arbona Alapont
committed
Merge branch 'develop'
2 parents b0d6cc9 + 254aef5 commit 825b7a2

File tree

31 files changed

+393
-55
lines changed

31 files changed

+393
-55
lines changed

Ai-labar.postman_collection.json

+28
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,34 @@
5656
},
5757
"response": []
5858
},
59+
{
60+
"name": "adminAccess",
61+
"request": {
62+
"method": "POST",
63+
"header": [],
64+
"body": {
65+
"mode": "raw",
66+
"raw": "{\r\n \"password\": \"f40c05434358a62bde28b7991e16f880d059d99adb2c20242cf2db46c197e322\"\r\n}",
67+
"options": {
68+
"raw": {
69+
"language": "json"
70+
}
71+
}
72+
},
73+
"url": {
74+
"raw": "localhost:8080/users/adminAccess",
75+
"host": [
76+
"localhost"
77+
],
78+
"port": "8080",
79+
"path": [
80+
"users",
81+
"adminAccess"
82+
]
83+
}
84+
},
85+
"response": []
86+
},
5987
{
6088
"name": "createUser",
6189
"request": {

Backend/ai-labar/pom.xml

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
33
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
44
<modelVersion>4.0.0</modelVersion>
5+
<groupId>com.capgemini</groupId>
6+
<artifactId>ai-labar</artifactId>
7+
<version>2.3.0</version>
8+
<name>ai-labar</name>
9+
<description>AI-Labar Project</description>
510
<parent>
611
<groupId>org.springframework.boot</groupId>
712
<artifactId>spring-boot-starter-parent</artifactId>
813
<version>2.7.14</version>
914
<relativePath/> <!-- lookup parent from repository -->
1015
</parent>
11-
<groupId>com.capgemini</groupId>
12-
<artifactId>ai-labar</artifactId>
13-
<version>2.3.0</version>
14-
<name>ai-labar</name>
15-
<description>AI-Labar Project</description>
1616
<properties>
1717
<java.version>11</java.version>
1818
</properties>
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
package com.capgemini.ailabar;
22

3+
import com.capgemini.ailabar.commons.utils.AccessPom;
4+
import org.apache.logging.log4j.LogManager;
5+
import org.apache.logging.log4j.Logger;
36
import org.springframework.boot.SpringApplication;
47
import org.springframework.boot.autoconfigure.SpringBootApplication;
58
import org.springframework.scheduling.annotation.EnableScheduling;
69

710
@SpringBootApplication
811
@EnableScheduling
912
public class AiLabarApplication {
13+
private static final Logger logger = LogManager.getLogger(AiLabarApplication.class);
14+
1015
public static void main(String[] args) {
1116
SpringApplication.run(AiLabarApplication.class, args);
17+
logger.info(AccessPom.showAppVersion());
1218
}
1319
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.capgemini.ailabar.commons.utils;
2+
3+
import org.springframework.stereotype.Component;
4+
import org.w3c.dom.Document;
5+
import org.w3c.dom.Element;
6+
import org.w3c.dom.Node;
7+
import org.w3c.dom.NodeList;
8+
9+
import javax.xml.parsers.DocumentBuilder;
10+
import javax.xml.parsers.DocumentBuilderFactory;
11+
import java.io.File;
12+
13+
@Component
14+
public final class AccessPom {
15+
private AccessPom() {}
16+
public static String showAppVersion() {
17+
try {
18+
File pomFile = new File("pom.xml");
19+
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
20+
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
21+
22+
Document document = documentBuilder.parse(pomFile);
23+
Element rootElement = document.getDocumentElement();
24+
NodeList versionNodeList = rootElement.getElementsByTagName("version");
25+
26+
if (versionNodeList.getLength() > 0) {
27+
Node versionNode = versionNodeList.item(0);
28+
return "AiLabar " + versionNode.getTextContent();
29+
} else {
30+
return "No se encontró la versión en el pom.xml";
31+
}
32+
33+
} catch (Exception e) {
34+
return e.getMessage();
35+
}
36+
}
37+
}

Backend/ai-labar/src/main/java/com/capgemini/ailabar/groups/application/usecases/GetGroupUseCaseImpl.java

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public GroupsModel getGroup(GroupsModel groupsModel) {
4141
List<String> membersList = new ArrayList<>();
4242
membersIdList.forEach(id -> {
4343
try {
44+
//membersList.add(groupsRepositoryPort.getUserNameEMailByUserId(id));
4445
membersList.add(groupsRepositoryPort.getUserNameByUserId(id));
4546
} catch (GetGroupException getGroupException) {
4647
throw new GetGroupException("An error occurred while retrieving group members");

Backend/ai-labar/src/main/java/com/capgemini/ailabar/groups/domain/ports/out/GroupsRepositoryPort.java

+2
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,7 @@ public interface GroupsRepositoryPort {
3737

3838
String getUserNameByUserId(Integer id);
3939

40+
String getUserNameEMailByUserId(Integer id);
41+
4042
void insertMember(Integer groupId, Integer userId);
4143
}

Backend/ai-labar/src/main/java/com/capgemini/ailabar/groups/infraestructure/adapters/out/GroupsRepositoryAdapter.java

+4
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ public String getUserNameByUserId(Integer id) {
9595
return groupsRepository.getUserNameByUserId(id);
9696
}
9797

98+
@Override
99+
public String getUserNameEMailByUserId(Integer id) {
100+
return groupsRepository.getUserNameEMailByUserId(id);
101+
}
98102
@Override
99103
public void insertMember(Integer groupId, Integer userId) {
100104
groupsRepository.insertMember(groupId, userId);

Backend/ai-labar/src/main/java/com/capgemini/ailabar/groups/infraestructure/repositories/GroupsRepository.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ public interface GroupsRepository extends JpaRepository<GroupsEntity, Integer> {
4747

4848
@Query("SELECT u.user FROM UsersEntity u WHERE u.id = :id")
4949
String getUserNameByUserId(@Param("id") Integer id);
50-
50+
@Query("SELECT CONCAT(u.user, ' (', u.email, ')') FROM UsersEntity u WHERE u.id = :id")
51+
String getUserNameEMailByUserId(@Param("id") Integer id);
5152
@Modifying
5253
@Query(value = "INSERT INTO members (group_id, user_id) VALUES (:groupId, :userId)", nativeQuery = true)
5354
void insertMember(@Param("groupId") Integer groupId, @Param("userId") Integer userId);

Backend/ai-labar/src/main/java/com/capgemini/ailabar/users/application/services/UsersService.java

+21-8
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@
99
import java.util.List;
1010

1111
@Service
12-
public class UsersService implements LoginUseCase, CreateUserUseCase, EditUserUseCase, DeleteUserUseCase,
13-
GetUsersByMatchUseCase, EditVisualizationUseCase, GetAllUsersUseCase, GetUsersDatabaseUseCase,
14-
EditLanguageUseCase, LogoutUseCase {
12+
public class UsersService implements LoginUseCase, AdminAccessUseCase, CreateUserUseCase, EditUserUseCase,
13+
DeleteUserUseCase, GetUsersByMatchUseCase, EditVisualizationUseCase, GetAllUsersUseCase,
14+
GetUsersDatabaseUseCase, EditLanguageUseCase, LogoutUseCase {
1515
private final LoginUseCase loginUseCase;
16+
17+
private final AdminAccessUseCase adminAccessUseCase;
1618
private final CreateUserUseCase createUserUseCase;
1719
private final EditUserUseCase editUserUseCase;
1820
private final DeleteUserUseCase deleteUserUseCase;
@@ -23,12 +25,14 @@ public class UsersService implements LoginUseCase, CreateUserUseCase, EditUserUs
2325
private final GetUsersDatabaseUseCase getUsersDatabaseUseCase;
2426
private final LogoutUseCase logoutUseCase;
2527

26-
public UsersService(LoginUseCase loginUseCase, CreateUserUseCase createUserUseCase,
27-
EditUserUseCase editUserUseCase, DeleteUserUseCase deleteUserUseCase,
28-
GetUsersByMatchUseCase getUsersByMatch, EditVisualizationUseCase editVisualizationUseCase,
29-
GetAllUsersUseCase getAllUsersUseCase, GetUsersDatabaseUseCase getUsersDatabaseUseCase ,
30-
EditLanguageUseCase editLanguageUseCase, LogoutUseCase logoutUseCase) {
28+
public UsersService(LoginUseCase loginUseCase, AdminAccessUseCase adminAccessUseCase,
29+
CreateUserUseCase createUserUseCase, EditUserUseCase editUserUseCase,
30+
DeleteUserUseCase deleteUserUseCase, GetUsersByMatchUseCase getUsersByMatch,
31+
EditVisualizationUseCase editVisualizationUseCase, GetAllUsersUseCase getAllUsersUseCase,
32+
GetUsersDatabaseUseCase getUsersDatabaseUseCase , EditLanguageUseCase editLanguageUseCase,
33+
LogoutUseCase logoutUseCase) {
3134
this.loginUseCase = loginUseCase;
35+
this.adminAccessUseCase = adminAccessUseCase;
3236
this.createUserUseCase = createUserUseCase;
3337
this.editUserUseCase = editUserUseCase;
3438
this.deleteUserUseCase = deleteUserUseCase;
@@ -48,6 +52,15 @@ public List<String> login(UsersModel usersModel, PrivateKey privateKey) {
4852
}
4953
}
5054

55+
@Override
56+
public void adminAccess(UsersModel usersModel) {
57+
try {
58+
adminAccessUseCase.adminAccess(usersModel);
59+
} catch (AdminAccessException adminAccessException) {
60+
throw adminAccessException;
61+
}
62+
}
63+
5164
@Override
5265
public void createUser(UsersModel usersModel) {
5366
try {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.capgemini.ailabar.users.application.usecases;
2+
3+
import com.capgemini.ailabar.users.domain.exceptions.AdminAccessException;
4+
import com.capgemini.ailabar.users.domain.models.UsersModel;
5+
import com.capgemini.ailabar.users.domain.ports.in.AdminAccessUseCase;
6+
import org.springframework.beans.factory.annotation.Value;
7+
import org.springframework.stereotype.Service;
8+
9+
@Service
10+
public class AdminAccessUseCaseImpl implements AdminAccessUseCase {
11+
@Value("${admin.access}")
12+
private String adminPass;
13+
14+
@Override
15+
public void adminAccess(UsersModel usersModel) {
16+
if(usersModel.getPassword().isBlank()) {
17+
throw new AdminAccessException("Password is required");
18+
}
19+
20+
if (Boolean.FALSE.equals(usersModel.getPassword().equals(adminPass))) {
21+
throw new AdminAccessException("Wrong Password");
22+
}
23+
}
24+
}

Backend/ai-labar/src/main/java/com/capgemini/ailabar/users/application/usecases/EditUserUseCaseImpl.java

+4
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ public void editUser(UsersModel usersModel) {
3939
throw new EditUserException("The new username already exists");
4040
}
4141

42+
if (Boolean.TRUE.equals(usersRepositoryPort.checkEmail(usersModel.getEmail()))) {
43+
throw new EditUserException("The email already exists");
44+
}
45+
4246
UsersEntity userEntity = usersRepositoryPort.getUserByName(usersModel.getUser());
4347

4448
if(usersModel.getNewUser() != null && !usersModel.getNewUser().isBlank()) {

Backend/ai-labar/src/main/java/com/capgemini/ailabar/users/application/usecases/LoginUseCaseImpl.java

+24-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.capgemini.ailabar.users.application.usecases;
22

33
import com.capgemini.ailabar.commons.utils.DateTime;
4+
import com.capgemini.ailabar.users.domain.exceptions.CreateUserException;
45
import com.capgemini.ailabar.users.domain.exceptions.LoginException;
56
import com.capgemini.ailabar.users.domain.models.UsersModel;
67
import com.capgemini.ailabar.users.domain.ports.in.LoginUseCase;
@@ -70,14 +71,33 @@ public List<String> login(UsersModel usersModel, PrivateKey privateKey) {
7071
private String loginCap(UsersModel usersModel) {
7172
JSONObject jsonObject = requestToCapgemini(usersModel);
7273

73-
if(!usersRepositoryPort.checkUser(usersModel.getUser())) {
74-
createCapgeminiUser(usersModel, jsonObject);
74+
JSONObject decodedClaims = readJWT(jsonObject);
75+
76+
String userSubName = decodedClaims.getString("sub");
77+
String email = decodedClaims.getString("email");
78+
79+
if(!usersRepositoryPort.checkEmail(email)) {
80+
// Descomentar cuando se quiera volver a registrar a los usuarios con el primer login en la aplicación
81+
//createCapgeminiUser(usersModel, jsonObject);
82+
throw new LoginException("Unauthorized user in the application");
7583
}
7684

7785
String token = jsonObject.getString("token");
7886

79-
UsersEntity usersEntity = usersRepositoryPort.getUserByName(usersModel.getUser());
80-
usersRepositoryPort.updateToken(usersEntity.getId(), token);
87+
UsersEntity usersEntity = usersRepositoryPort.getUserByEmail(email);
88+
if(usersEntity != null) {
89+
if (Boolean.TRUE.equals(usersRepositoryPort.checkUser(userSubName)) && !userSubName.equals(usersModel.getUser())) {
90+
throw new CreateUserException("The user already exists");
91+
}
92+
93+
try {
94+
usersRepositoryPort.updateUserNameAndToken(usersEntity.getId(), userSubName, token);
95+
} catch (Exception e) {
96+
throw new LoginException("Error updating user during login");
97+
}
98+
} else {
99+
throw new LoginException("User not found");
100+
}
81101

82102
return token;
83103
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.capgemini.ailabar.users.domain.exceptions;
2+
3+
public class AdminAccessException extends RuntimeException {
4+
public AdminAccessException(String message) {
5+
super(message);
6+
}
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.capgemini.ailabar.users.domain.ports.in;
2+
3+
import com.capgemini.ailabar.users.domain.models.UsersModel;
4+
5+
public interface AdminAccessUseCase {
6+
void adminAccess(UsersModel usersModel);
7+
}

Backend/ai-labar/src/main/java/com/capgemini/ailabar/users/domain/ports/out/UsersRepositoryPort.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package com.capgemini.ailabar.users.domain.ports.out;
22

33
import com.capgemini.ailabar.users.infraestructure.entities.UsersEntity;
4-
import org.springframework.data.repository.query.Param;
54

65
import java.util.List;
76

87
public interface UsersRepositoryPort {
98
boolean checkAuthorization(String user, String token);
109

11-
boolean checkEmail(String email);
10+
boolean checkEmail(String user);
1211

1312
boolean checkUser(String user);
1413

@@ -18,6 +17,8 @@ public interface UsersRepositoryPort {
1817

1918
List<String> getAllUsers();
2019

20+
UsersEntity getUserByEmail(String email);
21+
2122
UsersEntity getUserByName(String user);
2223

2324
List<String> getUsersByMatch(String matcher);
@@ -28,7 +29,7 @@ public interface UsersRepositoryPort {
2829

2930
void deleteMembersByUserId(Integer userId);
3031

31-
void updateToken(@Param("userId") Integer userId, @Param("newToken") String newToken);
32+
void updateUserNameAndToken(Integer userId, String user, String newToken);
3233

33-
boolean login(String user, String password);
34+
boolean login(String email, String password);
3435
}

Backend/ai-labar/src/main/java/com/capgemini/ailabar/users/infraestructure/adapters/out/UsersRepositoryAdapter.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ public List<String> getAllUsers() {
4545
return usersRepository.getAllUsers();
4646
}
4747

48+
@Override
49+
public UsersEntity getUserByEmail(String email) {
50+
return usersRepository.getUserByEmail(email);
51+
}
52+
4853
@Override
4954
public UsersEntity getUserByName(String user) {
5055
return usersRepository.getUserByName(user);
@@ -71,8 +76,8 @@ public void deleteMembersByUserId(Integer userId) {
7176
}
7277

7378
@Override
74-
public void updateToken(Integer userId, String newToken) {
75-
usersRepository.updateToken(userId, newToken);
79+
public void updateUserNameAndToken(Integer userId, String user, String newToken) {
80+
usersRepository.updateUserNameAndToken(userId, user, newToken);
7681
}
7782

7883
@Override

Backend/ai-labar/src/main/java/com/capgemini/ailabar/users/infraestructure/controllers/UsersController.java

+18
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,17 @@ public ResponseEntity<SpecialResponse> login(@RequestBody UsersModel usersModel)
7575
return new ResponseEntity<>(specialResponse(loginData, responseJson), HttpStatus.OK);
7676
}
7777

78+
/*
79+
* METHOD TO ACCESS USER CREATION
80+
*/
81+
@PostMapping("/adminAccess")
82+
public ResponseEntity<SpecialResponse> adminAccess(@RequestBody UsersModel usersModel) {
83+
JSONObject responseJson = new JSONObject();
84+
usersService.adminAccess(usersModel);
85+
responseJson.put("message", "Admin access successful");
86+
return new ResponseEntity<>(specialResponse(null, responseJson), HttpStatus.OK);
87+
}
88+
7889
/*
7990
* CREATES A USER IN THE DATABASE:
8091
* 1. In this case, the password should arrive encrypted with SHA256 from the frontend. In the backend, the password will be re-encrypted in SHA256, and a token will be generated with the user's unique name, password, and ID.
@@ -195,6 +206,13 @@ ResponseEntity<SpecialResponse> handlerLoginException (LoginException loginExcep
195206
return new ResponseEntity<>(specialResponse(null, responseJson), HttpStatus.INTERNAL_SERVER_ERROR);
196207
}
197208

209+
@ExceptionHandler(AdminAccessException.class)
210+
ResponseEntity<SpecialResponse> handlerAdminAccessException (AdminAccessException adminAccessException){
211+
JSONObject responseJson = new JSONObject();
212+
responseJson.put("message", adminAccessException.getMessage());
213+
return new ResponseEntity<>(specialResponse(null, responseJson), HttpStatus.INTERNAL_SERVER_ERROR);
214+
}
215+
198216
@ExceptionHandler(CreateUserException.class)
199217
ResponseEntity<SpecialResponse> handlerCreateUserException (CreateUserException createUserException){
200218
JSONObject responseJson = new JSONObject();

0 commit comments

Comments
 (0)