Skip to content
Snippets Groups Projects
Commit 37d8f1af authored by Dominika Zemanovičová's avatar Dominika Zemanovičová
Browse files

Add EmailMismatchException, separate MissingServletRequestParameterException

parent 6895ea13
No related branches found
No related tags found
1 merge request!44fixed ConfidentialClientApplication
Pipeline #
package org.fuseri.modulelanguageschool.exceptions;
public class EmailMismatchException extends RuntimeException {
public EmailMismatchException() {
}
public EmailMismatchException(String message) {
super(message);
}
}
......@@ -42,7 +42,7 @@ public class RestResponseEntityExceptionHandler {
* @param request request
* @return response entity
*/
@ExceptionHandler(value = {UserWithEmailAlreadyExists.class, MissingServletRequestParameterException.class})
@ExceptionHandler(value = {UserWithEmailAlreadyExists.class})
public ResponseEntity<ApiError> handleUserWithEmailAlreadyExistsError(UserWithEmailAlreadyExists ex, HttpServletRequest request) {
ApiError error = new ApiError(
HttpStatus.BAD_REQUEST,
......@@ -51,6 +51,38 @@ public class RestResponseEntityExceptionHandler {
return buildResponseEntity(error);
}
/**
* Handle EmailMismatchException exceptions
*
* @param ex exception
* @param request request
* @return response entity
*/
@ExceptionHandler(value = {EmailMismatchException.class})
public ResponseEntity<ApiError> handleEmailMismatchError(EmailMismatchException ex, HttpServletRequest request) {
ApiError error = new ApiError(
HttpStatus.BAD_REQUEST,
ex,
URL_PATH_HELPER.getRequestUri(request));
return buildResponseEntity(error);
}
/**
* Handle MissingServletRequestParameterException exceptions
*
* @param ex exception
* @param request request
* @return response entity
*/
@ExceptionHandler(value = {MissingServletRequestParameterException.class})
public ResponseEntity<ApiError> handleMissingRequestParameterException(MissingServletRequestParameterException ex, HttpServletRequest request) {
ApiError error = new ApiError(
HttpStatus.BAD_REQUEST,
ex,
URL_PATH_HELPER.getRequestUri(request));
return buildResponseEntity(error);
}
/**
* Handle Validation exceptions
*
......
......@@ -15,14 +15,25 @@ import org.fuseri.model.dto.user.UserAddLanguageDto;
import org.fuseri.model.dto.user.UserCreateDto;
import org.fuseri.model.dto.user.UserDto;
import org.fuseri.modulelanguageschool.ModuleLanguageSchoolApplication;
import org.fuseri.modulelanguageschool.exceptions.EmailMismatchException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.server.resource.introspection.OAuth2IntrospectionAuthenticatedPrincipal;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Objects;
@RestController
@RequestMapping("/users")
......@@ -35,8 +46,8 @@ public class UserController {
this.facade = facade;
}
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME,scopes = {})
,summary = "Get a user by Id", description = "Returns a user with specified Id")
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME, scopes = {})
, summary = "Get a user by Id", description = "Returns a user with specified Id")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "User with the specified Id is retrieved Successfuly",
content = @Content(schema = @Schema(implementation = UserDto.class)
......@@ -44,7 +55,7 @@ public class UserController {
@ApiResponse(responseCode = "404", description = "User with the specified ID was not found.")
})
@GetMapping("/{id}")
public ResponseEntity<UserDto> find(@PathVariable @NotNull Long id,@AuthenticationPrincipal OAuth2IntrospectionAuthenticatedPrincipal principal) {
public ResponseEntity<UserDto> find(@PathVariable @NotNull Long id, @AuthenticationPrincipal OAuth2IntrospectionAuthenticatedPrincipal principal) {
try {
return ResponseEntity.ok(facade.find(id));
} catch (EntityNotFoundException e) {
......@@ -52,20 +63,20 @@ public class UserController {
}
}
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME,scopes = {"test_1"})
,summary = "Create a User", description = "Creates a new User.")
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME, scopes = {"test_1"})
, summary = "Create a User", description = "Creates a new User.")
@ApiResponses(value = {
@ApiResponse(responseCode = "201", description = "User created successfully."),
@ApiResponse(responseCode = "400", description = "Invalid input.")
})
@PostMapping
public ResponseEntity<UserDto> create(@Valid @RequestBody UserCreateDto dto,@AuthenticationPrincipal OAuth2IntrospectionAuthenticatedPrincipal principal) {
public ResponseEntity<UserDto> create(@Valid @RequestBody UserCreateDto dto, @AuthenticationPrincipal OAuth2IntrospectionAuthenticatedPrincipal principal) {
UserDto user = facade.create(dto);
return ResponseEntity.status(HttpStatus.CREATED).body(user);
}
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME,scopes = {"test_1"})
,summary = "Delete a User with specified ID", description = "Deletes a User with the specified ID.")
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME, scopes = {"test_1"})
, summary = "Delete a User with specified ID", description = "Deletes a User with the specified ID.")
@ApiResponses(value = {
@ApiResponse(responseCode = "204", description = "User with the specified ID deleted successfully."),
})
......@@ -75,8 +86,8 @@ public class UserController {
return ResponseEntity.noContent().build();
}
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME,scopes = {})
,summary = "Update a User", description = "Updates a User with the specified ID.")
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME, scopes = {})
, summary = "Update a User", description = "Updates a User with the specified ID.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "User with the specified ID updated successfully."),
@ApiResponse(responseCode = "400", description = "Invalid input."),
......@@ -91,7 +102,7 @@ public class UserController {
}
}
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME,scopes = {}),
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME, scopes = {}),
summary = "Get Users in paginated format", description = "Returns Users in paginated format.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Successfully retrieved paginated Users"),
......@@ -104,15 +115,22 @@ public class UserController {
}
@Operation(summary = "Registers a new user", description = "saves a new user into the database.")
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME, scopes = {}),
summary = "Registers a new user after oath login", description = "Saves a new user into the database after oath login.")
@PostMapping("/register")
public ResponseEntity<UserDto> register(@RequestBody @Valid UserCreateDto dto) {
public ResponseEntity<UserDto> register(@RequestBody @Valid UserCreateDto dto,
@AuthenticationPrincipal OAuth2IntrospectionAuthenticatedPrincipal principal) {
if (!Objects.equals(principal.getSubject(), dto.getEmail())) {
throw new EmailMismatchException(
String.format("Token email %s and body email %s does not match.", principal.getSubject(), dto.getEmail()));
}
UserDto user = facade.register(dto);
return ResponseEntity.status(HttpStatus.CREATED).body(user);
}
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME,scopes = {}),summary = "get finished courses", description = "retrieves finished courses of user with given Id")
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME, scopes = {}), summary = "get finished courses", description = "retrieves finished courses of user with given Id")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Successfully retrieved finished courses"),
@ApiResponse(responseCode = "400", description = "Invalid input")
......@@ -122,8 +140,8 @@ public class UserController {
return ResponseEntity.ok(facade.getFinished(id));
}
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME,scopes = {})
,summary = "get enrolled courses", description = "retrieves currently enrolled courses of user with given Id")
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME, scopes = {})
, summary = "get enrolled courses", description = "retrieves currently enrolled courses of user with given Id")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Successfully retrieved enrolled courses"),
@ApiResponse(responseCode = "400", description = "Invalid input")
......@@ -133,7 +151,7 @@ public class UserController {
return ResponseEntity.ok(facade.getEnrolled(id));
}
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME,scopes = {}),
@Operation(security = @SecurityRequirement(name = ModuleLanguageSchoolApplication.SECURITY_SCHEME_NAME, scopes = {}),
summary = "adds a language", description = "adds a new language and proficiency to user")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Successfully added a language"),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment