From 6d5d95ac43c4b5286e258d7644b9345bb54700bf Mon Sep 17 00:00:00 2001 From: Jaewon Lee <58386334+jaewonLeeKOR@users.noreply.github.com> Date: Mon, 22 Jul 2024 17:20:43 +0900 Subject: [PATCH] =?UTF-8?q?[MS-190]=20Feat:=20sms=20=ED=99=94=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config | 2 +- .../api/domain/sms/service/SmsService.java | 25 +++++++++++++------ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/config b/config index bee900e7..ad756aea 160000 --- a/config +++ b/config @@ -1 +1 @@ -Subproject commit bee900e7b5884ba33562d3300fef86f918772234 +Subproject commit ad756aeaee10c04b68b92bcf7a90c77693b62e41 diff --git a/src/main/java/com/modutaxi/api/domain/sms/service/SmsService.java b/src/main/java/com/modutaxi/api/domain/sms/service/SmsService.java index 16d3188d..13ea5161 100644 --- a/src/main/java/com/modutaxi/api/domain/sms/service/SmsService.java +++ b/src/main/java/com/modutaxi/api/domain/sms/service/SmsService.java @@ -13,6 +13,7 @@ import org.springframework.stereotype.Service; import java.time.LocalDateTime; +import java.util.List; @Service @RequiredArgsConstructor @@ -26,6 +27,12 @@ public class SmsService { private Integer certCodeLength; @Value("${sms.cert-sms-restriction-seconds}") private Integer certSmsRestrictionSeconds; + @Value("${sms.cert-white-list-phone-numbers}") + private List whiteListPhoneNumbers; + @Value("${sms.cert-white-list-certification-code}") + private String whiteListCertificationCode; + @Value("${sms.cert-white-list-message-id}") + private String whiteListMessageId; public Boolean sendCertificationCodeWithSignupKey(String signupKey, String phoneNumber) { checkSignupKey(signupKey); @@ -37,25 +44,28 @@ public Boolean sendCertificationCodeWithJwt(String memberId, String phoneNumber) } private Boolean sendCertificationCode(String key, String phoneNumber) { - phoneNumber = checkPhoneNumberPattern(phoneNumber); + String finalPhoneNumber = phoneNumber; + boolean isWhiteList = whiteListPhoneNumbers.stream().anyMatch(finalPhoneNumber::equals); + phoneNumber = checkPhoneNumberPattern(phoneNumber, isWhiteList); SmsCertCodeEntity smsCertCodeEntity = redisSmsCertificationCodeRepository.findById(key); if (smsCertCodeEntity != null) { - smsAgencyUtil.getPrevMessage(sender, phoneNumber, smsCertCodeEntity.getMessageId()); + if(!isWhiteList) + smsAgencyUtil.getPrevMessage(sender, phoneNumber, smsCertCodeEntity.getMessageId()); if (smsCertCodeEntity.getPhoneNumber().equals(phoneNumber) && smsCertCodeEntity.getCreatedAt().plusSeconds(certSmsRestrictionSeconds).isAfter(LocalDateTime.now())) { throw new BaseException(SmsErrorCode.CERTIFICATION_CODE_ALREADY_SENT); } } - String certificationCode = CertificationCodeUtil.generateCertificationCode(certCodeLength); - String messageId = smsAgencyUtil.sendOne(sender, phoneNumber, String.format("[모두의택시] 인증번호는 [%s]입니다.", certificationCode)); + String certificationCode = isWhiteList ? whiteListCertificationCode : CertificationCodeUtil.generateCertificationCode(certCodeLength); + String messageId = isWhiteList ? whiteListMessageId : smsAgencyUtil.sendOne(sender, phoneNumber, String.format("[모두의택시] 인증번호는 [%s]입니다.", certificationCode)); redisSmsCertificationCodeRepository.save(key, phoneNumber, certificationCode, messageId); smsAgencyUtil.checkBalance(); return true; } - private String checkPhoneNumberPattern(String phoneNumber) { + private String checkPhoneNumberPattern(String phoneNumber, boolean isWhiteList) { String REGEXP_ONLY_NUM = "^01([0|1|6|7|8|9])-([0-9]{3,4})-([0-9]{4})+$"; - if (!phoneNumber.matches(REGEXP_ONLY_NUM)) { + if (!isWhiteList && !phoneNumber.matches(REGEXP_ONLY_NUM)) { throw new BaseException(SmsErrorCode.INVALID_PHONE_NUMBER_PATTERN); } String[] numbers = phoneNumber.split("-"); @@ -78,7 +88,8 @@ public Boolean checkSmsCertificationCodeWithJwt(String memberId, String phoneNum } public Boolean checkSmsCertificationCode(String key, String phoneNumber, String certificationCode) { - phoneNumber = checkPhoneNumberPattern(phoneNumber); + String finalPhoneNumber = phoneNumber; + phoneNumber = checkPhoneNumberPattern(phoneNumber, whiteListPhoneNumbers.stream().anyMatch(finalPhoneNumber::equals)); checkCertificationCodePattern(certificationCode); SmsCertCodeEntity smsCertCodeEntity = redisSmsCertificationCodeRepository.findById(key); if (smsCertCodeEntity == null) {