Compare commits
1 commit
1c7f7e7e54
...
9bf20bb2cd
Author | SHA1 | Date | |
---|---|---|---|
9bf20bb2cd |
7 changed files with 57 additions and 115 deletions
|
@ -58,12 +58,6 @@ public class EventBean {
|
||||||
return details;
|
return details;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDetail(String name) {
|
|
||||||
return event.getDetails() != null
|
|
||||||
? event.getDetails().get(name)
|
|
||||||
: null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class DetailBean {
|
public static class DetailBean {
|
||||||
|
|
||||||
private Map.Entry<String, String> entry;
|
private Map.Entry<String, String> entry;
|
||||||
|
|
|
@ -19,21 +19,17 @@
|
||||||
|
|
||||||
package org.keycloak.testsuite.actions;
|
package org.keycloak.testsuite.actions;
|
||||||
|
|
||||||
import jakarta.mail.internet.MimeMessage;
|
|
||||||
import jakarta.ws.rs.core.Response;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.hamcrest.MatcherAssert;
|
|
||||||
import org.hamcrest.Matchers;
|
import jakarta.ws.rs.core.Response;
|
||||||
import org.jboss.arquillian.graphene.page.Page;
|
import org.jboss.arquillian.graphene.page.Page;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Rule;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.keycloak.authentication.requiredactions.DeleteCredentialAction;
|
import org.keycloak.authentication.requiredactions.DeleteCredentialAction;
|
||||||
import org.keycloak.events.Details;
|
import org.keycloak.events.Details;
|
||||||
import org.keycloak.events.Errors;
|
import org.keycloak.events.Errors;
|
||||||
import org.keycloak.events.EventType;
|
import org.keycloak.events.EventType;
|
||||||
import org.keycloak.events.email.EmailEventListenerProviderFactory;
|
|
||||||
import org.keycloak.models.credential.OTPCredentialModel;
|
import org.keycloak.models.credential.OTPCredentialModel;
|
||||||
import org.keycloak.models.credential.PasswordCredentialModel;
|
import org.keycloak.models.credential.PasswordCredentialModel;
|
||||||
import org.keycloak.models.utils.TimeBasedOTP;
|
import org.keycloak.models.utils.TimeBasedOTP;
|
||||||
|
@ -45,9 +41,6 @@ import org.keycloak.testsuite.pages.DeleteCredentialPage;
|
||||||
import org.keycloak.testsuite.pages.ErrorPage;
|
import org.keycloak.testsuite.pages.ErrorPage;
|
||||||
import org.keycloak.testsuite.pages.LoginConfigTotpPage;
|
import org.keycloak.testsuite.pages.LoginConfigTotpPage;
|
||||||
import org.keycloak.testsuite.pages.LoginTotpPage;
|
import org.keycloak.testsuite.pages.LoginTotpPage;
|
||||||
import org.keycloak.testsuite.updaters.RealmAttributeUpdater;
|
|
||||||
import org.keycloak.testsuite.util.GreenMailRule;
|
|
||||||
import org.keycloak.testsuite.util.MailUtils;
|
|
||||||
import org.keycloak.testsuite.util.UserBuilder;
|
import org.keycloak.testsuite.util.UserBuilder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -55,9 +48,6 @@ import org.keycloak.testsuite.util.UserBuilder;
|
||||||
*/
|
*/
|
||||||
public class AppInitiatedActionDeleteCredentialTest extends AbstractAppInitiatedActionTest {
|
public class AppInitiatedActionDeleteCredentialTest extends AbstractAppInitiatedActionTest {
|
||||||
|
|
||||||
@Rule
|
|
||||||
public GreenMailRule greenMail = new GreenMailRule();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getAiaAction() {
|
protected String getAiaAction() {
|
||||||
return DeleteCredentialAction.PROVIDER_ID;
|
return DeleteCredentialAction.PROVIDER_ID;
|
||||||
|
@ -86,11 +76,9 @@ public class AppInitiatedActionDeleteCredentialTest extends AbstractAppInitiated
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void beforeTest() {
|
public void beforeTest() {
|
||||||
ApiUtil.removeUserByUsername(testRealm(), "test-user@localhost");
|
|
||||||
UserRepresentation user = UserBuilder.create()
|
UserRepresentation user = UserBuilder.create()
|
||||||
.username("john")
|
.username("john")
|
||||||
.email("test-user@localhost")
|
.email("john@email.cz")
|
||||||
.emailVerified(true)
|
|
||||||
.firstName("John")
|
.firstName("John")
|
||||||
.lastName("Bar")
|
.lastName("Bar")
|
||||||
.enabled(true)
|
.enabled(true)
|
||||||
|
@ -104,10 +92,6 @@ public class AppInitiatedActionDeleteCredentialTest extends AbstractAppInitiated
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void removeOtpSuccess() throws Exception {
|
public void removeOtpSuccess() throws Exception {
|
||||||
try (RealmAttributeUpdater updater = new RealmAttributeUpdater(testRealm())
|
|
||||||
.addEventsListener(EmailEventListenerProviderFactory.ID)
|
|
||||||
.update()) {
|
|
||||||
|
|
||||||
String credentialId = getCredentialIdByType(OTPCredentialModel.TYPE);
|
String credentialId = getCredentialIdByType(OTPCredentialModel.TYPE);
|
||||||
oauth.kcAction(getKcActionParamForDeleteCredential(credentialId));
|
oauth.kcAction(getKcActionParamForDeleteCredential(credentialId));
|
||||||
|
|
||||||
|
@ -135,17 +119,6 @@ public class AppInitiatedActionDeleteCredentialTest extends AbstractAppInitiated
|
||||||
.detail(Details.CREDENTIAL_ID, credentialId)
|
.detail(Details.CREDENTIAL_ID, credentialId)
|
||||||
.detail(Details.CUSTOM_REQUIRED_ACTION, DeleteCredentialAction.PROVIDER_ID)
|
.detail(Details.CUSTOM_REQUIRED_ACTION, DeleteCredentialAction.PROVIDER_ID)
|
||||||
.assertEvent();
|
.assertEvent();
|
||||||
|
|
||||||
MimeMessage[] receivedMessages = greenMail.getReceivedMessages();
|
|
||||||
Assert.assertEquals(2, receivedMessages.length);
|
|
||||||
|
|
||||||
Assert.assertEquals("Remove OTP", receivedMessages[0].getSubject());
|
|
||||||
Assert.assertEquals("Remove credential", receivedMessages[1].getSubject());
|
|
||||||
MatcherAssert.assertThat(MailUtils.getBody(receivedMessages[1]).getText(),
|
|
||||||
Matchers.startsWith("Credential otp was removed from your account"));
|
|
||||||
MatcherAssert.assertThat(MailUtils.getBody(receivedMessages[1]).getHtml(),
|
|
||||||
Matchers.containsString("Credential otp was removed from your account"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -16,9 +16,6 @@
|
||||||
*/
|
*/
|
||||||
package org.keycloak.testsuite.actions;
|
package org.keycloak.testsuite.actions;
|
||||||
|
|
||||||
import jakarta.mail.internet.MimeMessage;
|
|
||||||
import org.hamcrest.MatcherAssert;
|
|
||||||
import org.hamcrest.Matchers;
|
|
||||||
import org.jboss.arquillian.drone.api.annotation.Drone;
|
import org.jboss.arquillian.drone.api.annotation.Drone;
|
||||||
import org.jboss.arquillian.graphene.page.Page;
|
import org.jboss.arquillian.graphene.page.Page;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
|
@ -29,7 +26,6 @@ import org.keycloak.admin.client.resource.UserResource;
|
||||||
import org.keycloak.cookie.CookieType;
|
import org.keycloak.cookie.CookieType;
|
||||||
import org.keycloak.events.Details;
|
import org.keycloak.events.Details;
|
||||||
import org.keycloak.events.EventType;
|
import org.keycloak.events.EventType;
|
||||||
import org.keycloak.events.email.EmailEventListenerProviderFactory;
|
|
||||||
import org.keycloak.models.RealmModel;
|
import org.keycloak.models.RealmModel;
|
||||||
import org.keycloak.models.UserModel;
|
import org.keycloak.models.UserModel;
|
||||||
import org.keycloak.models.credential.PasswordCredentialModel;
|
import org.keycloak.models.credential.PasswordCredentialModel;
|
||||||
|
@ -39,10 +35,7 @@ import org.keycloak.representations.idm.UserRepresentation;
|
||||||
import org.keycloak.representations.idm.UserSessionRepresentation;
|
import org.keycloak.representations.idm.UserSessionRepresentation;
|
||||||
import org.keycloak.testsuite.admin.ApiUtil;
|
import org.keycloak.testsuite.admin.ApiUtil;
|
||||||
import org.keycloak.testsuite.pages.LoginPasswordUpdatePage;
|
import org.keycloak.testsuite.pages.LoginPasswordUpdatePage;
|
||||||
import org.keycloak.testsuite.updaters.RealmAttributeUpdater;
|
|
||||||
import org.keycloak.testsuite.updaters.UserAttributeUpdater;
|
|
||||||
import org.keycloak.testsuite.util.GreenMailRule;
|
import org.keycloak.testsuite.util.GreenMailRule;
|
||||||
import org.keycloak.testsuite.util.MailUtils;
|
|
||||||
import org.keycloak.testsuite.util.OAuthClient;
|
import org.keycloak.testsuite.util.OAuthClient;
|
||||||
import org.keycloak.testsuite.util.SecondBrowser;
|
import org.keycloak.testsuite.util.SecondBrowser;
|
||||||
import org.openqa.selenium.Cookie;
|
import org.openqa.selenium.Cookie;
|
||||||
|
@ -88,13 +81,6 @@ public class AppInitiatedActionResetPasswordTest extends AbstractAppInitiatedAct
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void resetPassword() throws Exception {
|
public void resetPassword() throws Exception {
|
||||||
try (RealmAttributeUpdater realmUpdater = new RealmAttributeUpdater(testRealm())
|
|
||||||
.addEventsListener(EmailEventListenerProviderFactory.ID)
|
|
||||||
.update();
|
|
||||||
UserAttributeUpdater userUpdater = new UserAttributeUpdater(ApiUtil.findUserByUsernameId(testRealm(), "test-user@localhost"))
|
|
||||||
.setEmailVerified(true)
|
|
||||||
.update()) {
|
|
||||||
|
|
||||||
loginPage.open();
|
loginPage.open();
|
||||||
loginPage.login("test-user@localhost", "password");
|
loginPage.login("test-user@localhost", "password");
|
||||||
|
|
||||||
|
@ -124,16 +110,6 @@ public class AppInitiatedActionResetPasswordTest extends AbstractAppInitiatedAct
|
||||||
events.expectRequiredAction(EventType.UPDATE_PASSWORD).assertEvent();
|
events.expectRequiredAction(EventType.UPDATE_PASSWORD).assertEvent();
|
||||||
events.expectRequiredAction(EventType.UPDATE_CREDENTIAL).detail(Details.CREDENTIAL_TYPE, PasswordCredentialModel.TYPE).assertEvent();
|
events.expectRequiredAction(EventType.UPDATE_CREDENTIAL).detail(Details.CREDENTIAL_TYPE, PasswordCredentialModel.TYPE).assertEvent();
|
||||||
|
|
||||||
MimeMessage[] receivedMessages = greenMail.getReceivedMessages();
|
|
||||||
Assert.assertEquals(2, receivedMessages.length);
|
|
||||||
|
|
||||||
Assert.assertEquals("Update password", receivedMessages[0].getSubject());
|
|
||||||
Assert.assertEquals("Update credential", receivedMessages[1].getSubject());
|
|
||||||
MatcherAssert.assertThat(MailUtils.getBody(receivedMessages[1]).getText(),
|
|
||||||
Matchers.startsWith("Your password credential was changed"));
|
|
||||||
MatcherAssert.assertThat(MailUtils.getBody(receivedMessages[1]).getHtml(),
|
|
||||||
Matchers.containsString("Your password credential was changed"));
|
|
||||||
|
|
||||||
assertKcActionStatus(SUCCESS);
|
assertKcActionStatus(SUCCESS);
|
||||||
|
|
||||||
EventRepresentation loginEvent = events.expectLogin().assertEvent();
|
EventRepresentation loginEvent = events.expectLogin().assertEvent();
|
||||||
|
@ -148,7 +124,6 @@ public class AppInitiatedActionResetPasswordTest extends AbstractAppInitiatedAct
|
||||||
|
|
||||||
events.expectLogin().assertEvent();
|
events.expectLogin().assertEvent();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void resetPasswordRequiresReAuth() throws Exception {
|
public void resetPasswordRequiresReAuth() throws Exception {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<#import "template.ftl" as layout>
|
<#import "template.ftl" as layout>
|
||||||
<@layout.emailLayout>
|
<@layout.emailLayout>
|
||||||
${kcSanitize(msg("eventRemoveCredentialBodyHtml", event.getDetail("credential_type")!"unknown", event.date, event.ipAddress))?no_esc}
|
${kcSanitize(msg("eventRemoveCredentialBodyHtml", event.details.credential_type!"unknown", event.date, event.ipAddress))?no_esc}
|
||||||
</@layout.emailLayout>
|
</@layout.emailLayout>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<#import "template.ftl" as layout>
|
<#import "template.ftl" as layout>
|
||||||
<@layout.emailLayout>
|
<@layout.emailLayout>
|
||||||
${kcSanitize(msg("eventUpdateCredentialBodyHtml", event.getDetail("credential_type")!"unknown", event.date, event.ipAddress))?no_esc}
|
${kcSanitize(msg("eventUpdateCredentialBodyHtml", event.details.credential_type!"unknown", event.date, event.ipAddress))?no_esc}
|
||||||
</@layout.emailLayout>
|
</@layout.emailLayout>
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
<#ftl output_format="plainText">
|
<#ftl output_format="plainText">
|
||||||
${msg("eventRemoveCredentialBody", event.getDetail("credential_type")!"unknown", event.date, event.ipAddress)}
|
${msg("eventRemoveCredentialBody", event.details.credential_type!"unknown", event.date, event.ipAddress)}
|
|
@ -1,2 +1,2 @@
|
||||||
<#ftl output_format="plainText">
|
<#ftl output_format="plainText">
|
||||||
${msg("eventUpdateCredentialBody", event.getDetail("credential_type")!"unknown", event.date, event.ipAddress)}
|
${msg("eventUpdateCredentialBody", event.details.credential_type!"unknown", event.date, event.ipAddress)}
|
Loading…
Reference in a new issue