import base64
import json
from urllib.request import urlopen, Request
from urllib.error import URLError
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.backends import default_backend

API_URL = "http://localhost:6789"

# Get public key
req = Request(f"{API_URL}/api/v1/auth/public-key", method="GET")
with urlopen(req, timeout=10) as response:
    result = json.loads(response.read().decode())
    pub_key_pem = base64.b64decode(result["public_key"])

# Encrypt password
public_key = serialization.load_pem_public_key(pub_key_pem, default_backend())
password = "Mecedora12"
encrypted = public_key.encrypt(password.encode(), padding.PKCS1v15())
encrypted_b64 = base64.b64encode(encrypted).decode()

# Register certificate
data = {
    "cert_name": "personal",
    "cert_path": "C:/Users/jmest/GolandProjects/VerifactuMidAPI/data/certs/personal.p12",
    "password_encrypted": encrypted_b64
}

req = Request(
    f"{API_URL}/api/v1/auth/register",
    data=json.dumps(data).encode(),
    method="POST"
)
req.add_header("Content-Type", "application/json")
try:
    with urlopen(req, timeout=30) as response:
        result = json.loads(response.read().decode())
        print(json.dumps(result, indent=2))
except URLError as e:
    print(f"Error: {e}")