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.messages.Messages;
|
||||||
import org.keycloak.services.resources.LoginActionsService;
|
import org.keycloak.services.resources.LoginActionsService;
|
||||||
import org.keycloak.services.util.CacheControlUtil;
|
import org.keycloak.services.util.CacheControlUtil;
|
||||||
|
import org.keycloak.services.util.LocaleUtil;
|
||||||
import org.keycloak.sessions.AuthenticationSessionModel;
|
import org.keycloak.sessions.AuthenticationSessionModel;
|
||||||
import org.keycloak.util.TokenUtil;
|
import org.keycloak.util.TokenUtil;
|
||||||
|
|
||||||
|
@ -351,6 +352,7 @@ public class AuthorizationEndpoint extends AuthorizationEndpointBase {
|
||||||
|
|
||||||
AuthenticationProcessor processor = createProcessor(authenticationSession, flowId, LoginActionsService.REGISTRATION_PATH);
|
AuthenticationProcessor processor = createProcessor(authenticationSession, flowId, LoginActionsService.REGISTRATION_PATH);
|
||||||
authenticationSession.setClientNote(APP_INITIATED_FLOW, LoginActionsService.REGISTRATION_PATH);
|
authenticationSession.setClientNote(APP_INITIATED_FLOW, LoginActionsService.REGISTRATION_PATH);
|
||||||
|
LocaleUtil.processLocaleParam(session, realm, authenticationSession);
|
||||||
|
|
||||||
return processor.authenticate();
|
return processor.authenticate();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1512,6 +1512,10 @@ public class OAuthClient {
|
||||||
return this.getLoginFormUrl(this.baseUrl);
|
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) {
|
public String getLoginFormUrl(String baseUrl) {
|
||||||
UriBuilder b = OIDCLoginProtocolService.authUrl(UriBuilder.fromUri(baseUrl));
|
UriBuilder b = OIDCLoginProtocolService.authUrl(UriBuilder.fromUri(baseUrl));
|
||||||
if (responseType != null) {
|
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