Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: P4ADEV-1341 retrieve pdnd access token #4

Merged
merged 37 commits into from
Nov 27, 2024
Merged
Changes from 1 commit
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
6dda65d
P4ADEV-1341 retrieve access token
antocalo Nov 21, 2024
b28d4c3
P4ADEV-1341 edit helm variables
antocalo Nov 21, 2024
3c14c08
P4ADEV-1341 edit helm variables
antocalo Nov 21, 2024
3729434
P4ADEV-1341 add PdndClientImplTest
antocalo Nov 21, 2024
7f98030
P4ADEV-1341 add CertUtilsTest
antocalo Nov 21, 2024
84691ee
P4ADEV-1341 add PdndUtilsTest
antocalo Nov 21, 2024
096811b
P4ADEV-1341 change generic exception
antocalo Nov 21, 2024
b3dd116
P4ADEV-1341 fix issues
antocalo Nov 21, 2024
878d5e2
P4ADEV-1341 refactor
antocalo Nov 22, 2024
717efe0
P4ADEV-1341 introduced cache token
antocalo Nov 22, 2024
3020f16
P4ADEV-1341 add JWTUtilsTest
antocalo Nov 22, 2024
9f5c044
P4ADEV-1341 add excludes to codereview
antocalo Nov 22, 2024
9516cd0
P4ADEV-1341 add unitTest
antocalo Nov 22, 2024
7bc0622
P4ADEV-1341 add PdndServiceTest
antocalo Nov 22, 2024
19c2570
P4ADEV-1341_retrievePDNDAccessToken
LarissaASLeite Nov 22, 2024
94f943c
P4ADEV-1341 fix PdndServiceTest
antocalo Nov 22, 2024
73ca6c7
Merge remote-tracking branch 'origin/P4ADEV-1341_retrievePDNDAccessTo…
antocalo Nov 22, 2024
b441102
P4ADEV-1341 fix PdndServiceTest
antocalo Nov 22, 2024
08fde8a
P4ADEV-1341 fix PdndServiceTest
antocalo Nov 22, 2024
cf54c2f
P4ADEV-1341 fix PdndServiceTest and Dockerfile
antocalo Nov 22, 2024
3ff7eca
P4ADEV-1341 fix Dockerfile
antocalo Nov 22, 2024
4b5d6fa
P4ADEV-1341 add PdndClientImplTest
antocalo Nov 22, 2024
0504483
P4ADEV-1341 add RestTemplateConfig and resolve pr requests
antocalo Nov 25, 2024
37eeb5a
P4ADEV-1341 fix import
antocalo Nov 25, 2024
126b044
P4ADEV-1341 edit timeout restTemplate
antocalo Nov 25, 2024
727ac19
P4ADEV-1341 refactor config
antocalo Nov 26, 2024
be5c7c2
P4ADEV-1341 refactor config
antocalo Nov 26, 2024
edfa8db
P4ADEV-1341 add RestTemplateConfig
antocalo Nov 26, 2024
1b95770
P4ADEV-1341 fix test
antocalo Nov 26, 2024
cde681c
P4ADEV-1341 upgrade jdk version
antocalo Nov 26, 2024
2858518
P4ADEV-1341 refactor config
antocalo Nov 26, 2024
78dd618
P4ADEV-1341 upgrade jdk version
antocalo Nov 26, 2024
c30e1dc
P4ADEV-1341 resolve isseus
antocalo Nov 26, 2024
5f328f6
P4ADEV-1341 - fix issues
antocalo Nov 27, 2024
7dfdc61
P4ADEV-1341 rename class
antocalo Nov 27, 2024
c5127af
P4ADEV-1341 fix
antocalo Nov 27, 2024
3306841
P4ADEV-1341 - rename ENV variable
antocalo Nov 27, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
P4ADEV-1341 add PdndUtilsTest
antocalo committed Nov 21, 2024
commit 84691ee591ac50a68a4a442a248545fe67214967
Original file line number Diff line number Diff line change
@@ -11,6 +11,7 @@
import java.util.Base64;

public class CertUtils {
private CertUtils(){}

public static RSAPrivateKey pemKey2PrivateKey(String privateKey) throws InvalidKeySpecException, NoSuchAlgorithmException, IOException {
String keyStringFormat = extractInlinePemBody(privateKey);
9 changes: 3 additions & 6 deletions src/main/java/it/gov/pagopa/payhub/pdnd/utils/PdndUtils.java
Original file line number Diff line number Diff line change
@@ -8,9 +8,6 @@
import com.nimbusds.jwt.JWTClaimsSet;
import com.nimbusds.jwt.SignedJWT;
import it.gov.pagopa.payhub.pdnd.config.PdndConfig;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.Date;
import java.util.UUID;
import org.springframework.stereotype.Service;
@@ -26,11 +23,11 @@ public PdndUtils(PdndConfig pdndConfig) {

public String buildPdndClientAssertion()
throws Exception {
JWTClaimsSet claims = setPdndClientAssertionClaims();
JWTClaimsSet claims = buildPdndClientAssertionClaims();
return signPdndJWT(claims);
}

private JWTClaimsSet setPdndClientAssertionClaims() {
public JWTClaimsSet buildPdndClientAssertionClaims() {
long now = System.currentTimeMillis() / 1000;
return new JWTClaimsSet.Builder()
.issuer(pdndConfig.getClientId())
@@ -43,7 +40,7 @@ private JWTClaimsSet setPdndClientAssertionClaims() {
.build();
}

private String signPdndJWT(JWTClaimsSet claims) throws Exception {
public String signPdndJWT(JWTClaimsSet claims) throws Exception {
JWSSigner signer = new RSASSASigner(CertUtils.pemKey2PrivateKey(pdndConfig.getKey()));
SignedJWT signedJWT = new SignedJWT(
new JWSHeader.Builder(JWSAlgorithm.RS256)
118 changes: 118 additions & 0 deletions src/test/java/it/gov/pagopa/payhub/pdnd/utils/PdndUtilsTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
package it.gov.pagopa.payhub.pdnd.utils;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.times;

import com.nimbusds.jwt.JWTClaimsSet;
import com.nimbusds.jwt.SignedJWT;
import it.gov.pagopa.payhub.pdnd.config.PdndConfig;
import java.util.Date;
import java.util.UUID;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
class PdndUtilsTest {

@InjectMocks
private PdndUtils pdndUtils;

@Mock
private PdndConfig pdndConfig;

private String pemKey = """
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCT5fdA/ZKoyLas
R5/kxfFm8KBz4v3i8k76Xd8j2vh8kBaapzn9hAHWJXOJ+GOUFOxkw1bnI2PUtZjj
tw49XrjcxQ37sOV407+B3ko49zZjNB97OPFQyZx9V3uNcBjKnM3UqNbcBwdIIlVW
Egt0Cao7gEGE1CKsaXpuZkofVgGo5f8K8IdETLJPFuspDTR4UPofDraL2HCxbsVx
dE0UBFXgB9vQmBMkPk27cz+Ze6j5wgSGME/A+YCCp1uvJqWK/uRfGxMRyVYInR5H
bDiI06iZwiLLW1Pf6gE3CCYSUw42VnPHODaitjJ6XLkolB5xsUprkttIg+UrRGSa
9J3xg3gNAgMBAAECggEASKjRCS/KjntVK1xg1F7e0yjiWyyoeId8f4oApzfbni6X
vFDtr3vb/x4VHjJWkZiZ7oL9Pb7oO8cfnrf/Ge1gOq3gycdFZU/6JM5VfpkNMj2Y
Pcxi2cLCy91fyMPKmjfg81ojfKNDU4/yhr+EuvRImsTO63fgtP149aXxQmXZmOTu
TFjSNTRfvtMgHN0Em1PUgQxO8oUh3Djf5spjAJ/w+gVBSYsYSv5sOOi2H/qZSALZ
hc1t4GfzNKZuyG8FxNwH1SIVkKTYQnDhyiE9426tq6Kiuqvh2MspVJcRGpbaxgr2
q++ZZrAl60ma5U2hUEgG5oLGjyrgQjEyroZhEokgLQKBgQDKIeAJ/FYdEX4cvHhS
kuUpHQjpZtwOwC+vr4ojudpjLDOTTdkFXzd7jeCmjp4r1/arRxx1KZWP0fxlUEov
0LDiaU0zBeol/q0ayq5XnhJNVngCyKjQQ+Np1eIGTIIGOkAm8LlnEsvlQLbuOYZ4
eeeplBW3h321MFKgch7IyqBb5wKBgQC7UBG/ypw6RWPUOHYdtY1nLCQQJjvKCOMT
DolkFB2UUuNfNGK6PDUL9KbPIsrHJLw0oGoqQyBkInVMG5jJb/bHdH0spiKGn51u
orMk/xsA990Kqt+DT1Z5fEpoPchGMc529JR5h43n1n5s8/6jyDa5JNLFnS9xKZTm
IvV/Nayt6wKBgGxpSs5QRqeEkE09UJOJMduhNPxqLLDEp07lKYQL1HPIa0kgQbu9
2/YqnEj4ySDezfADTeIREaR3jZWRQJjwp05oB/3LuE/0jkeGWYeowkw0il2D3fcF
0l0bWATk2AAbEflQtz/vNuiYkwSmWdcYGwY65ILw6p1Zc5eWXah39RYVAoGAI93Y
GDZupcXFsMxC6btq4ReVrDX1+uCqwmplKnGjnFQmz4MTaH/A1JI7IqyR0YIaO6V/
zqnd2O60MSeToPa8dUK7+UGymL6VgarLzMjAXfYYMEO52sXlVAvVn5I8+BvvYd3B
VGf9ZyguOySZXLkoqVkAtvA7Nlr09QA6q+oWL5MCgYAsLS2PEMY/HMR1Z5P/uMxw
q7eQ7K3YYKcJpbM2da7r38UaZc/HhtiaU/XOdTnT/M/eF4hoW0yxO5YKfgurgosz
OjAnn7+Ed5S5Sh8E4EHUGCcawErZEZCtlsns0fNPGfNjadZAjq0X+5VP1EVXca0B
VrSp9ZTif3cvyxNTOogbgA==
-----END PRIVATE KEY-----
""";


@Test
void whenBuildPdndClientAssertionThesVerify() throws Exception {
// When
Mockito.when(pdndConfig.getClientId()).thenReturn("CLIENTID");
Mockito.when(pdndConfig.getAudience()).thenReturn("AUDIENCE");
Mockito.when(pdndConfig.getPurposeId()).thenReturn("PURPOSEID");
Mockito.when(pdndConfig.getKey()).thenReturn(pemKey);
Mockito.when(pdndConfig.getKid()).thenReturn("KID");

String token = pdndUtils.buildPdndClientAssertion();

// Then
assertNotNull(token);
Mockito.verify(pdndConfig, times(2)).getClientId();
Mockito.verify(pdndConfig).getAudience();
Mockito.verify(pdndConfig).getPurposeId();
Mockito.verify(pdndConfig).getKey();
Mockito.verify(pdndConfig).getKid();
}

@Test
void whenBuildPdndClientAssertionClaimsThenVerify() {
// Given
Mockito.when(pdndConfig.getClientId()).thenReturn("CLIENTID");
Mockito.when(pdndConfig.getAudience()).thenReturn("AUDIENCE");
Mockito.when(pdndConfig.getPurposeId()).thenReturn("PURPOSEID");
// When
JWTClaimsSet claims = pdndUtils.buildPdndClientAssertionClaims();

// Then
assertNotNull(claims);
assertEquals("CLIENTID", claims.getIssuer());
assertEquals("CLIENTID", claims.getSubject());
assertEquals("AUDIENCE", claims.getAudience().get(0));
assertEquals("PURPOSEID", claims.getClaim("purposeId"));
assertNotNull(claims.getIssueTime());
assertNotNull(claims.getExpirationTime());
assertNotNull(claims.getJWTID());
}

@Test
void whenSignPdndJWTThenVerify() throws Exception {
Mockito.when(pdndConfig.getKey()).thenReturn(pemKey);

JWTClaimsSet claims = new JWTClaimsSet.Builder()
.issuer("CLIENTID")
.subject("SUBJECT")
.audience("AUDIENCE")
.issueTime(new Date())
.expirationTime(new Date(System.currentTimeMillis() + 300000))
.jwtID(UUID.randomUUID().toString())
.build();

String signedJWT = pdndUtils.signPdndJWT(claims);

SignedJWT parsedJWT = SignedJWT.parse(signedJWT);
assertNotNull(parsedJWT);
assertEquals("CLIENTID", parsedJWT.getJWTClaimsSet().getIssuer());
}
}