From 3cc340cd71804d3fedf01cb178044f0c9afa9e46 Mon Sep 17 00:00:00 2001 From: Pierre Jeanjean Date: Fri, 4 Aug 2023 19:03:14 +0200 Subject: [PATCH 01/51] Discord roles to Keycloak groups mapping support --- pom.xml | 2 +- .../oidc/mappers/ClaimToGroupMapper.java | 264 ++++++++++++++++++ .../discord/DiscordIdentityProvider.java | 40 ++- .../DiscordIdentityProviderConfig.java | 35 +++ ...oak.broker.provider.IdentityProviderMapper | 1 + .../messages/admin-messages_en.properties | 4 +- .../realm-identity-provider-discord-ext.html | 9 +- 7 files changed, 349 insertions(+), 6 deletions(-) create mode 100644 src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java diff --git a/pom.xml b/pom.xml index 0bcc03a..2d6cdb1 100755 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ jar - 17.0.0 + 20.0.0 diff --git a/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java b/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java new file mode 100644 index 0000000..86a042a --- /dev/null +++ b/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java @@ -0,0 +1,264 @@ +package br.com.luizcarlosvianamelo.keycloak.broker.oidc.mappers; + +import org.jboss.logging.Logger; +import org.keycloak.broker.oidc.KeycloakOIDCIdentityProviderFactory; +import org.keycloak.broker.oidc.OIDCIdentityProviderFactory; +import org.keycloak.broker.oidc.mappers.AbstractClaimMapper; +import org.keycloak.broker.provider.BrokeredIdentityContext; +import org.keycloak.models.*; +import org.keycloak.provider.ProviderConfigProperty; + +import org.keycloak.social.discord.DiscordIdentityProviderFactory; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * Class with the implementation of the identity provider mapper that sync the + * user's groups received from an external IdP into the Keycloak groups. + * + * @author Luiz Carlos Viana Melo + */ +public class ClaimToGroupMapper extends AbstractClaimMapper { + + // logger ------------------------------------------------ + + private static final Logger logger = Logger.getLogger(ClaimToGroupMapper.class); + + // global properties ------------------------------------- + + private static final String PROVIDER_ID = "oidc-group-idp-mapper"; + + private static final String[] COMPATIBLE_PROVIDERS = { + KeycloakOIDCIdentityProviderFactory.PROVIDER_ID, + OIDCIdentityProviderFactory.PROVIDER_ID, + DiscordIdentityProviderFactory.PROVIDER_ID + }; + + private static final List CONFIG_PROPERTIES = new ArrayList<>(); + + private static final String CONTAINS_TEXT = "contains_text"; + + private static final String CREATE_GROUPS = "create_groups"; + + static { + ProviderConfigProperty property; + + property = new ProviderConfigProperty(); + property.setName(CLAIM); + property.setLabel("Claim"); + property.setHelpText("Name of claim to search for in token. This claim must be a string array with " + + "the names of the groups which the user is member. You can reference nested claims using a " + + "'.', i.e. 'address.locality'. To use dot (.) literally, escape it with backslash (\\.)"); + + property.setType(ProviderConfigProperty.STRING_TYPE); + CONFIG_PROPERTIES.add(property); + + property = new ProviderConfigProperty(); + property.setName(CONTAINS_TEXT); + property.setLabel("Contains text"); + property.setHelpText("Only sync groups that contains this text in its name. If empty, sync all groups."); + + property.setType(ProviderConfigProperty.STRING_TYPE); + CONFIG_PROPERTIES.add(property); + + property = new ProviderConfigProperty(); + property.setName(CREATE_GROUPS); + property.setLabel("Create groups if not exists"); + property.setHelpText("Indicates if missing groups must be created in the realms. Otherwise, they will " + + "be ignored."); + + property.setType(ProviderConfigProperty.BOOLEAN_TYPE); + CONFIG_PROPERTIES.add(property); + } + + // properties -------------------------------------------- + + @Override + public String getId() { + return PROVIDER_ID; + } + + @Override + public String[] getCompatibleProviders() { + return COMPATIBLE_PROVIDERS; + } + + @Override + public String getDisplayCategory() { + return "Group Importer"; + } + + @Override + public String getDisplayType() { + return "Claim to Group Mapper"; + } + + @Override + public String getHelpText() { + return "If a claim exists, sync the IdP user's groups with realm groups"; + } + + @Override + public List getConfigProperties() { + return CONFIG_PROPERTIES; + } + + // actions ----------------------------------------------- + + + @Override + public void importNewUser(KeycloakSession session, RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) { + super.importNewUser(session, realm, user, mapperModel, context); + + this.syncGroups(realm, user, mapperModel, context); + } + + @Override + public void updateBrokeredUser(KeycloakSession session, RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) { + + this.syncGroups(realm, user, mapperModel, context); + } + + private void syncGroups(RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) { + + // check configurations + String groupClaimName = mapperModel.getConfig().get(CLAIM); + String containsText = mapperModel.getConfig().get(CONTAINS_TEXT); + boolean createGroups = Boolean.parseBoolean(mapperModel.getConfig().get(CREATE_GROUPS)); + + // do nothing if no claim was adjusted + if (isEmpty(groupClaimName)) + return; + + // get new groups + Object newGroupsObj = getClaimValue(context, groupClaimName); + // don't modify groups membership if the claim was not found + if (newGroupsObj == null) { + logger.debugf("Realm [%s], IdP [%s]: no group claim (claim name: [%s]) for user [%s], ignoring...", + realm.getName(), + mapperModel.getIdentityProviderAlias(), + groupClaimName, + user.getUsername()); + return; + } + + logger.debugf("Realm [%s], IdP [%s]: starting mapping groups for user [%s]", + realm.getName(), + mapperModel.getIdentityProviderAlias(), + user.getUsername()); + + // convert to string list if not list + if (!List.class.isAssignableFrom(newGroupsObj.getClass())) { + List newList = new ArrayList<>(); + newList.add(newGroupsObj.toString()); + newGroupsObj = newList; + } + + // get user current groups + Set currentGroups = user.getGroupsStream() + .filter(g -> isEmpty(containsText) || g.getName().contains(containsText)) + .collect(Collectors.toSet()); + + logger.debugf("Realm [%s], IdP [%s]: current groups for user [%s]: %s", + realm.getName(), + mapperModel.getIdentityProviderAlias(), + user.getUsername(), + currentGroups + .stream() + .map(GroupModel::getName) + .collect(Collectors.joining(",")) + ); + + // filter the groups by its name + @SuppressWarnings("unchecked") + Set newGroupsNames = ((List) newGroupsObj) + .stream() + .filter(t -> isEmpty(containsText) || t.contains(containsText)) + .collect(Collectors.toSet()); + + // get new groups + Set newGroups = getNewGroups(realm, newGroupsNames, createGroups); + + logger.debugf("Realm [%s], IdP [%s]: new groups for user [%s]: %s", + realm.getName(), + mapperModel.getIdentityProviderAlias(), + user.getUsername(), + newGroups + .stream() + .map(GroupModel::getName) + .collect(Collectors.joining(",")) + ); + + // get the groups from which the user will be removed + Set removeGroups = getGroupsToBeRemoved(currentGroups, newGroups); + for (GroupModel group : removeGroups) + user.leaveGroup(group); + + // get the groups where the user will be added + Set addGroups = getGroupsToBeAdded(currentGroups, newGroups); + for (GroupModel group : addGroups) + user.joinGroup(group); + + logger.debugf("Realm [%s], IdP [%s]: finishing mapping groups for user [%s]", + realm.getName(), + mapperModel.getIdentityProviderAlias(), + user.getUsername()); + } + + private Set getNewGroups(RealmModel realm, Set newGroupsNames, boolean createGroups) { + + Set groups = new HashSet<>(); + + for (String groupName : newGroupsNames) { + GroupModel group = getGroupByName(realm, groupName); + + // create group if not found + if (group == null && createGroups) { + logger.debugf("Realm [%s]: creating group [%s]", + realm.getName(), + groupName); + + group = realm.createGroup(groupName); + } + + if (group != null) + groups.add(group); + } + + return groups; + } + + private static GroupModel getGroupByName(RealmModel realm, String name) { + + Optional group = realm.getGroupsStream() + .filter(g -> g.getName().equals(name)) + .findFirst(); + + return group.orElse(null); + } + + private static Set getGroupsToBeRemoved(Set currentGroups, Set newGroups) { + // perform a set difference + Set resultSet = new HashSet<>(currentGroups); + + // (Current - New) will result in a set with the groups from which the user will be removed + resultSet.removeAll(newGroups); + + return resultSet; + } + + private static Set getGroupsToBeAdded(Set currentGroups, Set newGroups) { + // perform a set difference + Set resultSet = new HashSet<>(newGroups); + + // (New - Current) will result in a set with the groups where the user will be added + resultSet.removeAll(currentGroups); + + return resultSet; + } + + private static boolean isEmpty(String str) { + return str == null || str.length() == 0; + } +} diff --git a/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java b/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java index 10f183e..3b3ba2b 100755 --- a/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java +++ b/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java @@ -18,6 +18,9 @@ package org.keycloak.social.discord; import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; import org.jboss.logging.Logger; import org.keycloak.broker.oidc.AbstractOAuth2IdentityProvider; import org.keycloak.broker.oidc.mappers.AbstractJsonUserAttributeMapper; @@ -31,6 +34,9 @@ import org.keycloak.services.ErrorPageException; import org.keycloak.services.messages.Messages; import javax.ws.rs.core.Response; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; import java.util.Set; /** @@ -45,8 +51,10 @@ public class DiscordIdentityProvider extends AbstractOAuth2IdentityProvider> mappedRoles = getConfig().getMappedRolesAsMap(); + for (String guild : mappedRoles.keySet()) { + JsonNode guildMember = null; + try { + guildMember = SimpleHttp.doGet(String.format(GUILD_MEMBER_URL, guild), session).header("Authorization", "Bearer " + accessToken).asJson(); + for (JsonNode role : guildMember.get("roles")) { + String roleString = role.textValue(); + if (mappedRoles.get(guild).containsKey(roleString)) { + groups.add("discord-" + mappedRoles.get(guild).get(roleString)); + } + } + } catch (Exception e) { + throw new IdentityBrokerException("Could not obtain guild member data from discord.", e); + } + } + } + if (profile instanceof ObjectNode) { + ((ObjectNode) profile).put("discord-groups", groups); + } + return extractIdentityFromProfile(null, profile); } @@ -115,10 +146,13 @@ public class DiscordIdentityProvider extends AbstractOAuth2IdentityProvider> getMappedRolesAsMap() { + if (hasMappedRoles()) { + String mappedRoles = getMappedRoles(); + Map> parsedRoles = new HashMap<>(); + for (String rawRole : mappedRoles.split(",")) { + rawRole = rawRole.trim(); + String fragments[] = rawRole.split(":"); + if (fragments.length != 3) { + continue; + } + if (!parsedRoles.containsKey(fragments[0])) { + parsedRoles.put(fragments[0], new HashMap<>()); + } + parsedRoles.get(fragments[0]).put(fragments[1], fragments[2]); + } + return parsedRoles; + } + return Collections.emptyMap(); + } + public void setPrompt(String prompt) { getConfig().put("prompt", prompt); } diff --git a/src/main/resources/META-INF/services/org.keycloak.broker.provider.IdentityProviderMapper b/src/main/resources/META-INF/services/org.keycloak.broker.provider.IdentityProviderMapper index fd0a661..5ce2a4f 100644 --- a/src/main/resources/META-INF/services/org.keycloak.broker.provider.IdentityProviderMapper +++ b/src/main/resources/META-INF/services/org.keycloak.broker.provider.IdentityProviderMapper @@ -1 +1,2 @@ org.keycloak.social.discord.DiscordUserAttributeMapper +br.com.luizcarlosvianamelo.keycloak.broker.oidc.mappers.ClaimToGroupMapper diff --git a/src/main/resources/theme-resources/messages/admin-messages_en.properties b/src/main/resources/theme-resources/messages/admin-messages_en.properties index 8b39257..cff564f 100755 --- a/src/main/resources/theme-resources/messages/admin-messages_en.properties +++ b/src/main/resources/theme-resources/messages/admin-messages_en.properties @@ -1,7 +1,9 @@ discord-client-id=Client Id discord-client-secret=Client Secret discord-allowed-guilds=Guild Id(s) to allow federation +discord-mapped-roles=Discord Roles mapping discord.client-id.tooltip=Client Id for the application you created in your discord developer portal. discord.client-secret.tooltip=Client Secret for the application that you created in your discord developer portal. discord.allowed-guilds.tooltip=If you want to allow federation for specific guild, enter the guild id. Please use a comma as a separator for multiple guilds. -discord.default-scopes.tooltip=The scopes to be sent when asking for authorization. See discord OAuth2 documentation for possible values. If you do not specify anything, scope defaults to 'identify email' In addition, plus 'guilds' if you enter guild id(s) to allow federation. \ No newline at end of file +discord.mapped-roles.tooltip=Map Discord roles to Keycloak groups. The expected format is '::'. Use a comma as a separator for multiple mappings. +discord.default-scopes.tooltip=The scopes to be sent when asking for authorization. See discord OAuth2 documentation for possible values. If you do not specify anything, scope defaults to 'identify email' In addition, plus 'guilds' if you enter guild id(s) to allow federation. diff --git a/src/main/resources/theme-resources/resources/partials/realm-identity-provider-discord-ext.html b/src/main/resources/theme-resources/resources/partials/realm-identity-provider-discord-ext.html index 320fa2c..48224c1 100755 --- a/src/main/resources/theme-resources/resources/partials/realm-identity-provider-discord-ext.html +++ b/src/main/resources/theme-resources/resources/partials/realm-identity-provider-discord-ext.html @@ -4,4 +4,11 @@ {{:: 'discord.allowed-guilds.tooltip' | translate}} - \ No newline at end of file + +
+ +
+ +
+ {{:: 'discord.mapped-roles.tooltip' | translate}} +
From 80ea83acfb1f9d5554bd39a5a2150d62cae19f90 Mon Sep 17 00:00:00 2001 From: Pierre Jeanjean Date: Mon, 7 Aug 2023 14:34:18 +0200 Subject: [PATCH 02/51] Force group claim check from OIDC context --- .../keycloak/broker/oidc/mappers/ClaimToGroupMapper.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java b/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java index 86a042a..dad983d 100644 --- a/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java +++ b/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java @@ -1,9 +1,12 @@ package br.com.luizcarlosvianamelo.keycloak.broker.oidc.mappers; import org.jboss.logging.Logger; +import com.fasterxml.jackson.databind.JsonNode; import org.keycloak.broker.oidc.KeycloakOIDCIdentityProviderFactory; import org.keycloak.broker.oidc.OIDCIdentityProviderFactory; +import org.keycloak.broker.oidc.OIDCIdentityProvider; import org.keycloak.broker.oidc.mappers.AbstractClaimMapper; +import org.keycloak.broker.oidc.mappers.AbstractJsonUserAttributeMapper; import org.keycloak.broker.provider.BrokeredIdentityContext; import org.keycloak.models.*; import org.keycloak.provider.ProviderConfigProperty; @@ -120,6 +123,11 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { this.syncGroups(realm, user, mapperModel, context); } + public static Object getClaimValue(BrokeredIdentityContext context, String claim) { + JsonNode profileJsonNode = (JsonNode) context.getContextData().get(OIDCIdentityProvider.USER_INFO); + return AbstractJsonUserAttributeMapper.getJsonValue(profileJsonNode, claim); + } + private void syncGroups(RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) { // check configurations From f41b7b047a15dc5a4ac3346e6f721ec3eec3b6c7 Mon Sep 17 00:00:00 2001 From: Ike Johnson-Woods Date: Wed, 16 Aug 2023 15:36:29 +0800 Subject: [PATCH 03/51] Update to Keycloak 22.0.1 --- pom.xml | 10 +++---- .../discord/DiscordIdentityProvider.java | 2 +- .../DiscordIdentityProviderFactory.java | 27 +++++++++++++++++-- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 2d6cdb1..77fb68f 100755 --- a/pom.xml +++ b/pom.xml @@ -7,11 +7,11 @@ org.keycloak.extensions keycloak-discord - 0.4.2-SNAPSHOT + 0.5.1-SNAPSHOT jar - 20.0.0 + 22.0.1 @@ -46,10 +46,10 @@ org.apache.maven.plugins maven-compiler-plugin - 2.3.2 + 3.11.0 - 1.8 - 1.8 + 17 + 17 diff --git a/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java b/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java index 3b3ba2b..e97e35a 100755 --- a/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java +++ b/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java @@ -33,7 +33,7 @@ import org.keycloak.models.KeycloakSession; import org.keycloak.services.ErrorPageException; import org.keycloak.services.messages.Messages; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import java.util.HashMap; import java.util.HashSet; import java.util.Map; diff --git a/src/main/java/org/keycloak/social/discord/DiscordIdentityProviderFactory.java b/src/main/java/org/keycloak/social/discord/DiscordIdentityProviderFactory.java index 1e9cfd3..3e31a2b 100755 --- a/src/main/java/org/keycloak/social/discord/DiscordIdentityProviderFactory.java +++ b/src/main/java/org/keycloak/social/discord/DiscordIdentityProviderFactory.java @@ -1,3 +1,4 @@ + /* * Copyright 2018 Red Hat, Inc. and/or its affiliates * and other contributors as indicated by the @author tags. @@ -17,11 +18,14 @@ package org.keycloak.social.discord; -import org.keycloak.broker.oidc.OAuth2IdentityProviderConfig; import org.keycloak.broker.provider.AbstractIdentityProviderFactory; import org.keycloak.broker.social.SocialIdentityProviderFactory; import org.keycloak.models.IdentityProviderModel; import org.keycloak.models.KeycloakSession; +import org.keycloak.provider.ProviderConfigProperty; +import org.keycloak.provider.ProviderConfigurationBuilder; + +import java.util.List; /** * @author Hiroyuki Wada @@ -46,8 +50,27 @@ public class DiscordIdentityProviderFactory extends AbstractIdentityProviderFact return new DiscordIdentityProviderConfig(); } + @Override + public List getConfigProperties() { + return ProviderConfigurationBuilder.create() + .property() + .name("allowedGuilds") + .type(ProviderConfigProperty.STRING_TYPE) + .label("Guild Id(s) to allow federation") + .helpText("If you want to allow federation for specific guild, enter the guild id. Please use a comma as a separator for multiple guilds.") + .add() +// .create() + .property() + .name("mappedRoles") + .type(ProviderConfigProperty.STRING_TYPE) + .label("Discord Roles mapping") + .helpText("Map Discord roles to Keycloak groups. The expected format is '::'. Use a comma as a separator for multiple mappings.") + .add() + .build(); + } + @Override public String getId() { return PROVIDER_ID; } -} \ No newline at end of file +} From 18edbef9c3b032a2c129bbb0d4c9bf320f3ab744 Mon Sep 17 00:00:00 2001 From: Ike Johnson-Woods Date: Wed, 16 Aug 2023 15:39:18 +0800 Subject: [PATCH 04/51] Remove unused theme partials --- .../messages/admin-messages_en.properties | 9 -- .../realm-identity-provider-discord-ext.html | 14 -- .../realm-identity-provider-discord.html | 144 ------------------ 3 files changed, 167 deletions(-) delete mode 100755 src/main/resources/theme-resources/messages/admin-messages_en.properties delete mode 100755 src/main/resources/theme-resources/resources/partials/realm-identity-provider-discord-ext.html delete mode 100755 src/main/resources/theme-resources/resources/partials/realm-identity-provider-discord.html diff --git a/src/main/resources/theme-resources/messages/admin-messages_en.properties b/src/main/resources/theme-resources/messages/admin-messages_en.properties deleted file mode 100755 index cff564f..0000000 --- a/src/main/resources/theme-resources/messages/admin-messages_en.properties +++ /dev/null @@ -1,9 +0,0 @@ -discord-client-id=Client Id -discord-client-secret=Client Secret -discord-allowed-guilds=Guild Id(s) to allow federation -discord-mapped-roles=Discord Roles mapping -discord.client-id.tooltip=Client Id for the application you created in your discord developer portal. -discord.client-secret.tooltip=Client Secret for the application that you created in your discord developer portal. -discord.allowed-guilds.tooltip=If you want to allow federation for specific guild, enter the guild id. Please use a comma as a separator for multiple guilds. -discord.mapped-roles.tooltip=Map Discord roles to Keycloak groups. The expected format is '::'. Use a comma as a separator for multiple mappings. -discord.default-scopes.tooltip=The scopes to be sent when asking for authorization. See discord OAuth2 documentation for possible values. If you do not specify anything, scope defaults to 'identify email' In addition, plus 'guilds' if you enter guild id(s) to allow federation. diff --git a/src/main/resources/theme-resources/resources/partials/realm-identity-provider-discord-ext.html b/src/main/resources/theme-resources/resources/partials/realm-identity-provider-discord-ext.html deleted file mode 100755 index 48224c1..0000000 --- a/src/main/resources/theme-resources/resources/partials/realm-identity-provider-discord-ext.html +++ /dev/null @@ -1,14 +0,0 @@ -
- -
- -
- {{:: 'discord.allowed-guilds.tooltip' | translate}} -
-
- -
- -
- {{:: 'discord.mapped-roles.tooltip' | translate}} -
diff --git a/src/main/resources/theme-resources/resources/partials/realm-identity-provider-discord.html b/src/main/resources/theme-resources/resources/partials/realm-identity-provider-discord.html deleted file mode 100755 index 75b4a7c..0000000 --- a/src/main/resources/theme-resources/resources/partials/realm-identity-provider-discord.html +++ /dev/null @@ -1,144 +0,0 @@ -
- - - - -
-
-
- -
- -
- {{:: 'redirect-uri.tooltip' | translate}} -
-
-
-
- -
- -
- {{:: 'discord.client-id.tooltip' | translate}} -
-
- -
- -
- {{:: 'discord.client-secret.tooltip' | translate}} -
-
-
- -
- -
- {{:: 'discord.default-scopes.tooltip' | translate}} -
-
- -
- -
- {{:: 'identity-provider.store-tokens.tooltip' | translate}} -
-
- -
- -
- {{:: 'identity-provider.stored-tokens-readable.tooltip' | translate}} -
-
- -
- -
- {{:: 'identity-provider.enabled.tooltip' | translate}} -
-
- -
- -
- {{:: 'trust-email.tooltip' | translate}} -
-
- -
- -
- {{:: 'link-only.tooltip' | translate}} -
-
- -
- -
- {{:: 'hide-on-login-page.tooltip' | translate}} -
-
- -
- -
- {{:: 'gui-order.tooltip' | translate}} -
-
- -
-
- -
-
- {{:: 'first-broker-login-flow.tooltip' | translate}} -
-
- -
-
- -
-
- {{:: 'post-broker-login-flow.tooltip' | translate}} -
-
- -
-
- -
-
- {{:: 'prompt.tooltip' | translate}} -
- -
- -
-
- - -
-
-
-
- - From 4fcaf88bfddf438aa8317da75418c84efcf04c7c Mon Sep 17 00:00:00 2001 From: Ike Johnson-Woods Date: Wed, 16 Aug 2023 18:35:36 +0800 Subject: [PATCH 05/51] Upload files to artifact --- .github/workflows/maven.yml | 36 ++++++++++++++++++++++++++++++ .github/workflows/pull_request.yml | 24 -------------------- 2 files changed, 36 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/maven.yml delete mode 100644 .github/workflows/pull_request.yml diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml new file mode 100644 index 0000000..d7e1261 --- /dev/null +++ b/.github/workflows/maven.yml @@ -0,0 +1,36 @@ +name: Push & Pull Request CI + +on: + push: + pull_request: + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + cache: 'maven' + + - name: Build with Maven + run: mvn -B package + + - name: Locate built JARfile + id: jar + run: echo "jarfile=$(find build/libs/ -name "keycloak-discord-*.jar" -not -name "*slim*" -not -name "*source*")" >> $GITHUB_OUTPUT + + - name: Set Artifact name + id: jarname + run: echo "jarname=$(find build/libs/ -name "keycloak-discord-*.jar" -not -name "*slim*" -not -name "*source*" | sed 's:.*/::')" >> $GITHUB_OUTPUT + + - name: Upload artifact + uses: actions/upload-artifact@v3 + with: + name: ${{ steps.jarname.outputs.jarname }} + path: ${{ steps.jar.outputs.jarfile }} diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml deleted file mode 100644 index 11271fa..0000000 --- a/.github/workflows/pull_request.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Pull Request CI - -on: [pull_request] - -jobs: - build: - name: Build - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - name: Set up JDK 1.8 - uses: actions/setup-java@v1 - with: - java-version: 1.8 - - name: Cache for maven - uses: actions/cache@v1 - with: - path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - restore-keys: | - ${{ runner.os }}-maven- - - name: Build with Maven - run: mvn -B package - From de023486cc464bed1434c92933d4bc973e6b6059 Mon Sep 17 00:00:00 2001 From: Ike Johnson-Woods Date: Wed, 16 Aug 2023 18:39:45 +0800 Subject: [PATCH 06/51] Fix up CI --- .github/workflows/maven.yml | 6 ++--- .github/workflows/release.yml | 43 ----------------------------------- 2 files changed, 3 insertions(+), 46 deletions(-) delete mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index d7e1261..4b6cad3 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -1,4 +1,4 @@ -name: Push & Pull Request CI +name: Maven CI on: push: @@ -23,11 +23,11 @@ jobs: - name: Locate built JARfile id: jar - run: echo "jarfile=$(find build/libs/ -name "keycloak-discord-*.jar" -not -name "*slim*" -not -name "*source*")" >> $GITHUB_OUTPUT + run: echo "jarfile=$(find target/ -name "keycloak-discord-*.jar" -not -name "*slim*" -not -name "*source*")" >> $GITHUB_OUTPUT - name: Set Artifact name id: jarname - run: echo "jarname=$(find build/libs/ -name "keycloak-discord-*.jar" -not -name "*slim*" -not -name "*source*" | sed 's:.*/::')" >> $GITHUB_OUTPUT + run: echo "jarname=$(find target/ -name "keycloak-discord-*.jar" -not -name "*slim*" -not -name "*source*" | sed 's:.*/::')" >> $GITHUB_OUTPUT - name: Upload artifact uses: actions/upload-artifact@v3 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index b5d1edc..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: Release CI - -on: - push: - branches: - - master - -jobs: - build: - name: Build and release - runs-on: ubuntu-latest - if: "!contains(github.event.head_commit.message, '[ci skip]')" - steps: - - uses: actions/checkout@v1 - - name: Set up JDK 1.8 - uses: actions/setup-java@v1 - with: - java-version: 1.8 - - name: Setup node 10 - uses: actions/setup-node@v1 - with: - node-version: '10.x' - - name: Cache for maven - uses: actions/cache@v1 - with: - path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - restore-keys: | - ${{ runner.os }}-maven- - - name: Cache for npm - uses: actions/cache@v1 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('.github/workflows/release.yml') }} - restore-keys: | - ${{ runner.os }}-node- - - name: Setup semantic-release - run: npm install -g @conveyal/maven-semantic-release@v4.5.0 semantic-release@15 @semantic-release/exec@v3.3.8 - - name: Release - run: semantic-release --branch master --use-conveyal-workflow --skip-maven-deploy - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - From 15dc8ead1a74ddf7c815f001008b0d5ad4b58b72 Mon Sep 17 00:00:00 2001 From: Ryan Peper Date: Thu, 17 Aug 2023 23:25:49 +0800 Subject: [PATCH 07/51] Conditionally append discriminator if not 0 --- .../keycloak/social/discord/DiscordIdentityProvider.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java b/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java index e97e35a..64630b0 100755 --- a/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java +++ b/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java @@ -77,7 +77,14 @@ public class DiscordIdentityProvider extends AbstractOAuth2IdentityProvider Date: Mon, 21 Aug 2023 11:53:42 +0800 Subject: [PATCH 08/51] Don't throw error if user isn't in a guild --- .../org/keycloak/social/discord/DiscordIdentityProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java b/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java index 64630b0..0eb6662 100755 --- a/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java +++ b/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java @@ -124,7 +124,7 @@ public class DiscordIdentityProvider extends AbstractOAuth2IdentityProvider Date: Mon, 21 Aug 2023 12:46:23 +0800 Subject: [PATCH 09/51] Update README with role syncing info --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README.md b/README.md index e5df20b..b575663 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,21 @@ Note: You don't need to setup the theme in `master` realm from v0.3.0. 3. (Optional) Set Guild Id(s) to allow federation if you want. +### Syncing roles + +To sync roles from Discord -> Keycloak, do the following: + +1. Under the `discord` Identity Provider, fill out `Discord Roles mapping` value with the roles you want synced: + - The format is `Discord-Guild-ID:Discord-Role-ID:Group-Name`, like so: `613425648685547541:613426529623605268:discord-devs-moderators` + - You can specify multiple roles by separating them with commas: `613425648685547541:613426529623605268:discord-devs-moderators,613425648685547541:936746847437983786:discord-devs-modmail` +2. Set up a Mapper under the `discord` Identity Provider: + - Set Mapper Type to `Claim to Group Mapper` + - Set Claim to `discord-groups` + - Tick Create Groups if not exists + +If the above doesn't get role syncing working, fiddle around with the Sync mode override. (I have mine set to `Force`, so it re-imports info on every login) + + ## Source Build Clone this repository and run `mvn package`. From 8126dcbf9445e983dad377d75d0519f6ec4798b1 Mon Sep 17 00:00:00 2001 From: Ike Johnson-Woods Date: Wed, 23 Aug 2023 13:55:57 +0800 Subject: [PATCH 10/51] Add option to toggle `prompt=none` --- .../keycloak/social/discord/DiscordIdentityProvider.java | 3 +++ .../social/discord/DiscordIdentityProviderConfig.java | 8 ++++++++ .../social/discord/DiscordIdentityProviderFactory.java | 7 ++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java b/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java index 0eb6662..b5112ce 100755 --- a/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java +++ b/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java @@ -61,6 +61,9 @@ public class DiscordIdentityProvider extends AbstractOAuth2IdentityProvider::'. Use a comma as a separator for multiple mappings.") .add() + .property() + .name("promptNone") + .type("boolean") + .label("Skip Discord prompt") + .helpText("Should Discord skip the prompt for users that have already granted access to our application?") + .add() .build(); } From d7a58a8b590365629b3467b44cde10ca9e32515c Mon Sep 17 00:00:00 2001 From: Ike Johnson-Woods Date: Tue, 12 Sep 2023 19:38:46 +0800 Subject: [PATCH 11/51] Remove `discord-` prefix from Keycloak Groups --- .../org/keycloak/social/discord/DiscordIdentityProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java b/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java index b5112ce..653f721 100755 --- a/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java +++ b/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java @@ -123,7 +123,7 @@ public class DiscordIdentityProvider extends AbstractOAuth2IdentityProvider Date: Thu, 7 Dec 2023 14:26:01 +0800 Subject: [PATCH 12/51] Bump Keycloak version to 23.0.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 77fb68f..d018835 100755 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ jar - 22.0.1 + 23.0.0 From ffc8642dc569f49f84af8074216035beae2ca300 Mon Sep 17 00:00:00 2001 From: Ike Johnson-Woods Date: Thu, 7 Dec 2023 14:28:37 +0800 Subject: [PATCH 13/51] v0.5.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d018835..04e7895 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.5.1-SNAPSHOT + 0.5.2 jar From 89c628c8a919e9d8410fc9f8d6636e08361468bc Mon Sep 17 00:00:00 2001 From: Evann Regnault Date: Mon, 13 May 2024 19:38:58 +0200 Subject: [PATCH 14/51] [Feature] Add possibility to add a role just by the mere presence in a guild --- README.md | 3 ++- .../social/discord/DiscordIdentityProvider.java | 10 ++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b575663..c5c7824 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,8 @@ To sync roles from Discord -> Keycloak, do the following: 1. Under the `discord` Identity Provider, fill out `Discord Roles mapping` value with the roles you want synced: - The format is `Discord-Guild-ID:Discord-Role-ID:Group-Name`, like so: `613425648685547541:613426529623605268:discord-devs-moderators` - You can specify multiple roles by separating them with commas: `613425648685547541:613426529623605268:discord-devs-moderators,613425648685547541:936746847437983786:discord-devs-modmail` -2. Set up a Mapper under the `discord` Identity Provider: + - If you want to add a role just because the user is on the server, you can use the everyone role ID, which is the same as the guild ID : `613425648685547541:613425648685547541:everyone` +3. Set up a Mapper under the `discord` Identity Provider: - Set Mapper Type to `Claim to Group Mapper` - Set Claim to `discord-groups` - Tick Create Groups if not exists diff --git a/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java b/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java index 653f721..0414653 100755 --- a/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java +++ b/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java @@ -35,7 +35,6 @@ import org.keycloak.services.messages.Messages; import jakarta.ws.rs.core.Response; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -100,7 +99,7 @@ public class DiscordIdentityProvider extends AbstractOAuth2IdentityProvider> mappedRoles = getConfig().getMappedRolesAsMap(); for (String guild : mappedRoles.keySet()) { - JsonNode guildMember = null; + JsonNode guildMember; try { guildMember = SimpleHttp.doGet(String.format(GUILD_MEMBER_URL, guild), session).header("Authorization", "Bearer " + accessToken).asJson(); + if (guildMember.has("joined_at") && mappedRoles.get(guild).containsKey(guild) ) { + groups.add(mappedRoles.get(guild).get(guild)); + } for (JsonNode role : guildMember.get("roles")) { String roleString = role.textValue(); if (mappedRoles.get(guild).containsKey(roleString)) { @@ -132,7 +134,7 @@ public class DiscordIdentityProvider extends AbstractOAuth2IdentityProvider Date: Fri, 12 Jul 2024 00:16:29 +0800 Subject: [PATCH 15/51] Update to Keycloak v25 --- pom.xml | 8 ++++---- .../keycloak/social/discord/DiscordIdentityProvider.java | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 04e7895..05b1ee7 100755 --- a/pom.xml +++ b/pom.xml @@ -7,11 +7,11 @@ org.keycloak.extensions keycloak-discord - 0.5.2 + 0.5.3 jar - 23.0.0 + 25.0.0 @@ -48,8 +48,8 @@ maven-compiler-plugin 3.11.0 - 17 - 17 + 21 + 21 diff --git a/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java b/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java index 0414653..cc2423e 100755 --- a/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java +++ b/src/main/java/org/keycloak/social/discord/DiscordIdentityProvider.java @@ -77,18 +77,18 @@ public class DiscordIdentityProvider extends AbstractOAuth2IdentityProvider Date: Fri, 12 Jul 2024 00:19:22 +0800 Subject: [PATCH 16/51] Update Actions workflow - Uses v4 of checkout, setup-java,and upload-artifact - Sets up Java 21 --- .github/workflows/maven.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 4b6cad3..b45aef9 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -9,13 +9,13 @@ jobs: name: Build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - name: Set up JDK 17 - uses: actions/setup-java@v3 + - name: Set up JDK 21 + uses: actions/setup-java@v4 with: distribution: 'temurin' - java-version: '17' + java-version: '21' cache: 'maven' - name: Build with Maven @@ -30,7 +30,7 @@ jobs: run: echo "jarname=$(find target/ -name "keycloak-discord-*.jar" -not -name "*slim*" -not -name "*source*" | sed 's:.*/::')" >> $GITHUB_OUTPUT - name: Upload artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ steps.jarname.outputs.jarname }} path: ${{ steps.jar.outputs.jarfile }} From 434430b85ad06e2e6eac65f44e35b6e279a5c88e Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 3 Mar 2025 19:13:19 +0000 Subject: [PATCH 17/51] chore(release): 1.0.0 [skip ci] # 1.0.0 (2025-03-03) ### Bug Fixes * eliminate the possibility of NullPointerException ([#56](https://github.com/maaroen/keycloak-discord/issues/56)) ([e2b5991](https://github.com/maaroen/keycloak-discord/commit/e2b5991c7ef33ee3ac6483ca00e3e854bb935371)) * ignore discriminator if the value is "0" ([4c68b69](https://github.com/maaroen/keycloak-discord/commit/4c68b69b0bf0d6421589e03e4baf8bbbe5138caa)) * update authorization URL ([#28](https://github.com/maaroen/keycloak-discord/issues/28)) ([a31c116](https://github.com/maaroen/keycloak-discord/commit/a31c116092183318fdbe09fa059a1f63bb0d794c)) * update discord api endpoint urls ([0aa7f14](https://github.com/maaroen/keycloak-discord/commit/0aa7f14edf48a5f9e8a75a68f530cfb1945935e9)) * use DiscordIdentityProvider class in instantiating the Logger ([93003c2](https://github.com/maaroen/keycloak-discord/commit/93003c28bc377577b5d4b218e3d89d984a3f1ae6)) ### Features * implement IdentityProviderFactory#createConfig() which is ([9f359f5](https://github.com/maaroen/keycloak-discord/commit/9f359f5f61848131f1b19994a2c75d6955bb9b27)) * update to keycloak 17.0.0 (based on Quarkus) ([f24ed18](https://github.com/maaroen/keycloak-discord/commit/f24ed1801141da1fbb58d0a58fafdb5aeb0bfa6e)) * update to keycloak 22.0.1 (support new admin console) ([#37](https://github.com/maaroen/keycloak-discord/issues/37)) ([2c8da2d](https://github.com/maaroen/keycloak-discord/commit/2c8da2da4b48ea081644deb7fc11931aba55ba8f)) * update to keycloak 26.0.5 ([05a3df4](https://github.com/maaroen/keycloak-discord/commit/05a3df43f21289762f72e3ac6780fd6b543d8c07)) * updated provider for Keycloak 25.x ([#49](https://github.com/maaroen/keycloak-discord/issues/49)) ([c10480b](https://github.com/maaroen/keycloak-discord/commit/c10480b79864a85817d20d48f949475020322090)) * use "Theme Resources" for the custom template ([7cb885c](https://github.com/maaroen/keycloak-discord/commit/7cb885cea7ae317ae071a2ac72956faa67d4fdf9)) --- CHANGELOG.md | 21 +++++++++++++++++++++ pom.xml | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d11611..8a12dd6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,24 @@ +# 1.0.0 (2025-03-03) + + +### Bug Fixes + +* eliminate the possibility of NullPointerException ([#56](https://github.com/maaroen/keycloak-discord/issues/56)) ([e2b5991](https://github.com/maaroen/keycloak-discord/commit/e2b5991c7ef33ee3ac6483ca00e3e854bb935371)) +* ignore discriminator if the value is "0" ([4c68b69](https://github.com/maaroen/keycloak-discord/commit/4c68b69b0bf0d6421589e03e4baf8bbbe5138caa)) +* update authorization URL ([#28](https://github.com/maaroen/keycloak-discord/issues/28)) ([a31c116](https://github.com/maaroen/keycloak-discord/commit/a31c116092183318fdbe09fa059a1f63bb0d794c)) +* update discord api endpoint urls ([0aa7f14](https://github.com/maaroen/keycloak-discord/commit/0aa7f14edf48a5f9e8a75a68f530cfb1945935e9)) +* use DiscordIdentityProvider class in instantiating the Logger ([93003c2](https://github.com/maaroen/keycloak-discord/commit/93003c28bc377577b5d4b218e3d89d984a3f1ae6)) + + +### Features + +* implement IdentityProviderFactory#createConfig() which is ([9f359f5](https://github.com/maaroen/keycloak-discord/commit/9f359f5f61848131f1b19994a2c75d6955bb9b27)) +* update to keycloak 17.0.0 (based on Quarkus) ([f24ed18](https://github.com/maaroen/keycloak-discord/commit/f24ed1801141da1fbb58d0a58fafdb5aeb0bfa6e)) +* update to keycloak 22.0.1 (support new admin console) ([#37](https://github.com/maaroen/keycloak-discord/issues/37)) ([2c8da2d](https://github.com/maaroen/keycloak-discord/commit/2c8da2da4b48ea081644deb7fc11931aba55ba8f)) +* update to keycloak 26.0.5 ([05a3df4](https://github.com/maaroen/keycloak-discord/commit/05a3df43f21289762f72e3ac6780fd6b543d8c07)) +* updated provider for Keycloak 25.x ([#49](https://github.com/maaroen/keycloak-discord/issues/49)) ([c10480b](https://github.com/maaroen/keycloak-discord/commit/c10480b79864a85817d20d48f949475020322090)) +* use "Theme Resources" for the custom template ([7cb885c](https://github.com/maaroen/keycloak-discord/commit/7cb885cea7ae317ae071a2ac72956faa67d4fdf9)) + ## [0.6.1](https://github.com/wadahiro/keycloak-discord/compare/v0.6.0...v0.6.1) (2024-11-02) diff --git a/pom.xml b/pom.xml index 6aed171..a6c1f72 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.6.2-SNAPSHOT + 1.0.0 jar From 1c42f840749af3fa527adc9dea72b72e40dba283 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 3 Mar 2025 19:13:30 +0000 Subject: [PATCH 18/51] chore: setting next snapshot version [skip ci] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a6c1f72..cc2ad51 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 1.0.0 + 1.0.1-SNAPSHOT jar From 9e670d6d9f2f21a4c5b3882306ab9e757ac66882 Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Mon, 3 Mar 2025 20:32:15 +0100 Subject: [PATCH 19/51] Update pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cc2ad51..1a13786 100755 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ jar - 26.0.5 + 26.1.3 From adc6cbbc0194e48fc2a5dd560204a59a467452ee Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Sat, 8 Mar 2025 16:12:42 +0100 Subject: [PATCH 20/51] Added clear roles if none options --- .../oidc/mappers/ClaimToGroupMapper.java | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java b/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java index dad983d..e755363 100644 --- a/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java +++ b/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java @@ -43,6 +43,8 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { private static final String CONTAINS_TEXT = "contains_text"; private static final String CREATE_GROUPS = "create_groups"; + + private static final String CLEAR_ROLES_IF_NONE = "clearRolesIfNone"; static { ProviderConfigProperty property; @@ -73,6 +75,14 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { property.setType(ProviderConfigProperty.BOOLEAN_TYPE); CONFIG_PROPERTIES.add(property); + + property = new ProviderConfigProperty(); + property.setName(CLEAR_ROLES_IF_NONE); + property.setLabel("Clear discord roles if no roles found"); + property.setHelpText("Should Discord roles be cleared out if no roles can be retrieved for example when a user is no longer part of the discord server"); + + property.setType(ProviderConfigProperty.BOOLEAN_TYPE); + CONFIG_PROPERTIES.add(property); } // properties -------------------------------------------- @@ -123,9 +133,17 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { this.syncGroups(realm, user, mapperModel, context); } - public static Object getClaimValue(BrokeredIdentityContext context, String claim) { + public static List getClaimValue(BrokeredIdentityContext context, String claim) { JsonNode profileJsonNode = (JsonNode) context.getContextData().get(OIDCIdentityProvider.USER_INFO); - return AbstractJsonUserAttributeMapper.getJsonValue(profileJsonNode, claim); + var roles = AbstractJsonUserAttributeMapper.getJsonValue(profileJsonNode, claim); + if(roles == null) + return new ArrayList<>(); + // convert to string list if not list + List newList = new ArrayList<>(); + if (!List.class.isAssignableFrom(roles.getClass())) { + newList.add(roles.toString()); + } + return newList; } private void syncGroups(RealmModel realm, UserModel user, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) { @@ -140,9 +158,10 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { return; // get new groups - Object newGroupsObj = getClaimValue(context, groupClaimName); + List newGroupsList = getClaimValue(context, groupClaimName); + boolean clearRolesIfNone = Boolean.parseBoolean(mapperModel.getConfig().get(CLEAR_ROLES_IF_NONE)); // don't modify groups membership if the claim was not found - if (newGroupsObj == null) { + if (newGroupsList.isEmpty() && !clearRolesIfNone) { logger.debugf("Realm [%s], IdP [%s]: no group claim (claim name: [%s]) for user [%s], ignoring...", realm.getName(), mapperModel.getIdentityProviderAlias(), @@ -156,12 +175,6 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { mapperModel.getIdentityProviderAlias(), user.getUsername()); - // convert to string list if not list - if (!List.class.isAssignableFrom(newGroupsObj.getClass())) { - List newList = new ArrayList<>(); - newList.add(newGroupsObj.toString()); - newGroupsObj = newList; - } // get user current groups Set currentGroups = user.getGroupsStream() @@ -180,7 +193,7 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { // filter the groups by its name @SuppressWarnings("unchecked") - Set newGroupsNames = ((List) newGroupsObj) + Set newGroupsNames = newGroupsList .stream() .filter(t -> isEmpty(containsText) || t.contains(containsText)) .collect(Collectors.toSet()); @@ -267,6 +280,6 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { } private static boolean isEmpty(String str) { - return str == null || str.length() == 0; + return str == null || str.isEmpty(); } } From efb0dbc7379982fad594347de822326790393196 Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Sat, 8 Mar 2025 16:51:23 +0100 Subject: [PATCH 21/51] Update ClaimToGroupMapper.java --- .../keycloak/broker/oidc/mappers/ClaimToGroupMapper.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java b/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java index e755363..b1f4b88 100644 --- a/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java +++ b/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java @@ -143,6 +143,9 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { if (!List.class.isAssignableFrom(roles.getClass())) { newList.add(roles.toString()); } + else { + newList = roles; + } return newList; } From 738b6b14c404470053e34df7169397d4aeb82235 Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Sat, 8 Mar 2025 16:53:59 +0100 Subject: [PATCH 22/51] Update ClaimToGroupMapper.java --- .../keycloak/broker/oidc/mappers/ClaimToGroupMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java b/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java index b1f4b88..0063dee 100644 --- a/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java +++ b/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java @@ -144,7 +144,7 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { newList.add(roles.toString()); } else { - newList = roles; + newList = (List)roles; } return newList; } From bc09205a83621af2d2db09b6c2cdc3e999c626ee Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Sat, 8 Mar 2025 19:22:53 +0100 Subject: [PATCH 23/51] Added some debug statements --- .../broker/oidc/mappers/ClaimToGroupMapper.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java b/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java index 0063dee..b2a0c79 100644 --- a/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java +++ b/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java @@ -136,14 +136,18 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { public static List getClaimValue(BrokeredIdentityContext context, String claim) { JsonNode profileJsonNode = (JsonNode) context.getContextData().get(OIDCIdentityProvider.USER_INFO); var roles = AbstractJsonUserAttributeMapper.getJsonValue(profileJsonNode, claim); - if(roles == null) + if(roles == null) { + logger.debugf("MAAROENTEST: Result was null"); return new ArrayList<>(); + } // convert to string list if not list List newList = new ArrayList<>(); if (!List.class.isAssignableFrom(roles.getClass())) { + logger.debugf("MAAROENTEST: Result was single item"); newList.add(roles.toString()); } else { + logger.debugf("MAAROENTEST: Result was list"); newList = (List)roles; } return newList; @@ -162,9 +166,11 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { // get new groups List newGroupsList = getClaimValue(context, groupClaimName); + logger.debugf("MAAROENTEST: Amount of newGroups: [%s]", newGroupsList.size()); boolean clearRolesIfNone = Boolean.parseBoolean(mapperModel.getConfig().get(CLEAR_ROLES_IF_NONE)); - // don't modify groups membership if the claim was not found - if (newGroupsList.isEmpty() && !clearRolesIfNone) { + // Clear roles if config option enabled + if (newGroupsList.isEmpty() && !clearRolesIfNone) { + logger.debugf("MAAROENTEST: Skipped import "); logger.debugf("Realm [%s], IdP [%s]: no group claim (claim name: [%s]) for user [%s], ignoring...", realm.getName(), mapperModel.getIdentityProviderAlias(), @@ -283,6 +289,6 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { } private static boolean isEmpty(String str) { - return str == null || str.isEmpty(); + return str == null || str.length() == 0;; } } From 4423eda3bc92e3f49ac6b6c64ee76007e46b1cf4 Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Sat, 8 Mar 2025 19:24:19 +0100 Subject: [PATCH 24/51] Removed extra semicolon --- .../keycloak/broker/oidc/mappers/ClaimToGroupMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java b/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java index b2a0c79..18f5384 100644 --- a/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java +++ b/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java @@ -289,6 +289,6 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { } private static boolean isEmpty(String str) { - return str == null || str.length() == 0;; + return str == null || str.length() == 0; } } From 8d0662c07ef90f0413e9521b65d616fbc2f149eb Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Sat, 8 Mar 2025 19:48:17 +0100 Subject: [PATCH 25/51] Changed version to 0.7.0 and updated CHANGELOG.md --- CHANGELOG.md | 23 ++++--------------- pom.xml | 2 +- .../oidc/mappers/ClaimToGroupMapper.java | 7 +----- 3 files changed, 6 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a12dd6..a16d8ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,23 +1,8 @@ -# 1.0.0 (2025-03-03) - - -### Bug Fixes - -* eliminate the possibility of NullPointerException ([#56](https://github.com/maaroen/keycloak-discord/issues/56)) ([e2b5991](https://github.com/maaroen/keycloak-discord/commit/e2b5991c7ef33ee3ac6483ca00e3e854bb935371)) -* ignore discriminator if the value is "0" ([4c68b69](https://github.com/maaroen/keycloak-discord/commit/4c68b69b0bf0d6421589e03e4baf8bbbe5138caa)) -* update authorization URL ([#28](https://github.com/maaroen/keycloak-discord/issues/28)) ([a31c116](https://github.com/maaroen/keycloak-discord/commit/a31c116092183318fdbe09fa059a1f63bb0d794c)) -* update discord api endpoint urls ([0aa7f14](https://github.com/maaroen/keycloak-discord/commit/0aa7f14edf48a5f9e8a75a68f530cfb1945935e9)) -* use DiscordIdentityProvider class in instantiating the Logger ([93003c2](https://github.com/maaroen/keycloak-discord/commit/93003c28bc377577b5d4b218e3d89d984a3f1ae6)) - - +# 0.7.0 (2025-03-08) ### Features - -* implement IdentityProviderFactory#createConfig() which is ([9f359f5](https://github.com/maaroen/keycloak-discord/commit/9f359f5f61848131f1b19994a2c75d6955bb9b27)) -* update to keycloak 17.0.0 (based on Quarkus) ([f24ed18](https://github.com/maaroen/keycloak-discord/commit/f24ed1801141da1fbb58d0a58fafdb5aeb0bfa6e)) -* update to keycloak 22.0.1 (support new admin console) ([#37](https://github.com/maaroen/keycloak-discord/issues/37)) ([2c8da2d](https://github.com/maaroen/keycloak-discord/commit/2c8da2da4b48ea081644deb7fc11931aba55ba8f)) -* update to keycloak 26.0.5 ([05a3df4](https://github.com/maaroen/keycloak-discord/commit/05a3df43f21289762f72e3ac6780fd6b543d8c07)) -* updated provider for Keycloak 25.x ([#49](https://github.com/maaroen/keycloak-discord/issues/49)) ([c10480b](https://github.com/maaroen/keycloak-discord/commit/c10480b79864a85817d20d48f949475020322090)) -* use "Theme Resources" for the custom template ([7cb885c](https://github.com/maaroen/keycloak-discord/commit/7cb885cea7ae317ae071a2ac72956faa67d4fdf9)) +* Updated to keycloak 26.1.3 +* Added Discord role syncing support (work done by [NotActuallyTerry](https://github.com/NotActuallyTerry/keycloak-discord)) +* Added a fix to also sync roles (delete all) if no roles were returned for the discord guild (Inspired by [pierrearma](https://github.com/NotActuallyTerry/keycloak-discord/pull/2)) ## [0.6.1](https://github.com/wadahiro/keycloak-discord/compare/v0.6.0...v0.6.1) (2024-11-02) diff --git a/pom.xml b/pom.xml index 1a13786..44476d2 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 1.0.1-SNAPSHOT + 0.7.0 jar diff --git a/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java b/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java index 18f5384..b3200f5 100644 --- a/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java +++ b/src/main/java/br/com/luizcarlosvianamelo/keycloak/broker/oidc/mappers/ClaimToGroupMapper.java @@ -137,17 +137,14 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { JsonNode profileJsonNode = (JsonNode) context.getContextData().get(OIDCIdentityProvider.USER_INFO); var roles = AbstractJsonUserAttributeMapper.getJsonValue(profileJsonNode, claim); if(roles == null) { - logger.debugf("MAAROENTEST: Result was null"); return new ArrayList<>(); } // convert to string list if not list List newList = new ArrayList<>(); if (!List.class.isAssignableFrom(roles.getClass())) { - logger.debugf("MAAROENTEST: Result was single item"); newList.add(roles.toString()); } else { - logger.debugf("MAAROENTEST: Result was list"); newList = (List)roles; } return newList; @@ -166,11 +163,9 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { // get new groups List newGroupsList = getClaimValue(context, groupClaimName); - logger.debugf("MAAROENTEST: Amount of newGroups: [%s]", newGroupsList.size()); boolean clearRolesIfNone = Boolean.parseBoolean(mapperModel.getConfig().get(CLEAR_ROLES_IF_NONE)); // Clear roles if config option enabled if (newGroupsList.isEmpty() && !clearRolesIfNone) { - logger.debugf("MAAROENTEST: Skipped import "); logger.debugf("Realm [%s], IdP [%s]: no group claim (claim name: [%s]) for user [%s], ignoring...", realm.getName(), mapperModel.getIdentityProviderAlias(), @@ -289,6 +284,6 @@ public class ClaimToGroupMapper extends AbstractClaimMapper { } private static boolean isEmpty(String str) { - return str == null || str.length() == 0; + return str == null || str.isEmpty(); } } From 5f0b2779a19ac3f43acbe62666e664bb72cb11d3 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 8 Mar 2025 18:50:30 +0000 Subject: [PATCH 26/51] chore(release): 1.0.0 [skip ci] # 1.0.0 (2025-03-08) ### Bug Fixes * eliminate the possibility of NullPointerException ([#56](https://github.com/maaroen/keycloak-discord/issues/56)) ([e2b5991](https://github.com/maaroen/keycloak-discord/commit/e2b5991c7ef33ee3ac6483ca00e3e854bb935371)) * ignore discriminator if the value is "0" ([4c68b69](https://github.com/maaroen/keycloak-discord/commit/4c68b69b0bf0d6421589e03e4baf8bbbe5138caa)) * update authorization URL ([#28](https://github.com/maaroen/keycloak-discord/issues/28)) ([a31c116](https://github.com/maaroen/keycloak-discord/commit/a31c116092183318fdbe09fa059a1f63bb0d794c)) * update discord api endpoint urls ([0aa7f14](https://github.com/maaroen/keycloak-discord/commit/0aa7f14edf48a5f9e8a75a68f530cfb1945935e9)) * use DiscordIdentityProvider class in instantiating the Logger ([93003c2](https://github.com/maaroen/keycloak-discord/commit/93003c28bc377577b5d4b218e3d89d984a3f1ae6)) ### Features * implement IdentityProviderFactory#createConfig() which is ([9f359f5](https://github.com/maaroen/keycloak-discord/commit/9f359f5f61848131f1b19994a2c75d6955bb9b27)) * update to keycloak 17.0.0 (based on Quarkus) ([f24ed18](https://github.com/maaroen/keycloak-discord/commit/f24ed1801141da1fbb58d0a58fafdb5aeb0bfa6e)) * update to keycloak 22.0.1 (support new admin console) ([#37](https://github.com/maaroen/keycloak-discord/issues/37)) ([2c8da2d](https://github.com/maaroen/keycloak-discord/commit/2c8da2da4b48ea081644deb7fc11931aba55ba8f)) * update to keycloak 26.0.5 ([05a3df4](https://github.com/maaroen/keycloak-discord/commit/05a3df43f21289762f72e3ac6780fd6b543d8c07)) * updated provider for Keycloak 25.x ([#49](https://github.com/maaroen/keycloak-discord/issues/49)) ([c10480b](https://github.com/maaroen/keycloak-discord/commit/c10480b79864a85817d20d48f949475020322090)) * use "Theme Resources" for the custom template ([7cb885c](https://github.com/maaroen/keycloak-discord/commit/7cb885cea7ae317ae071a2ac72956faa67d4fdf9)) --- CHANGELOG.md | 21 +++++++++++++++++++++ pom.xml | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a16d8ac..1c11114 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,24 @@ +# 1.0.0 (2025-03-08) + + +### Bug Fixes + +* eliminate the possibility of NullPointerException ([#56](https://github.com/maaroen/keycloak-discord/issues/56)) ([e2b5991](https://github.com/maaroen/keycloak-discord/commit/e2b5991c7ef33ee3ac6483ca00e3e854bb935371)) +* ignore discriminator if the value is "0" ([4c68b69](https://github.com/maaroen/keycloak-discord/commit/4c68b69b0bf0d6421589e03e4baf8bbbe5138caa)) +* update authorization URL ([#28](https://github.com/maaroen/keycloak-discord/issues/28)) ([a31c116](https://github.com/maaroen/keycloak-discord/commit/a31c116092183318fdbe09fa059a1f63bb0d794c)) +* update discord api endpoint urls ([0aa7f14](https://github.com/maaroen/keycloak-discord/commit/0aa7f14edf48a5f9e8a75a68f530cfb1945935e9)) +* use DiscordIdentityProvider class in instantiating the Logger ([93003c2](https://github.com/maaroen/keycloak-discord/commit/93003c28bc377577b5d4b218e3d89d984a3f1ae6)) + + +### Features + +* implement IdentityProviderFactory#createConfig() which is ([9f359f5](https://github.com/maaroen/keycloak-discord/commit/9f359f5f61848131f1b19994a2c75d6955bb9b27)) +* update to keycloak 17.0.0 (based on Quarkus) ([f24ed18](https://github.com/maaroen/keycloak-discord/commit/f24ed1801141da1fbb58d0a58fafdb5aeb0bfa6e)) +* update to keycloak 22.0.1 (support new admin console) ([#37](https://github.com/maaroen/keycloak-discord/issues/37)) ([2c8da2d](https://github.com/maaroen/keycloak-discord/commit/2c8da2da4b48ea081644deb7fc11931aba55ba8f)) +* update to keycloak 26.0.5 ([05a3df4](https://github.com/maaroen/keycloak-discord/commit/05a3df43f21289762f72e3ac6780fd6b543d8c07)) +* updated provider for Keycloak 25.x ([#49](https://github.com/maaroen/keycloak-discord/issues/49)) ([c10480b](https://github.com/maaroen/keycloak-discord/commit/c10480b79864a85817d20d48f949475020322090)) +* use "Theme Resources" for the custom template ([7cb885c](https://github.com/maaroen/keycloak-discord/commit/7cb885cea7ae317ae071a2ac72956faa67d4fdf9)) + # 0.7.0 (2025-03-08) ### Features * Updated to keycloak 26.1.3 diff --git a/pom.xml b/pom.xml index 44476d2..78e3fbb 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.7.0 + 1.0.0 jar From 49bf814706470ebd6edb90f2461d8b9a840ed213 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 8 Mar 2025 18:50:39 +0000 Subject: [PATCH 27/51] chore: setting next snapshot version [skip ci] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 78e3fbb..1a13786 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 1.0.0 + 1.0.1-SNAPSHOT jar From e98c2e52aaf72afe1e8d5751f94dea824c8b85cb Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Sat, 8 Mar 2025 20:06:44 +0100 Subject: [PATCH 28/51] feat: discord role sync --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1a13786..293e562 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 1.0.1-SNAPSHOT + 0.6.1 jar From a41dc14b09bc50611c9d1cd7d3f9a6190b9adb18 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 8 Mar 2025 19:07:26 +0000 Subject: [PATCH 29/51] chore(release): 0.7.0 [skip ci] # [0.7.0](https://github.com/maaroen/keycloak-discord/compare/v0.6.1...v0.7.0) (2025-03-08) ### Features * discord role sync ([e98c2e5](https://github.com/maaroen/keycloak-discord/commit/e98c2e52aaf72afe1e8d5751f94dea824c8b85cb)) --- CHANGELOG.md | 7 +++++++ pom.xml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c11114..ff911c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [0.7.0](https://github.com/maaroen/keycloak-discord/compare/v0.6.1...v0.7.0) (2025-03-08) + + +### Features + +* discord role sync ([e98c2e5](https://github.com/maaroen/keycloak-discord/commit/e98c2e52aaf72afe1e8d5751f94dea824c8b85cb)) + # 1.0.0 (2025-03-08) diff --git a/pom.xml b/pom.xml index 293e562..44476d2 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.6.1 + 0.7.0 jar From 3f3991d16b2bf8b621d96ebc53ea918be707ad01 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 8 Mar 2025 19:07:36 +0000 Subject: [PATCH 30/51] chore: setting next snapshot version [skip ci] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 44476d2..eaba157 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.7.0 + 0.7.1-SNAPSHOT jar From 9f6c28757819d97f45f758177b934275c7c613bd Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Sat, 8 Mar 2025 20:09:54 +0100 Subject: [PATCH 31/51] feat: discord role sync --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index eaba157..44476d2 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.7.1-SNAPSHOT + 0.7.0 jar From 028243cfee66aab77377463b5ad6b0d0c24caf7a Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 8 Mar 2025 19:10:26 +0000 Subject: [PATCH 32/51] chore(release): 0.7.0 [skip ci] # [0.7.0](https://github.com/maaroen/keycloak-discord/compare/v0.6.1...v0.7.0) (2025-03-08) ### Features * discord role sync ([9f6c287](https://github.com/maaroen/keycloak-discord/commit/9f6c28757819d97f45f758177b934275c7c613bd)) * discord role sync ([e98c2e5](https://github.com/maaroen/keycloak-discord/commit/e98c2e52aaf72afe1e8d5751f94dea824c8b85cb)) --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ff911c6..2018741 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ # [0.7.0](https://github.com/maaroen/keycloak-discord/compare/v0.6.1...v0.7.0) (2025-03-08) +### Features + +* discord role sync ([9f6c287](https://github.com/maaroen/keycloak-discord/commit/9f6c28757819d97f45f758177b934275c7c613bd)) +* discord role sync ([e98c2e5](https://github.com/maaroen/keycloak-discord/commit/e98c2e52aaf72afe1e8d5751f94dea824c8b85cb)) + +# [0.7.0](https://github.com/maaroen/keycloak-discord/compare/v0.6.1...v0.7.0) (2025-03-08) + + ### Features * discord role sync ([e98c2e5](https://github.com/maaroen/keycloak-discord/commit/e98c2e52aaf72afe1e8d5751f94dea824c8b85cb)) From fc4469ad11ad0f50d48f593f7e873c4b9dd77390 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 8 Mar 2025 19:10:36 +0000 Subject: [PATCH 33/51] chore: setting next snapshot version [skip ci] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 44476d2..eaba157 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.7.0 + 0.7.1-SNAPSHOT jar From 57ce1c3af7326ff9d60b5d42bae8af5a09d6e94d Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Sat, 8 Mar 2025 20:24:56 +0100 Subject: [PATCH 34/51] Update CHANGELOG.md --- CHANGELOG.md | 36 +----------------------------------- 1 file changed, 1 insertion(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2018741..b699b32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,45 +1,11 @@ # [0.7.0](https://github.com/maaroen/keycloak-discord/compare/v0.6.1...v0.7.0) (2025-03-08) - -### Features - -* discord role sync ([9f6c287](https://github.com/maaroen/keycloak-discord/commit/9f6c28757819d97f45f758177b934275c7c613bd)) -* discord role sync ([e98c2e5](https://github.com/maaroen/keycloak-discord/commit/e98c2e52aaf72afe1e8d5751f94dea824c8b85cb)) - -# [0.7.0](https://github.com/maaroen/keycloak-discord/compare/v0.6.1...v0.7.0) (2025-03-08) - - -### Features - -* discord role sync ([e98c2e5](https://github.com/maaroen/keycloak-discord/commit/e98c2e52aaf72afe1e8d5751f94dea824c8b85cb)) - -# 1.0.0 (2025-03-08) - - -### Bug Fixes - -* eliminate the possibility of NullPointerException ([#56](https://github.com/maaroen/keycloak-discord/issues/56)) ([e2b5991](https://github.com/maaroen/keycloak-discord/commit/e2b5991c7ef33ee3ac6483ca00e3e854bb935371)) -* ignore discriminator if the value is "0" ([4c68b69](https://github.com/maaroen/keycloak-discord/commit/4c68b69b0bf0d6421589e03e4baf8bbbe5138caa)) -* update authorization URL ([#28](https://github.com/maaroen/keycloak-discord/issues/28)) ([a31c116](https://github.com/maaroen/keycloak-discord/commit/a31c116092183318fdbe09fa059a1f63bb0d794c)) -* update discord api endpoint urls ([0aa7f14](https://github.com/maaroen/keycloak-discord/commit/0aa7f14edf48a5f9e8a75a68f530cfb1945935e9)) -* use DiscordIdentityProvider class in instantiating the Logger ([93003c2](https://github.com/maaroen/keycloak-discord/commit/93003c28bc377577b5d4b218e3d89d984a3f1ae6)) - - -### Features - -* implement IdentityProviderFactory#createConfig() which is ([9f359f5](https://github.com/maaroen/keycloak-discord/commit/9f359f5f61848131f1b19994a2c75d6955bb9b27)) -* update to keycloak 17.0.0 (based on Quarkus) ([f24ed18](https://github.com/maaroen/keycloak-discord/commit/f24ed1801141da1fbb58d0a58fafdb5aeb0bfa6e)) -* update to keycloak 22.0.1 (support new admin console) ([#37](https://github.com/maaroen/keycloak-discord/issues/37)) ([2c8da2d](https://github.com/maaroen/keycloak-discord/commit/2c8da2da4b48ea081644deb7fc11931aba55ba8f)) -* update to keycloak 26.0.5 ([05a3df4](https://github.com/maaroen/keycloak-discord/commit/05a3df43f21289762f72e3ac6780fd6b543d8c07)) -* updated provider for Keycloak 25.x ([#49](https://github.com/maaroen/keycloak-discord/issues/49)) ([c10480b](https://github.com/maaroen/keycloak-discord/commit/c10480b79864a85817d20d48f949475020322090)) -* use "Theme Resources" for the custom template ([7cb885c](https://github.com/maaroen/keycloak-discord/commit/7cb885cea7ae317ae071a2ac72956faa67d4fdf9)) - -# 0.7.0 (2025-03-08) ### Features * Updated to keycloak 26.1.3 * Added Discord role syncing support (work done by [NotActuallyTerry](https://github.com/NotActuallyTerry/keycloak-discord)) * Added a fix to also sync roles (delete all) if no roles were returned for the discord guild (Inspired by [pierrearma](https://github.com/NotActuallyTerry/keycloak-discord/pull/2)) + ## [0.6.1](https://github.com/wadahiro/keycloak-discord/compare/v0.6.0...v0.6.1) (2024-11-02) From 8f28065f2bb3de8c0ebd78dcf9ef2e68724213aa Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Wed, 2 Jul 2025 13:44:23 +0200 Subject: [PATCH 35/51] Update pom.xml --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index eaba157..7f32f3b 100755 --- a/pom.xml +++ b/pom.xml @@ -7,11 +7,11 @@ org.keycloak.extensions keycloak-discord - 0.7.1-SNAPSHOT + 0.7.2-SNAPSHOT jar - 26.1.3 + 26.2.5 From 289ae91d0211443c5caf75ab3a0d3a26b89839a4 Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Wed, 2 Jul 2025 13:51:46 +0200 Subject: [PATCH 36/51] Update pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7f32f3b..6158a28 100755 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ jar - 26.2.5 + 26.1.3 From 9f0673a5de15ad7e2a813a99aba9ed21cec0c596 Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Wed, 2 Jul 2025 13:52:13 +0200 Subject: [PATCH 37/51] feat: update to keycloak 26.2.5 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6158a28..7f32f3b 100755 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ jar - 26.1.3 + 26.2.5 From c56c4a373c445217d1a5e29d2d863deca995f0ca Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 2 Jul 2025 11:53:28 +0000 Subject: [PATCH 38/51] chore(release): 0.8.0 [skip ci] # [0.8.0](https://github.com/maaroen/keycloak-discord/compare/v0.7.0...v0.8.0) (2025-07-02) ### Features * update to keycloak 26.2.5 ([9f0673a](https://github.com/maaroen/keycloak-discord/commit/9f0673a5de15ad7e2a813a99aba9ed21cec0c596)) --- CHANGELOG.md | 7 +++++++ pom.xml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b699b32..a4f6ac1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [0.8.0](https://github.com/maaroen/keycloak-discord/compare/v0.7.0...v0.8.0) (2025-07-02) + + +### Features + +* update to keycloak 26.2.5 ([9f0673a](https://github.com/maaroen/keycloak-discord/commit/9f0673a5de15ad7e2a813a99aba9ed21cec0c596)) + # [0.7.0](https://github.com/maaroen/keycloak-discord/compare/v0.6.1...v0.7.0) (2025-03-08) ### Features diff --git a/pom.xml b/pom.xml index 7f32f3b..ea67ab6 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.7.2-SNAPSHOT + 0.8.0 jar From 069434772a7262cea3c7d5b813fbb68ec07206fa Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 2 Jul 2025 11:53:39 +0000 Subject: [PATCH 39/51] chore: setting next snapshot version [skip ci] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ea67ab6..baaadaa 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.8.0 + 0.8.1-SNAPSHOT jar From 6a1e8ab8753ca7b31cde360e25b5523311078e1e Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Wed, 2 Jul 2025 13:57:16 +0200 Subject: [PATCH 40/51] Update pom.xml --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index baaadaa..0505356 100755 --- a/pom.xml +++ b/pom.xml @@ -7,11 +7,11 @@ org.keycloak.extensions keycloak-discord - 0.8.1-SNAPSHOT + 0.8.0 jar - 26.2.5 + 26.1.3 From 197c8bc2a4b9b022e4b8797d0b3644b577a9cc7e Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 2 Jul 2025 11:57:54 +0000 Subject: [PATCH 41/51] chore(release): 0.8.0 [skip ci] # [0.8.0](https://github.com/maaroen/keycloak-discord/compare/v0.7.0...v0.8.0) (2025-07-02) ### Features * update to keycloak 26.2.5 ([9f0673a](https://github.com/maaroen/keycloak-discord/commit/9f0673a5de15ad7e2a813a99aba9ed21cec0c596)) --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4f6ac1..c005be3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # [0.8.0](https://github.com/maaroen/keycloak-discord/compare/v0.7.0...v0.8.0) (2025-07-02) +### Features + +* update to keycloak 26.2.5 ([9f0673a](https://github.com/maaroen/keycloak-discord/commit/9f0673a5de15ad7e2a813a99aba9ed21cec0c596)) + +# [0.8.0](https://github.com/maaroen/keycloak-discord/compare/v0.7.0...v0.8.0) (2025-07-02) + + ### Features * update to keycloak 26.2.5 ([9f0673a](https://github.com/maaroen/keycloak-discord/commit/9f0673a5de15ad7e2a813a99aba9ed21cec0c596)) From edf6dbb35464353b6bcbfdf5c652e864bb557cce Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Wed, 2 Jul 2025 13:58:03 +0200 Subject: [PATCH 42/51] feat: update to keycloak 26.2.5 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0505356..ea67ab6 100755 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ jar - 26.1.3 + 26.2.5 From f78afa5da9404536a85761e0e5002b7661b547dc Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 2 Jul 2025 11:58:03 +0000 Subject: [PATCH 43/51] chore: setting next snapshot version [skip ci] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0505356..4dbe512 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.8.0 + 0.8.1-SNAPSHOT jar From 3cf1741797d4bff528249d0c9835788c3d08f3b2 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 2 Jul 2025 11:58:52 +0000 Subject: [PATCH 44/51] chore(release): 0.9.0 [skip ci] # [0.9.0](https://github.com/maaroen/keycloak-discord/compare/v0.8.0...v0.9.0) (2025-07-02) ### Features * update to keycloak 26.2.5 ([edf6dbb](https://github.com/maaroen/keycloak-discord/commit/edf6dbb35464353b6bcbfdf5c652e864bb557cce)) --- CHANGELOG.md | 7 +++++++ pom.xml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c005be3..be59321 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [0.9.0](https://github.com/maaroen/keycloak-discord/compare/v0.8.0...v0.9.0) (2025-07-02) + + +### Features + +* update to keycloak 26.2.5 ([edf6dbb](https://github.com/maaroen/keycloak-discord/commit/edf6dbb35464353b6bcbfdf5c652e864bb557cce)) + # [0.8.0](https://github.com/maaroen/keycloak-discord/compare/v0.7.0...v0.8.0) (2025-07-02) diff --git a/pom.xml b/pom.xml index baaadaa..a130403 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.8.1-SNAPSHOT + 0.9.0 jar From 8d80a62f08ec5f3d754681dcb2b4a6d8b2a96823 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 2 Jul 2025 11:59:03 +0000 Subject: [PATCH 45/51] chore: setting next snapshot version [skip ci] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a130403..7428e31 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.9.0 + 0.9.1-SNAPSHOT jar From bb66494085a170d046d2c377e53548146cf90fd9 Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Wed, 2 Jul 2025 14:00:50 +0200 Subject: [PATCH 46/51] feat: update to keycloak 26.0.5 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7428e31..cc949c8 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.9.1-SNAPSHOT + 0.0.0 jar From 2177c44ad0fd2af2a197661471819d77cdf019a8 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 2 Jul 2025 12:01:24 +0000 Subject: [PATCH 47/51] chore(release): 0.8.0 [skip ci] # [0.8.0](https://github.com/maaroen/keycloak-discord/compare/v0.7.0...v0.8.0) (2025-07-02) ### Features * update to keycloak 26.0.5 ([bb66494](https://github.com/maaroen/keycloak-discord/commit/bb66494085a170d046d2c377e53548146cf90fd9)) * update to keycloak 26.2.5 ([edf6dbb](https://github.com/maaroen/keycloak-discord/commit/edf6dbb35464353b6bcbfdf5c652e864bb557cce)) * update to keycloak 26.2.5 ([9f0673a](https://github.com/maaroen/keycloak-discord/commit/9f0673a5de15ad7e2a813a99aba9ed21cec0c596)) --- CHANGELOG.md | 9 +++++++++ pom.xml | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index be59321..84137cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +# [0.8.0](https://github.com/maaroen/keycloak-discord/compare/v0.7.0...v0.8.0) (2025-07-02) + + +### Features + +* update to keycloak 26.0.5 ([bb66494](https://github.com/maaroen/keycloak-discord/commit/bb66494085a170d046d2c377e53548146cf90fd9)) +* update to keycloak 26.2.5 ([edf6dbb](https://github.com/maaroen/keycloak-discord/commit/edf6dbb35464353b6bcbfdf5c652e864bb557cce)) +* update to keycloak 26.2.5 ([9f0673a](https://github.com/maaroen/keycloak-discord/commit/9f0673a5de15ad7e2a813a99aba9ed21cec0c596)) + # [0.9.0](https://github.com/maaroen/keycloak-discord/compare/v0.8.0...v0.9.0) (2025-07-02) diff --git a/pom.xml b/pom.xml index cc949c8..ea67ab6 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.0.0 + 0.8.0 jar From ab8e76fcffa1ccf09eb3413d3af1b89b11e050ac Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 2 Jul 2025 12:01:34 +0000 Subject: [PATCH 48/51] chore: setting next snapshot version [skip ci] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ea67ab6..baaadaa 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.8.0 + 0.8.1-SNAPSHOT jar From 46cde900d923ef0d2470729e553c8806be53b9dc Mon Sep 17 00:00:00 2001 From: Jeroen Nederlof Date: Wed, 2 Jul 2025 14:02:48 +0200 Subject: [PATCH 49/51] Update pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index baaadaa..ea67ab6 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.8.1-SNAPSHOT + 0.8.0 jar From 631915b1a34530486d4e6df3e761f42b5e00ee23 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 2 Jul 2025 12:03:31 +0000 Subject: [PATCH 50/51] chore(release): 0.8.0 [skip ci] # [0.8.0](https://github.com/maaroen/keycloak-discord/compare/v0.7.0...v0.8.0) (2025-07-02) ### Features * update to keycloak 26.0.5 ([bb66494](https://github.com/maaroen/keycloak-discord/commit/bb66494085a170d046d2c377e53548146cf90fd9)) * update to keycloak 26.2.5 ([edf6dbb](https://github.com/maaroen/keycloak-discord/commit/edf6dbb35464353b6bcbfdf5c652e864bb557cce)) * update to keycloak 26.2.5 ([9f0673a](https://github.com/maaroen/keycloak-discord/commit/9f0673a5de15ad7e2a813a99aba9ed21cec0c596)) --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84137cf..05b493e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # [0.8.0](https://github.com/maaroen/keycloak-discord/compare/v0.7.0...v0.8.0) (2025-07-02) +### Features + +* update to keycloak 26.0.5 ([bb66494](https://github.com/maaroen/keycloak-discord/commit/bb66494085a170d046d2c377e53548146cf90fd9)) +* update to keycloak 26.2.5 ([edf6dbb](https://github.com/maaroen/keycloak-discord/commit/edf6dbb35464353b6bcbfdf5c652e864bb557cce)) +* update to keycloak 26.2.5 ([9f0673a](https://github.com/maaroen/keycloak-discord/commit/9f0673a5de15ad7e2a813a99aba9ed21cec0c596)) + +# [0.8.0](https://github.com/maaroen/keycloak-discord/compare/v0.7.0...v0.8.0) (2025-07-02) + + ### Features * update to keycloak 26.0.5 ([bb66494](https://github.com/maaroen/keycloak-discord/commit/bb66494085a170d046d2c377e53548146cf90fd9)) From 607fe7ba423ef713ae9eb5ec1ec61e82537633d6 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 2 Jul 2025 12:03:41 +0000 Subject: [PATCH 51/51] chore: setting next snapshot version [skip ci] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ea67ab6..baaadaa 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.keycloak.extensions keycloak-discord - 0.8.0 + 0.8.1-SNAPSHOT jar