diff options
author | Ola Aunronning <olaa@yahooinc.com> | 2022-10-27 10:14:26 +0200 |
---|---|---|
committer | Ola Aunronning <olaa@yahooinc.com> | 2022-10-27 10:14:26 +0200 |
commit | c6903a0afe6244587ccf2ae345acaff3b55fb12b (patch) | |
tree | b925a64df4bebfc05437b30edb52393cd8917da5 | |
parent | 4f24cedcbe9bcccd9a152d2e6b6e14a1b41f86aa (diff) |
Move mail validity check
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\"}]}"; |