From 9c9da2ccfcb5cd8158471210cefac3d988456127 Mon Sep 17 00:00:00 2001 From: Koman Rudden Date: Fri, 20 Mar 2026 05:59:00 +0200 Subject: [PATCH 1/5] HardCheckExample logging fixed, openapi generator config updated --- kinde-core/pom.xml | 2 + .../com/kinde/token/HardCheckExample.java | 316 ++++++------------ 2 files changed, 96 insertions(+), 222 deletions(-) diff --git a/kinde-core/pom.xml b/kinde-core/pom.xml index 95ba47b1..8b9ea15e 100644 --- a/kinde-core/pom.xml +++ b/kinde-core/pom.xml @@ -263,6 +263,8 @@ ${project.basedir}/../kinde-accounts-api.yaml java + false + false src/gen/java/main okhttp-gson diff --git a/kinde-core/src/main/java/com/kinde/token/HardCheckExample.java b/kinde-core/src/main/java/com/kinde/token/HardCheckExample.java index fe9ae59d..ba2ae472 100644 --- a/kinde-core/src/main/java/com/kinde/token/HardCheckExample.java +++ b/kinde-core/src/main/java/com/kinde/token/HardCheckExample.java @@ -4,266 +4,138 @@ import com.kinde.KindeClientBuilder; import com.kinde.KindeClientSession; import com.kinde.KindeTokenFactory; -import com.kinde.accounts.KindeAccountsClient; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.Arrays; import java.util.List; +import java.util.Map; /** * Example demonstrating the "hard check" functionality for permissions, roles, and feature flags. - * This shows how the system falls back to API calls when information is not available in the token. - * - * The hard check functionality is now integrated directly into the token classes (AccessToken, IDToken, BaseToken) - * and no longer requires a separate KindeTokenChecker. + * + * Token-based checks (permissions, roles, feature flags) read directly from the JWT claims + * and work with any token type, including M2M (client credentials) tokens. + * + * API-fallback checks (via KindeAccountsClient) require a user-context token obtained through + * the authorization code flow (e.g., in a Spring Boot or J2EE app with a logged-in user). + * They will not work with M2M tokens because the Account API needs org_code and sub claims. + * + * This standalone example demonstrates token-based checks only. + * For API-fallback examples, see the Spring Boot playground application. */ public class HardCheckExample { - - private static final Logger log = LoggerFactory.getLogger(HardCheckExample.class); - + public static void main(String[] args) { - // Create a Kinde client KindeClient client = KindeClientBuilder.builder() .domain("https://your-domain.kinde.com") .clientId("your-client-id") .clientSecret("your-client-secret") .redirectUri("http://localhost:8080/callback") + .addAudience("https://koman.kinde.com/api") .build(); - - // Get a client session (M2M or user session) + KindeClientSession session = client.clientSession(); - - // Get the token from the session KindeToken token = session.retrieveTokens().getAccessToken(); - - // Create a KindeAccountsClient for API fallback - KindeAccountsClient accountsClient = new KindeAccountsClient(session, true); - - // Create a token factory - KindeTokenFactory tokenFactory = new KindeTokenFactoryImpl(null); // JWK store would be injected in real usage - - // Parse the token with hard check capabilities - KindeToken tokenWithHardCheck = tokenFactory.parse(token.token(), accountsClient); - - // Now you can use the hard check methods directly on the token - runHardCheckExamples(tokenWithHardCheck); - } - - /** - * Example: Check a single permission with API fallback. - */ - private static void checkSinglePermission(KindeToken token) { - log.info("=== Checking Single Permission ==="); - - try { - boolean hasPermission = token.hasPermission("read:users"); - - if (hasPermission) { - log.info("✅ User has 'read:users' permission"); - } else { - log.info("❌ User does not have 'read:users' permission"); - } - } catch (Exception e) { - log.error("Error checking permission: {}", e.getMessage()); - } + + KindeTokenFactory tokenFactory = client.tokenFactory(); + KindeToken parsedToken = tokenFactory.parse(token.token()); + + System.out.println("Token valid: " + parsedToken.valid()); + System.out.println(); + + checkPermissionsFromToken(parsedToken); + checkRolesFromToken(parsedToken); + checkFeatureFlags(parsedToken); + checkFlagValues(parsedToken); } - + /** - * Example: Check multiple permissions with API fallback. + * Check permissions directly from the token claims. + * Permissions are present when users have roles/permissions assigned + * and the token is issued via the authorization code flow (user login). */ - private static void checkMultiplePermissions(KindeToken token) { - log.info("=== Checking Multiple Permissions ==="); - - List permissions = Arrays.asList("read:users", "write:users", "delete:users"); - - try { - // Check if user has any of the permissions - boolean hasAnyPermission = token.hasAnyPermission(permissions); - - if (hasAnyPermission) { - log.info("✅ User has at least one of the permissions: {}", permissions); - } else { - log.info("❌ User does not have any of the permissions: {}", permissions); - } - - // Check if user has all of the permissions - boolean hasAllPermissions = token.hasAllPermissions(permissions); - - if (hasAllPermissions) { - log.info("✅ User has all permissions: {}", permissions); - } else { - log.info("❌ User does not have all permissions: {}", permissions); - } - } catch (Exception e) { - log.error("Error checking permissions: {}", e.getMessage()); + private static void checkPermissionsFromToken(KindeToken token) { + System.out.println("=== Permissions (from token claims) ==="); + + List permissions = token.getPermissions(); + if (permissions == null || permissions.isEmpty()) { + System.out.println("No permissions found in token."); + System.out.println("Tip: Permissions are included in user tokens when roles are assigned."); + } else { + System.out.println("Permissions in token: " + permissions); + + boolean hasRead = token.hasPermission("read:users"); + System.out.println("Has 'read:users': " + hasRead); + + List toCheck = Arrays.asList("read:users", "write:users", "delete:users"); + boolean hasAny = token.hasAnyPermission(toCheck); + boolean hasAll = token.hasAllPermissions(toCheck); + System.out.println("Has any of " + toCheck + ": " + hasAny); + System.out.println("Has all of " + toCheck + ": " + hasAll); } + System.out.println(); } - + /** - * Example: Check roles with API fallback. + * Check roles directly from the token claims. + * Roles are present when users have roles assigned + * and the token is issued via the authorization code flow (user login). */ - private static void checkRoles(KindeToken token) { - log.info("=== Checking Roles ==="); - - List roles = Arrays.asList("admin", "moderator", "user"); - - try { - // Check if user has any of the roles - boolean hasAnyRole = token.hasAnyRole(roles); - - if (hasAnyRole) { - log.info("✅ User has at least one of the roles: {}", roles); - } else { - log.info("❌ User does not have any of the roles: {}", roles); - } - - // Check if user has all of the roles - boolean hasAllRoles = token.hasAllRoles(roles); - - if (hasAllRoles) { - log.info("✅ User has all roles: {}", roles); - } else { - log.info("❌ User does not have all roles: {}", roles); - } - } catch (Exception e) { - log.error("Error checking roles: {}", e.getMessage()); + private static void checkRolesFromToken(KindeToken token) { + System.out.println("=== Roles (from token claims) ==="); + + List roles = token.getRoles(); + if (roles == null || roles.isEmpty()) { + System.out.println("No roles found in token."); + System.out.println("Tip: Roles are included in user tokens when assigned at the organization level."); + } else { + System.out.println("Roles in token: " + roles); + + List toCheck = Arrays.asList("admin", "moderator", "user"); + boolean hasAny = token.hasAnyRole(toCheck); + boolean hasAll = token.hasAllRoles(toCheck); + System.out.println("Has any of " + toCheck + ": " + hasAny); + System.out.println("Has all of " + toCheck + ": " + hasAll); } + System.out.println(); } - + /** - * Example: Check feature flags with API fallback. + * Check feature flags from the token claims. + * Feature flags are included when enabled in the Kinde dashboard. */ private static void checkFeatureFlags(KindeToken token) { - log.info("=== Checking Feature Flags ==="); - + System.out.println("=== Feature Flags (from token claims) ==="); + try { - // Check if a feature flag is enabled - boolean isDarkModeEnabled = token.isFeatureFlagEnabled("dark_mode"); - - if (isDarkModeEnabled) { - log.info("✅ Dark mode feature flag is enabled"); - } else { - log.info("❌ Dark mode feature flag is disabled"); - } - - // Get the value of a feature flag - Object betaFeaturesValue = token.getFeatureFlagValue("beta_features"); - - if (betaFeaturesValue != null) { - log.info("✅ Beta features flag value: {}", betaFeaturesValue); - } else { - log.info("❌ Beta features flag not found or null"); - } + boolean darkMode = token.isFeatureFlagEnabled("dark_mode"); + System.out.println("dark_mode enabled: " + darkMode); } catch (Exception e) { - log.error("Error checking feature flags: {}", e.getMessage()); + System.out.println("dark_mode: not found in token"); } - } - - /** - * Example: Comprehensive checks combining permissions, roles, and feature flags. - */ - private static void comprehensiveChecks(KindeToken token) { - log.info("=== Comprehensive Checks ==="); - - List requiredPermissions = Arrays.asList("read:users", "write:users"); - List requiredRoles = Arrays.asList("admin", "moderator"); - List requiredFeatureFlags = Arrays.asList("advanced_analytics", "real_time_notifications"); - + try { - // Check if user has ALL requirements (permissions AND roles AND feature flags) - boolean hasAllRequirements = token.hasAll( - requiredPermissions, - requiredRoles, - requiredFeatureFlags - ); - - if (hasAllRequirements) { - log.info("✅ User has ALL requirements:"); - log.info(" - Permissions: {}", requiredPermissions); - log.info(" - Roles: {}", requiredRoles); - log.info(" - Feature Flags: {}", requiredFeatureFlags); - } else { - log.info("❌ User does not have ALL requirements"); - } - - // Check if user has ANY requirements (permissions OR roles OR feature flags) - boolean hasAnyRequirements = token.hasAny( - requiredPermissions, - requiredRoles, - requiredFeatureFlags - ); - - if (hasAnyRequirements) { - log.info("✅ User has at least one requirement from each category"); - } else { - log.info("❌ User does not have any requirements from each category"); - } + Object betaValue = token.getFeatureFlagValue("beta_features"); + System.out.println("beta_features value: " + betaValue); } catch (Exception e) { - log.error("Error in comprehensive checks: {}", e.getMessage()); + System.out.println("beta_features: not found in token"); } + System.out.println(); } - - /** - * Run all hard check examples. - */ - private static void runHardCheckExamples(KindeToken token) { - checkSinglePermission(token); - checkMultiplePermissions(token); - checkRoles(token); - checkFeatureFlags(token); - comprehensiveChecks(token); - } - + /** - * Example: Real-world usage in a web application context. + * Dump all feature flags from the token for inspection. */ - public static class WebApplicationExample { - - private final KindeToken token; - - public WebApplicationExample(KindeToken token) { - this.token = token; - } - - /** - * Check if user can access the admin dashboard. - */ - public boolean canAccessAdminDashboard() { - return token.hasAll( - Arrays.asList("read:admin", "write:admin"), - Arrays.asList("admin"), - Arrays.asList("admin_dashboard") - ); - } - - /** - * Check if user can perform user management operations. - */ - public boolean canManageUsers() { - return token.hasAll( - Arrays.asList("read:users", "write:users", "delete:users"), - Arrays.asList("admin", "moderator"), - Arrays.asList("user_management") - ); - } - - /** - * Check if user can view analytics. - */ - public boolean canViewAnalytics() { - return token.hasAny( - Arrays.asList("read:analytics", "read:reports"), - Arrays.asList("admin", "analyst"), - Arrays.asList("analytics", "advanced_analytics") - ); - } - - /** - * Check if user can access beta features. - */ - public boolean canAccessBetaFeatures() { - return token.isFeatureFlagEnabled("beta_features"); + private static void checkFlagValues(KindeToken token) { + System.out.println("=== All Feature Flags ==="); + + Map flags = token.getFlags(); + if (flags == null || flags.isEmpty()) { + System.out.println("No feature flags found in token."); + } else { + for (Map.Entry entry : flags.entrySet()) { + System.out.println(" " + entry.getKey() + " = " + entry.getValue()); + } } + System.out.println(); } } From cb57b7b7a9b2da2e69e8a43b5d132d9b18c277a9 Mon Sep 17 00:00:00 2001 From: Koman Rudden Date: Fri, 20 Mar 2026 06:02:08 +0200 Subject: [PATCH 2/5] Corrected audience domain --- kinde-core/src/main/java/com/kinde/token/HardCheckExample.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kinde-core/src/main/java/com/kinde/token/HardCheckExample.java b/kinde-core/src/main/java/com/kinde/token/HardCheckExample.java index ba2ae472..280a9c03 100644 --- a/kinde-core/src/main/java/com/kinde/token/HardCheckExample.java +++ b/kinde-core/src/main/java/com/kinde/token/HardCheckExample.java @@ -30,7 +30,7 @@ public static void main(String[] args) { .clientId("your-client-id") .clientSecret("your-client-secret") .redirectUri("http://localhost:8080/callback") - .addAudience("https://koman.kinde.com/api") + .addAudience("https://your-domain.kinde.com/api") .build(); KindeClientSession session = client.clientSession(); From 18be5cfd478c691683c06a1766e790b3f80f842c Mon Sep 17 00:00:00 2001 From: Koman Rudden Date: Fri, 20 Mar 2026 06:06:09 +0200 Subject: [PATCH 3/5] Switched to slf4j logging --- kinde-core/pom.xml | 7 +++ .../com/kinde/token/HardCheckExample.java | 53 +++++++++---------- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/kinde-core/pom.xml b/kinde-core/pom.xml index 8b9ea15e..dc884219 100644 --- a/kinde-core/pom.xml +++ b/kinde-core/pom.xml @@ -121,6 +121,13 @@ org.slf4j slf4j-api + + org.slf4j + slf4j-simple + 2.0.17 + runtime + true + io.github.cdimascio dotenv-java diff --git a/kinde-core/src/main/java/com/kinde/token/HardCheckExample.java b/kinde-core/src/main/java/com/kinde/token/HardCheckExample.java index 280a9c03..a39b1551 100644 --- a/kinde-core/src/main/java/com/kinde/token/HardCheckExample.java +++ b/kinde-core/src/main/java/com/kinde/token/HardCheckExample.java @@ -4,6 +4,8 @@ import com.kinde.KindeClientBuilder; import com.kinde.KindeClientSession; import com.kinde.KindeTokenFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.Arrays; import java.util.List; @@ -24,6 +26,8 @@ */ public class HardCheckExample { + private static final Logger log = LoggerFactory.getLogger(HardCheckExample.class); + public static void main(String[] args) { KindeClient client = KindeClientBuilder.builder() .domain("https://your-domain.kinde.com") @@ -39,8 +43,7 @@ public static void main(String[] args) { KindeTokenFactory tokenFactory = client.tokenFactory(); KindeToken parsedToken = tokenFactory.parse(token.token()); - System.out.println("Token valid: " + parsedToken.valid()); - System.out.println(); + log.info("Token valid: {}", parsedToken.valid()); checkPermissionsFromToken(parsedToken); checkRolesFromToken(parsedToken); @@ -54,25 +57,24 @@ public static void main(String[] args) { * and the token is issued via the authorization code flow (user login). */ private static void checkPermissionsFromToken(KindeToken token) { - System.out.println("=== Permissions (from token claims) ==="); + log.info("=== Permissions (from token claims) ==="); List permissions = token.getPermissions(); if (permissions == null || permissions.isEmpty()) { - System.out.println("No permissions found in token."); - System.out.println("Tip: Permissions are included in user tokens when roles are assigned."); + log.info("No permissions found in token."); + log.info("Tip: Permissions are included in user tokens when roles are assigned."); } else { - System.out.println("Permissions in token: " + permissions); + log.info("Permissions in token: {}", permissions); boolean hasRead = token.hasPermission("read:users"); - System.out.println("Has 'read:users': " + hasRead); + log.info("Has 'read:users': {}", hasRead); List toCheck = Arrays.asList("read:users", "write:users", "delete:users"); boolean hasAny = token.hasAnyPermission(toCheck); boolean hasAll = token.hasAllPermissions(toCheck); - System.out.println("Has any of " + toCheck + ": " + hasAny); - System.out.println("Has all of " + toCheck + ": " + hasAll); + log.info("Has any of {}: {}", toCheck, hasAny); + log.info("Has all of {}: {}", toCheck, hasAll); } - System.out.println(); } /** @@ -81,22 +83,21 @@ private static void checkPermissionsFromToken(KindeToken token) { * and the token is issued via the authorization code flow (user login). */ private static void checkRolesFromToken(KindeToken token) { - System.out.println("=== Roles (from token claims) ==="); + log.info("=== Roles (from token claims) ==="); List roles = token.getRoles(); if (roles == null || roles.isEmpty()) { - System.out.println("No roles found in token."); - System.out.println("Tip: Roles are included in user tokens when assigned at the organization level."); + log.info("No roles found in token."); + log.info("Tip: Roles are included in user tokens when assigned at the organization level."); } else { - System.out.println("Roles in token: " + roles); + log.info("Roles in token: {}", roles); List toCheck = Arrays.asList("admin", "moderator", "user"); boolean hasAny = token.hasAnyRole(toCheck); boolean hasAll = token.hasAllRoles(toCheck); - System.out.println("Has any of " + toCheck + ": " + hasAny); - System.out.println("Has all of " + toCheck + ": " + hasAll); + log.info("Has any of {}: {}", toCheck, hasAny); + log.info("Has all of {}: {}", toCheck, hasAll); } - System.out.println(); } /** @@ -104,38 +105,36 @@ private static void checkRolesFromToken(KindeToken token) { * Feature flags are included when enabled in the Kinde dashboard. */ private static void checkFeatureFlags(KindeToken token) { - System.out.println("=== Feature Flags (from token claims) ==="); + log.info("=== Feature Flags (from token claims) ==="); try { boolean darkMode = token.isFeatureFlagEnabled("dark_mode"); - System.out.println("dark_mode enabled: " + darkMode); + log.info("dark_mode enabled: {}", darkMode); } catch (Exception e) { - System.out.println("dark_mode: not found in token"); + log.info("dark_mode: not found in token"); } try { Object betaValue = token.getFeatureFlagValue("beta_features"); - System.out.println("beta_features value: " + betaValue); + log.info("beta_features value: {}", betaValue); } catch (Exception e) { - System.out.println("beta_features: not found in token"); + log.info("beta_features: not found in token"); } - System.out.println(); } /** * Dump all feature flags from the token for inspection. */ private static void checkFlagValues(KindeToken token) { - System.out.println("=== All Feature Flags ==="); + log.info("=== All Feature Flags ==="); Map flags = token.getFlags(); if (flags == null || flags.isEmpty()) { - System.out.println("No feature flags found in token."); + log.info("No feature flags found in token."); } else { for (Map.Entry entry : flags.entrySet()) { - System.out.println(" " + entry.getKey() + " = " + entry.getValue()); + log.info(" {} = {}", entry.getKey(), entry.getValue()); } } - System.out.println(); } } From 31ee8e6a35882637daade178fbb7541d90a614d5 Mon Sep 17 00:00:00 2001 From: Koman Rudden Date: Fri, 20 Mar 2026 06:15:24 +0200 Subject: [PATCH 4/5] Removed hard check example as not valid --- .../com/kinde/token/HardCheckExample.java | 140 ------------------ 1 file changed, 140 deletions(-) delete mode 100644 kinde-core/src/main/java/com/kinde/token/HardCheckExample.java diff --git a/kinde-core/src/main/java/com/kinde/token/HardCheckExample.java b/kinde-core/src/main/java/com/kinde/token/HardCheckExample.java deleted file mode 100644 index a39b1551..00000000 --- a/kinde-core/src/main/java/com/kinde/token/HardCheckExample.java +++ /dev/null @@ -1,140 +0,0 @@ -package com.kinde.token; - -import com.kinde.KindeClient; -import com.kinde.KindeClientBuilder; -import com.kinde.KindeClientSession; -import com.kinde.KindeTokenFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -/** - * Example demonstrating the "hard check" functionality for permissions, roles, and feature flags. - * - * Token-based checks (permissions, roles, feature flags) read directly from the JWT claims - * and work with any token type, including M2M (client credentials) tokens. - * - * API-fallback checks (via KindeAccountsClient) require a user-context token obtained through - * the authorization code flow (e.g., in a Spring Boot or J2EE app with a logged-in user). - * They will not work with M2M tokens because the Account API needs org_code and sub claims. - * - * This standalone example demonstrates token-based checks only. - * For API-fallback examples, see the Spring Boot playground application. - */ -public class HardCheckExample { - - private static final Logger log = LoggerFactory.getLogger(HardCheckExample.class); - - public static void main(String[] args) { - KindeClient client = KindeClientBuilder.builder() - .domain("https://your-domain.kinde.com") - .clientId("your-client-id") - .clientSecret("your-client-secret") - .redirectUri("http://localhost:8080/callback") - .addAudience("https://your-domain.kinde.com/api") - .build(); - - KindeClientSession session = client.clientSession(); - KindeToken token = session.retrieveTokens().getAccessToken(); - - KindeTokenFactory tokenFactory = client.tokenFactory(); - KindeToken parsedToken = tokenFactory.parse(token.token()); - - log.info("Token valid: {}", parsedToken.valid()); - - checkPermissionsFromToken(parsedToken); - checkRolesFromToken(parsedToken); - checkFeatureFlags(parsedToken); - checkFlagValues(parsedToken); - } - - /** - * Check permissions directly from the token claims. - * Permissions are present when users have roles/permissions assigned - * and the token is issued via the authorization code flow (user login). - */ - private static void checkPermissionsFromToken(KindeToken token) { - log.info("=== Permissions (from token claims) ==="); - - List permissions = token.getPermissions(); - if (permissions == null || permissions.isEmpty()) { - log.info("No permissions found in token."); - log.info("Tip: Permissions are included in user tokens when roles are assigned."); - } else { - log.info("Permissions in token: {}", permissions); - - boolean hasRead = token.hasPermission("read:users"); - log.info("Has 'read:users': {}", hasRead); - - List toCheck = Arrays.asList("read:users", "write:users", "delete:users"); - boolean hasAny = token.hasAnyPermission(toCheck); - boolean hasAll = token.hasAllPermissions(toCheck); - log.info("Has any of {}: {}", toCheck, hasAny); - log.info("Has all of {}: {}", toCheck, hasAll); - } - } - - /** - * Check roles directly from the token claims. - * Roles are present when users have roles assigned - * and the token is issued via the authorization code flow (user login). - */ - private static void checkRolesFromToken(KindeToken token) { - log.info("=== Roles (from token claims) ==="); - - List roles = token.getRoles(); - if (roles == null || roles.isEmpty()) { - log.info("No roles found in token."); - log.info("Tip: Roles are included in user tokens when assigned at the organization level."); - } else { - log.info("Roles in token: {}", roles); - - List toCheck = Arrays.asList("admin", "moderator", "user"); - boolean hasAny = token.hasAnyRole(toCheck); - boolean hasAll = token.hasAllRoles(toCheck); - log.info("Has any of {}: {}", toCheck, hasAny); - log.info("Has all of {}: {}", toCheck, hasAll); - } - } - - /** - * Check feature flags from the token claims. - * Feature flags are included when enabled in the Kinde dashboard. - */ - private static void checkFeatureFlags(KindeToken token) { - log.info("=== Feature Flags (from token claims) ==="); - - try { - boolean darkMode = token.isFeatureFlagEnabled("dark_mode"); - log.info("dark_mode enabled: {}", darkMode); - } catch (Exception e) { - log.info("dark_mode: not found in token"); - } - - try { - Object betaValue = token.getFeatureFlagValue("beta_features"); - log.info("beta_features value: {}", betaValue); - } catch (Exception e) { - log.info("beta_features: not found in token"); - } - } - - /** - * Dump all feature flags from the token for inspection. - */ - private static void checkFlagValues(KindeToken token) { - log.info("=== All Feature Flags ==="); - - Map flags = token.getFlags(); - if (flags == null || flags.isEmpty()) { - log.info("No feature flags found in token."); - } else { - for (Map.Entry entry : flags.entrySet()) { - log.info(" {} = {}", entry.getKey(), entry.getValue()); - } - } - } -} From c2ac374d9f81f22a09d26b4447ce626debc75241 Mon Sep 17 00:00:00 2001 From: Koman Rudden Date: Fri, 20 Mar 2026 06:16:52 +0200 Subject: [PATCH 5/5] Removed unnecessary pom entries --- kinde-core/pom.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/kinde-core/pom.xml b/kinde-core/pom.xml index dc884219..95ba47b1 100644 --- a/kinde-core/pom.xml +++ b/kinde-core/pom.xml @@ -121,13 +121,6 @@ org.slf4j slf4j-api - - org.slf4j - slf4j-simple - 2.0.17 - runtime - true - io.github.cdimascio dotenv-java @@ -270,8 +263,6 @@ ${project.basedir}/../kinde-accounts-api.yaml java - false - false src/gen/java/main okhttp-gson