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;
+ }
+ }
+}