Skip to content

Commit

Permalink
Propagate locale when using app initiated registration URL
Browse files Browse the repository at this point in the history
Fixes keycloak#13505

Signed-off-by: Thomas Darimont <thomas.darimont@googlemail.com>
  • Loading branch information
thomasdarimont authored Sep 10, 2024
1 parent 7988f02 commit 6b83a45
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
import org.keycloak.services.messages.Messages;
import org.keycloak.services.resources.LoginActionsService;
import org.keycloak.services.util.CacheControlUtil;
import org.keycloak.services.util.LocaleUtil;
import org.keycloak.sessions.AuthenticationSessionModel;
import org.keycloak.util.TokenUtil;

Expand Down Expand Up @@ -351,6 +352,7 @@ private Response buildRegister() {

AuthenticationProcessor processor = createProcessor(authenticationSession, flowId, LoginActionsService.REGISTRATION_PATH);
authenticationSession.setClientNote(APP_INITIATED_FLOW, LoginActionsService.REGISTRATION_PATH);
LocaleUtil.processLocaleParam(session, realm, authenticationSession);

return processor.authenticate();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1512,6 +1512,10 @@ public String getLoginFormUrl() {
return this.getLoginFormUrl(this.baseUrl);
}

public String getRegisterationsUrl() {
return this.getLoginFormUrl(this.baseUrl).replace("openid-connect/auth", "openid-connect/registrations");
}

public String getLoginFormUrl(String baseUrl) {
UriBuilder b = OIDCLoginProtocolService.authUrl(UriBuilder.fromUri(baseUrl));
if (responseType != null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package org.keycloak.testsuite.actions;

import jakarta.ws.rs.core.UriBuilder;
import org.jboss.arquillian.graphene.page.Page;
import org.junit.Before;
import org.junit.Test;
import org.keycloak.locale.LocaleSelectorProvider;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.representations.idm.UserRepresentation;
import org.keycloak.testsuite.AbstractTestRealmKeycloakTest;
import org.keycloak.testsuite.Assert;
import org.keycloak.testsuite.admin.ApiUtil;
import org.keycloak.testsuite.pages.AppPage;
import org.keycloak.testsuite.pages.RegisterPage;

public class AppInitiatedRegistrationTest extends AbstractTestRealmKeycloakTest {

@Page
protected AppPage appPage;

@Page
protected RegisterPage registerPage;

@Override
public void configureTestRealm(RealmRepresentation testRealm) {
}

@Before
public void before() {
ApiUtil.removeUserByUsername(testRealm(), "test-user@localhost");
}

@Test
public void ensureLocaleParameterIsPropagatedDuringAppInitiatedRegistration() {

var appInitiatedRegisterUrlBuilder = UriBuilder.fromUri(oauth.getRegisterationsUrl());
appInitiatedRegisterUrlBuilder.queryParam(LocaleSelectorProvider.KC_LOCALE_PARAM, "en");
var appInitiatedRegisterUrl = appInitiatedRegisterUrlBuilder.build().toString();

driver.navigate().to(appInitiatedRegisterUrl);

registerPage.assertCurrent();
registerPage.register("first", "last", "test-user@localhost", "test-user", "test","test");

appPage.assertCurrent();

UserRepresentation user = testRealm().users().searchByEmail("test-user@localhost", true).get(0);
// ensure that the locale was set on the user
Assert.assertEquals("en", user.getAttributes().get("locale").get(0));
}
}

0 comments on commit 6b83a45

Please sign in to comment.