<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, PUT, PATCH, OPTIONS');
header('Content-Type: application/json');

// Ruta al certificado del cliente
$certFile = '/etc/ssl/certs/camaracomercio.crt';

// Datos recibidos del cliente
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset($_FILES['firma']) || !file_exists($_FILES['firma']['tmp_name'])) {
        http_response_code(400);
        echo json_encode(['error' => 'Archivo de firma no enviado']);
        exit;
    }

    $firma = file_get_contents($_FILES['firma']['tmp_name']);
    $semillaOriginal = $_POST['semilla'] ?? '';

    if (empty($semillaOriginal)) {
        http_response_code(400);
        echo json_encode(['error' => 'Semilla no enviada']);
        exit;
    }

    // Validar la firma usando el certificado del cliente
    $publicKey = openssl_pkey_get_public("file://$certFile");
    $verificado = openssl_verify($semillaOriginal, base64_decode($firma), $publicKey, OPENSSL_ALGO_SHA256);

    if ($verificado !== 1) {
        http_response_code(401);
        echo json_encode(['error' => 'Firma inválida']);
        exit;
    }

    // Generar un token
    $token = bin2hex(random_bytes(32));
    $expira = (new DateTime())->modify('+1 hour')->format(DateTime::ATOM);

    // Respuesta con el token
    echo json_encode([
        'token' => $token,
        'expira' => $expira,
        'expedido' => (new DateTime())->format(DateTime::ATOM)
    ]);
} else {
    http_response_code(405);
    echo json_encode(['error' => 'Método no permitido']);
}
