diff --git a/module-api/src/main/java/com/kernel360/review/service/ReviewService.java b/module-api/src/main/java/com/kernel360/review/service/ReviewService.java index 5b3659fd..a9333ac4 100644 --- a/module-api/src/main/java/com/kernel360/review/service/ReviewService.java +++ b/module-api/src/main/java/com/kernel360/review/service/ReviewService.java @@ -24,10 +24,13 @@ import org.springframework.web.multipart.MultipartFile; import java.math.BigDecimal; +import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.Optional; +import static org.springframework.util.MimeTypeUtils.*; + @Slf4j @Service @RequiredArgsConstructor @@ -44,6 +47,7 @@ public class ReviewService { private static final double MAX_STAR_RATING = 5.0; private static final String REVIEW_DOMAIN = FileReferType.REVIEW.getDomain(); private static final String REVIEW_CODE = FileReferType.REVIEW.getCode(); + private static final List ALLOWED_FILE_TYPE = Arrays.asList(IMAGE_JPEG_VALUE, IMAGE_PNG_VALUE, IMAGE_GIF_VALUE); @Transactional(readOnly = true) public Page getReviewsByProduct(Long productNo, String sortBy, Pageable pageable) { @@ -77,6 +81,7 @@ public ReviewResponseDto getReview(Long reviewNo) { public Review createReview(ReviewRequestDto reviewRequestDto, List files, String id) { isValidMemberInfo(id, reviewRequestDto.memberNo()); isValidStarRating(reviewRequestDto.starRating()); + fileUtils.isValidFileExtension(files, ALLOWED_FILE_TYPE); Review review; @@ -120,6 +125,7 @@ public void updateReview(ReviewRequestDto reviewRequestDto, List Review review = isVisibleReview(reviewRequestDto.reviewNo()); isValidMemberInfo(id, review.getMember().getMemberNo()); isValidStarRating(reviewRequestDto.starRating()); + fileUtils.isValidFileExtension(files, ALLOWED_FILE_TYPE); long productNo = review.getProduct().getProductNo(); diff --git a/module-api/src/main/java/com/kernel360/washzonereview/service/WashzoneReviewService.java b/module-api/src/main/java/com/kernel360/washzonereview/service/WashzoneReviewService.java index 3bc6bc32..5e32bd65 100644 --- a/module-api/src/main/java/com/kernel360/washzonereview/service/WashzoneReviewService.java +++ b/module-api/src/main/java/com/kernel360/washzonereview/service/WashzoneReviewService.java @@ -24,10 +24,13 @@ import org.springframework.web.multipart.MultipartFile; import java.math.BigDecimal; +import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.Optional; +import static org.springframework.util.MimeTypeUtils.*; + @Slf4j @Service @RequiredArgsConstructor @@ -43,6 +46,7 @@ public class WashzoneReviewService { private static final double MAX_STAR_RATING = 5.0; private static final String WASHZONE_REVIEW_DOMAIN = FileReferType.WASHZONE_REVIEW.getDomain(); private static final String WASHZONE_REVIEW_CODE = FileReferType.WASHZONE_REVIEW.getCode(); + private static final List ALLOWED_FILE_TYPE = Arrays.asList(IMAGE_JPEG_VALUE, IMAGE_PNG_VALUE, IMAGE_GIF_VALUE); @Transactional(readOnly = true) public Page getWashzoneReviewsByWashzone(Long washzoneNo, String sortBy, Pageable pageable) { @@ -76,6 +80,7 @@ public WashzoneReviewResponseDto getWashzoneReview(Long washzoneReviewNo) { public WashzoneReview createWashzoneReview(WashzoneReviewRequestDto requestDto, List files, String id) { isValidMemberInfo(id, requestDto.memberNo()); isValidStarRating(requestDto.starRating()); + fileUtils.isValidFileExtension(files, ALLOWED_FILE_TYPE); WashzoneReview washzoneReview; @@ -119,6 +124,7 @@ public void updateWashzoneReview(WashzoneReviewRequestDto requestDto, List files) { + boolean isNotValid = files.stream() + .anyMatch(file -> { + try { + List extensions = mimeTypes.forName(tika.detect(file.getInputStream())).getExtensions(); + return !extensions.contains("." + FilenameUtils.getExtension(file.getOriginalFilename())); + } catch (MimeTypeException | IOException e) { + log.error("isValidFileExtension(List)", e.getMessage()); + throw new BusinessException(CommonErrorCode.FAIL_FILE_EXTENSION_VALIDATE); + } + }); + + if (isNotValid) { + throw new BusinessException(CommonErrorCode.INVALID_FILE_EXTENSION); + } + } + + public void isValidFileExtension(List files, List allowedFileType) { + isValidFileExtension(files); + + if (allowedFileType == null || allowedFileType.isEmpty()) { + return; + } + + List allowExt = new ArrayList<>(); + allowedFileType.stream() + .forEach(type -> { + try { + allowExt.addAll(mimeTypes.forName(type).getExtensions()); + } catch (MimeTypeException e) { + log.error("isValidFileExtension(List, List)", e.getMessage()); + throw new BusinessException(CommonErrorCode.FAIL_FILE_EXTENSION_VALIDATE); + } + }); + + boolean isNotValid = files.stream() + .anyMatch(file -> !allowExt.contains(getFileExtension(file.getOriginalFilename()))); + + if (isNotValid) { throw new BusinessException(CommonErrorCode.INVALID_FILE_EXTENSION); } }