Big escrow generator update

This commit is contained in:
Pinga 2023-08-15 11:45:34 +03:00
parent 821f4bfc84
commit 2ebeed2500
3 changed files with 228 additions and 229 deletions

View file

@ -1,9 +1,25 @@
<?php
return [
'mysql_host' => 'localhost',
'mysql_port' => 3306,
'mysql_database' => 'your_database_name',
'mysql_username' => 'your_username',
'mysql_password' => 'your_password',
// Database Configuration
'db_type' => 'mysql',
'db_host' => 'localhost',
'db_port' => 3306,
'db_database' => 'your_database_name',
'db_username' => 'your_username',
'db_password' => 'your_password',
// Escrow Configuration
'escrow_deposit_path' => '/opt/escrow',
'escrow_deleteXML' => false,
'escrow_RDEupload' => false,
'escrow_keyPath' => '/opt/escrow/escrowKey.asc',
'escrow_privateKey' => '/opt/escrow/privatekey.asc',
'escrow_sftp_host' => 'your.sftp.server.com',
'escrow_sftp_username' => 'your_username',
'escrow_sftp_password' => 'your_password',
'escrow_sftp_remotepath' => '/path/on/sftp/server/',
'escrow_report_url' => 'https://ry-api.icann.org/report/',
'escrow_report_username' => 'your_username',
'escrow_report_password' => 'your_password',
];

View file

@ -1,34 +1,19 @@
<?php
//use phpseclib\Net\SFTP;
use phpseclib\Net\SFTP;
//require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/vendor/autoload.php';
// Database connection using PDO
$host = '127.0.0.1';
$db = 'db_name';
$user = 'db_user';
$pass = 'db_pass';
$charset = 'utf8mb4';
$path = '/opt/escrow';
$deleteXML = false;
$RDEupload = false;
$escrowKey = '/root/escrowKey.asc';
$privateKey = '/root/privatekey.asc';
$c = require_once 'config.php';
require_once 'helpers.php';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
// Database connection
$dsn = "{$c['db_type']}:host={$c['db_host']};dbname={$c['db_database']}";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, $user, $pass, $options);
function fetchCount($pdo, $tableName) {
$stmt = $pdo->prepare("SELECT count(id) AS count FROM {$tableName};");
$stmt->execute();
$result = $stmt->fetch();
return $result['count'];
}
$pdo = new PDO($dsn, $c['db_username'], $c['db_password'], $options);
$domainCount = fetchCount($pdo, 'domain');
$hostCount = fetchCount($pdo, 'host');
@ -289,28 +274,28 @@ foreach ($contacts as $contact) {
$gzipFileName = $baseFileName . ".tar.gz";
// Save the main XML file
file_put_contents($path."/".$xmlFileName, $es, LOCK_EX);
file_put_contents($c['escrow_deposit_path']."/".$xmlFileName, $es, LOCK_EX);
// Compress the XML file using tar
$phar = new PharData($path."/".$tarFileName);
$phar->addFile($path."/".$xmlFileName, $xmlFileName);
$phar = new PharData($c['escrow_deposit_path']."/".$tarFileName);
$phar->addFile($c['escrow_deposit_path']."/".$xmlFileName, $xmlFileName);
// Compress the tar archive using gzip
$phar->compress(Phar::GZ);
// Delete the original tar file
unlink($path."/".$tarFileName);
unlink($c['escrow_deposit_path']."/".$tarFileName);
// Check if the $deleteXML variable is set to true and delete the original XML file
if ($deleteXML) {
unlink($path."/".$xmlFileName);
// Check if the $c['escrow_deleteXML'] variable is set to true and delete the original XML file
if ($c['escrow_deleteXML']) {
unlink($c['escrow_deposit_path']."/".$xmlFileName);
}
// Initialize a GnuPG instance
$res = gnupg_init();
// Get information about the public key from its content
$publicKeyInfo = gnupg_import($res, file_get_contents($escrowKey));
$publicKeyInfo = gnupg_import($res, file_get_contents($c['escrow_keyPath']));
$fingerprint = $publicKeyInfo['fingerprint'];
// Check if the key is already in the keyring
@ -318,11 +303,11 @@ foreach ($contacts as $contact) {
if (!$existingKeys) {
// If not, import the public key
gnupg_import($res, file_get_contents($escrowKey));
gnupg_import($res, file_get_contents($c['escrow_keyPath']));
}
// Read the .tar.gz file contents
$fileData = file_get_contents($path . "/" . $gzipFileName);
$fileData = file_get_contents($c['escrow_deposit_path'] . "/" . $gzipFileName);
// Add the encryption key
gnupg_addencryptkey($res, $fingerprint);
@ -335,19 +320,19 @@ foreach ($contacts as $contact) {
}
// Save the encrypted data to a new file
file_put_contents($path . "/" . $baseFileName . ".ryde", $encryptedData);
file_put_contents($c['escrow_deposit_path'] . "/" . $baseFileName . ".ryde", $encryptedData);
// Delete the original .tar.gz file
unlink($path . "/" . $gzipFileName);
unlink($c['escrow_deposit_path'] . "/" . $gzipFileName);
$encryptedFilePath = $path . "/" . $baseFileName . ".ryde";
$encryptedFilePath = $c['escrow_deposit_path'] . "/" . $baseFileName . ".ryde";
// Initialize the GnuPG extension
$gpg = new gnupg();
$gpg->seterrormode(gnupg::ERROR_EXCEPTION); // throw exceptions on errors
// Import your private key (if it's not already in the keyring)
$privateKeyData = file_get_contents($privateKey);
$privateKeyData = file_get_contents($c['escrow_privateKey']);
$importResult = $gpg->import($privateKeyData);
// Set the key to be used for signing
@ -362,84 +347,12 @@ foreach ($contacts as $contact) {
$signature = $gpg->sign($encryptedData);
// Save the signature to a .sig file
$sigFilePath = $path . '/' . pathinfo($encryptedFilePath, PATHINFO_FILENAME) . '.sig';
file_put_contents($sigFilePath, $signature);
$signatureFilePath = $c['escrow_deposit_path'] . '/' . pathinfo($encryptedFilePath, PATHINFO_FILENAME) . '.sig';
file_put_contents($signatureFilePath, $signature);
// Optionally, delete the encrypted file if you don't need it anymore
// unlink($encryptedFilePath);
if ($RDEupload) {
// Connect to the SFTP server
$sftp = new SFTP('your.sftp.server.com');
// Login with username and password
if (!$sftp->login('yourUsername', 'yourPassword')) {
die('Login failed');
}
// Define the remote directory where you want to upload the files
$remoteDir = '/path/on/sftp/server/';
// Upload the files
$filesToUpload = [
$encryptedFilePath,
$signatureFilePath,
$reportFilePath
];
foreach ($filesToUpload as $filePath) {
$remoteFile = $remoteDir . basename($filePath);
if (!$sftp->put($remoteFile, $filePath, SFTP::SOURCE_LOCAL_FILE)) {
echo "Failed to upload " . basename($filePath) . "\n";
} else {
echo "Successfully uploaded " . basename($filePath) . "\n";
}
}
$url = 'https://ry-api.icann.org/report/registrar-transactions/';
$reportFileData = file_get_contents($reportFilePath);
$ch = curl_init();
// Set cURL options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, 'yourUsername:yourPassword');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $reportFileData);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/octet-stream',
'Content-Length: ' . strlen($reportFileData)
));
$response = curl_exec($ch);
if ($response === false) {
die('Error occurred: ' . curl_error($ch));
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode >= 200 && $httpCode < 300) {
echo "File uploaded successfully.\n";
} else {
echo "Failed to upload file. HTTP Status Code: " . $httpCode . "\n";
}
curl_close($ch);
}
}
// And now the report
foreach ($tlds as $tld) {
$tldname = strtoupper(ltrim($tld['tld'], '.'));
// Skip subdomains
if (strpos($tldname, '.') !== false) {
continue;
}
// Start XMLWriter for the report
$reportXML = new XMLWriter();
$reportXML->openMemory();
@ -501,5 +414,67 @@ foreach ($tlds as $tld) {
$reps = $reportXML->outputMemory();
// Save the report file
file_put_contents($path."/{$tldname}_".date('Y-m-d')."_full_R{$finalDepositId}.rep", $reps, LOCK_EX);
$reportFilePath = $c['escrow_deposit_path']."/{$tldname}_".date('Y-m-d')."_full_R{$finalDepositId}.rep";
file_put_contents($reportFilePath, $reps, LOCK_EX);
if ($c['escrow_RDEupload']) {
// Connect to the SFTP server
$sftp = new SFTP($c['escrow_sftp_host']);
// Login with username and password
if (!$sftp->login($c['escrow_sftp_username'], $c['escrow_sftp_password'])) {
die('Login failed');
}
// Define the remote directory where you want to upload the files
$remoteDir = $c['escrow_sftp_remotepath'];
// Upload the files
$filesToUpload = [
$encryptedFilePath,
$signatureFilePath,
$reportFilePath
];
foreach ($filesToUpload as $filePath) {
$remoteFile = $remoteDir . basename($filePath);
if (!$sftp->put($remoteFile, $filePath, SFTP::SOURCE_LOCAL_FILE)) {
echo "Failed to upload " . basename($filePath) . "\n";
} else {
echo "Successfully uploaded " . basename($filePath) . "\n";
}
}
$reportFileData = file_get_contents($reportFilePath);
$ch = curl_init();
// Set cURL options
curl_setopt($ch, CURLOPT_URL, $c['escrow_report_url']);
curl_setopt($ch, CURLOPT_USERPWD, $c['escrow_report_username'].':'.$c['escrow_report_password']);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $reportFileData);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/octet-stream',
'Content-Length: ' . strlen($reportFileData)
));
$response = curl_exec($ch);
if ($response === false) {
die('Error occurred: ' . curl_error($ch));
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode >= 200 && $httpCode < 300) {
echo "File uploaded successfully.\n";
} else {
echo "Failed to upload file. HTTP Status Code: " . $httpCode . "\n";
}
curl_close($ch);
}
}

8
automation/helpers.php Normal file
View file

@ -0,0 +1,8 @@
<?php
function fetchCount($pdo, $tableName) {
$stmt = $pdo->prepare("SELECT count(id) AS count FROM {$tableName};");
$stmt->execute();
$result = $stmt->fetch();
return $result['count'];
}