diff options
author | Ola Aunronning <olaa@yahooinc.com> | 2022-10-26 10:36:06 +0200 |
---|---|---|
committer | Ola Aunronning <olaa@yahooinc.com> | 2022-10-26 10:36:06 +0200 |
commit | 4f24cedcbe9bcccd9a152d2e6b6e14a1b41f86aa (patch) | |
tree | 9cbd16a2f5ddd9baf8e6eb13f6671345b9ceee9c | |
parent | 7df1fd635ba6bb1a713eef150cd3a635906e74e4 (diff) |
Write to Zookeeper before sending mail. Change API resource name
4 files changed, 20 insertions, 6 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java index 4807c1b59ab..b8de63b61a9 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java @@ -259,7 +259,7 @@ enum PathGroup { "/application/v4/tenant/{tenant}/access/managed/operator"), /** Path used for email verification */ - emailVerification("/user/v1/email-verification"); + emailVerification("/user/v1/email/verify"); final List<String> pathSpecs; final List<Matcher> matchers; 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 7c9c92c1e3a..a15e3d8df3f 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 @@ -38,8 +38,8 @@ public class MailVerifier { var verificationCode = UUID.randomUUID().toString(); var verificationDeadline = clock.instant().plus(VERIFICATION_DEADLINE); var pendingMailVerification = new PendingMailVerification(tenantName, email, verificationCode, verificationDeadline, mailType); - mailer.sendVerificationMail(pendingMailVerification); writePendingVerification(pendingMailVerification); + mailer.sendVerificationMail(pendingMailVerification); return pendingMailVerification; } @@ -98,8 +98,6 @@ public class MailVerifier { } private void writePendingVerification(PendingMailVerification pendingMailVerification) { - var tenant = requireCloudTenant(pendingMailVerification.getTenantName()); - try (var lock = curatorDb.lockPendingMailVerification(pendingMailVerification.getVerificationCode())) { curatorDb.writePendingMailVerification(pendingMailVerification); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiHandler.java index a137cc6b1a5..7a8ef1d4ee6 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiHandler.java @@ -112,7 +112,7 @@ public class UserApiHandler extends ThreadedHttpRequestHandler { private HttpResponse handlePOST(Path path, HttpRequest request) { if (path.matches("/user/v1/tenant/{tenant}")) return addTenantRoleMember(path.get("tenant"), request); - if (path.matches("/user/v1/email-verification")) return verifyEmail(request); + if (path.matches("/user/v1/email/verify")) return verifyEmail(request); return ErrorResponse.notFoundError(Text.format("No '%s' handler at '%s'", request.getMethod(), request.getUri().getPath())); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiTest.java index b573940d150..075e001655f 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiTest.java @@ -10,11 +10,11 @@ import com.yahoo.vespa.flags.PermanentFlags; import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.api.integration.billing.PlanId; import com.yahoo.jdisc.http.filter.security.misc.User; -import com.yahoo.vespa.hosted.controller.api.integration.stubs.MockUserManagement; import com.yahoo.vespa.hosted.controller.api.integration.user.UserId; import com.yahoo.vespa.hosted.controller.api.role.Role; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerCloudTest; +import com.yahoo.vespa.hosted.controller.tenant.PendingMailVerification; import com.yahoo.vespa.hosted.controller.tenant.Tenant; import org.junit.jupiter.api.Test; @@ -321,4 +321,20 @@ public class UserApiTest extends ControllerContainerCloudTest { } } + + @Test + public void verifyMail() { + var tester = new ContainerTester(container, responseFiles); + var controller = new ControllerTester(tester); + controller.createTenant("tenant1", Tenant.Type.cloud); + var pendingMailVerification = tester.controller().mailVerifier().sendMailVerification(TenantName.from("tenant1"), "foo@bar.com", PendingMailVerification.MailType.NOTIFICATIONS); + + tester.assertResponse(request("/user/v1/email/verify", POST) + .data("{\"verificationCode\":\"blurb\"}"), + "{\"error-code\":\"NOT_FOUND\",\"message\":\"No pending email verification with code blurb found\"}", 404); + + tester.assertResponse(request("/user/v1/email/verify", POST) + .data("{\"verificationCode\":\"" + pendingMailVerification.getVerificationCode() + "\"}"), + "{\"message\":\"Email with verification code " + pendingMailVerification.getVerificationCode() + " has been verified\"}", 200); + } } |