From eb9bb281ec8158c745fe5fdcd93244031ec8162a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9da=20Housni=20Alaoui?= Date: Fri, 26 May 2023 19:06:26 +0200 Subject: [PATCH] Require user to agree to 'terms and conditions' during registration --- .../registration-form-with-required-tac.png | Bin 0 -> 58927 bytes .../require-tac-agreement-at-registration.png | Bin 0 -> 48022 bytes .../topics/assembly-managing-users.adoc | 1 + ...quiring-tac-agreement-at-registration.adoc | 24 +++ .../utils/DefaultAuthenticationFlows.java | 16 +- .../forms/RegistrationTermsAndConditions.java | 145 ++++++++++++++++++ ....keycloak.authentication.FormActionFactory | 3 +- .../testsuite/auth/page/AccountFields.java | 11 ++ .../testsuite/pages/RegisterPage.java | 22 ++- .../admin/authentication/ProvidersTest.java | 2 + .../testsuite/forms/RegisterTest.java | 78 ++++++++-- .../login/messages/messages_fr.properties | 2 + .../login/messages/messages_en.properties | 2 + .../theme/base/login/register-commons.ftl | 27 ++++ .../base/login/register-user-profile.ftl | 5 +- .../resources/theme/base/login/register.ftl | 7 +- .../keycloak/login/resources/css/login.css | 7 + 17 files changed, 332 insertions(+), 20 deletions(-) create mode 100644 docs/documentation/server_admin/images/registration-form-with-required-tac.png create mode 100644 docs/documentation/server_admin/images/require-tac-agreement-at-registration.png create mode 100644 docs/documentation/server_admin/topics/users/proc-requiring-tac-agreement-at-registration.adoc create mode 100644 services/src/main/java/org/keycloak/authentication/forms/RegistrationTermsAndConditions.java create mode 100644 themes/src/main/resources/theme/base/login/register-commons.ftl diff --git a/docs/documentation/server_admin/images/registration-form-with-required-tac.png b/docs/documentation/server_admin/images/registration-form-with-required-tac.png new file mode 100644 index 0000000000000000000000000000000000000000..35a194657d4d13b88f3e2ff517222aaa5b084d16 GIT binary patch literal 58927 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 GAGoI?{WEtX2Eg(X8;b*I4SyPX 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
    !&gm01mfpxfM182B zrCd&T&AjbbkUpEvQYfM>D1YJbjsJGYaP2xI?8aw_YqsRSh8!6eFbU%XR0Cy4uFG9uh-Bl+npf&PmU^WgmotKun|ZveEm= z>DAU9!jBkv_6y{MmpoDw4+Ifb^{K^BU0${10b9^g>|grHb#mqQFie?Ab{htXMv%>T z`nwZ8_3g73;E>@CR$`A@%kIJI`?W*Qz~?31A*?iQ?6{3DoKY@(N~+Wz9zmq&kTIgK zr_UE9H z?W;TMO4A_7uabJ&huSWH*Q(~rx1fI!y;p13o@qCfSr@0#v3Hnu5R;#FFE(Q8V6U@m z*MK73qzda#SL89#gsh1`swgE;VbjEp4hlN!ZC?%i+QdJKDiUY+2(oE;_vC&%r*1=q zMn2(?tWYoGq7y#zhg!x8U^+c(DLP6C3M&*>rYnMtFOB>*HIl!)UlcBopb6XG{YKC+ z$4ZOoqLxXs{qfisf(L3ezQr-VR>O{@u*Oc@o0M2vrMZ_+5oWyYh{n~)4Jfqi*MUk( zaE$R-g;**0Rqvyip@v9+bwOhL3F&co+hpmlFEsWsfQV$$@96WKNhGb>b_m})_TeRgf2pKz z1~{MI(7E^P1HBZ4=I}AOwYEc5jY^Md;{1(Ymjdcr>{mEuA^a z2(sJBo}NoSLw`N#X8xt};H^$UEbL56XeX7%?3Z{RDNZhO=+3g)#=<`_+BY#ba`$s@ za$xC(?p{g_Qf8ZhVNQ@@0&Vn&GW0xOTMquG#V;mj-n4BW&UQE8G4qT zMBPBGH6P*>K!2nibS^*rPYs`}gdHfV5FJ1gN;Krh#qufUcHeK3Mzxgsml(wxjADZL zlI#Qaw8OdDbrss>MTFXT_vFe0MX`F`)E+l{N^>5cJYG!o9$SaHO^+2w<(Woci=_`z z)r+_fw0UY2VADs2U+!`C-Cn$4*U|GpCBNSid3o|n$O|UpkJx1;O=ZL>C63e+v!P<8 z#lu?5!%HW8F;M&n2;6BE>?*FS`=-dxak`rYtJ^8PWY QY9bx?AKF*E$M47g22(YHuK)l5 literal 0 HcmV?d00001 diff --git a/docs/documentation/server_admin/topics/assembly-managing-users.adoc b/docs/documentation/server_admin/topics/assembly-managing-users.adoc index db2a482fdde..303afb1b91d 100644 --- a/docs/documentation/server_admin/topics/assembly-managing-users.adoc +++ b/docs/documentation/server_admin/topics/assembly-managing-users.adoc @@ -14,6 +14,7 @@ include::users/proc-configuring-user-attributes.adoc[leveloffset=+2] include::users/con-user-registration.adoc[leveloffset=+2] include::users/proc-enabling-user-registration.adoc[leveloffset=3] include::users/proc-registering-new-user.adoc[leveloffset=3] +include::users/proc-requiring-tac-agreement-at-registration.adoc[leveloffset=3] include::users/con-required-actions.adoc[leveloffset=+2] include::users/proc-setting-required-actions.adoc[leveloffset=+3] diff --git a/docs/documentation/server_admin/topics/users/proc-requiring-tac-agreement-at-registration.adoc b/docs/documentation/server_admin/topics/users/proc-requiring-tac-agreement-at-registration.adoc new file mode 100644 index 00000000000..0a2e65f425b --- /dev/null +++ b/docs/documentation/server_admin/topics/users/proc-requiring-tac-agreement-at-registration.adoc @@ -0,0 +1,24 @@ +// Module included in the following assemblies: +// +// con-user-registration.adoc + +[id="proc-requiring-tac-agreement-at-registration_{context}"] += Requiring user to agree to terms and conditions during registration + +[role="_abstract"] +For a user to register, you can require agreement to your terms and conditions. + +.Registration form with required terms and conditions agreement +image:images/registration-form-with-required-tac.png[] + +.Prerequisite +* User registration is enabled. +* Terms and conditions required action is enabled. + +.Procedure +. Click the *Flows* tab. +. Click the *registration* flow. +. Select *Required* on the *Terms and Conditions* row. ++ +.Make the terms and conditions agreement required at registration +image:images/require-tac-agreement-at-registration.png[] diff --git a/server-spi-private/src/main/java/org/keycloak/models/utils/DefaultAuthenticationFlows.java b/server-spi-private/src/main/java/org/keycloak/models/utils/DefaultAuthenticationFlows.java index 86effa1a60f..3bde378fa03 100755 --- a/server-spi-private/src/main/java/org/keycloak/models/utils/DefaultAuthenticationFlows.java +++ b/server-spi-private/src/main/java/org/keycloak/models/utils/DefaultAuthenticationFlows.java @@ -51,7 +51,7 @@ public class DefaultAuthenticationFlows { public static void addFlows(RealmModel realm) { if (realm.getFlowByAlias(BROWSER_FLOW) == null) browserFlow(realm); if (realm.getFlowByAlias(DIRECT_GRANT_FLOW) == null) directGrantFlow(realm, false); - if (realm.getFlowByAlias(REGISTRATION_FLOW) == null) registrationFlow(realm); + if (realm.getFlowByAlias(REGISTRATION_FLOW) == null) registrationFlow(realm, false); if (realm.getFlowByAlias(RESET_CREDENTIALS_FLOW) == null) resetCredentialsFlow(realm); if (realm.getFlowByAlias(CLIENT_AUTHENTICATION_FLOW) == null) clientAuthFlow(realm); if (realm.getFlowByAlias(FIRST_BROKER_LOGIN_FLOW) == null) firstBrokerLoginFlow(realm, false); @@ -61,7 +61,7 @@ public class DefaultAuthenticationFlows { public static void migrateFlows(RealmModel realm) { if (realm.getFlowByAlias(BROWSER_FLOW) == null) browserFlow(realm, true); if (realm.getFlowByAlias(DIRECT_GRANT_FLOW) == null) directGrantFlow(realm, true); - if (realm.getFlowByAlias(REGISTRATION_FLOW) == null) registrationFlow(realm); + if (realm.getFlowByAlias(REGISTRATION_FLOW) == null) registrationFlow(realm, true); if (realm.getFlowByAlias(RESET_CREDENTIALS_FLOW) == null) resetCredentialsFlow(realm); if (realm.getFlowByAlias(CLIENT_AUTHENTICATION_FLOW) == null) clientAuthFlow(realm); if (realm.getFlowByAlias(FIRST_BROKER_LOGIN_FLOW) == null) firstBrokerLoginFlow(realm, true); @@ -69,7 +69,7 @@ public class DefaultAuthenticationFlows { if (realm.getFlowByAlias(DOCKER_AUTH) == null) dockerAuthenticationFlow(realm); } - public static void registrationFlow(RealmModel realm) { + public static void registrationFlow(RealmModel realm, boolean migrate) { AuthenticationFlowModel registrationFlow = new AuthenticationFlowModel(); registrationFlow.setAlias(REGISTRATION_FLOW); registrationFlow.setDescription("registration flow"); @@ -137,6 +137,16 @@ public class DefaultAuthenticationFlows { execution.setAuthenticatorFlow(false); //execution.setAuthenticatorConfig(captchaConfig.getId()); realm.addAuthenticatorExecution(execution); + + if (!migrate) { + execution = new AuthenticationExecutionModel(); + execution.setParentFlow(registrationFormFlow.getId()); + execution.setRequirement(AuthenticationExecutionModel.Requirement.DISABLED); + execution.setAuthenticator("registration-terms-and-conditions"); + execution.setPriority(70); + execution.setAuthenticatorFlow(false); + realm.addAuthenticatorExecution(execution); + } } public static void browserFlow(RealmModel realm) { diff --git a/services/src/main/java/org/keycloak/authentication/forms/RegistrationTermsAndConditions.java b/services/src/main/java/org/keycloak/authentication/forms/RegistrationTermsAndConditions.java new file mode 100644 index 00000000000..df8eebd72ac --- /dev/null +++ b/services/src/main/java/org/keycloak/authentication/forms/RegistrationTermsAndConditions.java @@ -0,0 +1,145 @@ +/* + * Copyright 2021 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.keycloak.authentication.forms; + +import java.util.Collections; +import java.util.List; +import jakarta.ws.rs.core.MultivaluedMap; +import org.keycloak.Config; +import org.keycloak.authentication.FormAction; +import org.keycloak.authentication.FormActionFactory; +import org.keycloak.authentication.FormContext; +import org.keycloak.authentication.ValidationContext; +import org.keycloak.events.Errors; +import org.keycloak.forms.login.LoginFormsProvider; +import org.keycloak.models.AuthenticationExecutionModel; +import org.keycloak.models.KeycloakSession; +import org.keycloak.models.KeycloakSessionFactory; +import org.keycloak.models.RealmModel; +import org.keycloak.models.UserModel; +import org.keycloak.models.utils.FormMessage; +import org.keycloak.provider.ConfiguredProvider; +import org.keycloak.provider.ProviderConfigProperty; + +public class RegistrationTermsAndConditions implements FormAction, FormActionFactory, ConfiguredProvider { + + public static final String PROVIDER_ID = "registration-terms-and-conditions"; + + protected static final String FIELD = "termsAccepted"; + + @Override + public String getDisplayType() { + return "Terms and conditions"; + } + + @Override + public String getReferenceCategory() { + return "terms-and-conditions"; + } + + @Override + public boolean isConfigurable() { + return false; + } + + private static AuthenticationExecutionModel.Requirement[] REQUIREMENT_CHOICES = { + AuthenticationExecutionModel.Requirement.REQUIRED, + AuthenticationExecutionModel.Requirement.DISABLED + }; + @Override + public AuthenticationExecutionModel.Requirement[] getRequirementChoices() { + return REQUIREMENT_CHOICES; + } + + @Override + public boolean isUserSetupAllowed() { + return false; + } + + @Override + public void buildPage(FormContext context, LoginFormsProvider form) { + form.setAttribute("termsAcceptanceRequired", true); + } + + @Override + public void validate(ValidationContext context) { + MultivaluedMap formData = context.getHttpRequest().getDecodedFormParameters(); + if (formData.containsKey(FIELD)) { + context.success(); + return; + } + + context.error(Errors.INVALID_REGISTRATION); + context.validationError(formData, Collections.singletonList(new FormMessage(FIELD, "termsAcceptanceRequired"))); + } + + @Override + public void success(FormContext context) { + + } + + @Override + public boolean requiresUser() { + return false; + } + + @Override + public boolean configuredFor(KeycloakSession session, RealmModel realm, UserModel user) { + return true; + } + + @Override + public void setRequiredActions(KeycloakSession session, RealmModel realm, UserModel user) { + + } + + @Override + public String getHelpText() { + return "Asks the user to accept terms and conditions before submitting its registration form."; + } + + @Override + public List getConfigProperties() { + return Collections.emptyList(); + } + + @Override + public FormAction create(KeycloakSession session) { + return this; + } + + @Override + public void init(Config.Scope config) { + + } + + @Override + public void postInit(KeycloakSessionFactory factory) { + + } + + @Override + public void close() { + + } + + @Override + public String getId() { + return PROVIDER_ID; + } +} diff --git a/services/src/main/resources/META-INF/services/org.keycloak.authentication.FormActionFactory b/services/src/main/resources/META-INF/services/org.keycloak.authentication.FormActionFactory index 8b10d73bca4..5287a11c1fc 100755 --- a/services/src/main/resources/META-INF/services/org.keycloak.authentication.FormActionFactory +++ b/services/src/main/resources/META-INF/services/org.keycloak.authentication.FormActionFactory @@ -18,4 +18,5 @@ org.keycloak.authentication.forms.RegistrationPassword org.keycloak.authentication.forms.RegistrationProfile org.keycloak.authentication.forms.RegistrationUserCreation -org.keycloak.authentication.forms.RegistrationRecaptcha \ No newline at end of file +org.keycloak.authentication.forms.RegistrationRecaptcha +org.keycloak.authentication.forms.RegistrationTermsAndConditions diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/auth/page/AccountFields.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/auth/page/AccountFields.java index 2e45ad4026e..197472a2abb 100644 --- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/auth/page/AccountFields.java +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/auth/page/AccountFields.java @@ -162,6 +162,9 @@ public class AccountFields extends FieldsBase { @FindBy(id = "input-error-username") private WebElement usernameError; + @FindBy(id = "input-error-terms-accepted") + private WebElement termsError; + public String getFirstNameError() { try { return getTextFromElement(firstNameError); @@ -201,5 +204,13 @@ public class AccountFields extends FieldsBase { return null; } } + + public String getTermsError(){ + try { + return getTextFromElement(termsError); + } catch (NoSuchElementException e) { + return null; + } + } } } diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/RegisterPage.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/RegisterPage.java index 3505b9ca4e9..4b35ff5d332 100644 --- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/RegisterPage.java +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/pages/RegisterPage.java @@ -56,10 +56,13 @@ public class RegisterPage extends AbstractPage { @FindBy(id = "password-confirm") private WebElement passwordConfirmInput; - + @FindBy(id = "department") private WebElement departmentInput; + @FindBy(id = "termsAccepted") + private WebElement termsAcceptedInput; + @FindBy(css = "input[type=\"submit\"]") private WebElement submitButton; @@ -77,6 +80,10 @@ public class RegisterPage extends AbstractPage { } public void register(String firstName, String lastName, String email, String username, String password, String passwordConfirm, String department) { + register(firstName, lastName, email, username, password, passwordConfirm, department, null); + } + + public void register(String firstName, String lastName, String email, String username, String password, String passwordConfirm, String department, Boolean termsAccepted) { firstNameInput.clear(); if (firstName != null) { firstNameInput.sendKeys(firstName); @@ -114,6 +121,15 @@ public class RegisterPage extends AbstractPage { } } + try { + termsAcceptedInput.clear(); + } catch (NoSuchElementException e) { + // ignore + } + if (termsAccepted != null && termsAccepted) { + termsAcceptedInput.click(); + } + submitButton.click(); } @@ -173,7 +189,7 @@ public class RegisterPage extends AbstractPage { } return null; } - + public String getLabelForField(String fieldId) { return driver.findElement(By.cssSelector("label[for="+fieldId+"]")).getText(); } @@ -218,7 +234,7 @@ public class RegisterPage extends AbstractPage { } } - + public boolean isCurrent() { return PageUtils.getPageTitle(driver).equals("Register"); } diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/authentication/ProvidersTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/authentication/ProvidersTest.java index 10cac51361b..3dc3f529860 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/authentication/ProvidersTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/authentication/ProvidersTest.java @@ -70,6 +70,8 @@ public class ProvidersTest extends AbstractAuthenticationTest { addProviderInfo(expected, "registration-user-creation", "Registration User Creation", "This action must always be first! Validates the username of the user in validation phase. " + "In success phase, this will create the user in the database."); + addProviderInfo(expected, "registration-terms-and-conditions", "Terms and conditions", + "Asks the user to accept terms and conditions before submitting its registration form."); compareProviders(expected, result); } diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/RegisterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/RegisterTest.java index 548d2dc5699..cff5c589f62 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/RegisterTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/RegisterTest.java @@ -27,6 +27,7 @@ import org.keycloak.authentication.authenticators.browser.CookieAuthenticatorFac import org.keycloak.authentication.forms.RegistrationPassword; import org.keycloak.authentication.forms.RegistrationProfile; import org.keycloak.authentication.forms.RegistrationRecaptcha; +import org.keycloak.authentication.forms.RegistrationTermsAndConditions; import org.keycloak.authentication.forms.RegistrationUserCreation; import org.keycloak.events.Details; import org.keycloak.events.EventType; @@ -34,6 +35,7 @@ import org.keycloak.models.AuthenticationExecutionModel; import org.keycloak.representations.idm.EventRepresentation; import org.keycloak.representations.idm.RealmRepresentation; import org.keycloak.representations.idm.UserRepresentation; +import org.keycloak.testsuite.AbstractTestRealmKeycloakTest; import org.keycloak.testsuite.AssertEvents; import org.keycloak.testsuite.AbstractTestRealmKeycloakTest; import org.keycloak.testsuite.pages.AppPage; @@ -52,6 +54,7 @@ import org.keycloak.testsuite.util.AccountHelper; import jakarta.mail.internet.MimeMessage; import jakarta.ws.rs.core.Response; import java.io.IOException; +import java.util.UUID; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.anyOf; @@ -353,7 +356,7 @@ public class RegisterTest extends AbstractTestRealmKeycloakTest { //contains few special characters we want to be sure they are allowed in username String username = "register.U-se@rS_uccess"; - + registerPage.register("firstName", "lastName", "registerUserSuccess@email", username, "password", "password"); appPage.assertCurrent(); @@ -644,6 +647,56 @@ public class RegisterTest extends AbstractTestRealmKeycloakTest { registerPage.assertCurrent(); } + //KEYCLOAK-15244 + @Test + public void registerUserMissingTermsAcceptance() { + configureRegistrationFlowWithCustomRegistrationPageForm(UUID.randomUUID().toString(), + AuthenticationExecutionModel.Requirement.REQUIRED); + + try { + loginPage.open(); + loginPage.clickRegister(); + registerPage.assertCurrent(); + + registerPage.register("firstName", "lastName", "registerUserMissingTermsAcceptance@email", + "registerUserMissingTermsAcceptance", "password", "password", null, false); + + registerPage.assertCurrent(); + assertEquals("You must agree to our terms and conditions.", registerPage.getInputAccountErrors().getTermsError()); + + events.expectRegister("registerUserMissingTermsAcceptance", "registerUserMissingTermsAcceptance@email") + .removeDetail(Details.USERNAME) + .removeDetail(Details.EMAIL) + .error("invalid_registration").assertEvent(); + } finally { + configureRegistrationFlowWithCustomRegistrationPageForm(UUID.randomUUID().toString()); + } + } + + //KEYCLOAK-15244 + @Test + public void registerUserSuccessTermsAcceptance() { + configureRegistrationFlowWithCustomRegistrationPageForm(UUID.randomUUID().toString(), + AuthenticationExecutionModel.Requirement.REQUIRED); + + try { + loginPage.open(); + loginPage.clickRegister(); + registerPage.assertCurrent(); + + registerPage.register("firstName", "lastName", "registerUserSuccessTermsAcceptance@email", + "registerUserSuccessTermsAcceptance", "password", "password", null, true); + + assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); + + String userId = events.expectRegister("registerUserSuccessTermsAcceptance", "registerUserSuccessTermsAcceptance@email") + .assertEvent().getUserId(); + assertUserRegistered(userId, "registerUserSuccessTermsAcceptance", "registerUserSuccessTermsAcceptance@email"); + } finally { + configureRegistrationFlowWithCustomRegistrationPageForm(UUID.randomUUID().toString()); + } + } + protected RealmAttributeUpdater configureRealmRegistrationEmailAsUsername(final boolean value) { return getRealmAttributeUpdater().setRegistrationEmailAsUsername(value); } @@ -709,19 +762,24 @@ public class RegisterTest extends AbstractTestRealmKeycloakTest { } private void configureRegistrationFlowWithCustomRegistrationPageForm(String newFlowAlias) { + configureRegistrationFlowWithCustomRegistrationPageForm(newFlowAlias, AuthenticationExecutionModel.Requirement.DISABLED); + } + + private void configureRegistrationFlowWithCustomRegistrationPageForm(String newFlowAlias, AuthenticationExecutionModel.Requirement termsAndConditionRequirement) { testingClient.server("test").run(session -> FlowUtil.inCurrentRealm(session).copyRegistrationFlow(newFlowAlias)); testingClient.server("test").run(session -> FlowUtil.inCurrentRealm(session) .selectFlow(newFlowAlias) - .clear() - .addAuthenticatorExecution(AuthenticationExecutionModel.Requirement.ALTERNATIVE, CookieAuthenticatorFactory.PROVIDER_ID) - .addSubFlowExecution("Sub Flow", AuthenticationFlow.BASIC_FLOW, AuthenticationExecutionModel.Requirement.ALTERNATIVE, subflow -> subflow - .addSubFlowExecution("Sub sub Form Flow", AuthenticationFlow.FORM_FLOW, AuthenticationExecutionModel.Requirement.REQUIRED, subsubflow -> subsubflow - .addAuthenticatorExecution(AuthenticationExecutionModel.Requirement.REQUIRED, RegistrationUserCreation.PROVIDER_ID) - .addAuthenticatorExecution(AuthenticationExecutionModel.Requirement.REQUIRED, RegistrationProfile.PROVIDER_ID) - .addAuthenticatorExecution(AuthenticationExecutionModel.Requirement.REQUIRED, RegistrationPassword.PROVIDER_ID) - .addAuthenticatorExecution(AuthenticationExecutionModel.Requirement.DISABLED, RegistrationRecaptcha.PROVIDER_ID) - ) + .clear() + .addAuthenticatorExecution(AuthenticationExecutionModel.Requirement.ALTERNATIVE, CookieAuthenticatorFactory.PROVIDER_ID) + .addSubFlowExecution("Sub Flow", AuthenticationFlow.BASIC_FLOW, AuthenticationExecutionModel.Requirement.ALTERNATIVE, subflow -> subflow + .addSubFlowExecution("Sub sub Form Flow", AuthenticationFlow.FORM_FLOW, AuthenticationExecutionModel.Requirement.REQUIRED, subsubflow -> subsubflow + .addAuthenticatorExecution(AuthenticationExecutionModel.Requirement.REQUIRED, RegistrationUserCreation.PROVIDER_ID) + .addAuthenticatorExecution(AuthenticationExecutionModel.Requirement.REQUIRED, RegistrationProfile.PROVIDER_ID) + .addAuthenticatorExecution(AuthenticationExecutionModel.Requirement.REQUIRED, RegistrationPassword.PROVIDER_ID) + .addAuthenticatorExecution(AuthenticationExecutionModel.Requirement.DISABLED, RegistrationRecaptcha.PROVIDER_ID) + .addAuthenticatorExecution(termsAndConditionRequirement, RegistrationTermsAndConditions.PROVIDER_ID) ) + ) .defineAsRegistrationFlow() // Activate this new flow ); } diff --git a/themes/src/main/resources-community/theme/base/login/messages/messages_fr.properties b/themes/src/main/resources-community/theme/base/login/messages/messages_fr.properties index 44ffe65b276..c1478a31b45 100644 --- a/themes/src/main/resources-community/theme/base/login/messages/messages_fr.properties +++ b/themes/src/main/resources-community/theme/base/login/messages/messages_fr.properties @@ -63,6 +63,8 @@ termsTitle=Termes et Conditions termsTitleHtml=Termes et Conditions termsText=

    Termes et conditions \u00e0 d\u00e9finir

    termsPlainText=Termes et conditions \u00e0 d\u00e9finir +termsAcceptanceRequired=Vous devez accepter les termes et conditions. +acceptTerms=J''accepte les termes et conditions recaptchaFailed=Re-captcha invalide recaptchaNotConfigured=Re-captcha est requis, mais il n''est pas configur\u00e9 diff --git a/themes/src/main/resources/theme/base/login/messages/messages_en.properties b/themes/src/main/resources/theme/base/login/messages/messages_en.properties index 27897bb9b92..f6afa26f4ee 100755 --- a/themes/src/main/resources/theme/base/login/messages/messages_en.properties +++ b/themes/src/main/resources/theme/base/login/messages/messages_en.properties @@ -68,6 +68,8 @@ unknown=Unknown termsTitle=Terms and Conditions termsText=

    Terms and conditions to be defined

    termsPlainText=Terms and conditions to be defined. +termsAcceptanceRequired=You must agree to our terms and conditions. +acceptTerms=I agree to the terms and conditions recaptchaFailed=Invalid Recaptcha recaptchaNotConfigured=Recaptcha is required, but not configured diff --git a/themes/src/main/resources/theme/base/login/register-commons.ftl b/themes/src/main/resources/theme/base/login/register-commons.ftl new file mode 100644 index 00000000000..7007797ee0e --- /dev/null +++ b/themes/src/main/resources/theme/base/login/register-commons.ftl @@ -0,0 +1,27 @@ +<#macro termsAcceptance> + <#if termsAcceptanceRequired??> +
    +
    + ${msg("termsTitle")} +
    + ${kcSanitize(msg("termsText"))?no_esc} +
    +
    +
    +
    +
    + + +
    + <#if messagesPerField.existsError('termsAccepted')> +
    + + ${kcSanitize(messagesPerField.get('termsAccepted'))?no_esc} + +
    + +
    + + diff --git a/themes/src/main/resources/theme/base/login/register-user-profile.ftl b/themes/src/main/resources/theme/base/login/register-user-profile.ftl index e0d533b89f5..fe9cdf607fe 100755 --- a/themes/src/main/resources/theme/base/login/register-user-profile.ftl +++ b/themes/src/main/resources/theme/base/login/register-user-profile.ftl @@ -1,5 +1,6 @@ <#import "template.ftl" as layout> <#import "user-profile-commons.ftl" as userProfileCommons> +<#import "register-commons.ftl" as registerCommons> <@layout.registrationLayout displayMessage=messagesPerField.exists('global') displayRequiredFields=true; section> <#if section = "header"> ${msg("registerTitle")} @@ -49,6 +50,8 @@ + + <@registerCommons.termsAcceptance/> <#if recaptchaRequired??>
    @@ -71,4 +74,4 @@
    - \ No newline at end of file + diff --git a/themes/src/main/resources/theme/base/login/register.ftl b/themes/src/main/resources/theme/base/login/register.ftl index db509847982..c06de23babd 100755 --- a/themes/src/main/resources/theme/base/login/register.ftl +++ b/themes/src/main/resources/theme/base/login/register.ftl @@ -1,5 +1,6 @@ <#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=!messagesPerField.existsError('firstName','lastName','email','username','password','password-confirm'); section> +<#import "register-commons.ftl" as registerCommons> +<@layout.registrationLayout displayMessage=!messagesPerField.existsError('firstName','lastName','email','username','password','password-confirm','termsAccepted'); section> <#if section = "header"> ${msg("registerTitle")} <#elseif section = "form"> @@ -117,6 +118,8 @@ + <@registerCommons.termsAcceptance/> + <#if recaptchaRequired??>
    @@ -138,4 +141,4 @@
    - \ No newline at end of file + diff --git a/themes/src/main/resources/theme/keycloak/login/resources/css/login.css b/themes/src/main/resources/theme/keycloak/login/resources/css/login.css index 7ca83002fb1..7bdeef82209 100644 --- a/themes/src/main/resources/theme/keycloak/login/resources/css/login.css +++ b/themes/src/main/resources/theme/keycloak/login/resources/css/login.css @@ -178,6 +178,13 @@ div.kc-logo-text span { margin-bottom: 20px; } +#kc-registration-terms-text { + max-height: 100px; + overflow-y: auto; + overflow-x: hidden; + margin: 5px; +} + #kc-registration { margin-bottom: 0; }