From 68888afbe839d14f0fa75e96415793733611e7f9 Mon Sep 17 00:00:00 2001 From: Laureat Grepi Date: Tue, 10 Jun 2025 13:40:07 +0200 Subject: [PATCH 1/2] Pass IDP config values to themes Signed-off-by: Laureat Grepi --- .../freemarker/model/IdentityProviderBean.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/services/src/main/java/org/keycloak/forms/login/freemarker/model/IdentityProviderBean.java b/services/src/main/java/org/keycloak/forms/login/freemarker/model/IdentityProviderBean.java index df1ed9d7b62c..b8ec41df9f90 100755 --- a/services/src/main/java/org/keycloak/forms/login/freemarker/model/IdentityProviderBean.java +++ b/services/src/main/java/org/keycloak/forms/login/freemarker/model/IdentityProviderBean.java @@ -38,6 +38,7 @@ import java.net.URI; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Properties; @@ -53,6 +54,7 @@ public class IdentityProviderBean { public static OrderedModel.OrderedModelComparator IDP_COMPARATOR_INSTANCE = new OrderedModel.OrderedModelComparator<>(); private static final String ICON_THEME_PREFIX = "kcLogoIdP-"; + private static final String IDP_THEME_CONFIG_PREFIX = "theme_"; protected AuthenticationFlowContext context; protected List providers; @@ -108,9 +110,12 @@ public AuthenticationFlowContext getFlowContext() { protected IdentityProvider createIdentityProvider(RealmModel realm, URI baseURI, IdentityProviderModel identityProvider) { String loginUrl = Urls.identityProviderAuthnRequest(baseURI, identityProvider.getAlias(), realm.getName()).toString(); String displayName = KeycloakModelUtils.getIdentityProviderDisplayName(session, identityProvider); + Map themeConfig = identityProvider.getConfig().entrySet().stream() + .filter(entry -> entry.getKey().startsWith(IDP_THEME_CONFIG_PREFIX)) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); return new IdentityProvider(identityProvider.getAlias(), displayName, identityProvider.getProviderId(), loginUrl, - identityProvider.getConfig().get("guiOrder"), getLoginIconClasses(identityProvider)); + identityProvider.getConfig().get("guiOrder"), getLoginIconClasses(identityProvider), themeConfig); } // Get icon classes defined in properties of current theme with key 'kcLogoIdP-{alias}' @@ -253,18 +258,20 @@ public static class IdentityProvider implements OrderedModel { private final String guiOrder; private final String displayName; private final String iconClasses; + private final Map themeConfig; public IdentityProvider(String alias, String displayName, String providerId, String loginUrl, String guiOrder) { - this(alias, displayName, providerId, loginUrl, guiOrder, ""); + this(alias, displayName, providerId, loginUrl, guiOrder, "", null); } - public IdentityProvider(String alias, String displayName, String providerId, String loginUrl, String guiOrder, String iconClasses) { + public IdentityProvider(String alias, String displayName, String providerId, String loginUrl, String guiOrder, String iconClasses, Map themeConfig) { this.alias = alias; this.displayName = displayName; this.providerId = providerId; this.loginUrl = loginUrl; this.guiOrder = guiOrder; this.iconClasses = iconClasses; + this.themeConfig = themeConfig; } public String getAlias() { @@ -291,6 +298,10 @@ public String getDisplayName() { public String getIconClasses() { return iconClasses; } + + public Map getThemeConfig() { + return themeConfig; + } } From 825e4f57672e70de851ca66e59622c3b914d2799 Mon Sep 17 00:00:00 2001 From: Laureat Grepi Date: Tue, 10 Jun 2025 14:19:54 +0200 Subject: [PATCH 2/2] change prefix Signed-off-by: Laureat Grepi --- .../forms/login/freemarker/model/IdentityProviderBean.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/src/main/java/org/keycloak/forms/login/freemarker/model/IdentityProviderBean.java b/services/src/main/java/org/keycloak/forms/login/freemarker/model/IdentityProviderBean.java index b8ec41df9f90..b96a8ed04b03 100755 --- a/services/src/main/java/org/keycloak/forms/login/freemarker/model/IdentityProviderBean.java +++ b/services/src/main/java/org/keycloak/forms/login/freemarker/model/IdentityProviderBean.java @@ -54,7 +54,7 @@ public class IdentityProviderBean { public static OrderedModel.OrderedModelComparator IDP_COMPARATOR_INSTANCE = new OrderedModel.OrderedModelComparator<>(); private static final String ICON_THEME_PREFIX = "kcLogoIdP-"; - private static final String IDP_THEME_CONFIG_PREFIX = "theme_"; + private static final String IDP_THEME_CONFIG_PREFIX = "kcTheme-"; protected AuthenticationFlowContext context; protected List providers;