Do not show username field when updating profile if UPDATE_EMAIL feature is enabled and email as username is enabled
Closes #16263
This commit is contained in:
parent
141c9dd803
commit
53ee95764e
3 changed files with 122 additions and 1 deletions
|
@ -79,6 +79,9 @@ public abstract class AbstractUserProfileProvider<U extends UserProfileProvider>
|
||||||
case ACCOUNT_OLD:
|
case ACCOUNT_OLD:
|
||||||
case ACCOUNT:
|
case ACCOUNT:
|
||||||
case UPDATE_PROFILE:
|
case UPDATE_PROFILE:
|
||||||
|
if (realm.isRegistrationEmailAsUsername()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return realm.isEditUsernameAllowed();
|
return realm.isEditUsernameAllowed();
|
||||||
case UPDATE_EMAIL:
|
case UPDATE_EMAIL:
|
||||||
return realm.isRegistrationEmailAsUsername();
|
return realm.isRegistrationEmailAsUsername();
|
||||||
|
@ -99,6 +102,9 @@ public abstract class AbstractUserProfileProvider<U extends UserProfileProvider>
|
||||||
case IDP_REVIEW:
|
case IDP_REVIEW:
|
||||||
return !realm.isRegistrationEmailAsUsername();
|
return !realm.isRegistrationEmailAsUsername();
|
||||||
case UPDATE_PROFILE:
|
case UPDATE_PROFILE:
|
||||||
|
if (realm.isRegistrationEmailAsUsername()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return realm.isEditUsernameAllowed();
|
return realm.isEditUsernameAllowed();
|
||||||
case UPDATE_EMAIL:
|
case UPDATE_EMAIL:
|
||||||
return false;
|
return false;
|
||||||
|
@ -112,6 +118,12 @@ public abstract class AbstractUserProfileProvider<U extends UserProfileProvider>
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean readEmailCondition(AttributeContext c) {
|
private static boolean readEmailCondition(AttributeContext c) {
|
||||||
|
RealmModel realm = c.getSession().getContext().getRealm();
|
||||||
|
|
||||||
|
if (realm.isRegistrationEmailAsUsername() && !realm.isEditUsernameAllowed()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return !Profile.isFeatureEnabled(Profile.Feature.UPDATE_EMAIL) || c.getContext() != UPDATE_PROFILE;
|
return !Profile.isFeatureEnabled(Profile.Feature.UPDATE_EMAIL) || c.getContext() != UPDATE_PROFILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -132,6 +132,14 @@ public class VerifyProfilePage extends AbstractPage {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isEmailPresent() {
|
||||||
|
try {
|
||||||
|
return driver.findElement(By.id("email")).isDisplayed();
|
||||||
|
} catch (NoSuchElementException nse) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isUsernameEnabled() {
|
public boolean isUsernameEnabled() {
|
||||||
try {
|
try {
|
||||||
return driver.findElement(By.id("username")).isEnabled();
|
return driver.findElement(By.id("username")).isEnabled();
|
||||||
|
|
|
@ -272,6 +272,10 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest {
|
||||||
+ "{\"name\": \"email\", " + VerifyProfileTest.PERMISSIONS_ALL + "}"
|
+ "{\"name\": \"email\", " + VerifyProfileTest.PERMISSIONS_ALL + "}"
|
||||||
+ "]}");
|
+ "]}");
|
||||||
|
|
||||||
|
RealmRepresentation realm = testRealm().toRepresentation();
|
||||||
|
realm.setEditUsernameAllowed(true);
|
||||||
|
testRealm().update(realm);
|
||||||
|
|
||||||
loginPage.open();
|
loginPage.open();
|
||||||
loginPage.login("login-test5", "password");
|
loginPage.login("login-test5", "password");
|
||||||
|
|
||||||
|
@ -384,6 +388,9 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest {
|
||||||
public void testUsernameOnlyIfEditAllowed() {
|
public void testUsernameOnlyIfEditAllowed() {
|
||||||
RealmRepresentation realm = testRealm().toRepresentation();
|
RealmRepresentation realm = testRealm().toRepresentation();
|
||||||
|
|
||||||
|
setUserProfileConfiguration(CONFIGURATION_FOR_USER_EDIT);
|
||||||
|
updateUser(user5Id, null, "ExistingLast", null);
|
||||||
|
|
||||||
boolean r = realm.isEditUsernameAllowed();
|
boolean r = realm.isEditUsernameAllowed();
|
||||||
try {
|
try {
|
||||||
setUserProfileConfiguration(null);
|
setUserProfileConfiguration(null);
|
||||||
|
@ -392,9 +399,11 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest {
|
||||||
testRealm().update(realm);
|
testRealm().update(realm);
|
||||||
|
|
||||||
loginPage.open();
|
loginPage.open();
|
||||||
loginPage.login("login-test", "password");
|
loginPage.login("login-test5", "password");
|
||||||
|
|
||||||
|
verifyProfilePage.assertCurrent();
|
||||||
assertFalse(verifyProfilePage.isUsernamePresent());
|
assertFalse(verifyProfilePage.isUsernamePresent());
|
||||||
|
assertTrue(verifyProfilePage.isEmailPresent());
|
||||||
|
|
||||||
realm.setEditUsernameAllowed(true);
|
realm.setEditUsernameAllowed(true);
|
||||||
testRealm().update(realm);
|
testRealm().update(realm);
|
||||||
|
@ -407,6 +416,98 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUsernameOnlyIfEmailAsUsernameIsDisabled() {
|
||||||
|
RealmRepresentation realm = testRealm().toRepresentation();
|
||||||
|
|
||||||
|
setUserProfileConfiguration(CONFIGURATION_FOR_USER_EDIT);
|
||||||
|
updateUser(user5Id, null, "ExistingLast", null);
|
||||||
|
|
||||||
|
try {
|
||||||
|
setUserProfileConfiguration(null);
|
||||||
|
|
||||||
|
realm.setEditUsernameAllowed(true);
|
||||||
|
realm.setRegistrationEmailAsUsername(true);
|
||||||
|
testRealm().update(realm);
|
||||||
|
|
||||||
|
loginPage.open();
|
||||||
|
loginPage.login("login-test5", "password");
|
||||||
|
|
||||||
|
verifyProfilePage.assertCurrent();
|
||||||
|
assertFalse(verifyProfilePage.isUsernamePresent());
|
||||||
|
assertTrue(verifyProfilePage.isEmailPresent());
|
||||||
|
|
||||||
|
realm.setEditUsernameAllowed(false);
|
||||||
|
realm.setRegistrationEmailAsUsername(true);
|
||||||
|
testRealm().update(realm);
|
||||||
|
|
||||||
|
driver.navigate().refresh();
|
||||||
|
verifyProfilePage.assertCurrent();
|
||||||
|
assertFalse(verifyProfilePage.isUsernamePresent());
|
||||||
|
assertFalse(verifyProfilePage.isEmailPresent());
|
||||||
|
|
||||||
|
realm.setEditUsernameAllowed(true);
|
||||||
|
realm.setRegistrationEmailAsUsername(false);
|
||||||
|
testRealm().update(realm);
|
||||||
|
|
||||||
|
driver.navigate().refresh();
|
||||||
|
verifyProfilePage.assertCurrent();
|
||||||
|
assertTrue(verifyProfilePage.isUsernamePresent());
|
||||||
|
assertTrue(verifyProfilePage.isEmailPresent());
|
||||||
|
} finally {
|
||||||
|
realm.setEditUsernameAllowed(false);
|
||||||
|
realm.setRegistrationEmailAsUsername(false);
|
||||||
|
testRealm().update(realm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@EnableFeature(Profile.Feature.UPDATE_EMAIL)
|
||||||
|
public void testUsernameOnlyIfEmailAsUsernameIsDisabledWithUpdateEmailFeature() throws Exception {
|
||||||
|
reconnectAdminClient();
|
||||||
|
RealmRepresentation realm = testRealm().toRepresentation();
|
||||||
|
|
||||||
|
setUserProfileConfiguration(CONFIGURATION_FOR_USER_EDIT);
|
||||||
|
updateUser(user5Id, null, "ExistingLast", null);
|
||||||
|
|
||||||
|
try {
|
||||||
|
setUserProfileConfiguration(null);
|
||||||
|
|
||||||
|
realm.setEditUsernameAllowed(true);
|
||||||
|
realm.setRegistrationEmailAsUsername(true);
|
||||||
|
testRealm().update(realm);
|
||||||
|
|
||||||
|
loginPage.open();
|
||||||
|
loginPage.login("login-test5", "password");
|
||||||
|
|
||||||
|
verifyProfilePage.assertCurrent();
|
||||||
|
assertFalse(verifyProfilePage.isUsernamePresent());
|
||||||
|
assertFalse(verifyProfilePage.isEmailPresent());
|
||||||
|
|
||||||
|
realm.setEditUsernameAllowed(false);
|
||||||
|
realm.setRegistrationEmailAsUsername(true);
|
||||||
|
testRealm().update(realm);
|
||||||
|
|
||||||
|
driver.navigate().refresh();
|
||||||
|
verifyProfilePage.assertCurrent();
|
||||||
|
assertFalse(verifyProfilePage.isUsernamePresent());
|
||||||
|
assertFalse(verifyProfilePage.isEmailPresent());
|
||||||
|
|
||||||
|
realm.setEditUsernameAllowed(true);
|
||||||
|
realm.setRegistrationEmailAsUsername(false);
|
||||||
|
testRealm().update(realm);
|
||||||
|
|
||||||
|
driver.navigate().refresh();
|
||||||
|
verifyProfilePage.assertCurrent();
|
||||||
|
assertTrue(verifyProfilePage.isUsernamePresent());
|
||||||
|
assertFalse(verifyProfilePage.isEmailPresent());
|
||||||
|
} finally {
|
||||||
|
realm.setEditUsernameAllowed(false);
|
||||||
|
realm.setRegistrationEmailAsUsername(false);
|
||||||
|
testRealm().update(realm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOptionalAttribute() {
|
public void testOptionalAttribute() {
|
||||||
setUserProfileConfiguration("{\"attributes\": ["
|
setUserProfileConfiguration("{\"attributes\": ["
|
||||||
|
|
Loading…
Reference in a new issue