Skip to content

Commit

Permalink
ForbiddenException added
Browse files Browse the repository at this point in the history
  • Loading branch information
maxdo1511 committed Nov 25, 2024
1 parent 7b12db8 commit 9b2fb6b
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import ru.espada.ep.iptip.course.test.model.CreateTestModel;
import ru.espada.ep.iptip.course.user_course.UserCourseEntity;
import ru.espada.ep.iptip.course.user_course.UserCourseRepository;
import ru.espada.ep.iptip.exceptions.custom.ForbiddenException;
import ru.espada.ep.iptip.study_groups.StudyGroupEntity;
import ru.espada.ep.iptip.study_groups.StudyGroupRepository;
import ru.espada.ep.iptip.study_groups.StudyGroupService;
Expand Down Expand Up @@ -100,7 +101,7 @@ public void detachUserFromCourse(Long courseId, Long userId) {

@Transactional
public void attachStudyGroupToCourse(Principal principal, StudyGroupCourseModel attachStudyGroupToCourseModel) {
if (!studyGroupService.hasPermission(principal.getName(), attachStudyGroupToCourseModel.getCourseId())) throw new RuntimeException("Permission denied");
if (!studyGroupService.hasPermission(principal.getName(), attachStudyGroupToCourseModel.getCourseId())) throw new ForbiddenException("Permission denied");

CourseEntity courseEntity = courseRepository.findById(attachStudyGroupToCourseModel.getCourseId()).orElseThrow(() -> new RuntimeException("Course not found"));
StudyGroupEntity studyGroupEntity = studyGroupRepository.findById(attachStudyGroupToCourseModel.getStudyGroupId()).orElseThrow(() -> new RuntimeException("StudyGroup not found"));
Expand All @@ -115,7 +116,7 @@ public void attachStudyGroupToCourse(Principal principal, StudyGroupCourseModel

@Transactional
public void detachStudyGroupFromCourse(Principal principal, StudyGroupCourseModel detachUserFromCourseModel) {
if (!studyGroupService.hasPermission(principal.getName(), detachUserFromCourseModel.getCourseId())) throw new RuntimeException("Permission denied");
if (!studyGroupService.hasPermission(principal.getName(), detachUserFromCourseModel.getCourseId())) throw new ForbiddenException("Permission denied");

CourseEntity courseEntity = courseRepository.findById(detachUserFromCourseModel.getCourseId()).orElseThrow(() -> new RuntimeException("Course not found"));
StudyGroupEntity studyGroupEntity = studyGroupRepository.findById(detachUserFromCourseModel.getStudyGroupId()).orElseThrow(() -> new RuntimeException("StudyGroup not found"));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package ru.espada.ep.iptip.exceptions.custom;

public class ForbiddenException extends RuntimeException {

public ForbiddenException(String message) {
super(message);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package ru.espada.ep.iptip.exceptions.handlers;

import jakarta.validation.ConstraintViolationException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import ru.espada.ep.iptip.exceptions.custom.ForbiddenException;
import ru.espada.ep.iptip.exceptions.custom.LocalizationException;
import ru.espada.ep.iptip.exceptions.response.OperationStatus;
import ru.espada.ep.iptip.localization.LocalizationService;

@ControllerAdvice
public class ForbiddenExceptionAdvice {

private LocalizationService localizationService;

@Autowired
public void setLocalizationService(LocalizationService localizationService) {
this.localizationService = localizationService;
}

@ExceptionHandler
public ResponseEntity<?> handleForbiddenException(ForbiddenException e) {
String message = e.getMessage();
try {
message = localizationService.getLocalizedMessage(message);
} catch (LocalizationException ignored) {
}
return ResponseEntity.status(HttpStatus.FORBIDDEN).body(
OperationStatus.builder()
.status(false)
.message(message)
.build()
);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
import org.springframework.stereotype.Service;
import ru.espada.ep.iptip.event.EventEntity;
import ru.espada.ep.iptip.event.EventRepository;
import ru.espada.ep.iptip.exceptions.custom.ForbiddenException;
import ru.espada.ep.iptip.study_groups.StudyGroupEntity;
import ru.espada.ep.iptip.study_groups.StudyGroupRepository;
import ru.espada.ep.iptip.study_groups.StudyGroupService;
import ru.espada.ep.iptip.study_groups.study_group_event.model.requests.AttachEventToStudyGroupRequest;
import ru.espada.ep.iptip.study_groups.study_group_event.model.requests.DetachEventFromStudyGroupRequest;

Expand All @@ -19,10 +21,14 @@ public class StudyGroupEventServiceImpl implements StudyGroupEventService {
private StudyGroupEventRepository studyGroupEventRepository;
private EventRepository eventRepository;
private StudyGroupRepository studyGroupRepository;
private StudyGroupService studyGroupService;

// TODO: deal with the principal stuff here
@Override
public StudyGroupEventEntity attachEventToStudyGroup(Principal principal, AttachEventToStudyGroupRequest request) {
if (!studyGroupService.hasPermission(principal.getName(), request.getStudyGroupId())) {
throw new ForbiddenException("User does not have permission to attach event to study group");
}

EventEntity event = eventRepository.findById(request.getEventId()).orElseThrow();
StudyGroupEntity studyGroup = studyGroupRepository.findById(request.getStudyGroupId()).orElseThrow();
Expand All @@ -36,6 +42,9 @@ public StudyGroupEventEntity attachEventToStudyGroup(Principal principal, Attach
// TODO: deal with the principal stuff here as well
@Override
public void detachEventFromStudyGroup(Principal principal, DetachEventFromStudyGroupRequest request) {
if (!studyGroupService.hasPermission(principal.getName(), request.getStudyGroupId())) {
throw new ForbiddenException("User does not have permission to detach event from study group");
}

EventEntity event = eventRepository.findById(request.getEventId()).orElseThrow();
StudyGroupEntity studyGroup = studyGroupRepository.findById(request.getStudyGroupId()).orElseThrow();
Expand All @@ -60,4 +69,9 @@ public void setEventRepository(EventRepository eventRepository) {
public void setStudyGroupRepository(StudyGroupRepository studyGroupRepository) {
this.studyGroupRepository = studyGroupRepository;
}

@Autowired
public void setStudyGroupService(StudyGroupService studyGroupService) {
this.studyGroupService = studyGroupService;
}
}

0 comments on commit 9b2fb6b

Please sign in to comment.