Skip to content

Commit 4c5f15b

Browse files
committed
fix: Address CodeRabbit review comments
- Change State.ACTIVE to State.TEST in ConnectionIdTest for consistency - Fix testGetConnectionIdPreferDirectOverNested to properly test preference - Add generateIDTokenWithBothConnectionIds() method to JwtGenerator - Test now verifies direct connection_id is preferred over nested - Fix KindeAuthenticationFilter and KindeAuthenticationServlet: - Add missing supports_reauth=true for REGISTER action - Add missing is_create_org=true for CREATE_ORG action - Fix typo: 'proved' -> 'provided' - Ensure parameter preservation matches dedicated method behavior
1 parent 7275c40 commit 4c5f15b

File tree

6 files changed

+53
-6
lines changed

6 files changed

+53
-6
lines changed

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"java.compile.nullAnalysis.mode": "automatic"
3+
}

kinde-core/src/test/java/com/kinde/session/ConnectionIdTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class ConnectionIdTest {
2424
public void setUp() {
2525
KindeGuiceSingleton.fin();
2626
KindeEnvironmentSingleton.fin();
27-
KindeEnvironmentSingleton.init(KindeEnvironmentSingleton.State.ACTIVE);
27+
KindeEnvironmentSingleton.init(KindeEnvironmentSingleton.State.TEST);
2828

2929
KindeGuiceSingleton.init(
3030
new KindeCoreGuiceTestModule(),

kinde-core/src/test/java/com/kinde/token/ConnectionIdTokenTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,18 @@ public void testGetConnectionIdWhenNotPresent() throws Exception {
5252
@Test
5353
@DisplayName("getConnectionId should prefer direct connection_id over nested ext_provider.connection_id")
5454
public void testGetConnectionIdPreferDirectOverNested() throws Exception {
55-
// Create a token with direct connection_id
55+
// Create a token with both direct and nested connection_id to test preference
5656
String directConnectionId = "conn_direct_123";
57+
String nestedConnectionId = "conn_nested_456";
5758

58-
// For this test, we'll use the direct one and verify it's preferred
59-
String tokenString = JwtGenerator.generateIDTokenWithConnectionId(directConnectionId);
59+
String tokenString = JwtGenerator.generateIDTokenWithBothConnectionIds(directConnectionId, nestedConnectionId);
6060

6161
KindeToken kindeToken = IDToken.init(tokenString, true);
6262

6363
assertNotNull(kindeToken);
6464
assertTrue(kindeToken.valid());
6565
assertEquals(directConnectionId, kindeToken.getConnectionId(),
66-
"getConnectionId() should prefer direct connection_id claim");
66+
"getConnectionId() should prefer direct connection_id over ext_provider.connection_id");
6767
}
6868

6969
@Test

kinde-core/src/test/java/com/kinde/token/jwt/JwtGenerator.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,4 +305,44 @@ public static String generateIDTokenWithExtProviderConnectionId(String connectio
305305
signedJWT.sign(signer);
306306
return signedJWT.serialize();
307307
}
308+
309+
@SneakyThrows
310+
public static String generateIDTokenWithBothConnectionIds(String directConnectionId, String nestedConnectionId) {
311+
RSAKey rsaJWK = new RSAKeyGenerator(2048)
312+
.keyID("123")
313+
.generate();
314+
315+
JWSSigner signer = new RSASSASigner(rsaJWK);
316+
Date now = new Date();
317+
318+
Map<String,Object> featureFlags = new HashMap<>();
319+
featureFlags.put("test_str","test_str");
320+
featureFlags.put("test_integer",Integer.valueOf(1));
321+
featureFlags.put("test_boolean",Boolean.valueOf(false));
322+
323+
Map<String, Object> extProvider = new HashMap<>();
324+
extProvider.put("connection_id", nestedConnectionId);
325+
326+
JWTClaimsSet jwtClaims = new JWTClaimsSet.Builder()
327+
.issuer("https://openid.net")
328+
.subject("test")
329+
.audience(Arrays.asList("https://kinde.com"))
330+
.expirationTime(new Date(now.getTime() + 1000*60*10))
331+
.notBeforeTime(now)
332+
.issueTime(now)
333+
.claim("permissions",Arrays.asList("test1","test1"))
334+
.claim("org_codes",Arrays.asList("test1","test1"))
335+
.claim("feature_flags",featureFlags)
336+
.claim("connection_id", directConnectionId)
337+
.claim("ext_provider", extProvider)
338+
.jwtID(UUID.randomUUID().toString())
339+
.build();
340+
341+
SignedJWT signedJWT = new SignedJWT(
342+
new JWSHeader.Builder(JWSAlgorithm.RS256).keyID(rsaJWK.getKeyID()).build(),
343+
jwtClaims);
344+
345+
signedJWT.sign(signer);
346+
return signedJWT.serialize();
347+
}
308348
}

kinde-j2ee/src/main/java/com/kinde/filter/KindeAuthenticationFilter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,17 +81,19 @@ protected void doFilter(ServletRequest servletRequest, ServletResponse servletRe
8181
} else {
8282
Map<String, String> registerParams = new HashMap<>(parameters);
8383
registerParams.put("prompt", "create");
84+
registerParams.put("supports_reauth", "true");
8485
authorizationUrl = kindeClientSession.authorizationUrlWithParameters(registerParams);
8586
}
8687
} else if (kindeAuthenticationAction == KindeAuthenticationAction.CREATE_ORG) {
8788
if (req.getParameter(ORG_NAME) == null) {
88-
throw new ServletException("Must proved org_name query parameter to create an organisation.");
89+
throw new ServletException("Must provide org_name query parameter to create an organisation.");
8990
}
9091
if (parameters.isEmpty()) {
9192
authorizationUrl = kindeClientSession.createOrg(req.getParameter(ORG_NAME));
9293
} else {
9394
Map<String, String> createOrgParams = new HashMap<>(parameters);
9495
createOrgParams.put("prompt", "create");
96+
createOrgParams.put("is_create_org", Boolean.TRUE.toString());
9597
createOrgParams.put("org_name", req.getParameter(ORG_NAME));
9698
authorizationUrl = kindeClientSession.authorizationUrlWithParameters(createOrgParams);
9799
}

kinde-j2ee/src/main/java/com/kinde/servlet/KindeAuthenticationServlet.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp, KindeAuth
7979
} else {
8080
Map<String, String> registerParams = new HashMap<>(parameters);
8181
registerParams.put("prompt", "create");
82+
registerParams.put("supports_reauth", "true");
8283
authorizationUrl = kindeClientSession.authorizationUrlWithParameters(registerParams);
8384
}
8485
} else if (kindeAuthenticationAction == KindeAuthenticationAction.CREATE_ORG) {
@@ -90,6 +91,7 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp, KindeAuth
9091
} else {
9192
Map<String, String> createOrgParams = new HashMap<>(parameters);
9293
createOrgParams.put("prompt", "create");
94+
createOrgParams.put("is_create_org", Boolean.TRUE.toString());
9395
createOrgParams.put("org_name", req.getParameter(ORG_NAME));
9496
authorizationUrl = kindeClientSession.authorizationUrlWithParameters(createOrgParams);
9597
}

0 commit comments

Comments
 (0)