This commit is contained in:
Cédric
2025-12-03 15:52:47 +01:00
2 changed files with 77 additions and 2 deletions

View File

@@ -0,0 +1,9 @@
package common.common.src.ports;
public class Ports {
/**
* Port d'écoute du service ACS pour la communication avec l'application externe.
*/
public static int PORT_AUTH = 8786;
public static String ACS_HOST = "127.0.0.1";
}

View File

@@ -1,9 +1,75 @@
package externalApp.externalApp.src;
import common.common.src.ports.Ports;
import common.common.src.logger.Logger;
import org.gradle.internal.impldep.com.fasterxml.jackson.databind.ObjectMapper;
import org.gradle.internal.impldep.com.fasterxml.jackson.databind.node.ObjectNode;
import javax.net.ssl.HttpsURLConnection;
import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.cert.CertificateException;
import java.util.Base64;
public class Main {
public static void main(String[] args) {
Logger.displayInfo("Hello World");
public static void main(String[] args) throws IOException, KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, InvalidKeyException, SignatureException, URISyntaxException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Quel est la date d'expiration de la carte de crédit ? (MM/AA)");
String expirationDate = br.readLine();
Logger.displayInfo("Date d'expiration saisie : " + expirationDate);
System.out.println("Numéro de la carte de crédit : ");
String cardNumber = br.readLine();
Logger.displayInfo("Numéro de carte saisi : " + cardNumber);
// Construction du JSON
ObjectMapper mapper = new ObjectMapper();
ObjectNode json = mapper.createObjectNode();
json.put("expirationDate", expirationDate);
json.put("cardNumber", cardNumber);
String jsonString = mapper.writeValueAsString(json);
// Signer le JSON
KeyStore keyStore = KeyStore.getInstance("PKCS12");
char[] password = /* TODO */.toCharArray();
try (FileInputStream pkFile = new FileInputStream("ma_cle.p12")) {
keyStore.load(pkFile, password);
} catch (CertificateException | NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
PrivateKey privateKey = (PrivateKey) keyStore.getKey(/* TODO */, password);
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(privateKey);
signature.update(jsonString.getBytes(StandardCharsets.UTF_8));
byte[] signedBytes = signature.sign();
String signatureBase64 = Base64.getEncoder().encodeToString(signedBytes);
// Construction du JSON final avec la signature
ObjectNode finalJson = mapper.createObjectNode();
finalJson.put("data", jsonString);
finalJson.put("signature", signatureBase64);
String finalPayload = mapper.writeValueAsString(finalJson);
// Envoi à l'ACS
Logger.displayInfo("Envoi des informations au service d'authentification sur le port " + Ports.PORT_AUTH + " à l'hôte " + Ports.ACS_HOST);
URL url = new URI("https://" + Ports.ACS_HOST + ":" + Ports.PORT_AUTH).toURL();
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setDoOutput(true);
try (OutputStream os = con.getOutputStream()) {
os.write(finalPayload.getBytes(StandardCharsets.UTF_8));
Logger.displaySent("Payload final envoyé : " + finalPayload);
}
int responseCode = con.getResponseCode();
Logger.displayReceived("Code de réponse reçu : " + responseCode);
}
}