Skip to content

Commit b58f35f

Browse files
authored
Revert "Enable verify profile required action by default for new realms" (keycloak#26495)
This reverts commit 7f195ac. Signed-off-by: rmartinc <[email protected]>
1 parent 29bc02a commit b58f35f

File tree

22 files changed

+50
-231
lines changed

22 files changed

+50
-231
lines changed

quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/KeycloakMain.java

Lines changed: 3 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,6 @@
4848
import org.keycloak.services.ServicesLogger;
4949
import org.keycloak.services.managers.ApplianceBootstrap;
5050
import org.keycloak.services.resources.KeycloakApplication;
51-
import org.keycloak.utils.EmailValidationUtil;
52-
import org.keycloak.utils.StringUtil;
5351

5452
import io.quarkus.runtime.QuarkusApplication;
5553
import io.quarkus.runtime.annotations.QuarkusMain;
@@ -61,13 +59,8 @@
6159
@ApplicationScoped
6260
public class KeycloakMain implements QuarkusApplication {
6361

64-
private static final Logger log = Logger.getLogger(KeycloakMain.class);
6562
private static final String KEYCLOAK_ADMIN_ENV_VAR = "KEYCLOAK_ADMIN";
6663
private static final String KEYCLOAK_ADMIN_PASSWORD_ENV_VAR = "KEYCLOAK_ADMIN_PASSWORD";
67-
private static final String KEYCLOAK_ADMIN_FIRSTNAME_ENV_VAR = "KEYCLOAK_ADMIN_FIRSTNAME";
68-
private static final String KEYCLOAK_ADMIN_LASTNAME_ENV_VAR = "KEYCLOAK_ADMIN_LASTNAME";
69-
private static final String KEYCLOAK_ADMIN_EMAIL_ENV_VAR = "KEYCLOAK_ADMIN_EMAIL";
70-
private static final String KEYCLOAK_ADMIN_DEFAULT_EMAIL_DOMAIN = "keycloak.test";
7164

7265
public static void main(String[] args) {
7366
System.setProperty("kc.version", Version.VERSION);
@@ -171,43 +164,17 @@ public int run(String... args) throws Exception {
171164
private void createAdminUser() {
172165
String adminUserName = System.getenv(KEYCLOAK_ADMIN_ENV_VAR);
173166
String adminPassword = System.getenv(KEYCLOAK_ADMIN_PASSWORD_ENV_VAR);
174-
String tmpFirstName = System.getenv(KEYCLOAK_ADMIN_FIRSTNAME_ENV_VAR);
175-
String tmpLastName = System.getenv(KEYCLOAK_ADMIN_LASTNAME_ENV_VAR);
176-
String tmpEmail = System.getenv(KEYCLOAK_ADMIN_EMAIL_ENV_VAR);
177167

178-
if (StringUtil.isBlank(adminUserName) || StringUtil.isBlank(adminPassword)) {
168+
if ((adminUserName == null || adminUserName.trim().length() == 0)
169+
|| (adminPassword == null || adminPassword.trim().length() == 0)) {
179170
return;
180171
}
181172

182-
// try to create admin user only with username and password
183-
if (StringUtil.isBlank(tmpFirstName)) {
184-
tmpFirstName = adminUserName;
185-
}
186-
187-
if (StringUtil.isBlank(tmpLastName)) {
188-
tmpLastName = adminUserName;
189-
}
190-
191-
if (StringUtil.isBlank(tmpEmail)) {
192-
tmpEmail = adminUserName + "@" + KEYCLOAK_ADMIN_DEFAULT_EMAIL_DOMAIN;
193-
}
194-
195-
if (!EmailValidationUtil.isValidEmail(tmpEmail)) {
196-
log.errorf("The admin user %s is not created because the associated email is invalid: %s. "
197-
+ "Please set a valid email in the KEYCLOAK_ADMIN_EMAIL environment variable.", adminUserName, tmpEmail);
198-
return;
199-
}
200-
201-
final String adminFirstName = tmpFirstName;
202-
final String adminLastName = tmpLastName;
203-
final String adminEmail = tmpEmail;
204-
205173
KeycloakSessionFactory sessionFactory = KeycloakApplication.getSessionFactory();
206174

207175
try {
208176
KeycloakModelUtils.runJobInTransaction(sessionFactory, session -> {
209-
new ApplianceBootstrap(session).createMasterRealmUser(adminUserName,
210-
adminPassword, adminFirstName, adminLastName, adminEmail);
177+
new ApplianceBootstrap(session).createMasterRealmUser(adminUserName, adminPassword);
211178
});
212179
} catch (Throwable t) {
213180
ServicesLogger.LOGGER.addUserFailed(t, adminUserName, Config.getAdminRealm());

server-spi-private/src/main/java/org/keycloak/models/utils/DefaultRequiredActions.java

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,7 @@ public enum Action {
8181
UPDATE_EMAIL(UserModel.RequiredAction.UPDATE_EMAIL.name(), DefaultRequiredActions::addUpdateEmailAction, () -> isFeatureEnabled(Profile.Feature.UPDATE_EMAIL)),
8282
CONFIGURE_RECOVERY_AUTHN_CODES(UserModel.RequiredAction.CONFIGURE_RECOVERY_AUTHN_CODES.name(), DefaultRequiredActions::addRecoveryAuthnCodesAction, () -> isFeatureEnabled(Profile.Feature.RECOVERY_CODES)),
8383
WEBAUTHN_REGISTER("webauthn-register", DefaultRequiredActions::addWebAuthnRegisterAction, () -> isFeatureEnabled(Profile.Feature.WEB_AUTHN)),
84-
WEBAUTHN_PASSWORDLESS_REGISTER("webauthn-register-passwordless", DefaultRequiredActions::addWebAuthnPasswordlessRegisterAction, () -> isFeatureEnabled(Profile.Feature.WEB_AUTHN)),
85-
VERIFY_USER_PROFILE(UserModel.RequiredAction.VERIFY_PROFILE.name(), DefaultRequiredActions::addVerifyProfile);
84+
WEBAUTHN_PASSWORDLESS_REGISTER("webauthn-register-passwordless", DefaultRequiredActions::addWebAuthnPasswordlessRegisterAction, () -> isFeatureEnabled(Profile.Feature.WEB_AUTHN));
8685

8786
private final String alias;
8887
private final Consumer<RealmModel> addAction;
@@ -183,19 +182,6 @@ public static void addTermsAndConditionsAction(RealmModel realm) {
183182
}
184183
}
185184

186-
public static void addVerifyProfile(RealmModel realm) {
187-
if (realm.getRequiredActionProviderByAlias(UserModel.RequiredAction.VERIFY_PROFILE.name()) == null) {
188-
RequiredActionProviderModel termsAndConditions = new RequiredActionProviderModel();
189-
termsAndConditions.setEnabled(true);
190-
termsAndConditions.setAlias(UserModel.RequiredAction.VERIFY_PROFILE.name());
191-
termsAndConditions.setName("Verify Profile");
192-
termsAndConditions.setProviderId(UserModel.RequiredAction.VERIFY_PROFILE.name());
193-
termsAndConditions.setDefaultAction(false);
194-
termsAndConditions.setPriority(90);
195-
realm.addRequiredActionProvider(termsAndConditions);
196-
}
197-
}
198-
199185
public static void addDeleteAccountAction(RealmModel realm) {
200186
if (realm.getRequiredActionProviderByAlias("delete_account") == null) {
201187
RequiredActionProviderModel deleteAccount = new RequiredActionProviderModel();

services/src/main/java/org/keycloak/services/managers/ApplianceBootstrap.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public boolean createMasterRealm() {
9292
return true;
9393
}
9494

95-
public void createMasterRealmUser(String username, String password, String firstName, String lastName, String email) {
95+
public void createMasterRealmUser(String username, String password) {
9696
RealmModel realm = session.realms().getRealmByName(Config.getAdminRealm());
9797
session.getContext().setRealm(realm);
9898

@@ -103,9 +103,6 @@ public void createMasterRealmUser(String username, String password, String first
103103

104104
UserModel adminUser = session.users().addUser(realm, username);
105105
adminUser.setEnabled(true);
106-
adminUser.setFirstName(firstName);
107-
adminUser.setLastName(lastName);
108-
adminUser.setEmail(email);
109106

110107
UserCredentialModel usrCredModel = UserCredentialModel.password(password);
111108
adminUser.credentialManager().updateCredential(usrCredModel);

services/src/main/java/org/keycloak/services/resources/KeycloakApplication.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,10 @@ public void importAddUser() {
318318
if (users.getUserByUsername(realm, userRep.getUsername()) != null) {
319319
ServicesLogger.LOGGER.notCreatingExistingUser(userRep.getUsername());
320320
} else {
321-
UserModel user = RepresentationToModel.createUser(session, realm, userRep);
321+
UserModel user = users.addUser(realm, userRep.getUsername());
322+
user.setEnabled(userRep.isEnabled());
323+
RepresentationToModel.createCredentials(userRep, session, realm, user, false);
324+
RepresentationToModel.createRoleMappings(userRep, user, realm);
322325
ServicesLogger.LOGGER.addUserSuccess(userRep.getUsername(), realmRep.getRealm());
323326
}
324327
});

services/src/main/java/org/keycloak/services/resources/WelcomeResource.java

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
import org.keycloak.theme.Theme;
4848
import org.keycloak.theme.freemarker.FreeMarkerProvider;
4949
import org.keycloak.urls.UrlType;
50-
import org.keycloak.utils.EmailValidationUtil;
5150
import org.keycloak.utils.MediaType;
5251

5352
import java.io.IOException;
@@ -114,9 +113,6 @@ public Response createUser() {
114113
String username = formData.getFirst("username");
115114
String password = formData.getFirst("password");
116115
String passwordConfirmation = formData.getFirst("passwordConfirmation");
117-
String firstName = formData.getFirst("firstName");
118-
String lastName = formData.getFirst("lastName");
119-
String email = formData.getFirst("email");
120116

121117
if (username != null) {
122118
username = username.trim();
@@ -134,22 +130,10 @@ public Response createUser() {
134130
return createWelcomePage(null, "Password and confirmation doesn't match");
135131
}
136132

137-
if (firstName == null || firstName.length() == 0) {
138-
return createWelcomePage(null, "FirstName is missing");
139-
}
140-
141-
if (lastName == null || lastName.length() == 0) {
142-
return createWelcomePage(null, "LastName is missing");
143-
}
144-
145-
if (!EmailValidationUtil.isValidEmail(email)) {
146-
return createWelcomePage(null, "Email is invalid");
147-
}
148-
149133
expireCsrfCookie();
150134

151135
ApplianceBootstrap applianceBootstrap = new ApplianceBootstrap(session);
152-
applianceBootstrap.createMasterRealmUser(username, password, firstName, lastName, email);
136+
applianceBootstrap.createMasterRealmUser(username, password);
153137

154138
shouldBootstrap.set(false);
155139
ServicesLogger.LOGGER.createdInitialAdminUser(username);

testsuite/integration-arquillian/servers/auth-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/KeycloakOnUndertow.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ protected void setupDevConfig() {
235235
try (KeycloakSession session = sessionFactory.create()) {
236236
session.getTransactionManager().begin();
237237
if (new ApplianceBootstrap(session).isNoMasterUser()) {
238-
new ApplianceBootstrap(session).createMasterRealmUser("admin", "admin", "admin", "admin", "[email protected]");
238+
new ApplianceBootstrap(session).createMasterRealmUser("admin", "admin");
239239
}
240240
}
241241
}

testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/arquillian/containers/KeycloakQuarkusServerDeployableContainer.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,6 @@ private Process startContainer() throws IOException {
149149

150150
if (!StoreProvider.JPA.equals(StoreProvider.getCurrentProvider())) {
151151
builder.environment().put("KEYCLOAK_ADMIN", "admin");
152-
builder.environment().put("KEYCLOAK_ADMIN_FIRSTNAME", "admin");
153-
builder.environment().put("KEYCLOAK_ADMIN_LASTNAME", "admin");
154-
builder.environment().put("KEYCLOAK_ADMIN_EMAIL", "[email protected]");
155152
builder.environment().put("KEYCLOAK_ADMIN_PASSWORD", "admin");
156153
}
157154

testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/AbstractKeycloakTest.java

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.keycloak.admin.client.resource.UsersResource;
3838
import org.keycloak.common.util.KeycloakUriBuilder;
3939
import org.keycloak.common.util.Time;
40+
import org.keycloak.models.cache.UserCache;
4041
import org.keycloak.models.utils.TimeBasedOTP;
4142
import org.keycloak.protocol.oidc.OIDCAdvancedConfigWrapper;
4243
import org.keycloak.representations.idm.ClientRepresentation;
@@ -78,6 +79,7 @@
7879
import java.util.Collections;
7980
import java.util.List;
8081
import java.util.Map;
82+
import java.util.Objects;
8183
import java.util.Scanner;
8284
import java.util.concurrent.Callable;
8385
import java.util.concurrent.ExecutorService;
@@ -91,7 +93,6 @@
9193
import static org.hamcrest.Matchers.equalTo;
9294
import static org.hamcrest.Matchers.is;
9395
import static org.junit.Assert.assertEquals;
94-
import org.keycloak.models.UserModel;
9596
import static org.keycloak.testsuite.admin.Users.setPasswordFor;
9697
import static org.keycloak.testsuite.auth.page.AuthRealm.MASTER;
9798
import static org.keycloak.testsuite.util.ServerURLs.AUTH_SERVER_HOST;
@@ -472,10 +473,6 @@ protected void removeAllRealmsDespiteMaster() {
472473
assertThat(adminClient.realms().findAll().size(), is(equalTo(1)));
473474
}
474475

475-
protected boolean removeVerifyProfileAtImport() {
476-
// remove verify profile by default because most tests are not prepared
477-
return true;
478-
}
479476

480477
public void importRealm(RealmRepresentation realm) {
481478
if (modifyRealmForSSL()) {
@@ -514,19 +511,6 @@ public void importRealm(RealmRepresentation realm) {
514511
// expected when realm does not exist
515512
}
516513
adminClient.realms().create(realm);
517-
518-
if (removeVerifyProfileAtImport()) {
519-
try {
520-
RequiredActionProviderRepresentation vpModel = adminClient.realm(realm.getRealm()).flows()
521-
.getRequiredAction(UserModel.RequiredAction.VERIFY_PROFILE.name());
522-
vpModel.setEnabled(false);
523-
vpModel.setDefaultAction(false);
524-
adminClient.realm(realm.getRealm()).flows().updateRequiredAction(
525-
UserModel.RequiredAction.VERIFY_PROFILE.name(), vpModel);
526-
testingClient.testing().pollAdminEvent(); // remove the event
527-
} catch (NotFoundException ignore) {
528-
}
529-
}
530514
}
531515

532516
public void removeRealm(String realmName) {

testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/IllegalAdminUpgradeTest.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,25 +83,16 @@ public static void setupUsers(KeycloakSession session) {
8383
realmUser.credentialManager().updateCredential(UserCredentialModel.password("password"));
8484

8585
UserModel masterUser = session.users().addUser(master, "userAdmin");
86-
masterUser.setFirstName("userAdmin");
87-
masterUser.setLastName("userAdmin");
88-
masterUser.setEmail("[email protected]");
8986
masterUser.grantRole(masterManageUsers);
9087
masterUser.setEnabled(true);
9188
masterUser.credentialManager().updateCredential(UserCredentialModel.password("password"));
9289

9390
UserModel masterAdmin = session.users().addUser(master, "masterAdmin");
94-
masterAdmin.setFirstName("masterAdmin");
95-
masterAdmin.setLastName("masterAdmin");
96-
masterAdmin.setEmail("[email protected]");
9791
masterAdmin.grantRole(masterMasterManageUSers);
9892
masterAdmin.setEnabled(true);
9993
masterAdmin.credentialManager().updateCredential(UserCredentialModel.password("password"));
10094

10195
UserModel user = session.users().addUser(master, "user");
102-
user.setFirstName("user");
103-
user.setLastName("user");
104-
user.setEmail("[email protected]");
10596
user.grantRole(masterManageUsers);
10697
user.setEnabled(true);
10798
user.credentialManager().updateCredential(UserCredentialModel.password("password"));

testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/ImpersonationTest.java

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -142,12 +142,7 @@ public void testImpersonateByMasterAdmin() {
142142
@Test
143143
public void testImpersonateByMasterImpersonator() {
144144
String userId;
145-
try (Response response = adminClient.realm("master").users().create(
146-
UserBuilder.create().username("master-impersonator")
147-
.firstName("master-impersonator")
148-
.lastName("master-impersonator")
149-
150-
.build())) {
145+
try (Response response = adminClient.realm("master").users().create(UserBuilder.create().username("master-impersonator").build())) {
151146
userId = ApiUtil.getCreatedId(response);
152147
}
153148

@@ -200,12 +195,7 @@ public void testImpersonationFailsForDisabledUser() {
200195
@Test
201196
public void testImpersonateByMastertBadImpersonator() {
202197
String userId;
203-
try (Response response = adminClient.realm("master").users().create(
204-
UserBuilder.create().username("master-bad-impersonator")
205-
.firstName("master-bad-impersonator")
206-
.lastName("master-bad-impersonator")
207-
208-
.build())) {
198+
try (Response response = adminClient.realm("master").users().create(UserBuilder.create().username("master-bad-impersonator").build())) {
209199
userId = ApiUtil.getCreatedId(response);
210200
}
211201
adminClient.realm("master").users().get(userId).resetPassword(CredentialBuilder.create().password("password").build());

0 commit comments

Comments
 (0)