only enable the when there are idp available

fixes: #33743
Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
This commit is contained in:
Erik Jan de Wit 2024-10-23 13:49:31 +02:00 committed by Pedro Igor
parent 20203746fb
commit f030ce1992
3 changed files with 23 additions and 2 deletions

View File

@ -157,7 +157,7 @@
"isRegistrationEmailAsUsername": ${realm.registrationEmailAsUsername?c},
"isEditUserNameAllowed": ${realm.editUsernameAllowed?c},
"isInternationalizationEnabled": ${realm.isInternationalizationEnabled()?c},
"isLinkedAccountsEnabled": ${realm.identityFederationEnabled?c},
"isLinkedAccountsEnabled": ${isLinkedAccountsEnabled?c},
"isMyResourcesEnabled": ${(realm.userManagedAccessAllowed && isAuthorizationEnabled)?c},
"isViewOrganizationsEnabled": ${isViewOrganizationsEnabled?c},
"deleteAccountAllowed": ${deleteAccountAllowed?c},

View File

@ -134,7 +134,7 @@
"isRegistrationEmailAsUsername": ${realm.registrationEmailAsUsername?c},
"isEditUserNameAllowed": ${realm.editUsernameAllowed?c},
"isInternationalizationEnabled": ${realm.isInternationalizationEnabled()?c},
"isLinkedAccountsEnabled": ${realm.identityFederationEnabled?c},
"isLinkedAccountsEnabled": ${isLinkedAccountsEnabled?c},
"isMyResourcesEnabled": ${(realm.userManagedAccessAllowed && isAuthorizationEnabled)?c},
"isViewOrganizationsEnabled": ${isViewOrganizationsEnabled?c},
"deleteAccountAllowed": ${deleteAccountAllowed?c},

View File

@ -14,6 +14,9 @@ import org.keycloak.authentication.requiredactions.DeleteAccount;
import org.keycloak.common.Profile;
import org.keycloak.common.Version;
import org.keycloak.common.util.Environment;
import org.keycloak.models.FederatedIdentityModel;
import org.keycloak.models.IdentityProviderModel;
import org.keycloak.models.IdentityProviderStorageProvider;
import org.keycloak.protocol.oidc.OIDCLoginProtocol;
import org.keycloak.protocol.oidc.utils.PkceUtils;
import org.keycloak.utils.SecureContextResolver;
@ -59,6 +62,7 @@ import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* Created by st on 29/03/17.
@ -184,6 +188,7 @@ public class AccountConsole implements AccountResourceProvider {
});
map.put("isAuthorizationEnabled", Profile.isFeatureEnabled(Profile.Feature.AUTHORIZATION));
map.put("isLinkedAccountsEnabled", isLinkedAccountsEnabled(user));
boolean deleteAccountAllowed = false;
boolean isViewGroupsEnabled = false;
@ -369,4 +374,20 @@ public class AccountConsole implements AccountResourceProvider {
return new String[]{referrer, referrerName, referrerUri};
}
private boolean isLinkedAccountsEnabled(UserModel user) {
if (user == null) {
return false;
}
IdentityProviderStorageProvider identityProviders = session.identityProviders();
Stream<IdentityProviderModel> realmBrokers = identityProviders.getAllStream(Map.of(
IdentityProviderModel.ENABLED, "true",
IdentityProviderModel.ORGANIZATION_ID, ""), 0, 1);
Stream<IdentityProviderModel> linkedBrokers = session.users().getFederatedIdentitiesStream(realm, user)
.map(FederatedIdentityModel::getIdentityProvider)
.map(identityProviders::getByAlias);
return Stream.concat(realmBrokers, linkedBrokers).findAny().isPresent();
}
}