AWSRoute53API.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. namespace MGModule\DNSManager2\mgLibs\custom\dns\submodules\AWSRoute53;
  3. use MGModule\DNSManager2\mgLibs\custom\dns\submodules\AWSRoute53 as awsRoute53;
  4. class AWSRoute53API
  5. {
  6. private $requestHandler;
  7. public function __construct(awsRoute53\AWSRoute53RequestInterface $requestHandler)
  8. {
  9. $this->requestHandler = $requestHandler;
  10. }
  11. public function createZone($name, $delegationSetId = false)
  12. {
  13. $body = $this->getCreateBody($name, $delegationSetId);
  14. return $this->requestHandler->makeRequest('/2013-04-01/hostedzone', 'POST', __FUNCTION__, $body);
  15. }
  16. public function listZones()
  17. {
  18. return $this->requestHandler->makeRequest('/2013-04-01/hostedzone', 'GET', __FUNCTION__);
  19. }
  20. public function testConnection()
  21. {
  22. return $this->requestHandler->makeRequest('/2013-04-01/hostedzone?maxitems=10', 'GET', __FUNCTION__);
  23. }
  24. public function listZonesByName($name)
  25. {
  26. return $this->requestHandler->makeRequest('/2013-04-01/hostedzonesbyname?dnsname='.$name, 'GET', __FUNCTION__);
  27. }
  28. public function deleteHostedZone($id)
  29. {
  30. return $this->requestHandler->makeRequest('/2013-04-01'.$id, 'DELETE', __FUNCTION__);
  31. }
  32. public function getHostedZoneById($id)
  33. {
  34. return $this->requestHandler->makeRequest('/2013-04-01'.$id, 'GET', __FUNCTION__);
  35. }
  36. public function listRecords($zoneId)
  37. {
  38. return $this->requestHandler->makeRequest("/2013-04-01".$zoneId."/rrset", 'GET', __FUNCTION__);
  39. }
  40. public function updateRecord($zoneId, $record, $aliasType = false)
  41. {
  42. $cleanZoneId = $this->cleanZoneId($zoneId);
  43. $body = $this->getRecordBody($cleanZoneId, $record, 'UPSERT', $aliasType);
  44. return $this->requestHandler->makeRequest("/2013-04-01".$zoneId."/rrset/", 'POST', __FUNCTION__, $body);
  45. }
  46. public function deleteRecord($zoneId, $record, $aliasType = false)
  47. {
  48. $cleanZoneId = $this->cleanZoneId($zoneId);
  49. $body = $this->getRecordBody($cleanZoneId, $record, 'DELETE', $aliasType);
  50. return $this->requestHandler->makeRequest("/2013-04-01".$zoneId."/rrset/", 'POST', __FUNCTION__, $body);
  51. }
  52. public function createRecord($zoneId, $record, $aliasType = false)
  53. {
  54. $cleanZoneId = $this->cleanZoneId($zoneId);
  55. $body = $this->getRecordBody($cleanZoneId, $record, 'UPSERT', $aliasType);
  56. return $this->requestHandler->makeRequest("/2013-04-01".$zoneId."/rrset/", 'POST', __FUNCTION__, $body);
  57. }
  58. private function getCreateBody($name, $delegationSetId = false)
  59. {
  60. $params = array(
  61. 'callerReference' => $this->getCallerReference(),
  62. 'zoneName' => $name,
  63. 'delegationSetId' => $delegationSetId
  64. );
  65. $templateName = ($delegationSetId && $delegationSetId !== '')
  66. ? awsRoute53\AWSRoute53XmlRequestHelper::ZONE_REQUEST_DELEGATION_SET
  67. : awsRoute53\AWSRoute53XmlRequestHelper::ZONE_REQUEST;
  68. $body = awsRoute53\AWSRoute53XmlRequestHelper::prepareResponseBody($templateName, $params);
  69. return $body;
  70. }
  71. private function getRecordBody($zoneId, $record, $action, $aliasType = false)
  72. {
  73. $recordType = $aliasType ? $aliasType : $record->type;
  74. $params = array(
  75. 'action' => $action,
  76. 'recordName' => $record->name,
  77. 'recordTtl' => $record->ttl,
  78. 'recordType' => $recordType,
  79. 'targetName' => $record->rdata->target,
  80. 'hostedZoneId' => $zoneId,
  81. 'recordValue' =>str_replace("\t", ' ', $record->rdata->toString()),
  82. 'nsResourceRecords' => $this->getNsResourceBody(str_replace("\t", ' ', $record->rdata->toString()))
  83. );
  84. switch($recordType)
  85. {
  86. case 'A':
  87. $template = awsRoute53\AWSRoute53XmlRequestHelper::RECORD_NS_REQUEST;
  88. break;
  89. case 'AAAA':
  90. $template = awsRoute53\AWSRoute53XmlRequestHelper::RECORD_NS_REQUEST;
  91. break;
  92. case 'NS':
  93. $template = awsRoute53\AWSRoute53XmlRequestHelper::RECORD_NS_REQUEST;
  94. break;
  95. case 'MX':
  96. $template = awsRoute53\AWSRoute53XmlRequestHelper::RECORD_NS_REQUEST;
  97. break;
  98. default:
  99. $template = awsRoute53\AWSRoute53XmlRequestHelper::RECORD_REQUEST;
  100. break;
  101. }
  102. $template = $aliasType ? awsRoute53\AWSRoute53XmlRequestHelper::RECORD_ALIAS_REQUEST : $template;
  103. $body = awsRoute53\AWSRoute53XmlRequestHelper::prepareResponseBody($template, $params);
  104. return $body;
  105. }
  106. public function getCallerReference()
  107. {
  108. return time();
  109. }
  110. public function cleanZoneId($zoneId)
  111. {
  112. if(strpos($zoneId, "/hostedzone/") || strpos($zoneId, "/hostedzone/") === 0)
  113. {
  114. return str_replace("/hostedzone/", "", $zoneId);
  115. }
  116. if(strpos($zoneId, "hostedzone/") || strpos($zoneId, "hostedzone/") === 0)
  117. {
  118. return str_replace("hostedzone/", "", $zoneId);
  119. }
  120. return $zoneId;
  121. }
  122. public function getNsResourceBody($rData)
  123. {
  124. $hosts = explode(PHP_EOL, $rData);
  125. $rBody = '';
  126. foreach($hosts as $host)
  127. {
  128. $rBody .= awsRoute53\AWSRoute53XmlRequestHelper::prepareResponseBody(awsRoute53\AWSRoute53XmlRequestHelper::RECORD_NS_HOST,
  129. array('hostName' => $host));
  130. }
  131. return $rBody;
  132. }
  133. }