From 3061fb1edfa4f2e42bab92d9299a533e7cc558fa Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Mon, 7 Dec 2020 21:39:47 +0100 Subject: [PATCH 1/5] Token response --- .../responses/models/TokenResponse.java | 34 +++++++++ .../responses/models/TokenResponseTest.java | 69 +++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100755 restservice/src/main/java/com/plannaplan/responses/models/TokenResponse.java create mode 100755 restservice/src/test/java/com/plannaplan/responses/models/TokenResponseTest.java diff --git a/restservice/src/main/java/com/plannaplan/responses/models/TokenResponse.java b/restservice/src/main/java/com/plannaplan/responses/models/TokenResponse.java new file mode 100755 index 0000000..4ec22d0 --- /dev/null +++ b/restservice/src/main/java/com/plannaplan/responses/models/TokenResponse.java @@ -0,0 +1,34 @@ +package com.plannaplan.responses.models; + +import com.plannaplan.entities.User; + +public class TokenResponse { + private String token; + private Long id; + private String authorityRole; + private String email; + + public TokenResponse(User user) { + this.id = user.getId(); + this.authorityRole = user.getRole().toString(); + this.email = user.getEmail(); + this.token = user.getToken(); + } + + public String getEmail() { + return email; + } + + public String getAuthorityRole() { + return authorityRole; + } + + public Long getId() { + return id; + } + + public String getToken() { + return token; + } + +} diff --git a/restservice/src/test/java/com/plannaplan/responses/models/TokenResponseTest.java b/restservice/src/test/java/com/plannaplan/responses/models/TokenResponseTest.java new file mode 100755 index 0000000..bca74b6 --- /dev/null +++ b/restservice/src/test/java/com/plannaplan/responses/models/TokenResponseTest.java @@ -0,0 +1,69 @@ +package com.plannaplan.responses.models; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.lang.reflect.Field; + +import com.plannaplan.entities.User; +import com.plannaplan.types.UserRoles; + +import org.junit.Test; + +public class TokenResponseTest { + + public TokenResponse testMapUserEntiutyToTokenResponse(UserRoles role) + throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { + final String token = "totalnie-prawdziwy-token"; + final String mail = "shouldMapUserEntiutyToTokenResponse@TokenResponse.test"; + + final User userToMap = new User("Franek", "Kimono", mail, null, role); + + Field reader = User.class.getDeclaredField("id"); + reader.setAccessible(true); + reader.set(userToMap, Long.valueOf(12)); + + reader = User.class.getDeclaredField("token"); + reader.setAccessible(true); + reader.set(userToMap, token); + + final TokenResponse response = new TokenResponse(userToMap); + + assertTrue(response.getId() == 12); + assertTrue(response.getToken().equals(token)); + assertTrue(response.getEmail().equals(mail)); + return response; + } + + @Test + public void shouldMapAdminToTokenResonse() + throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { + + final TokenResponse response = testMapUserEntiutyToTokenResponse(UserRoles.ADMIN); + assertTrue(response.getAuthorityRole().equals("ADMIN")); + } + + @Test + public void shouldMapStudentToTokenResonse() + throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { + + final TokenResponse response = testMapUserEntiutyToTokenResponse(UserRoles.STUDENT); + assertTrue(response.getAuthorityRole().equals("STUDENT")); + } + + @Test + public void shouldMapDeaneryToTokenResonse() + throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { + + final TokenResponse response = testMapUserEntiutyToTokenResponse(UserRoles.DEANERY); + assertTrue(response.getAuthorityRole().equals("DEANERY")); + } + + @Test + public void shouldMapTestUserToTokenResonse() + throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { + + final TokenResponse response = testMapUserEntiutyToTokenResponse(UserRoles.TEST_USER); + assertTrue(response.getAuthorityRole().equals("TEST_USER")); + } + +} From f9baed5df712b09278b131d4e5a6e315c2073bc2 Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Mon, 7 Dec 2020 21:46:47 +0100 Subject: [PATCH 2/5] Changed token response in controller --- .../com/plannaplan/services/UserService.java | 32 ++++++++----------- .../plannaplan/services/UserServiceTest.java | 19 +++++------ .../controllers/TokenController.java | 19 ++++++----- .../AssignmentsControllerTest.java | 2 +- .../controllers/CommisionControllerTest.java | 24 +++++++------- .../controllers/ConfigControllerTest.java | 4 +-- .../controllers/UsersControllerTest.java | 4 +-- 7 files changed, 52 insertions(+), 52 deletions(-) diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java index 88426a6..9056720 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/UserService.java @@ -13,7 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** - * Service of UserService which can get(By Email), login, save user. + * Service of UserService which can get(By Email), login, save user. */ @Service public class UserService { @@ -26,37 +26,33 @@ public class UserService { public User checkForUser(String email, String usosId) { if (usosId == null) { - Optional user = this.repo.getByAuthority(email.replace("\n", "").trim()); - if (user.isPresent()){ + Optional user = this.repo.getByAuthority(email.replace("\n", "").trim()); + if (user.isPresent()) { return user.get(); - } - else { - final User newUser = new User(null,null,email.replace("\n", "").trim(),UserRoles.STUDENT); + } else { + final User newUser = new User(null, null, email.replace("\n", "").trim(), UserRoles.STUDENT); return this.repo.save(newUser); } - } - else { - Optional user = this.repo.getByUsosId(usosId.replace("\n", "").trim()); - if (user.isPresent()){ + } else { + Optional user = this.repo.getByUsosId(usosId.replace("\n", "").trim()); + if (user.isPresent()) { return user.get(); - } - else { - final User newUser = new User(null,null,email.replace("\n", "").trim(),usosId,UserRoles.STUDENT); + } else { + final User newUser = new User(null, null, email.replace("\n", "").trim(), usosId, UserRoles.STUDENT); return this.repo.save(newUser); } } } - public String login(User authority) throws UserNotFoundException { + public User login(User authority) throws UserNotFoundException { final String token = UUID.randomUUID().toString(); - try{ + try { authority.setToken(token); this.repo.save(authority); - } - catch (Exception e){ + } catch (Exception e) { throw new UserNotFoundException(e.getMessage()); } - return token; + return authority; } public User save(User user) { diff --git a/buisnesslogic/src/test/java/com/plannaplan/services/UserServiceTest.java b/buisnesslogic/src/test/java/com/plannaplan/services/UserServiceTest.java index 46db025..fb047e7 100755 --- a/buisnesslogic/src/test/java/com/plannaplan/services/UserServiceTest.java +++ b/buisnesslogic/src/test/java/com/plannaplan/services/UserServiceTest.java @@ -32,11 +32,12 @@ public class UserServiceTest { @Test public void shouldReturnToken() { - final User testUser = this.userService.save(new User(TEST_USER_NAME, TEST_USER_SUERNAME, TEST_USER_MAIL, UserRoles.TEST_USER)); + User testUser = this.userService + .save(new User(TEST_USER_NAME, TEST_USER_SUERNAME, TEST_USER_MAIL, UserRoles.TEST_USER)); try { - final String token = this.userService.login(testUser); - System.out.println("Returned token: " + token); - assertTrue(token != null); + testUser = this.userService.login(testUser); + System.out.println("Returned token: " + testUser.getToken()); + assertTrue(testUser.getToken() != null); assertTrue(this.userService.getUserByEmail(TEST_USER_MAIL).getToken() != null); } catch (UserNotFoundException e) { e.printStackTrace(); @@ -84,17 +85,17 @@ public class UserServiceTest { } @Test - public void shouldCreateUser(){ - + public void shouldCreateUser() { + final User user = this.userService.checkForUser("shouldCreateUser@UserService.test", null); - + assertTrue(user.getId() != null); } @Test - public void shouldReturnExistingUser(){ + public void shouldReturnExistingUser() { final String email = "shouldReturnExistingUser@UserService.test"; - this.userService.save(new User("Tom","Smieszne",email,UserRoles.TEST_USER)); + this.userService.save(new User("Tom", "Smieszne", email, UserRoles.TEST_USER)); final User user = this.userService.checkForUser(email, null); assertTrue(user.getName() != "Tom"); diff --git a/restservice/src/main/java/com/plannaplan/controllers/TokenController.java b/restservice/src/main/java/com/plannaplan/controllers/TokenController.java index 77272e6..e4615d7 100755 --- a/restservice/src/main/java/com/plannaplan/controllers/TokenController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/TokenController.java @@ -2,6 +2,7 @@ package com.plannaplan.controllers; import com.plannaplan.entities.User; import com.plannaplan.exceptions.UserNotFoundException; +import com.plannaplan.responses.models.TokenResponse; import com.plannaplan.security.cas.CasUserIdentity; import com.plannaplan.security.cas.CasValidationExcepiton; import com.plannaplan.security.cas.CasValidator; @@ -38,23 +39,25 @@ public class TokenController { @GetMapping("/token") @ApiOperation(value = "Endpoint to access token required to call secured endpoints. In order to access token we need to provide access token comming from unviersity CAS system") - public ResponseEntity getToken( + public ResponseEntity getToken( @RequestParam("ticket") @ApiParam(value = "Ticket get from CAS system. It should look like ST-1376572-wo41gty5R0JCZFKMMie2-cas.amu.edu.psl") final String ticket) { - final CasValidator validator = isDev ? new DefaultUAMCasValidator(serviceUrl, ticket) : new CustomUAMCasValidator(serviceUrl, ticket); + final CasValidator validator = isDev ? new DefaultUAMCasValidator(serviceUrl, ticket) + : new CustomUAMCasValidator(serviceUrl, ticket); try { final CasUserIdentity casUserIdentity = validator.validate(); final String usosId = casUserIdentity.getUsosId(); final String authority = casUserIdentity.getEmail(); - final User user = this.userService.checkForUser(authority, usosId); - String token = this.userService.login(user); - return new ResponseEntity<>(token, HttpStatus.OK); + User user = this.userService.checkForUser(authority, usosId); + user = this.userService.login(user); + + return new ResponseEntity<>(new TokenResponse(user), HttpStatus.OK); } catch (CasValidationExcepiton e) { - return new ResponseEntity<>("Wrong ticket", HttpStatus.UNAUTHORIZED); + return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED); } catch (UserNotFoundException e) { - return new ResponseEntity<>("User not found", HttpStatus.NOT_FOUND); + return new ResponseEntity<>(null, HttpStatus.NOT_FOUND); } catch (Exception e) { - return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); } } diff --git a/restservice/src/test/java/com/plannaplan/controllers/AssignmentsControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/AssignmentsControllerTest.java index eb04229..4f0e55d 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/AssignmentsControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/AssignmentsControllerTest.java @@ -37,7 +37,7 @@ public class AssignmentsControllerTest extends AbstractControllerTest { @Test public void shouldReturnOk() throws Exception { final User newuser = this.service.save(new User(null, null, TEST_MAIL, UserRoles.TEST_USER)); - final String token = this.service.login(newuser); + final String token = this.service.login(newuser).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(get(ASSIGFNMENTS_ENDPOINT).header("Authorization", "Bearer " + token)) diff --git a/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java index 1408ca6..f426785 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/CommisionControllerTest.java @@ -58,7 +58,7 @@ public class CommisionControllerTest extends AbstractControllerTest { public void shouldFailedAddingCommisionDueToNoArgs() throws Exception { this.checkUsers(); final User user = this.service.checkForUser(TEST_COMMISIONS_STUDENT_EMAIL, null); - final String token = this.service.login(user); + final String token = this.service.login(user).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(post(ADD_COMMISION_ENDPOINT).header("Authorization", "Bearer " + token)) @@ -69,7 +69,7 @@ public class CommisionControllerTest extends AbstractControllerTest { public void shouldReturnOkAddingCommision() throws Exception { this.checkUsers(); final User user = this.service.checkForUser(TEST_COMMISIONS_STUDENT_EMAIL, null); - final String token = this.service.login(user); + final String token = this.service.login(user).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(post(ADD_COMMISION_ENDPOINT).header("Authorization", "Bearer " + token) @@ -86,7 +86,7 @@ public class CommisionControllerTest extends AbstractControllerTest { public void shouldReturnOkGettingAllCommisions() throws Exception { this.checkUsers(); final User user = this.service.checkForUser(TEST_COMMISIONS_STUDENT_EMAIL, null); - final String token = this.service.login(user); + final String token = this.service.login(user).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(get(GET_COMMISIONS_ENDPOINT).header("Authorization", "Bearer " + token)) @@ -97,7 +97,7 @@ public class CommisionControllerTest extends AbstractControllerTest { public void shouldAddCommisionWithSelfIdPrivided() throws Exception { this.checkUsers(); final User user = this.service.checkForUser(TEST_COMMISIONS_STUDENT_EMAIL, null); - final String token = this.service.login(user); + final String token = this.service.login(user).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(post(ADD_COMMISION_ENDPOINT + "/" + CommisionControllerTest.user.getId().toString()) @@ -110,7 +110,7 @@ public class CommisionControllerTest extends AbstractControllerTest { this.checkUsers(); final User user = this.service.checkForUser(TEST_COMMISIONS_STUDENT_EMAIL, null); - final String token = this.service.login(user); + final String token = this.service.login(user).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(post(ADD_COMMISION_ENDPOINT + "/" + CommisionControllerTest.otherUser.getId().toString()) @@ -122,7 +122,7 @@ public class CommisionControllerTest extends AbstractControllerTest { public void shouldFailCommisionAsDeanaryWithNoId() throws Exception { this.checkUsers(); final User user = this.service.checkForUser(TEST_COMMISIONS_DEANERY_EMAIL, null); - final String token = this.service.login(user); + final String token = this.service.login(user).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(post(ADD_COMMISION_ENDPOINT).header("Authorization", "Bearer " + token) @@ -132,7 +132,7 @@ public class CommisionControllerTest extends AbstractControllerTest { @Test public void shouldFailCommisionWithSelfIdPrividedAsDeanary() throws Exception { final User user = this.service.checkForUser(TEST_COMMISIONS_DEANERY_EMAIL, null); - final String token = this.service.login(user); + final String token = this.service.login(user).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(post(ADD_COMMISION_ENDPOINT + "/" + CommisionControllerTest.asker.getId().toString()) @@ -145,7 +145,7 @@ public class CommisionControllerTest extends AbstractControllerTest { this.checkUsers(); final User user = this.service.checkForUser(TEST_COMMISIONS_DEANERY_EMAIL, null); - final String token = this.service.login(user); + final String token = this.service.login(user).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(post(ADD_COMMISION_ENDPOINT + "/" + CommisionControllerTest.otherUser.getId().toString()) @@ -158,7 +158,7 @@ public class CommisionControllerTest extends AbstractControllerTest { this.checkUsers(); final User user = this.service.checkForUser(TEST_COMMISIONS_DEANERY_EMAIL, null); - final String token = this.service.login(user); + final String token = this.service.login(user).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(post(ADD_COMMISION_ENDPOINT + "/" + CommisionControllerTest.otherAsker.getId().toString()) @@ -171,7 +171,7 @@ public class CommisionControllerTest extends AbstractControllerTest { this.checkUsers(); final User user = this.service.checkForUser(TEST_COMMISIONS_DEANERY_EMAIL, null); - final String token = this.service.login(user); + final String token = this.service.login(user).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(get(GET_SOMEONE_COMMISIONS_ENDPOINT + "/" + CommisionControllerTest.user.getId().toString()) @@ -181,9 +181,9 @@ public class CommisionControllerTest extends AbstractControllerTest { @Test public void shouldFailStudentCommisionsListByOtherStudent() throws Exception { this.checkUsers(); - + final User user = this.service.checkForUser(TEST_COMMISIONS_STUDENT_EMAIL, null); - final String token = this.service.login(user); + final String token = this.service.login(user).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(get(GET_SOMEONE_COMMISIONS_ENDPOINT + "/" + CommisionControllerTest.user.getId().toString()) diff --git a/restservice/src/test/java/com/plannaplan/controllers/ConfigControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/ConfigControllerTest.java index b6e510b..ec73e79 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/ConfigControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/ConfigControllerTest.java @@ -49,7 +49,7 @@ public class ConfigControllerTest extends AbstractControllerTest { final InputStream inputStream = getClass().getClassLoader().getResourceAsStream(FILE_NAME); final MockMultipartFile file = new MockMultipartFile("file", inputStream); - final String token = this.service.login(usr); + final String token = this.service.login(usr).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(multipart(CONFIG_ENDPOINT).file(file).header("Authorization", "Bearer " + token)) @@ -64,7 +64,7 @@ public class ConfigControllerTest extends AbstractControllerTest { final InputStream inputStream = getClass().getClassLoader().getResourceAsStream(FILE_NAME); final MockMultipartFile file = new MockMultipartFile("file", inputStream); - final String token = this.service.login(usr); + final String token = this.service.login(usr).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(multipart(CONFIG_ENDPOINT).file(file).header("Authorization", "Bearer " + token)) diff --git a/restservice/src/test/java/com/plannaplan/controllers/UsersControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/UsersControllerTest.java index ceaa738..0b5bbb8 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/UsersControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/UsersControllerTest.java @@ -31,7 +31,7 @@ public class UsersControllerTest extends AbstractControllerTest { public void shouldRestrun200OK() throws Exception { final String email = "notexistingassignmentuser@shouldRestrun200OK.test"; final User user = this.service.save(new User(null, null, email, UserRoles.DEANERY)); - final String token = this.service.login(user); + final String token = this.service.login(user).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(get(ENDPOINT).param("query", "").header("Authorization", "Bearer " + token)) @@ -48,7 +48,7 @@ public class UsersControllerTest extends AbstractControllerTest { public void shouldFailedDueToMissingParam() throws Exception { final String email = "notexistingassignmentuser@shouldFailedDueToMissingParam.test"; final User user = this.service.save(new User(null, null, email, UserRoles.DEANERY)); - final String token = this.service.login(user); + final String token = this.service.login(user).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); mockMvc.perform(get(ENDPOINT).header("Authorization", "Bearer " + token)) From 82200acc064be3768b2041906479bc54a4f134ad Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Mon, 7 Dec 2020 22:01:45 +0100 Subject: [PATCH 3/5] swagger update --- .../com/plannaplan/responses/models/TokenResponse.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/restservice/src/main/java/com/plannaplan/responses/models/TokenResponse.java b/restservice/src/main/java/com/plannaplan/responses/models/TokenResponse.java index 4ec22d0..33f6f6e 100755 --- a/restservice/src/main/java/com/plannaplan/responses/models/TokenResponse.java +++ b/restservice/src/main/java/com/plannaplan/responses/models/TokenResponse.java @@ -2,10 +2,18 @@ package com.plannaplan.responses.models; import com.plannaplan.entities.User; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +@ApiModel(description = "Response shows information about logged user.", value = "TokenResponse") public class TokenResponse { + @ApiModelProperty(value = "user token used to verify requests") private String token; + @ApiModelProperty(value = "user id in database") private Long id; + @ApiModelProperty(value = "user app role") private String authorityRole; + @ApiModelProperty(value = "user unviersity email") private String email; public TokenResponse(User user) { From 48394d3583324bff2f79a180a6120ba1f3f974b7 Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Mon, 7 Dec 2020 22:21:34 +0100 Subject: [PATCH 4/5] students endpoint --- .../controllers/UsersController.java | 11 ++++- .../controllers/UsersControllerTest.java | 41 +++++++++++++++++-- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/restservice/src/main/java/com/plannaplan/controllers/UsersController.java b/restservice/src/main/java/com/plannaplan/controllers/UsersController.java index f662260..b6ec259 100755 --- a/restservice/src/main/java/com/plannaplan/controllers/UsersController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/UsersController.java @@ -36,10 +36,19 @@ public class UsersController { @GetMapping("/student/search") @PreAuthorize("hasRole('ROLE_DEANERY')") @ApiOperation(value = "Serch for user by providing query. If query is empty it will return all students. You need token with DEANERY role to call this") - public ResponseEntity> configApp( + public ResponseEntity> searchForStudent( @RequestParam("query") @ApiParam(value = "Query to filter all students. If empty will match everyone") String query) { final List searches = this.userService.searchForStudents(query); final List response = UserResponseMappers.mapToDefaultResponse(searches); return new ResponseEntity<>(response, HttpStatus.OK); } + + @GetMapping("/students") + @PreAuthorize("hasRole('ROLE_DEANERY')") + @ApiOperation(value = "Gets all students. You need token with DEANERY role to call this") + public ResponseEntity> getAllStudents() { + final List searches = this.userService.searchForStudents(""); + final List response = UserResponseMappers.mapToDefaultResponse(searches); + return new ResponseEntity<>(response, HttpStatus.OK); + } } diff --git a/restservice/src/test/java/com/plannaplan/controllers/UsersControllerTest.java b/restservice/src/test/java/com/plannaplan/controllers/UsersControllerTest.java index 0b5bbb8..6c31338 100755 --- a/restservice/src/test/java/com/plannaplan/controllers/UsersControllerTest.java +++ b/restservice/src/test/java/com/plannaplan/controllers/UsersControllerTest.java @@ -22,11 +22,14 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @ContextConfiguration public class UsersControllerTest extends AbstractControllerTest { - private static final String ENDPOINT = "/api/v1/users/student/search"; + private static final String SEARCH_ENDPOINT = "/api/v1/users/student/search"; + private static final String ALL_USERS_ENDPOINT = "/api/v1/users/students"; @Autowired private UserService service; + /* SEARCH_ENDPOINT */ + @Test public void shouldRestrun200OK() throws Exception { final String email = "notexistingassignmentuser@shouldRestrun200OK.test"; @@ -34,14 +37,14 @@ public class UsersControllerTest extends AbstractControllerTest { final String token = this.service.login(user).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); - mockMvc.perform(get(ENDPOINT).param("query", "").header("Authorization", "Bearer " + token)) + mockMvc.perform(get(SEARCH_ENDPOINT).param("query", "").header("Authorization", "Bearer " + token)) .andExpect(status().isOk()); } @Test public void shouldRestrunForbiden() throws Exception { MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); - mockMvc.perform(get(ENDPOINT)).andExpect(status().is4xxClientError()); + mockMvc.perform(get(SEARCH_ENDPOINT)).andExpect(status().is4xxClientError()); } @Test @@ -51,7 +54,37 @@ public class UsersControllerTest extends AbstractControllerTest { final String token = this.service.login(user).getToken(); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); - mockMvc.perform(get(ENDPOINT).header("Authorization", "Bearer " + token)) + mockMvc.perform(get(SEARCH_ENDPOINT).header("Authorization", "Bearer " + token)) .andExpect(status().is4xxClientError()); } + + /* ALL_USERS_ENDPOINT */ + + @Test + public void shouldRestrunAllStudents200OK() throws Exception { + final String email = "notexistingassignmentuser@shouldRestrunAllStudents200OK.test"; + final User user = this.service.save(new User(null, null, email, UserRoles.DEANERY)); + final String token = this.service.login(user).getToken(); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(ALL_USERS_ENDPOINT).header("Authorization", "Bearer " + token)).andExpect(status().isOk()); + } + + @Test + public void shouldRestrunAllStudentsForbiden() throws Exception { + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(ALL_USERS_ENDPOINT)).andExpect(status().is4xxClientError()); + } + + @Test + public void shouldDenyAllStudentsTryByStudent() throws Exception { + final String email = "notexistingassignmentuser@shouldDenyAllStudentsTryByStudent.test"; + final User user = this.service.save(new User(null, null, email, UserRoles.STUDENT)); + final String token = this.service.login(user).getToken(); + + MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); + mockMvc.perform(get(ALL_USERS_ENDPOINT).header("Authorization", "Bearer " + token)) + .andExpect(status().is4xxClientError()); + } + } From c34d53d0563252fbcc41f2f14bd60a6a2c614cc3 Mon Sep 17 00:00:00 2001 From: Filip Izydorczyk Date: Mon, 7 Dec 2020 23:32:11 +0100 Subject: [PATCH 5/5] Added taken place in course response (needs refactor later) --- .../com/plannaplan/services/GroupService.java | 7 +++- .../controllers/CoursesController.java | 35 ++++++++++++++++++- .../models/CoursesWithGroupsResponse.java | 7 ++++ 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/buisnesslogic/src/main/java/com/plannaplan/services/GroupService.java b/buisnesslogic/src/main/java/com/plannaplan/services/GroupService.java index 4d1582b..65ab5c8 100755 --- a/buisnesslogic/src/main/java/com/plannaplan/services/GroupService.java +++ b/buisnesslogic/src/main/java/com/plannaplan/services/GroupService.java @@ -14,7 +14,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** - * Service of GroupService which can find(optional), get(By Course, Groups Ammount, Group By Id, find Not Existing Group), save, delete group. + * Service of GroupService which can find(optional), get(By Course, Groups + * Ammount, Group By Id, find Not Existing Group), save, delete group. */ @Service @@ -68,6 +69,10 @@ public class GroupService { public HashMap getTakenPlaces(List groups) { HashMap response = new HashMap<>(); + if (groups.size() == 0) { + return response; + } + List respoonses = this.repo .getAssignedAmounts(groups.stream().filter(Objects::nonNull).map(new Function() { @Override diff --git a/restservice/src/main/java/com/plannaplan/controllers/CoursesController.java b/restservice/src/main/java/com/plannaplan/controllers/CoursesController.java index 5e9243d..18e0f48 100755 --- a/restservice/src/main/java/com/plannaplan/controllers/CoursesController.java +++ b/restservice/src/main/java/com/plannaplan/controllers/CoursesController.java @@ -1,5 +1,7 @@ package com.plannaplan.controllers; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import com.plannaplan.App; @@ -7,7 +9,10 @@ import com.plannaplan.entities.Course; import com.plannaplan.responses.mappers.CoursesResponseMappers; import com.plannaplan.responses.models.CoursesDefaultResponse; import com.plannaplan.responses.models.CoursesWithGroupsResponse; +import com.plannaplan.responses.models.GroupDefaultResponse; import com.plannaplan.services.CourseService; +import com.plannaplan.services.GroupService; +import com.plannaplan.types.GroupType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -33,12 +38,40 @@ public class CoursesController { @Autowired private CourseService courseService; + @Autowired + private GroupService groupService; + @GetMapping("/all") @ApiOperation(value = "Return all courses") public ResponseEntity> getMethodName( - @RequestParam(name = "groups", defaultValue = "false") @ApiParam(value = "Boolean if you want to have resopnse with associated groups or without") Boolean groups) { + @RequestParam(name = "groups", defaultValue = "false") @ApiParam(value = "Boolean if you want to have resopnse with associated groups or without") Boolean groups, + @RequestParam(name = "takenPlaces", defaultValue = "false") @ApiParam(value = "Boolean if we want to have respoonse with information about taken places by other students. Needs to be set groups true first") Boolean takenPlaces) { List courses = this.courseService.getAllCourses(); if (groups) { + if (takenPlaces) { + + final List response = new ArrayList<>(); + + courses.forEach(course -> { + final List lectures = new ArrayList<>(); + final List classes = new ArrayList<>(); + + final HashMap ammounts = this.groupService.getTakenPlaces(course.getGroups()); + + course.getGroups().stream().forEach(group -> { + if (group.getType() == GroupType.CLASS) { + classes.add(new GroupDefaultResponse(group, ammounts.get(group.getId()))); + } else { + lectures.add(new GroupDefaultResponse(group, ammounts.get(group.getId()))); + } + }); + + response.add(new CoursesWithGroupsResponse(course, lectures, classes)); + }); + + return new ResponseEntity<>(response, HttpStatus.OK); + } + final List response = CoursesResponseMappers .mapToGetCoursesWithGroupsResponse(courses); return new ResponseEntity<>(response, HttpStatus.OK); diff --git a/restservice/src/main/java/com/plannaplan/responses/models/CoursesWithGroupsResponse.java b/restservice/src/main/java/com/plannaplan/responses/models/CoursesWithGroupsResponse.java index 188565a..864618a 100755 --- a/restservice/src/main/java/com/plannaplan/responses/models/CoursesWithGroupsResponse.java +++ b/restservice/src/main/java/com/plannaplan/responses/models/CoursesWithGroupsResponse.java @@ -26,6 +26,13 @@ public class CoursesWithGroupsResponse extends CoursesResponse { }); } + public CoursesWithGroupsResponse(Course course, List lectures, + List classes) { + super(course); + this.lectures = lectures; + this.classes = classes; + } + public List getClasses() { return this.classes; }