Process locale param in expired page

Closes #39643

Signed-off-by: rmartinc <rmartinc@redhat.com>
This commit is contained in:
Ricardo Martin 2025-05-14 07:20:50 +02:00 committed by GitHub
parent 04f2c80750
commit ebe3e15a9e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 35 additions and 3 deletions

View File

@ -56,6 +56,7 @@ public class AuthenticationFlowURLHelper {
logger.debugf("Redirecting to 'page expired' now. Will use last step URL: %s", lastStepUrl);
LocaleUtil.processLocaleParam(session, realm, authSession);
return session.getProvider(LoginFormsProvider.class).setAuthenticationSession(authSession)
.setActionUri(lastStepUrl)
.setExecution(getExecutionId(authSession))

View File

@ -25,7 +25,7 @@ import static org.keycloak.testsuite.util.UIUtils.clickLink;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class LoginExpiredPage extends AbstractPage {
public class LoginExpiredPage extends LanguageComboboxAwarePage {
@FindBy(id = "loginRestartLink")
private WebElement loginRestartLink;
@ -42,7 +42,7 @@ public class LoginExpiredPage extends AbstractPage {
clickLink(loginContinueLink);
}
@Override
public boolean isCurrent() {
return PageUtils.getPageTitle(driver).equals("Page has expired");
}

View File

@ -42,10 +42,14 @@ import org.keycloak.testsuite.admin.ApiUtil;
import org.keycloak.testsuite.pages.AppPage;
import org.keycloak.testsuite.pages.ErrorPage;
import org.keycloak.testsuite.pages.LanguageComboboxAwarePage;
import org.keycloak.testsuite.pages.LoginExpiredPage;
import org.keycloak.testsuite.pages.LoginPage;
import org.keycloak.testsuite.pages.LoginPasswordUpdatePage;
import org.keycloak.testsuite.pages.OAuthGrantPage;
import org.keycloak.testsuite.pages.PageUtils;
import org.keycloak.testsuite.updaters.UserAttributeUpdater;
import org.keycloak.testsuite.util.IdentityProviderBuilder;
import org.keycloak.testsuite.util.UIUtils;
import org.openqa.selenium.Cookie;
import java.io.IOException;
@ -58,7 +62,6 @@ import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.startsWith;
import static org.junit.Assert.assertEquals;
/**
@ -82,6 +85,9 @@ public class LoginPageTest extends AbstractI18NTest {
@Page
protected OAuthGrantPage grantPage;
@Page
protected LoginExpiredPage loginExpiredPage;
@Rule
public AssertEvents events = new AssertEvents(this);
@ -341,6 +347,31 @@ public class LoginPageTest extends AbstractI18NTest {
Assert.assertEquals("Die Aktion ist nicht mehr gültig.", errorPage.getError()); // Action expired.
}
@Test
public void languageUserUpdatesOnExpiredPage() throws Exception {
try (UserAttributeUpdater userUpdater = UserAttributeUpdater.forUserByUsername(testRealm(), "test-user@localhost")
.setRequiredActions(UserModel.RequiredAction.UPDATE_PASSWORD).update()) {
// login with a failure attempt
loginPage.open();
loginPage.login("test-user@localhost", "invalid-password");
loginPage.assertCurrent();
assertThat(loginPage.getUsernameInputError(), is("Invalid username or password."));
loginPage.login("test-user@localhost", "password");
changePasswordPage.assertCurrent();
// navigate back to the login expired page and change language to german
UIUtils.navigateBackWithRefresh(driver, loginExpiredPage);
errorPage.openLanguage("Deutsch");
assertEquals("Deutsch", errorPage.getLanguageDropdownText());
assertThat(PageUtils.getPageTitle(driver), is("Diese Seite ist nicht mehr gültig."));
// continue should show password update in german
loginExpiredPage.clickLoginContinueLink();
assertEquals("Deutsch", changePasswordPage.getLanguageDropdownText());
assertThat(PageUtils.getPageTitle(driver), is("Passwort aktualisieren"));
}
}
@Test
public void realmLocalizationMessagesAreApplied() {
String realmLocalizationMessageKey = "loginAccountTitle";