mirror of
https://github.com/getnamingo/registry.git
synced 2025-05-10 16:58:34 +02:00
Updated epp domain create; added secdns extension
This commit is contained in:
parent
1c2c147601
commit
fc1d1b844f
2 changed files with 233 additions and 168 deletions
|
@ -1012,6 +1012,9 @@ function processDomainCreate($conn, $db, $xml, $clid, $database_type, $trans) {
|
|||
$registrantStmt->execute([':registrant' => $registrant_id]);
|
||||
$registrant_id = $registrantStmt->fetchColumn();
|
||||
|
||||
try {
|
||||
$db->beginTransaction();
|
||||
|
||||
$domainSql = "INSERT INTO `domain` (`name`,`tldid`,`registrant`,`crdate`,`exdate`,`update`,`clid`,`crid`,`upid`,`trdate`,`trstatus`,`reid`,`redate`,`acid`,`acdate`,`rgpstatus`,`addPeriod`)
|
||||
VALUES(:name, :tld_id, :registrant_id, CURRENT_TIMESTAMP, DATE_ADD(CURRENT_TIMESTAMP, INTERVAL :date_add MONTH), NULL, :registrar_id, :registrar_id, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'addPeriod', :date_add2)";
|
||||
|
||||
|
@ -1032,6 +1035,61 @@ function processDomainCreate($conn, $db, $xml, $clid, $database_type, $trans) {
|
|||
':authInfo_pw' => $authInfo_pw
|
||||
]);
|
||||
|
||||
$secDNSDataSet = $xml->xpath('//secDNS:dsData');
|
||||
|
||||
if ($secDNSDataSet) {
|
||||
foreach ($secDNSDataSet as $secDNSData) {
|
||||
// Extract dsData elements
|
||||
$keyTag = (int) $secDNSData->xpath('secDNS:keyTag')[0] ?? null;
|
||||
$alg = (int) $secDNSData->xpath('secDNS:alg')[0] ?? null;
|
||||
$digestType = (int) $secDNSData->xpath('secDNS:digestType')[0] ?? null;
|
||||
$digest = (string) $secDNSData->xpath('secDNS:digest')[0] ?? null;
|
||||
$maxSigLife = $secDNSData->xpath('secDNS:maxSigLife') ? (int) $secDNSData->xpath('secDNS:maxSigLife')[0] : null;
|
||||
|
||||
|
||||
// Data sanity checks
|
||||
if (!$keyTag || !$alg || !$digestType || !$digest) {
|
||||
sendEppError($conn, 2005, 'Incomplete or invalid dsData provided', $clTRID);
|
||||
return;
|
||||
}
|
||||
|
||||
// Extract keyData elements if available
|
||||
$flags = null;
|
||||
$protocol = null;
|
||||
$algKeyData = null;
|
||||
$pubKey = null;
|
||||
|
||||
if ($secDNSData->xpath('secDNS:keyData')) {
|
||||
$flags = (int) $secDNSData->xpath('secDNS:keyData/secDNS:flags')[0];
|
||||
$protocol = (int) $secDNSData->xpath('secDNS:keyData/secDNS:protocol')[0];
|
||||
$algKeyData = (int) $secDNSData->xpath('secDNS:keyData/secDNS:alg')[0];
|
||||
$pubKey = (string) $secDNSData->xpath('secDNS:keyData/secDNS:pubKey')[0];
|
||||
|
||||
// Data sanity checks for keyData
|
||||
if (!$flags || !$protocol || !$algKeyData || !$pubKey) {
|
||||
sendEppError($conn, 2005, 'Incomplete or invalid keyData provided', $clTRID);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$stmt = $db->prepare("INSERT INTO `secdns` (`domain_id`, `maxsiglife`, `interface`, `keytag`, `alg`, `digesttype`, `digest`, `flags`, `protocol`, `keydata_alg`, `pubkey`) VALUES (:domain_id, :maxsiglife, :interface, :keytag, :alg, :digesttype, :digest, :flags, :protocol, :keydata_alg, :pubkey)");
|
||||
|
||||
$stmt->execute([
|
||||
':domain_id' => $domain_id,
|
||||
':maxsiglife' => $maxSigLife,
|
||||
':interface' => 'dsData',
|
||||
':keytag' => $keyTag,
|
||||
':alg' => $alg,
|
||||
':digesttype' => $digestType,
|
||||
':digest' => $digest,
|
||||
':flags' => $flags ?? null,
|
||||
':protocol' => $protocol ?? null,
|
||||
':keydata_alg' => $algKeyData ?? null,
|
||||
':pubkey' => $pubKey ?? null
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
$updateRegistrarStmt = $db->prepare("UPDATE `registrar` SET `accountBalance` = (`accountBalance` - :price) WHERE `id` = :registrar_id");
|
||||
$updateRegistrarStmt->execute([
|
||||
':price' => $price,
|
||||
|
@ -1195,6 +1253,12 @@ function processDomainCreate($conn, $db, $xml, $clid, $database_type, $trans) {
|
|||
}
|
||||
$db->exec("UPDATE `statistics` SET `created_domains` = `created_domains` + 1 WHERE `date` = CURDATE()");
|
||||
|
||||
$db->commit();
|
||||
} catch (Exception $e) {
|
||||
$db->rollBack();
|
||||
|
||||
sendEppError($conn, 2400, "Database failure: " . $e->getMessage(), $clTRID);
|
||||
}
|
||||
$svTRID = generateSvTRID();
|
||||
$response = [
|
||||
'command' => 'create_domain',
|
||||
|
|
|
@ -75,6 +75,7 @@ $server->handle(function (Connection $conn) use ($table, $db, $c) {
|
|||
$xml->registerXPathNamespace('domain', 'urn:ietf:params:xml:ns:domain-1.0');
|
||||
$xml->registerXPathNamespace('contact', 'urn:ietf:params:xml:ns:contact-1.0');
|
||||
$xml->registerXPathNamespace('host', 'urn:ietf:params:xml:ns:host-1.0');
|
||||
$xml->registerXPathNamespace('secDNS', 'urn:ietf:params:xml:ns:secDNS-1.1');
|
||||
|
||||
if ($xml === false) {
|
||||
sendEppError($conn, 2001, 'Invalid XML');
|
||||
|
|
Loading…
Add table
Reference in a new issue