Propagate locale when using app initiated registration URL
Fixes #13505 Signed-off-by: Thomas Darimont <thomas.darimont@googlemail.com>
This commit is contained in:
parent
7988f026e0
commit
6b83a45b2e
3 changed files with 57 additions and 0 deletions
|
@ -49,6 +49,7 @@ import org.keycloak.services.clientpolicy.context.PreAuthorizationRequestContext
|
|||
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;
|
||||
|
||||
|
@ -351,6 +352,7 @@ public class AuthorizationEndpoint extends AuthorizationEndpointBase {
|
|||
|
||||
AuthenticationProcessor processor = createProcessor(authenticationSession, flowId, LoginActionsService.REGISTRATION_PATH);
|
||||
authenticationSession.setClientNote(APP_INITIATED_FLOW, LoginActionsService.REGISTRATION_PATH);
|
||||
LocaleUtil.processLocaleParam(session, realm, authenticationSession);
|
||||
|
||||
return processor.authenticate();
|
||||
}
|
||||
|
|
|
@ -1512,6 +1512,10 @@ public class OAuthClient {
|
|||
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) {
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue