diff --git a/src/main/java/com/tiki/server/common/exception/ErrorCode.java b/src/main/java/com/tiki/server/common/exception/ErrorCode.java index 7e96d4cc..cd6903c4 100644 --- a/src/main/java/com/tiki/server/common/exception/ErrorCode.java +++ b/src/main/java/com/tiki/server/common/exception/ErrorCode.java @@ -10,7 +10,7 @@ public enum ErrorCode { /* 400 BAD REQUEST : 잘못된 요청 */ UNCAUGHT_EXCEPTION(HttpStatus.BAD_REQUEST, "예상치 못한 오류가 발생했습니다."), - EMOJI_NOT_ALLOWED(HttpStatus.BAD_REQUEST, "이모지는 사용할 수 없습니다."), + INVALID_CHARACTER(HttpStatus.BAD_REQUEST, "한글, 영어, 숫자, 일부 특수문자 만 입력 가능합니다."), EXCEEDED_MAX_LENGTH(HttpStatus.BAD_REQUEST, "최대 길이를 초과했습니다."); private final HttpStatus httpStatus; diff --git a/src/main/java/com/tiki/server/common/handler/ErrorHandler.java b/src/main/java/com/tiki/server/common/handler/ErrorHandler.java index 69f7b9ab..6f6eca5d 100644 --- a/src/main/java/com/tiki/server/common/handler/ErrorHandler.java +++ b/src/main/java/com/tiki/server/common/handler/ErrorHandler.java @@ -2,6 +2,7 @@ import com.tiki.server.auth.exception.AuthException; import com.tiki.server.common.dto.ErrorCodeResponse; +import com.tiki.server.common.exception.TikiException; import com.tiki.server.email.emailsender.exception.EmailSenderException; import com.tiki.server.email.teaminvitation.exception.TeamInvitationException; import com.tiki.server.email.verification.exception.EmailVerificationException; @@ -33,6 +34,14 @@ @RestControllerAdvice public class ErrorHandler { + @ExceptionHandler(TikiException.class) + public ResponseEntity tikiException(TikiException exception) { + log.error(exception.getMessage()); + val errorCode = exception.getErrorCode(); + Sentry.captureException(exception); + return ResponseEntity.status(errorCode.getHttpStatus()).body(ErrorResponse.of(errorCode.getMessage())); + } + @ExceptionHandler(MemberException.class) public ResponseEntity memberException(MemberException exception) { log.error(exception.getMessage()); diff --git a/src/main/java/com/tiki/server/common/util/Validator.java b/src/main/java/com/tiki/server/common/util/Validator.java index 68785d88..8cdc9607 100644 --- a/src/main/java/com/tiki/server/common/util/Validator.java +++ b/src/main/java/com/tiki/server/common/util/Validator.java @@ -1,10 +1,8 @@ package com.tiki.server.common.util; -import static com.tiki.server.common.exception.ErrorCode.EMOJI_NOT_ALLOWED; import static com.tiki.server.common.exception.ErrorCode.EXCEEDED_MAX_LENGTH; +import static com.tiki.server.common.exception.ErrorCode.INVALID_CHARACTER; -import com.ibm.icu.lang.UCharacter; -import com.ibm.icu.lang.UProperty; import com.ibm.icu.text.BreakIterator; import com.tiki.server.common.exception.TikiException; @@ -18,26 +16,21 @@ public static void validateLengthContainEmoji(final String text, final int maxLe while (BreakIterator.DONE != iterator.next()) { count++; } - if(count > maxLength) { + if (count > maxLength) { throw new TikiException(EXCEEDED_MAX_LENGTH); } } public static void validateLength(final String text, final int maxLength) { - BreakIterator iterator = BreakIterator.getCharacterInstance(); - iterator.setText(text); - int count = 0; - int index = iterator.first(); - while (index != BreakIterator.DONE) { - int codePoint = text.codePointAt(index); - if (UCharacter.hasBinaryProperty(codePoint, UProperty.EMOJI)) { - throw new TikiException(EMOJI_NOT_ALLOWED); - } - count++; - if (count > maxLength) { - throw new TikiException(EXCEEDED_MAX_LENGTH); - } - index = iterator.next(); + if (text.length() > maxLength) { + throw new TikiException(EXCEEDED_MAX_LENGTH); + } + } + + public static void validText(final String text) { + String regex = "^[a-zA-Z가-힣0-9 !@#$%^&*()\\-_=+\\[\\]{};:'\",.<>?/|\\\\]+$"; + if (!text.matches(regex)) { + throw new TikiException(INVALID_CHARACTER); } } } diff --git a/src/main/java/com/tiki/server/memberteammanager/controller/dto/request/UpdateTeamMemberNameRequest.java b/src/main/java/com/tiki/server/memberteammanager/controller/dto/request/UpdateTeamMemberNameRequest.java index 495fe882..1a2e6f41 100644 --- a/src/main/java/com/tiki/server/memberteammanager/controller/dto/request/UpdateTeamMemberNameRequest.java +++ b/src/main/java/com/tiki/server/memberteammanager/controller/dto/request/UpdateTeamMemberNameRequest.java @@ -8,6 +8,7 @@ public record UpdateTeamMemberNameRequest( ) { public UpdateTeamMemberNameRequest(final String newName) { + Validator.validText(newName); Validator.validateLength(newName, 32); this.newName = newName; } diff --git a/src/main/java/com/tiki/server/team/dto/request/TeamCreateRequest.java b/src/main/java/com/tiki/server/team/dto/request/TeamCreateRequest.java index 30fb507b..ec6ab45d 100644 --- a/src/main/java/com/tiki/server/team/dto/request/TeamCreateRequest.java +++ b/src/main/java/com/tiki/server/team/dto/request/TeamCreateRequest.java @@ -11,6 +11,7 @@ public record TeamCreateRequest( @NotNull String iconImageUrl ) { public TeamCreateRequest(final String name, final Category category, final String iconImageUrl) { + Validator.validText(name); Validator.validateLength(name, 30); this.name = name; this.category = category; diff --git a/src/main/java/com/tiki/server/team/dto/request/TeamInformUpdateRequest.java b/src/main/java/com/tiki/server/team/dto/request/TeamInformUpdateRequest.java index 4ff13ada..f77e1f5c 100644 --- a/src/main/java/com/tiki/server/team/dto/request/TeamInformUpdateRequest.java +++ b/src/main/java/com/tiki/server/team/dto/request/TeamInformUpdateRequest.java @@ -8,6 +8,7 @@ public record TeamInformUpdateRequest( @NotNull String teamUrl ) { public TeamInformUpdateRequest(final String teamName, final String teamUrl) { + Validator.validText(teamName); Validator.validateLength(teamName, 30); this.teamName = teamName; this.teamUrl = teamUrl;