From ba0171d5c2eeab2ff2e551dd182cb699df06ff07 Mon Sep 17 00:00:00 2001 From: Crypto137 Date: Thu, 23 Oct 2025 22:12:18 +0300 Subject: [PATCH] Web Dashboard: Mirror server-side email validation --- .../Data/Web/Dashboard/script.js | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/MHServerEmu.WebFrontend/Data/Web/Dashboard/script.js b/src/MHServerEmu.WebFrontend/Data/Web/Dashboard/script.js index 8ae15e4e..f6f4ce55 100644 --- a/src/MHServerEmu.WebFrontend/Data/Web/Dashboard/script.js +++ b/src/MHServerEmu.WebFrontend/Data/Web/Dashboard/script.js @@ -371,11 +371,18 @@ const createAccountTab = { if (this.pendingAccountData != null) return; + email.setCustomValidity(""); confirmPassword.setCustomValidity(""); if (email.reportValidity() == false || playerName.reportValidity() == false || password.reportValidity() == false) return; + if (this.validateEmail(email.value) == false) { + email.setCustomValidity("Invalid email."); + email.reportValidity(); + return; + } + if (password.value != confirmPassword.value) { confirmPassword.setCustomValidity("Your passwords do not match."); confirmPassword.reportValidity(); @@ -400,6 +407,22 @@ const createAccountTab = { this.pendingAccountData = null; }, + validateEmail(email) { + const atIndex = email.indexOf('@'); + if (atIndex == -1) + return false; + + const dotIndex = email.lastIndexOf('.'); + if (dotIndex < atIndex) + return false; + + const topDomainLength = email.length - (dotIndex + 1); + if (topDomainLength < 2) + return false; + + return true; + }, + getAccountOperationResultString(resultCode) { const email = this.pendingAccountData.Email; const playerName = this.pendingAccountData.PlayerName;