summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOla Aunronning <olaa@yahooinc.com>2022-10-27 10:14:26 +0200
committerOla Aunronning <olaa@yahooinc.com>2022-10-27 10:14:26 +0200
commitc6903a0afe6244587ccf2ae345acaff3b55fb12b (patch)
treeb925a64df4bebfc05437b30edb52393cd8917da5
parent4f24cedcbe9bcccd9a152d2e6b6e14a1b41f86aa (diff)
Move mail validity check
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/MailVerifier.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java10
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java6
3 files changed, 7 insertions, 13 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/MailVerifier.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/MailVerifier.java
index a15e3d8df3f..a7f3a3ca3b2 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/MailVerifier.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/MailVerifier.java
@@ -35,6 +35,10 @@ public class MailVerifier {
}
public PendingMailVerification sendMailVerification(TenantName tenantName, String email, PendingMailVerification.MailType mailType) {
+ if (!email.contains("@")) {
+ throw new IllegalArgumentException("Invalid email address");
+ }
+
var verificationCode = UUID.randomUUID().toString();
var verificationDeadline = clock.instant().plus(VERIFICATION_DEADLINE);
var pendingMailVerification = new PendingMailVerification(tenantName, email, verificationCode, verificationDeadline, mailType);
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
index 5f978a7d5f0..ab46e5a0481 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
@@ -820,12 +820,6 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
})
.orElse(oldContact.email());
- if (!mergedEmail.getEmailAddress().isBlank() && !mergedEmail.getEmailAddress().contains("@")) {
- // email address validation is notoriously hard - we should probably just try to send a
- // verification email to this address. checking for @ is a simple best-effort.
- throw new IllegalArgumentException("'email' needs to be an email address");
- }
-
return TenantContact.empty()
.withName(getString(insp.field("name"), oldContact.name()))
.withEmail(mergedEmail)
@@ -849,10 +843,6 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
.map(audience -> fromAudience(audience.asString()))
.toList();
- if (!email.contains("@")) {
- throw new IllegalArgumentException("'email' needs to be an email address");
- }
-
// If contact exists, update audience. Otherwise, create new unverified contact
return oldContacts.ofType(TenantContacts.EmailContact.class)
.stream()
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java
index f713952ad7c..7d7abefb19b 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java
@@ -199,13 +199,13 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest {
var missingEmailResponse = request("/application/v4/tenant/scoober/info", PUT)
.data(partialInfoMissingEmail)
.roles(Set.of(Role.administrator(tenantName)));
- tester.assertResponse(missingEmailResponse, "{\"error-code\":\"BAD_REQUEST\",\"message\":\"'contactEmail' cannot be empty\"}", 400);
+ tester.assertResponse(missingEmailResponse, "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Invalid email address\"}", 400);
var partialInfoBadEmail = "{\"contactName\": \"Scoober Rentals Inc.\", \"contactEmail\": \"somethingweird\"}";
var badEmailResponse = request("/application/v4/tenant/scoober/info", PUT)
.data(partialInfoBadEmail)
.roles(Set.of(Role.administrator(tenantName)));
- tester.assertResponse(badEmailResponse, "{\"error-code\":\"BAD_REQUEST\",\"message\":\"'contactEmail' needs to be an email address\"}", 400);
+ tester.assertResponse(badEmailResponse, "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Invalid email address\"}", 400);
var invalidWebsite = "{\"contactName\": \"Scoober Rentals Inc.\", \"contactEmail\": \"email@scoober.com\", \"website\": \"scoober\" }";
var badWebsiteResponse = request("/application/v4/tenant/scoober/info", PUT)
@@ -245,7 +245,7 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest {
var contactsWithInvalidEmailResponse = request("/application/v4/tenant/scoober/info", PUT)
.data(contactsWithInvalidEmail)
.roles(Set.of(Role.administrator(tenantName)));
- tester.assertResponse(contactsWithInvalidEmailResponse, "{\"error-code\":\"BAD_REQUEST\",\"message\":\"'email' needs to be an email address\"}", 400);
+ tester.assertResponse(contactsWithInvalidEmailResponse, "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Invalid email address\"}", 400);
// duplicate contact is not allowed
var contactsWithDuplicateEmail = "{\"contacts\": [{\"audiences\": [\"tenant\"],\"email\": \"contact1@email.com\"}, {\"audiences\": [\"tenant\"],\"email\": \"contact1@email.com\"}]}";