diff --git a/account-service/pom.xml b/account-service/pom.xml index f938bd9..cebeea4 100644 --- a/account-service/pom.xml +++ b/account-service/pom.xml @@ -72,6 +72,11 @@ password4j 1.8.2 + + com.googlecode.libphonenumber + libphonenumber + 8.13.31 + diff --git a/account-service/src/main/java/com/drinkool/RestAPI.java b/account-service/src/main/java/com/drinkool/RestAPI.java index 29186e3..743f53a 100644 --- a/account-service/src/main/java/com/drinkool/RestAPI.java +++ b/account-service/src/main/java/com/drinkool/RestAPI.java @@ -1,7 +1,5 @@ package com.drinkool; -import java.util.UUID; - import com.drinkool.dtos.*; import com.drinkool.models.Customer; @@ -28,7 +26,7 @@ public class RestAPI { public Response quickSignup(QuickSignup input) { Customer newCustomer = new Customer(); - newCustomer.signup(input.phone, UUID.randomUUID().toString().substring(0, 8)); + newCustomer.signup(input.phone); return Response.status(Response.Status.CREATED).build(); } diff --git a/account-service/src/main/java/com/drinkool/models/User.java b/account-service/src/main/java/com/drinkool/models/User.java index dea7dd0..80b071e 100644 --- a/account-service/src/main/java/com/drinkool/models/User.java +++ b/account-service/src/main/java/com/drinkool/models/User.java @@ -3,6 +3,11 @@ package com.drinkool.models; import io.quarkus.hibernate.orm.panache.PanacheEntity; import jakarta.persistence.*; import jakarta.transaction.*; +import jakarta.ws.rs.BadRequestException; + +import java.util.UUID; + +import com.drinkool.utils.PhoneValidator; import com.password4j.Password; @Entity @@ -23,14 +28,20 @@ public abstract class User extends PanacheEntity { } @Transactional - public void signup(String phone, String rawPassword) { - this.signup(phone, phone, rawPassword); + public void signup(String phone) { + this.signup(phone, phone, UUID.randomUUID().toString().substring(0, 32)); } @Transactional public void signup(String name, String phone, String rawPassword) { this.name = name; - this.phone = phone; + + if (!PhoneValidator.isValidInternationalPhone(phone)) { + throw new BadRequestException("InvalidPhoneNumber"); + } else { + this.phone = phone; + } + this.hashedPassword = Password.hash(rawPassword).withArgon2().getResult(); this.persist(); diff --git a/account-service/src/main/java/com/drinkool/utils/PhoneValidator.java b/account-service/src/main/java/com/drinkool/utils/PhoneValidator.java new file mode 100644 index 0000000..0aa97d5 --- /dev/null +++ b/account-service/src/main/java/com/drinkool/utils/PhoneValidator.java @@ -0,0 +1,18 @@ +package com.drinkool.utils; + +import com.google.i18n.phonenumbers.*; +import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; + +public class PhoneValidator { + private static final PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); + + public static boolean isValidInternationalPhone(String phone) { + try { + PhoneNumber numberProto = phoneUtil.parse(phone, "VN"); + + return phoneUtil.isValidNumber(numberProto); + } catch (NumberParseException e) { + return false; + } + } +}