Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -1,18 +1,19 @@
|
|||||||
package acq.acq.src;
|
package acq.acq.src;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.net.ssl.KeyManagerFactory;
|
||||||
|
import javax.net.ssl.SSLContext;
|
||||||
|
import javax.net.ssl.SSLSocket;
|
||||||
|
import javax.net.ssl.SSLSocketFactory;
|
||||||
|
import javax.net.ssl.TrustManagerFactory;
|
||||||
|
|
||||||
import common.common.src.crypto.KeyFactory;
|
import common.common.src.crypto.KeyFactory;
|
||||||
import common.common.src.logger.Logger;
|
import common.common.src.logger.Logger;
|
||||||
|
import static common.common.src.ports.Ports.ACQ_SERVER_PORT;
|
||||||
|
import static common.common.src.ports.Ports.ACS_SERVER_PORT;
|
||||||
import common.common.src.requestHandlers.SSLServerFactory;
|
import common.common.src.requestHandlers.SSLServerFactory;
|
||||||
import common.common.src.socket.SocketManager;
|
import common.common.src.socket.SocketManager;
|
||||||
|
|
||||||
import javax.net.ssl.*;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
|
|
||||||
import static common.common.src.ports.Ports.*;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
|
|
||||||
private static final String HOST = "127.0.0.1";
|
private static final String HOST = "127.0.0.1";
|
||||||
@@ -35,9 +36,6 @@ public class Main {
|
|||||||
ctx = SSLContext.getInstance("TLS");
|
ctx = SSLContext.getInstance("TLS");
|
||||||
ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
|
ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
|
||||||
|
|
||||||
//requestACS(ctx, ACS_SERVER_PORT);
|
|
||||||
//requestACS(ctx, AUTH_PORT);
|
|
||||||
|
|
||||||
Thread ACQServer = SSLServerFactory.createServer(ctx, ACQ_SERVER_PORT, Main::handleRequest);
|
Thread ACQServer = SSLServerFactory.createServer(ctx, ACQ_SERVER_PORT, Main::handleRequest);
|
||||||
ACQServer.start();
|
ACQServer.start();
|
||||||
|
|
||||||
@@ -49,8 +47,7 @@ public class Main {
|
|||||||
Logger.displayReceived(response);
|
Logger.displayReceived(response);
|
||||||
|
|
||||||
|
|
||||||
// contact ACS
|
// Setup Connection ACS
|
||||||
|
|
||||||
SSLSocketFactory factory = ctx.getSocketFactory();
|
SSLSocketFactory factory = ctx.getSocketFactory();
|
||||||
SSLSocket socketACS = (SSLSocket) factory.createSocket(Main.HOST, ACS_SERVER_PORT);
|
SSLSocket socketACS = (SSLSocket) factory.createSocket(Main.HOST, ACS_SERVER_PORT);
|
||||||
socketACS.startHandshake();
|
socketACS.startHandshake();
|
||||||
@@ -60,11 +57,12 @@ public class Main {
|
|||||||
SocketManager.send(socketACS, request);
|
SocketManager.send(socketACS, request);
|
||||||
Logger.displaySent(request);
|
Logger.displaySent(request);
|
||||||
|
|
||||||
|
// Wait for ACK or NAK
|
||||||
|
|
||||||
response = SocketManager.readResponse(socketACS);
|
response = SocketManager.readResponse(socketACS);
|
||||||
Logger.displayReceived(response);
|
Logger.displayReceived(response);
|
||||||
|
|
||||||
// Send back ACK or NAK
|
// Send back ACK or NAk To https server
|
||||||
|
|
||||||
SocketManager.send(serverSocket, response);
|
SocketManager.send(serverSocket, response);
|
||||||
|
|
||||||
}catch (IOException ioe){
|
}catch (IOException ioe){
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ public class Main {
|
|||||||
Logger.displayInfo("Détails de la carte OK");
|
Logger.displayInfo("Détails de la carte OK");
|
||||||
|
|
||||||
PrivateKey privateKey = CryptoUtils.getPrivateKey(KEY_STORE_PATH, KEY_STORE_PWD, "acs");
|
PrivateKey privateKey = CryptoUtils.getPrivateKey(KEY_STORE_PATH, KEY_STORE_PWD, "acs");
|
||||||
String token = tokenManager.generateAndStoreToken();
|
String token = tokenManager.generateAndStoreTokenFor(creditCard.number());
|
||||||
String signedToken = CryptoUtils.signData(privateKey, token);
|
String signedToken = CryptoUtils.signData(privateKey, token);
|
||||||
|
|
||||||
Map<String, Object> data = Map.of("token", token, "signature", signedToken);
|
Map<String, Object> data = Map.of("token", token, "signature", signedToken);
|
||||||
@@ -128,7 +128,7 @@ public class Main {
|
|||||||
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
|
||||||
// 1. Date d'expiration est future
|
// 1. Date d'expiration est future
|
||||||
if (cardDate.isAfter(now)) {
|
if (now.isAfter(cardDate)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,18 +2,19 @@ package acs.acs.src;
|
|||||||
|
|
||||||
import common.common.src.crypto.CryptoUtils;
|
import common.common.src.crypto.CryptoUtils;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class TokenManager {
|
public class TokenManager {
|
||||||
private final HashSet<String> tokens = new HashSet<String>();
|
private final Map<String, String> tokens = new HashMap<String, String>();
|
||||||
|
|
||||||
public String generateAndStoreToken() {
|
public String generateAndStoreTokenFor(String cardNumber) {
|
||||||
String token = CryptoUtils.generateToken();
|
String token = CryptoUtils.generateToken();
|
||||||
tokens.add(token);
|
tokens.put(cardNumber, token);
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isValidToken(String token) {
|
public boolean isValidToken(String token) {
|
||||||
return tokens.contains(token);
|
return tokens.containsValue(token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,12 +30,13 @@ public class Main {
|
|||||||
|
|
||||||
public static void main(String[] args) throws IOException, KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, InvalidKeyException, SignatureException, URISyntaxException, CertificateException, KeyManagementException {
|
public static void main(String[] args) throws IOException, KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, InvalidKeyException, SignatureException, URISyntaxException, CertificateException, KeyManagementException {
|
||||||
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
|
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
|
||||||
// String expirationDate = acquireStringInput( br,"Quel est la date d'expiration de la carte de crédit (MM/AA) ? ");
|
String expirationDate = acquireStringInput( br,"Quel est la date d'expiration de la carte de crédit (MM/AA) ? ");
|
||||||
// String cardNumber = acquireStringInput(br, "Numéro de la carte de crédit : ");
|
String cardNumber = acquireStringInput(br, "Numéro de la carte de crédit : ");
|
||||||
|
|
||||||
String expirationDate = "01/01";
|
// String expirationDate = "01/01"; // Invalid date for testing
|
||||||
|
// String expirationDate = "01/26"; // Valid date for testing
|
||||||
// String cardNumber = "0123456789012345"; // Invalid card for testing
|
// String cardNumber = "0123456789012345"; // Invalid card for testing
|
||||||
String cardNumber = "123456789056"; // Valid card for testing
|
// String cardNumber = "123456789056"; // Valid card for testing
|
||||||
|
|
||||||
String jsonString = buildCreditCardJson(expirationDate, cardNumber);
|
String jsonString = buildCreditCardJson(expirationDate, cardNumber);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user