| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- <?php
- namespace MGModule\DNSManager2\mgLibs\custom\dns\submodules\AWSRoute53;
- use \MGModule\DNSManager2\mgLibs\custom\dns;
- class AWSRoute53ResponseParseHelper
- {
- public static function zoneListXmlToArray($xmlList)
- {
- $zonesList = array();
-
- foreach($xmlList->HostedZones->children() as $zone)
- {
- $zonesList[$zone->Name->__toString()] = '';
- }
- return $zonesList;
- }
-
- public static function findZoneOnZoneList($xmlList, $domain)
- {
- foreach($xmlList->HostedZones->children() as $zone)
- {
- $zoneName = $zone->Name->__toString();
- if($zoneName === $domain || trim($zoneName, '.') === $domain)
- {
- return $zone->Id->__toString();
- }
- }
- return false;
- }
-
- public static function checkResponseForErrors($xmlResponse)
- {
- if($xmlResponse->Error)
- {
- return array(
- 'code' => $xmlResponse->Error->Code->__toString(),
- 'message' => $xmlResponse->Error->Message->__toString(),
- 'type' => $xmlResponse->Error->Type->__toString()
- );
- }
-
- return false;
- }
-
- public static function prepareRecordList($xmlRecordsList, $availableRecordTypes = array(), $editSoa = false)
- {
- $recordList = array();
- foreach($xmlRecordsList->ResourceRecordSets->children() as $aRecord)
- {
- $rType = self::getRecordType($aRecord);
- if(!$editSoa && $rType == 'SOA')
- {
- continue;
- }
- if(in_array($rType, $availableRecordTypes))
- {
- $record = new dns\record\Record();
- $record->name = $aRecord->Name->__toString();
- $record->type = $rType;
- $record->ttl = $aRecord->TTL->__toString();
- $record->createRDATAObject();
- switch($rType)
- {
- case 'ALIAS':
- $record->rdata->fromString(self::parseRDataForALIASRecords($aRecord->AliasTarget));
- $recordList[] = $record;
- break;
- case 'MX':
- self::parseMultihostRecords($recordList, $record, $aRecord);
- break;
- case 'NS':
- self::parseMultihostRecords($recordList, $record, $aRecord);
- break;
- case 'A':
- self::parseMultihostRecords($recordList, $record, $aRecord);
- break;
- case 'AAAA':
- self::parseMultihostRecords($recordList, $record, $aRecord);
- break;
- default:
- $record->rdata->fromString(self::parseRData($aRecord->ResourceRecords));
- $recordList[] = $record;
- break;
- }
- }
- }
-
- return $recordList;
- }
-
- public static function parseRData($xmlRData)
- {
- $parsed = '';
- foreach($xmlRData->children() as $rdata)
- {
- $parsed .= ($parsed === '' ? '' : ' ').$rdata->Value->__toString();
- }
- return $parsed;
- }
-
- public static function getZoneIdFromCreateConfirmation($xmlRData)
- {
- return $xmlRData->HostedZone->Id->__toString();
- }
-
- public static function findPtrRecordByName($xmlRecordsList, $recordName)
- {
- foreach($xmlRecordsList->ResourceRecordSets->children() as $aRecord)
- {
- $rType = $aRecord->Type->__toString();
- if($rType !== 'PTR')
- {
- continue;
- }
-
- $rName = $aRecord->Name->__toString();
- $trName = trim($rName, '.');
- if($rName === $recordName || $trName === $recordName)
- {
- $record = new dns\record\Record();
- $record->name = $rName;
- $record->type = $rType;
- $record->ttl = $aRecord->TTL->__toString();
- $record->createRDATAObject();
- $record->rdata->fromString(self::parseRData($aRecord->ResourceRecords));
-
- return $record;
- }
- }
-
- return false;
- }
-
- public static function parseRDataForALIASRecords($xmlRData)
- {
- return $xmlRData->DNSName->__toString();
- }
-
- public static function getRecordType($xmlRecord)
- {
- $rType = $xmlRecord->Type->__toString();
- if(($rType === 'A' || $rType === 'AAAA') && $xmlRecord->AliasTarget)
- {
- $rType = 'ALIAS';
- }
-
- return $rType;
- }
-
- public static function parseMultihostRecords(&$recordList, $record, $xmlData)
- {
- foreach($xmlData->ResourceRecords->children() as $host)
- {
- $cRecord = clone $record;
- $cRecord->createRDATAObject($cRecord->type);
- self::parseHostValueToRdata($cRecord, $host->Value->__toString());
- $recordList[] = $cRecord;
- }
- }
-
- public static function parseHostValueToRdata(&$cRecord, $hostValue)
- {
- switch($cRecord->type)
- {
- case 'MX':
- $hData = explode(' ', $hostValue);
- $cRecord->rdata->setDataFromArray(array(
- 'preference' => $hData[0],
- 'exchange' => $hData[1]
- ));
- break;
-
- default:
- $cRecord->rdata->setFirstProperty($hostValue);
- break;
- }
- }
-
- public static function convertInputFormData(&$input)
- {
- foreach($input['edit_record'] as &$editedRec)
- {
- $toEdit = self::findRecordsByName($input['edit_record'], $editedRec, true);
- self::mergeRecords($editedRec, $toEdit, $edit);
- $toEdit = self::findRecordsByName($input['record'], $editedRec, true);
- self::mergeRecords($editedRec, $toEdit);
- }
- }
-
- public static function findRecordsByName(&$records, $editedRec, $edit = false)
- {
- $foundRecords = array();
- foreach($records as $key => $record)
- {
- if($record['name'] === $editedRec['name'] && $record['type'] === $editedRec['type'] && $record['field'] !== $editedRec['field'])
- {
- $foundRecords[] = $record;
- if($edit)
- {
- unset($records[$key]);
- }
- }
- }
-
- return $foundRecords;
- }
-
- public static function mergeRecords(&$editRecord, $toEditList)
- {
- foreach($toEditList as $editValue)
- {
- self::mergeHostsRecords($editRecord['field'], $editValue['field'], $editRecord['type']);
- }
- }
-
- public static function mergeHostsRecords(&$editRecord, $addToEdit, $type)
- {
- switch($type)
- {
- case 'MX':
- if($editRecord['preference'])
- {
- $editRecord['exchange'] = $editRecord['preference'].' '.$editRecord['exchange'];
- $editRecord['preference'] = false;
- }
- $editRecord['exchange'] .= PHP_EOL.$addToEdit['preference'].' '.$addToEdit['exchange'];
- break;
- case 'NS':
- $editRecord['nsdname'] .= PHP_EOL.$addToEdit['nsdname'];
- break;
- case 'A':
- $editRecord['address'] .= PHP_EOL.$addToEdit['address'];
- break;
- case 'AAAA':
- $editRecord['address'] .= PHP_EOL.$addToEdit['address'];
- break;
- }
- }
-
- public static function mergeHostsRecordsForRdata(&$editRecord, $addToEdit, $type)
- {
- if($editRecord->rdata == null)
- {
- $editRecord->createRDATAObject($editRecord->type);
- }
-
- switch($type)
- {
- case 'MX':
-
- if($editRecord->rdata->preference)
- {
- $editRecord->rdata->exchange = $editRecord->rdata->preference.' '.$editRecord->rdata->exchange;
- $editRecord->rdata->preference = false;
- }
- $editRecord->rdata->exchange = $editRecord->rdata->exchange ? $editRecord->rdata->exchange.PHP_EOL.$addToEdit->rdata->preference.' '.$addToEdit->rdata->exchange
- : $addToEdit->rdata->preference.' '.$addToEdit->rdata->exchange;
- break;
- case 'NS':
- $editRecord->rdata->nsdname = $editRecord->rdata->nsdname ? $editRecord->rdata->nsdname.PHP_EOL.$addToEdit->rdata->nsdname
- : $addToEdit->rdata->nsdname;
- break;
- case 'A':
- $editRecord->rdata->address = $editRecord->rdata->address ? $editRecord->rdata->address.PHP_EOL.$addToEdit->rdata->address
- : $addToEdit->rdata->address;
- break;
- case 'AAAA':
- $editRecord->rdata->address = $editRecord->rdata->address ? $editRecord->rdata->address.PHP_EOL.$addToEdit->rdata->address
- : $addToEdit->rdata->address;
- break;
- }
- }
- }
|