From 548a3e457a2f16b5528d5c3c74826a6d3578de7f Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Tue, 13 Apr 2021 17:46:14 +0200
Subject: [PATCH] OZG-531 -> OZG-543 EMail Validation

---
 .../java/de/itvsh/goofy/common/RegexUtil.java | 10 ++++
 .../itvsh/goofy/vorgang/RedirectRequest.java  | 19 ++++++--
 .../de/itvsh/goofy/common/RegexUtilTest.java  | 46 +++++++++++++++++++
 3 files changed, 72 insertions(+), 3 deletions(-)
 create mode 100644 goofy-server/src/main/java/de/itvsh/goofy/common/RegexUtil.java
 create mode 100644 goofy-server/src/test/java/de/itvsh/goofy/common/RegexUtilTest.java

diff --git a/goofy-server/src/main/java/de/itvsh/goofy/common/RegexUtil.java b/goofy-server/src/main/java/de/itvsh/goofy/common/RegexUtil.java
new file mode 100644
index 0000000000..a2515e9564
--- /dev/null
+++ b/goofy-server/src/main/java/de/itvsh/goofy/common/RegexUtil.java
@@ -0,0 +1,10 @@
+package de.itvsh.goofy.common;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class RegexUtil {
+
+	public static final String VALIDATION_EMAIL = "[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?";
+}
\ No newline at end of file
diff --git a/goofy-server/src/main/java/de/itvsh/goofy/vorgang/RedirectRequest.java b/goofy-server/src/main/java/de/itvsh/goofy/vorgang/RedirectRequest.java
index ce9be39a56..091a2c17ed 100644
--- a/goofy-server/src/main/java/de/itvsh/goofy/vorgang/RedirectRequest.java
+++ b/goofy-server/src/main/java/de/itvsh/goofy/vorgang/RedirectRequest.java
@@ -2,15 +2,28 @@ package de.itvsh.goofy.vorgang;
 
 import static de.itvsh.goofy.common.ValidationMessageCodes.*;
 
-import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.Size;
 
+import de.itvsh.goofy.common.RegexUtil;
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+@Getter
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+@AllArgsConstructor(access = AccessLevel.PACKAGE)
+@ToString
 public class RedirectRequest {
 
-	@NotNull(message = FIELD_IS_NULL)
+	@Email(regexp = RegexUtil.VALIDATION_EMAIL, message = FIELD_INVALID)
+	@NotEmpty(message = FIELD_IS_EMPTY)
 	private String email;
 
-	@NotNull(message = FIELD_IS_NULL)
 	@Size(min = 8, message = FIELD_SIZE)
+	@NotEmpty(message = FIELD_IS_EMPTY)
 	private String password;
 }
\ No newline at end of file
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/common/RegexUtilTest.java b/goofy-server/src/test/java/de/itvsh/goofy/common/RegexUtilTest.java
new file mode 100644
index 0000000000..4511f2563f
--- /dev/null
+++ b/goofy-server/src/test/java/de/itvsh/goofy/common/RegexUtilTest.java
@@ -0,0 +1,46 @@
+package de.itvsh.goofy.common;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.util.regex.Pattern;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+public class RegexUtilTest {
+
+	@Nested
+	class TestValidationEMail {
+
+		private final String REGEX = RegexUtil.VALIDATION_EMAIL;
+
+		@ParameterizedTest
+		@ValueSource(strings = {
+				"localpart@domain.com",
+				"local-part-1234567890!#$%&'*+/=?^_`{|}~-.'/&%*@domain.com",
+				"local-part-@domain.domain.com",
+				"l@d.c"
+		})
+		void shoulMatchValidEMail(String eMail) {
+			boolean match = Pattern.matches(REGEX, eMail);
+
+			assertThat(match).isTrue();
+		}
+
+		@ParameterizedTest
+		@ValueSource(strings = {
+				"local-part@",
+				"local@part@domain.com",
+				"local@part@",
+				"@domain.com",
+				"local@part@domain.com",
+				"local@@domain.com",
+				"local@domaincom" })
+		void shoulNotMatchInvalidEmail(String eMail) {
+			boolean match = Pattern.matches(REGEX, eMail);
+
+			assertThat(match).isFalse();
+		}
+	}
+}
\ No newline at end of file
-- 
GitLab