test #327
| @@ -70,6 +70,9 @@ dependencies { | ||||
|     implementation("org.apache.poi:poi-ooxml:5.2.3") | ||||
|     implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4") | ||||
|  | ||||
|     // file mimetype check | ||||
|     implementation("org.apache.tika:tika-core:3.2.0") | ||||
|  | ||||
|     developmentOnly("org.springframework.boot:spring-boot-devtools") | ||||
|     runtimeOnly("com.h2database:h2") | ||||
|     runtimeOnly("com.mysql:mysql-connector-j") | ||||
|   | ||||
| @@ -21,6 +21,7 @@ import kr.co.vividnext.sodalive.fcm.FcmEventType | ||||
| import kr.co.vividnext.sodalive.member.Member | ||||
| import kr.co.vividnext.sodalive.member.block.BlockMemberRepository | ||||
| import kr.co.vividnext.sodalive.utils.generateFileName | ||||
| import kr.co.vividnext.sodalive.utils.validateImage | ||||
| import org.springframework.beans.factory.annotation.Value | ||||
| import org.springframework.context.ApplicationEventPublisher | ||||
| import org.springframework.data.repository.findByIdOrNull | ||||
| @@ -71,6 +72,8 @@ class CreatorCommunityService( | ||||
|             throw SodaException("오디오 등록을 위해서는 이미지가 필요합니다.") | ||||
|         } | ||||
|  | ||||
|         postImage?.let { validateImage(it, request.price > 0) } | ||||
|  | ||||
|         val post = CreatorCommunity( | ||||
|             content = request.content, | ||||
|             price = request.price, | ||||
| @@ -129,6 +132,8 @@ class CreatorCommunityService( | ||||
|         val post = repository.findByIdAndMemberId(id = request.creatorCommunityId, memberId = member.id!!) | ||||
|             ?: throw SodaException("잘못된 요청입니다.") | ||||
|  | ||||
|         postImage?.let { validateImage(it, post.price > 0) } | ||||
|  | ||||
|         if (request.content != null) { | ||||
|             post.content = request.content | ||||
|         } | ||||
|   | ||||
| @@ -0,0 +1,21 @@ | ||||
| package kr.co.vividnext.sodalive.utils | ||||
|  | ||||
| import kr.co.vividnext.sodalive.common.SodaException | ||||
| import org.apache.tika.Tika | ||||
| import org.springframework.web.multipart.MultipartFile | ||||
|  | ||||
| /** | ||||
|  * 이미지 파일인지 확인하고, | ||||
|  * GIF의 경우 외부 조건(gifAllowed)에 따라 허용 여부 판단 | ||||
|  */ | ||||
| fun validateImage(file: MultipartFile, gifAllowed: Boolean) { | ||||
|     val mimeType = Tika().detect(file.bytes) | ||||
|  | ||||
|     if (!mimeType.startsWith("image/")) { | ||||
|         throw SodaException("이미지 파일만 업로드할 수 있습니다.") | ||||
|     } | ||||
|  | ||||
|     if (mimeType == "image/gif" && !gifAllowed) { | ||||
|         throw SodaException("GIF 파일은 유료 게시물만 업로드 할 수 있습니다.") | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user