summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOla Aunronning <olaa@yahooinc.com>2022-10-26 10:36:06 +0200
committerOla Aunronning <olaa@yahooinc.com>2022-10-26 10:36:06 +0200
commit4f24cedcbe9bcccd9a152d2e6b6e14a1b41f86aa (patch)
tree9cbd16a2f5ddd9baf8e6eb13f6671345b9ceee9c
parent7df1fd635ba6bb1a713eef150cd3a635906e74e4 (diff)
Write to Zookeeper before sending mail. Change API resource name
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java2
-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/user/UserApiHandler.java2
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/user/UserApiTest.java18
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);
+ }
}