diff --git a/library/NGNPro/Records/DnsRecords.php b/library/NGNPro/Records/DnsRecords.php index cfa1668..71efc00 100644 --- a/library/NGNPro/Records/DnsRecords.php +++ b/library/NGNPro/Records/DnsRecords.php @@ -1,1451 +1,1440 @@ 'Change date', 'type' => 'Type', 'name' => 'Name' ); var $FieldsReadOnly = array( 'customer', 'reseller' ); var $Fields = array( 'type' => array('type'=>'string'), 'priority' => array('type'=>'integer'), 'value' => array('type'=>'string'), 'ttl' => array('type'=>'integer') ); var $recordTypes = array( 'A' => 'IP address', 'AAAA' => 'IP v6 address', 'CNAME' => 'Hostname alias', 'MX' => 'Mail server address', 'SRV' => 'Server resource', 'NS' => 'Name server address', 'NAPTR' => 'Name authority', 'PTR' => 'Reverse IP address', 'TXT' => 'Text', 'LOC' => 'Geo location' ); var $havePriority = array('MX','SRV','NAPTR'); var $addRecordFunction = 'addRecord'; var $deleteRecordFunction = 'deleteRecord'; var $updateRecordFunction = 'updateRecord'; var $getRecordsFunction = 'getRecords'; var $getRecordFunction = 'getRecord'; var $recordTypesTemplate = array( 'sip2sip' => array( 'name' => 'SIP2SIP infrastructure', 'records' => array( 'naptr1' => array( 'name' => '', 'type' => 'NAPTR', 'priority' => '100', 'ttl' => '600', 'value' => '20 100 "s" "SIP+D2T" "" _sip._tcp' ), 'naptr2' => array( 'name' => '', 'type' => 'NAPTR', 'priority' => '100', 'ttl' => '600', 'value' => '30 100 "s" "SIP+D2U" "" _sip._udp' ), 'naptr3' => array( 'name' => '', 'type' => 'NAPTR', 'priority' => '100', 'ttl' => '600', 'value' => '10 100 "s" "SIPS+D2T" "" _sips._tcp' ), 'srv1' => array( 'name' => '_sip._tcp', 'type' => 'SRV', 'priority' => '100', 'ttl' => '600', 'value' => '100 5060 proxy.sipthor.net' ), 'srv2' => array( 'name' => '_sip._udp', 'type' => 'SRV', 'priority' => '100', 'ttl' => '600', 'value' => '100 5060 proxy.sipthor.net' ), 'srv3' => array( 'name' => '_sips._tcp', 'type' => 'SRV', 'priority' => '100', 'ttl' => '600', 'value' => '100 5061 proxy.sipthor.net' ), 'srv4' => array( 'name' => '_stun._udp', 'type' => 'SRV', 'priority' => '0', 'value' => '10 3478 stun1.sipthor.net' ), 'srv5' => array( 'name' => '_stun._udp', 'type' => 'SRV', 'priority' => '0', 'value' => '10 3478 stun2.sipthor.net' ), 'srv6' => array( 'name' => '_msrps._tcp', 'type' => 'SRV', 'priority' => '10', 'value' => '0 2855 msrprelay.sipthor.net' ), 'txt1' => array( 'name' => 'xcap', 'type' => 'TXT', 'priority' => '10', 'value' => 'https://xcap.sipthor.net/xcap-root' ) ), ), 'siptcp' => array( 'name' => 'SIP - TCP transport', 'records' => array( 'naptr' => array( 'name' => '', 'type' => 'NAPTR', 'priority' => '100', 'ttl' => '3600', 'value' => '10 100 "s" "SIP+D2T" "" _sip._tcp' ), 'srv' => array( 'name' => '_sip._tcp', 'type' => 'SRV', 'priority' => '100', 'ttl' => '3600', 'value' => '100 5060 #VALUE#|10 5060 sip' ) ), ), 'siptls' => array( 'name' => 'SIP - TLS transport', 'records' => array( 'naptr' => array( 'name' => '', 'type' => 'NAPTR', 'priority' => '100', 'ttl' => '3600', 'value' => '20 100 "s" "SIPS+D2T" "" _sips._tcp' ), 'srv' => array( 'name' => '_sips._tcp', 'type' => 'SRV', 'priority' => '100', 'ttl' => '3600', 'value' => '100 5061 #VALUE#|10 5061 sip' ) ) ), 'sipudp' => array( 'name' => 'SIP - UDP transport', 'records' => array( 'naptr' => array( 'name' => '', 'type' => 'NAPTR', 'priority' => '100', 'ttl' => '3600', 'value' => '30 100 "s" "SIP+D2U" "" _sip._udp' ), 'srv' => array( 'name' => '_sip._udp', 'type' => 'SRV', 'priority' => '100', 'ttl' => '3600', 'value' => '100 5060 #VALUE#|10 5060 sip' ) ), ), 'stun' => array( 'name' => 'STUN - NAT mirror', 'records' => array( 'srv' => array( 'name' => '_stun._udp', 'type' => 'SRV', 'priority' => '0', 'value' => '10 3478 #VALUE#|10 3478 stun' ) ), ), 'xmpp-server' => array( 'name' => 'XMPP server-to-server over TCP', 'records' => array( 'srv' => array( 'name' => '_xmpp-server._tcp', 'type' => 'SRV', 'priority' => '0', 'value' => '10 5269 #VALUE#|10 5269 xmpp' ), 'srv1' => array( 'name' => '_jabber._tcp', 'type' => 'SRV', 'priority' => '0', 'value' => '10 5269 #VALUE#|10 5269 xmpp' ) ), ), 'xmpp-client' => array( 'name' => 'XMPP client-to-server over TCP', 'records' => array( 'srv' => array( 'name' => '_xmpp-client._tcp', 'type' => 'SRV', 'priority' => '0', 'value' => '10 5222 #VALUE#|10 5222 xmpp' ) ), ), 'xmpps-server' => array( 'name' => 'XMPP server-to-server over TLS', 'records' => array( 'srv' => array( 'name' => '_xmpps-server._tcp', 'type' => 'SRV', 'priority' => '0', 'value' => '10 5269 #VALUE#|10 5269 xmpp' ), 'srv1' => array( 'name' => '_jabbers._tcp', 'type' => 'SRV', 'priority' => '0', 'value' => '10 5269 #VALUE#|10 5269 xmpp' ) ), ), 'xmpps-client' => array( 'name' => 'XMPP client-to-server over TLS', 'records' => array( 'srv' => array( 'name' => '_xmpps-client._tcp', 'type' => 'SRV', 'priority' => '0', 'value' => '10 5222 #VALUE#|10 5222 xmpp' ) ), ), 'msrp' => array( 'name' => 'MSRP - IM relay', 'records' => array( 'srv' => array( 'name' => '_msrps._tcp', 'type' => 'SRV', 'priority' => '10', 'value' => '0 2855 msrprelay' ) ) ), 'sipthor' => array( 'name' => 'SIP - Thor network', 'records' => array( 'eventserver' => array( 'name' => '_eventserver._tcp', 'type' => 'SRV', 'priority' => '10', 'value' => '0 8000 eventserver' ), 'sipserver' => array( 'name' => '_sip._udp', 'type' => 'SRV', 'priority' => '10', 'value' => '30 5060 proxy' ), 'sipns1' => array( 'name' => 'proxy', 'type' => 'NS', 'value' => 'ns1' ), 'sipns2' => array( 'name' => 'proxy', 'type' => 'NS', 'value' => 'ns2' ), 'sipns3' => array( 'name' => 'proxy', 'type' => 'NS', 'value' => 'ns3' ), 'ngnproserver' => array( 'name' => '_ngnpro._tcp', 'type' => 'SRV', 'priority' => '10', 'value' => '0 9200 ngnpro' ), 'ngnns1' => array( 'name' => 'ngnpro', 'type' => 'NS', 'value' => 'ns1' ), 'ngnns2' => array( 'name' => 'ngnpro', 'type' => 'NS', 'value' => 'ns2' ), 'ngnns3' => array( 'name' => 'ngnpro', 'type' => 'NS', 'value' => 'ns3' ), 'xcapserver' => array( 'name' => '_xcap._tcp', 'type' => 'SRV', 'priority' => '10', 'value' => '0 443 xcap' ), 'xcapns1' => array( 'name' => 'xcap', 'type' => 'NS', 'value' => 'ns1' ), 'xcapns2' => array( 'name' => 'xcap', 'type' => 'NS', 'value' => 'ns2' ), 'xcapns3' => array( 'name' => 'xcap', 'type' => 'NS', 'value' => 'ns3' ), 'msrpserver' => array( 'name' => '_msrps._tcp', 'type' => 'SRV', 'priority' => '10', 'value' => '0 2855 msrprelay' ), 'msrpns1' => array( 'name' => 'msrprelay', 'type' => 'NS', 'value' => 'ns1' ), 'msrpns2' => array( 'name' => 'msrprelay', 'type' => 'NS', 'value' => 'ns2' ), 'msrpns3' => array( 'name' => 'msrprelay', 'type' => 'NS', 'value' => 'ns3' ), 'voicemail' => array( 'name' => '_voicemail._tcp', 'type' => 'SRV', 'priority' => '10', 'value' => '0 9200 voicemail' ), 'vmns1' => array( 'name' => 'voicemail', 'type' => 'NS', 'value' => 'ns1' ), 'vmns2' => array( 'name' => 'voicemail', 'type' => 'NS', 'value' => 'ns2' ), 'vmns3' => array( 'name' => 'voicemail', 'type' => 'NS', 'value' => 'ns3' ) ) ) ); public function __construct($SoapEngine) { dprint("init DnsRecords"); $_name = trim($_REQUEST['name_filter']); if (strlen($_name) && !strstr($_name,'.') && !strstr($_name,'%')) { $_name .= '%'; } if ($this->typeFilter) { $this->filters = array( 'id' => trim($_REQUEST['id_filter']), 'zone' => trim($_REQUEST['zone_filter']), 'name' => $_name, 'type' => $this->typeFilter, 'value' => trim($_REQUEST['value_filter']), 'owner' => trim($_REQUEST['owner_filter']) ); } else { $this->filters = array( 'id' => trim($_REQUEST['id_filter']), 'zone' => trim($_REQUEST['zone_filter']), 'name' => $_name, 'type' => trim($_REQUEST['type_filter']), 'value' => trim($_REQUEST['value_filter']), 'owner' => trim($_REQUEST['owner_filter']) ); } parent::__construct($SoapEngine); $this->getAllowedDomains(); } function listRecords() { $this->showSeachForm(); if ($this->typeFilter) { $filter = array( 'id' => intval($this->filters['id']), 'zone' => $this->filters['zone'], 'name' => $this->filters['name'], 'type' => $this->typeFilter, 'value' => $this->filters['value'], 'owner' => intval($this->filters['owner']), 'customer' => intval($this->filters['customer']), 'reseller' => intval($this->filters['reseller']) ); } else { $filter = array( 'id' => intval($this->filters['id']), 'zone' => $this->filters['zone'], 'name' => $this->filters['name'], 'type' => $this->filters['type'], 'value' => $this->filters['value'], 'owner' => intval($this->filters['owner']), 'customer' => intval($this->filters['customer']), 'reseller' => intval($this->filters['reseller']) ); } // Range $range = array( 'start' => intval($this->next), 'count' => intval($this->maxrowsperpage) ); // Order if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate'; if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC'; $orderBy = array( 'attribute' => $this->sorting['sortBy'], 'direction' => $this->sorting['sortOrder'] ); // Compose query $Query = array( 'filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action($this->getRecordsFunction); // Call function $result = call_user_func_array(array($this->SoapEngine->soapclient,$this->getRecordsFunction),array($Query)); if ($this->checkLogSoapError($result, true)) { return false; } else { $this->rows = $result->total; if ($this->rows > 1 && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') { $this->showActionsForm(); } print "
Zone owner | Zone | Id | Name | Type | Value | Owner | Change date | Actions | ||
---|---|---|---|---|---|---|---|---|---|---|
Zone owner | Zone | Id | Name | Type | Priority | Value | TTL | Change date | Actions | |
%s | %s.%s | %s | %s | %s | %s | %s | %s | %s | %s | |
%s | %s.%s | %s | %s | %s | %s | %s | %s | %s | %s | %s |
Please press on Confirm to confirm the delete. "; return true; } if ($dictionary['id']) { $id=$dictionary['id']; } else { $id=$this->filters['id']; } if (!$id) { print "
Missing record id. "; return false; } $function = array( 'commit' => array( 'name' => $this->deleteRecordFunction, 'parameters' => array($id), 'logs' => array('success' => sprintf('DNS record %s has been deleted',$id)) ) ); $zone=$this->filters['zone']; unset($this->filters); $this->filters['zone']=$zone; $result = $this->SoapEngine->execute($function,$this->html); - if ($this->checkLogSoapError($result, true)) { - return false; - } else { - return true; - } - + return (bool)$result; } function showAddForm() { /* if ($this->adminonly) { if (!$this->filters['reseller']) { print "
To add a new record you must search first for a customer"; return; } } */ printf("
"; } function getAllowedDomains() { // Filter $filter = array( 'customer' => intval($this->filters['customer']), 'reseller' => intval($this->filters['reseller']) ); // Range $range = array( 'start' => 0, 'count' => $this->max_zones_selection ); // Order $orderBy = array( 'attribute' => 'name', 'direction' => 'ASC' ); // Compose query $Query = array( 'filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action('getZones'); $result = $this->SoapEngine->soapclient->getZones($Query); if ($this->checkLogSoapError($result, true)) { return false; } else { if ($result->total > $this->max_zones_selection) return false; foreach($result->zones as $zone) { if (in_array($zone->name,$this->allowedDomains)) continue; $this->allowedDomains[]=$zone->name; $seen[$zone->name]++; } } } function addRecord($dictionary=array()) { if ($this->typeFilter) { $type = $this->typeFilter; } else if ($dictionary['type']) { $type = $dictionary['type']; } else { $type = trim($_REQUEST['type']); } if ($dictionary['name']) { $name = $dictionary['name']; } else { $name = trim($_REQUEST['name']); } $name = rtrim($name,"."); if (preg_match("/^(.+)@(.*)$/", $name, $m)) { $zone = $m[2]; } else { if ($dictionary['zone']) { $zone=$dictionary['zone']; $this->skipSaveProperties=true; } else if ($_REQUEST['zone']) { $zone=$_REQUEST['zone']; } if ($type == 'MBOXFW') { $name .= '@'.$zone; } } if (!strlen($zone)) { if ($this->html) { echo "Updating record ...";
if (!$_REQUEST['id_filter']) return;
if (!$record = $this->getRecord(intval($_REQUEST['id_filter']))) {
return false;
}
$record_old=$record;
foreach (array_keys($this->Fields) as $item) {
$var_name=$item.'_form';
//printf ("
%s=%s",$var_name,$_REQUEST[$var_name]);
if ($this->Fields[$item]['type'] == 'integer') {
$record->$item = intval($_REQUEST[$var_name]);
} else {
$record->$item = trim($_REQUEST[$var_name]);
}
}
$function=array('commit' => array('name' => $this->updateRecordFunction,
'parameters' => array($record),
'logs' => array('success' => sprintf('Record %s has been updated',$_REQUEST['id_filter'])))
);
$result = $this->SoapEngine->execute($function,$this->html);
dprint_r($result);
- if ($this->checkLogSoapError($result, true)) {
- return false;
- } else {
- return true;
- }
+ return (bool)$result;
}
function showTextBeforeCustomerSelection() {
print _("Zone owner");
}
}
diff --git a/library/ngnpro_client.php b/library/ngnpro_client.php
index bc9e592..ed4fe2a 100644
--- a/library/ngnpro_client.php
+++ b/library/ngnpro_client.php
@@ -1,8747 +1,8745 @@
SoapEngine() function
if ($adminonly) {
$login_credentials=array(
'login_type' => 'admin',
'reseller' => $reseller,
'customer' => $customer,
'extra_form_elements' => array()
);
} else {
$login_credentials=array(
'login_type' => 'reseller',
'soap_username' => $soapUsername,
'soap_password' => $soapPassword,
'reseller' => $reseller,
'customer' => $customer,
'extra_form_elements' => array()
);
}
// login_credentials can overwite SoapEngine->ports
$login_credentials['ports']['customers'] = array(
'records_class' => 'Customers',
'name' => 'Login accounts',
'soap_class' => 'WebService_NGNPro_CustomerPort',
'category' => 'general',
'description' => 'Manage login accounts, customer information and properties. Customer id can be assigned to entities like SIP domains and ENUM ranges. Use _ or % to match one or more characters. '
);
require_once("ngnpro_client.phtml");
require("/etc/cdrtool/ngnpro_engines.inc");
$extraFormElements=array();
////////////////////////////////
// How to create a SIP record //
////////////////////////////////
$sip_engine = 'sip_accounts@engine';
$this->SipSoapEngine = new SoapEngine($sip_engine, $soapEngines, $login_credentials);
$_sip_class = $this->SipSoapEngine->records_class;
$this->sipRecords = new $_sip_class($this->SipSoapEngine);
$sipAccount = array('account' => 'user@example.com',
'quota' => $quota,
'prepaid' => $prepaid,
'password' => $password,
'pstn' => true,
'owner' => $owner,
'customer' => $customer,
'reseller' => $reseller
);
$this->sipRecords->addRecord($sipAccount);
////////////////////////////////
// How to create a SIP domain //
////////////////////////////////
$sip_engine = 'sip_accounts@engine';
$this->SipSoapEngine = new SoapEngine($sip_engine, $soapEngines, $login_credentials);
$_sip_class = $this->SipSoapEngine->records_class;
$this->sipRecords = new $_sip_class($this->SipSoapEngine);
$sipDomain = array('domain' => 'example.com',
'customer' => $customer,
'reseller' => $reseller
);
$this->sipRecords->addRecord($sipDomain);
///////////////////////////////
// How to create a SIP alias //
///////////////////////////////
$sip_engine = 'sip_aliases@engine';
$this->SipSoapEngine = new SoapEngine($sip_engine, $soapEngines, $login_credentials);
$_sip_class = $this->SipSoapEngine->records_class;
$this->sipRecords = new $_sip_class($this->SipSoapEngine);
$sipAlias = array('alias' => 'user@example1.com',
'target' => 'user@example2.com',
'owner' => $owner,
'customer' => $customer,
'reseller' => $reseller
);
$this->sipRecords->addRecord($sipAlias);
///////////////////////////////////
// How to create an ENUM mapping //
///////////////////////////////////
$enum_engine = 'enum_numbers@engine';
$this->EnumSoapEngine = new SoapEngine($enum_engine, $soapEngines, $login_credentials);
$_enum_class = $this->EnumSoapEngine->records_class;
$this->enumRecords = new $_enum_class($this->EnumSoapEngine);
$enumMapping = array('tld' => $tld,
'number' => $number,
'type' => 'sip',
'mapto' => 'sip:user@example.com',
'owner' => $owner,
'customer' => $customer,
'reseller' => $reseller
);
$this->enumRecords->addRecord($enumMapping);
*/
class SoapEngine
{
public $version = 1;
public $adminonly = 0;
public $customer = 0;
public $reseller = 0;
public $login_type = 'reseller';
public $allowedPorts = array();
public $timeout = 5;
public $exception = array();
public $result = false;
public $extraFormElements = array();
public $default_enum_tld = 'e164.arpa';
public $default_timezone = 'Europe/Amsterdam';
public $default_sip_proxy = "";
public $default_msrp_relay = "";
public $ports = array(
'sip_accounts' => array(
'records_class' => 'SipAccounts',
'name' => 'SIP accounts',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'sip',
'description' => 'Manage SIP accounts and their settings. Click on the SIP account to access the settings page. Use _ or % to match one or more characters. ',
),
'customers' => array(
'records_class' => 'Customers',
'name' => 'Owner Accounts',
'soap_class' => 'WebService_NGNPro_CustomerPort',
'category' => 'general',
'description' => 'Manage accounts with address information and other properties. SIP domains and ENUM ranges can be assigned to accounts. Use _ or % to match one or more characters. '
),
'sip_domains' => array(
'records_class' => 'SipDomains',
'name' => 'SIP domains',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'sip',
'description' => 'Manage SIP domains (e.g example.com) served by the SIP Proxy. Use _ or % to match one or more characters. '
),
'trusted_peers' => array(
'records_class' => 'TrustedPeers',
'name' => 'Trusted peers',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'sip',
'description' => 'Manage trusted parties that are allowed to route sessions through the SIP proxy without digest authentication. ',
'resellers_only'=> true
),
'enum_numbers' => array(
'records_class' => 'EnumMappings',
'name' => 'ENUM numbers',
'soap_class' => 'WebService_NGNPro_EnumPort',
'category' => 'dns',
'description' => 'Manage E164 numbers used for incoming calls and their mappings (e.g. +31123456789 map to sip:user@example.com). Use _ or % to match one or more characters. '
),
'enum_ranges' => array(
'records_class' => 'EnumRanges',
'name' => 'ENUM ranges',
'soap_class' => 'WebService_NGNPro_EnumPort',
'category' => 'dns',
'description' => 'Manage E164 number ranges that hold individual phone numbers. Use _ or % to match one or more characters. '
),
'dns_zones' => array(
'records_class' => 'DnsZones',
'name' => 'DNS zones',
'soap_class' => 'WebService_NGNPro_DnsPort',
'category' => 'dns',
'description' => 'Manage DNS zones. Use _ or % to match one or more characters. '
),
'dns_records' => array(
'records_class' => 'DnsRecords',
'name' => 'DNS records',
'soap_class' => 'WebService_NGNPro_DnsPort',
'category' => 'dns',
'description' => 'Manage DNS records. Use _ or % to match one or more characters. '
),
'pstn_carriers' => array(
'records_class' => 'Carriers',
'name' => 'PSTN carriers',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'pstn',
'description' => 'Manage outbound carriers for PSTN traffic. Click on Carier to edit its attributes. ',
'resellers_only'=> true
),
'pstn_gateways' => array(
'records_class' => 'Gateways',
'name' => 'PSTN gateways',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'pstn',
'description' => 'Manage outbound PSTN gateways. Click on Gateway to edit its attributes. ',
'resellers_only'=> true
),
'pstn_routes' => array(
'records_class' => 'Routes',
'name' => 'PSTN routes',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'pstn',
'description' => 'Manage outbound PSTN routes. A prefix must be formated as 00+E164, an empty prefix matches all routes. ',
'resellers_only'=> true
),
'gateway_rules' => array(
'records_class' => 'GatewayRules',
'name' => 'PSTN rules',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'pstn',
'description' => 'Manage translation rules for PSTN gateways. Rules are applied against 00+E164 prefix. Click on Rule to edit its attributes. ',
'resellers_only'=> true
),
'email_aliases' => array(
'records_class' => 'EmailAliases',
'name' => 'Email aliases',
'soap_class' => 'WebService_NGNPro_DnsPort',
'category' => 'dns',
'description' => 'Manage email aliases. Use _ or % to match one or more characters. '
),
'url_redirect' => array(
'records_class' => 'UrlRedirect',
'name' => 'URL redirect',
'soap_class' => 'WebService_NGNPro_DnsPort',
'category' => 'dns',
'description' => 'Manage WEB URL redirections. Use _ or % to match one or more characters. '
),
'sip_aliases' => array(
'records_class' => 'SipAliases',
'name' => 'SIP aliases',
'soap_class' => 'WebService_NGNPro_SipPort',
'category' => 'sip',
'description' => 'Manage redirections for SIP addresses e.g. redirect user1@example1.com (alias) to user2@example2.com (target). Use _ or % to match one or more characters. '
)
);
/**
* service is port@engine where:
*
* - port is an available NGNPro service
* - engine is a connection to an NGNPro server
*
* - soapEngines is an array of NGNPro connections and
* settings belonging to them:
*
* $soapEngines = array(
* 'mdns' => array(
* 'name' => 'Managed DNS',
* 'username' => 'soapadmin',
* 'password' => 'passwd',
* 'url' => 'http://example.com:9200/'
* )
* );
*/
public function __construct($service, $soapEngines, $login_credentials = array())
{
$this->login_credentials = &$login_credentials;
if (is_array($this->login_credentials['ports'])) {
$_ports = array();
foreach (array_keys($this->ports) as $_key) {
if (in_array($_key, array_keys($this->login_credentials['ports']))) {
if (strlen($this->login_credentials['ports'][$_key]['records_class'])) {
$_ports[$_key]['records_class'] = $this->login_credentials['ports'][$_key]['records_class'];
} else {
$_ports[$_key]['records_class'] = $this->ports[$_key]['records_class'];
}
if (strlen($this->login_credentials['ports'][$_key]['soap_class'])) {
$_ports[$_key]['soap_class'] = $this->login_credentials['ports'][$_key]['soap_class'];
} else {
$_ports[$_key]['soap_class'] = $this->ports[$_key]['soap_class'];
}
if (strlen($this->login_credentials['ports'][$_key]['name'])) {
$_ports[$_key]['name'] = $this->login_credentials['ports'][$_key]['name'];
} else {
$_ports[$_key]['name'] = $this->ports[$_key]['name'];
}
if (strlen($this->login_credentials['ports'][$_key]['description'])) {
$_ports[$_key]['description'] = $this->login_credentials['ports'][$_key]['description'];
} else {
$_ports[$_key]['description'] = $this->ports[$_key]['description'];
}
} else {
$_ports[$_key] = $this->ports[$_key];
}
}
$this->ports = $_ports;
}
//dprint_r($this->login_credentials);
if ($this->login_credentials['login_type'] == 'admin') $this->adminonly = 1;
if (strlen($this->login_credentials['soap_filter'])) {
$this->soapEngines = $this->getSoapEngineAllowed($soapEngines, $this->login_credentials['soap_filter']);
} else {
$this->soapEngines = $soapEngines;
}
if (is_array($this->soapEngines)) {
$_engines = array_keys($this->soapEngines);
if (!$service) {
// use first engine available
if (is_array($this->allowedPorts) && count($this->allowedPorts[$_engines[0]]) > 0) {
$_ports = $this->allowedPorts[$_engines[0]];
} else {
$_ports = array_keys($this->ports);
}
// default service is:
$service = $_ports[0].'@'.$_engines[0];
}
if (is_array($this->login_credentials['extra_form_elements'])) {
$this->extraFormElements = $this->login_credentials['extra_form_elements'];
}
$this->service = $service;
$_els = explode('@', $this->service);
if (!$_els[1]) {
$this->soapEngine = $_engines[0];
} else {
$this->soapEngine = $_els[1];
}
$this->sip_engine = $this->soapEngine;
if (strlen($this->soapEngines[$this->soapEngine]['version'])) {
$this->version = $this->soapEngines[$this->soapEngine]['version'];
}
$default_port = 'customers';
if (isset($this->allowedPorts[$this->soapEngine]) ? count($this->allowedPorts[$this->soapEngine]) : 0 > 0) {
if (in_array($_els[0], $this->allowedPorts[$this->soapEngine])) {
$this->port = $_els[0];
} else if (in_array($default_port, $this->allowedPorts[$this->soapEngine])) {
$this->port = $default_port;
} else {
// disable some version dependent ports
foreach (array_keys($this->ports) as $_p) {
if (in_array($_p, $this->allowedPorts[$this->soapEngine])) {
$this->port = $_p;
break;
}
}
}
} else {
if ($_els[0]) {
$this->port = $_els[0];
} else {
$this->port = $default_port;
}
}
$this->records_class = $this->ports[$this->port]['records_class'];
$this->soap_class = $this->ports[$this->port]['soap_class'];
$this->service = $this->port.'@'.$this->soapEngine;
foreach (array_keys($this->soapEngines) as $_key) {
$this->skip[$_key] = $this->soapEngines[$_key]['skip'];
if ($this->soapEngines[$_key]['skip_ports']) {
$this->skip_ports[$_key] = $this->soapEngines[$_key]['skip_ports'];
}
}
$this->impersonate = intval($this->soapEngines[$this->soapEngine]['impersonate']);
if ($this->soapEngines[$this->soapEngine]['default_enum_tld']) {
$this->default_enum_tld = $this->soapEngines[$this->soapEngine]['default_enum_tld'];
}
if ($this->soapEngines[$this->soapEngine]['default_timezone']) {
$this->default_timezone = $this->soapEngines[$this->soapEngine]['default_timezone'];
}
if ($this->soapEngines[$this->soapEngine]['sip_proxy']) {
$this->default_sip_proxy = $this->soapEngines[$this->soapEngine]['sip_proxy'];
}
if ($this->soapEngines[$this->soapEngine]['msrp_relay']) {
$this->default_msrp_relay = $this->soapEngines[$this->soapEngine]['msrp_relay'];
}
if ($this->soapEngines[$this->soapEngine]['default_country']) {
$this->default_country = $this->soapEngines[$this->soapEngine]['default_country'];
}
if (strlen($this->soapEngines[$this->soapEngine]['sip_engine'])) {
$this->sip_engine = $this->soapEngines[$this->soapEngine]['sip_engine'];
}
if (strlen($this->soapEngines[$this->soapEngine]['voicemail_engine'])) {
$this->voicemail_engine = $this->soapEngines[$this->soapEngine]['voicemail_engine'];
}
if (strlen($this->login_credentials['customer_engine'])) {
$this->customer_engine = $this->login_credentials['customer_engine'];
} elseif (strlen($this->soapEngines[$this->soapEngine]['customer_engine'])) {
$this->customer_engine = $this->soapEngines[$this->soapEngine]['customer_engine'];
} else {
$this->customer_engine = $this->soapEngine;
}
if (strlen($this->soapEngines[$this->soapEngine]['sip_settings_page'])) {
$this->sip_settings_page = $this->soapEngines[$this->soapEngine]['sip_settings_page'];
}
if (strlen($this->soapEngines[$this->soapEngine]['call_limit'])) {
$this->call_limit = $this->soapEngines[$this->soapEngine]['call_limit'];
}
if (strlen($this->soapEngines[$this->soapEngine]['digest_settings_page'])) {
$this->digest_settings_page = $this->soapEngines[$this->soapEngine]['digest_settings_page'];
}
if (is_array($this->soapEngines[$this->soapEngine]['customer_properties'])) {
$this->customer_properties = $this->soapEngines[$this->soapEngine]['customer_properties'];
}
if (strlen($this->soapEngines[$this->soapEngine]['timeout'])) {
$this->timeout = intval($this->soapEngines[$this->soapEngine]['timeout']);
}
if (strlen($this->soapEngines[$this->soapEngine]['store_clear_text_passwords'])) {
$this->store_clear_text_passwords = $this->soapEngines[$this->soapEngine]['store_clear_text_passwords'];
}
if (strlen($this->soapEngines[$this->soapEngine]['allow_none_local_dns_zones'])) {
$this->allow_none_local_dns_zones = $this->soapEngines[$this->soapEngine]['allow_none_local_dns_zones'];
}
if (strlen($this->login_credentials['record_generator'])) {
$this->record_generator = $this->login_credentials['record_generator'];
} elseif (strlen($this->soapEngines[$this->soapEngine]['record_generator'])) {
$this->record_generator = $this->soapEngines[$this->soapEngine]['record_generator'];
}
if (strlen($this->login_credentials['name_servers'])) {
$this->name_servers = $this->login_credentials['name_servers'];
} elseif (strlen($this->soapEngines[$this->soapEngine]['name_servers'])) {
$this->name_servers = $this->soapEngines[$this->soapEngine]['name_servers'];
}
if (strlen($login_credentials['reseller'])) {
$this->reseller = $login_credentials['reseller'];
} elseif ($this->adminonly && $_REQUEST['reseller_filter']) {
$this->reseller = $_REQUEST['reseller_filter'];
}
if (strlen($login_credentials['customer'])) {
$this->customer = $login_credentials['customer'];
} elseif ($this->adminonly && $_REQUEST['customer_filter']) {
$this->customer = $_REQUEST['customer_filter'];
}
if (strlen($login_credentials['soap_username'])) {
$this->soapUsername=$login_credentials['soap_username'];
$this->SOAPlogin = array(
"username" => $this->soapUsername,
"password" => $login_credentials['soap_password'],
"admin" => false
);
} else {
// use the credentials defined for the soap engine
$this->soapUsername = $this->soapEngines[$this->soapEngine]['username'];
if ($this->customer) {
$this->SOAPlogin = array(
"username" => $this->soapUsername,
"password" => $this->soapEngines[$this->soapEngine]['password'],
"admin" => true,
"impersonate" => intval($this->customer)
);
} else {
$this->SOAPlogin = array(
"username" => $this->soapUsername,
"password" => $this->soapEngines[$this->soapEngine]['password'],
"admin" => true,
"impersonate" => intval($this->reseller)
);
}
$this->SOAPloginAdmin = array(
"username" => $this->soapUsername,
"password" => $this->soapEngines[$this->soapEngine]['password'],
"admin" => true
);
}
$this->SOAPurl = $this->soapEngines[$this->soapEngine]['url'];
$log = sprintf(
"
%s at %s as %s ", $this->soap_class, $this->SOAPurl, $this->SOAPurl, $this->soapUsername ); dprint($log); $this->SoapAuth = array('auth', $this->SOAPlogin , 'urn:AGProjects:NGNPro', 0, ''); $this->SoapAuthAdmin = array('auth', $this->SOAPloginAdmin , 'urn:AGProjects:NGNPro', 0, ''); // Instantiate the SOAP client if (!class_exists($this->soap_class)) return ; $this->soapclient = new $this->soap_class($this->SOAPurl); $this->soapclient->setOpt('curl', 'CURLOPT_SSL_VERIFYPEER', 0); $this->soapclient->setOpt('curl', 'CURLOPT_SSL_VERIFYHOST', 0); // set the timeout $this->soapclient->_options['timeout'] = $this->timeout; if ($this->customer_engine) { $this->SOAPloginCustomers = array( "username" => $this->soapEngines[$this->customer_engine]['username'], "password" => $this->soapEngines[$this->customer_engine]['password'], "admin" => true, "impersonate" => intval($this->reseller) ); $this->SoapAuthCustomers = array('auth', $this->SOAPloginCustomers , 'urn:AGProjects:NGNPro', 0, ''); $this->SOAPurlCustomers = $this->soapEngines[$this->customer_engine]['url']; $this->soapclientCustomers = new WebService_NGNPro_CustomerPort($this->SOAPurlCustomers); $this->soapclientCustomers->setOpt('curl', 'CURLOPT_SSL_VERIFYPEER', 0); $this->soapclientCustomers->setOpt('curl', 'CURLOPT_SSL_VERIFYHOST', 0); if (strlen($this->soapEngines[$this->customer_engine]['timeout'])) { $this->soapclientCustomers->_options['timeout'] = intval($this->soapEngines[$this->customer_engine]['timeout']); } else { $this->soapclientCustomers->_options['timeout'] = $this->timeout; } } if ($this->voicemail_engine) { $this->SOAPloginVoicemail = array( "username" => $this->soapEngines[$this->voicemail_engine]['username'], "password" => $this->soapEngines[$this->voicemail_engine]['password'], "admin" => true, "impersonate" => intval($this->reseller) ); $this->SoapAuthVoicemail = array('auth', $this->SOAPloginVoicemail , 'urn:AGProjects:NGNPro', 0, ''); $this->SOAPurlVoicemail = $this->soapEngines[$this->voicemail_engine]['url']; $this->soapclientVoicemail = new WebService_NGNPro_VoicemailPort($this->SOAPurlVoicemail); $this->soapclientVoicemail->setOpt('curl', 'CURLOPT_SSL_VERIFYPEER', 0); $this->soapclientVoicemail->setOpt('curl', 'CURLOPT_SSL_VERIFYHOST', 0); if (strlen($this->soapEngines[$this->voicemail_engine]['timeout'])) { $this->soapclientVoicemail->_options['timeout'] = intval($this->soapEngines[$this->voicemail_engine]['timeout']); } else { $this->soapclientVoicemail->_options['timeout'] = $this->timeout; } } } else { print "Error: No SOAP credentials defined."; } $this->url = $_SERVER['PHP_SELF']."?1=1"; foreach (array_keys($this->extraFormElements) as $element) { if (!strlen($this->extraFormElements[$element])) continue; $this->url .= sprintf( '&%s=%s', $element, urlencode($this->extraFormElements[$element]) ); } $this->support_email = $this->soapEngines[$this->soapEngine]['support_email']; $this->support_web = $this->soapEngines[$this->soapEngine]['support_web']; $this->welcome_message = $this->soapEngines[$this->soapEngine]['welcome_message']; } /** * returns a list of allowed engines based on a filter * the filter format is: * engine1:port1,port2 engine2 engine3:port1 */ public function getSoapEngineAllowed($soapEngines, $filter) { if (!$filter) { $soapEngines_checked = $soapEngines; } else { $_filter_els = explode(" ", $filter); foreach (array_keys($soapEngines) as $_engine) { foreach ($_filter_els as $_filter) { unset($_allowed_engine); $_allowed_ports = array(); list($_allowed_engine, $_allowed_ports_els) = explode(":", $_filter); if ($_allowed_ports_els) { $_allowed_ports = explode(",", $_allowed_ports_els); } if (count($_allowed_ports) == 0) { $_allowed_ports = array_keys($this->ports); } if ($_engine == $_allowed_engine) { $soapEngines_checked[$_engine] = $soapEngines[$_engine]; $this->allowedPorts[$_engine] = $_allowed_ports; continue; } } } } return $soapEngines_checked; } /** * $function = array( * 'commit' => array( * 'name' => 'addAccount', * 'parameters' => array( * $param1, * $param2 * ), * 'logs' => array( * 'success' => 'The function was a success', * 'failure' => 'The function has failed' * ) * ) * ); */ public function execute($function, $html = true, $adminonly = false) { if (!$function['commit']['name']) { if ($html) { print "Error: no function name supplied"; } else { print "Error: no function name supplied\n"; } return false; } if ($adminonly) { $this->soapclient->addHeader($this->SoapAuthAdmin); } else { $this->soapclient->addHeader($this->SoapAuth); } $result = call_user_func_array( array( $this->soapclient, $function['commit']['name'] ), $function['commit']['parameters'] ); if ((new PEAR)->isError($result)) { $this->error_msg = $result->getMessage(); $this->error_fault = $result->getFault(); $this->error_code = $result->getCode(); $this->exception = $this->error_fault->detail->exception; $log = sprintf( "SOAP request error from %s: %s (%s): %s", $this->SOAPurl, $this->error_msg, $this->error_fault->detail->exception->errorcode, $this->error_fault->detail->exception->errorstring ); syslog(LOG_NOTICE, $log); if ($html) { $log = sprintf( "SOAP query failed: %s (%s): %s", $this->error_msg, $this->error_fault->detail->exception->errorcode, $this->error_fault->detail->exception->errorstring ); print "$log"; } return false; } else { $this->result = $result; if ($function['commit']['logs']['success']) { if ($html) { printf( "
%s \n", htmlentities($function['commit']['logs']['success']) ); } } if (is_object($result) || strlen($result)) { return $result; } else { return true; } } } } class Records { public $maxrowsperpage = '20'; public $sip_settings_page = 'sip_settings.phtml'; public $allowedDomains = array(); public $selectionActive = false; public $selectionKeys = array(); public $resellers = array(); public $customers = array(); public $record_generator = false; public $customer_properties = array(); public $loginProperties = array(); public $errorMessage = ''; public $html = true; public $filters = array(); public $selectionActiveExceptions = array(); public function log_action($action = 'Unknown') { global $CDRTool; $location = "Unknown"; $_loc = geoip_record_by_name($_SERVER['REMOTE_ADDR']); if ($_loc['country_name']) { $location = $_loc['country_name']; } $log = sprintf( "CDRTool login username=%s, type=%s, impersonate=%s, IP=%s, location=%s, action=%s:%s, script=%s", $this->login_credentials['username'], $this->login_credentials['login_type'], $CDRTool['impersonate'], $_SERVER['REMOTE_ADDR'], $location, $this->SoapEngine->port, $action, $_SERVER['PHP_SELF'] ); syslog(LOG_NOTICE, $log); } public function soapHasError($result) { return (new PEAR)->isError($result); } - public function checkLogSoapError($result, $syslog = false, $print = false, $skip = false) + public function checkLogSoapError($result, $syslog = false, $print = false) { if (!$this->soapHasError($result)) { return false; } + $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); - if ($skip) { - return true; - } if ($syslog) { $log = sprintf( "SOAP request error from %s: %s (%s): %s", $this->SoapEngine->SOAPurl, $error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring ); syslog(LOG_NOTICE, $log); if ($print) { printf("
Error: $log"); } } else { printf( "Error: %s (%s): %s", $error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring ); } return true; } public function __construct($SoapEngine) { $this->SoapEngine = $SoapEngine; $this->version = $this->SoapEngine->version; $this->login_credentials = $this->SoapEngine->login_credentials; $this->sorting['sortBy'] = trim($_REQUEST['sortBy']); $this->sorting['sortOrder'] = trim($_REQUEST['sortOrder']); $this->next = $_REQUEST['next']; $this->adminonly = $this->SoapEngine->adminonly; $this->reseller = $this->SoapEngine->reseller; $this->customer = $this->SoapEngine->customer; $this->impersonate = $this->SoapEngine->impersonate; $this->url = $this->SoapEngine->url; foreach (array_keys($this->filters) as $_filter) { if (strlen($this->filters[$_filter]) && !in_array($_filter, $this->selectionActiveExceptions)) { $this->selectionActive = true; break; } } if ($this->adminonly) { $this->url .= sprintf('&adminonly=%s', $this->adminonly); if ($this->login_credentials['reseller']) { $this->filters['reseller'] = $this->login_credentials['reseller']; } else { $this->filters['reseller'] = trim($_REQUEST['reseller_filter']); } } $this->filters['customer'] = trim($_REQUEST['customer_filter']); //$this->getResellers(); $this->getCustomers(); $this->getLoginAccount(); if (strlen($this->SoapEngine->sip_settings_page)) { $this->sip_settings_page = $this->SoapEngine->sip_settings_page; } if (strlen($this->SoapEngine->digest_settings_page)) { $this->digest_settings_page = $this->SoapEngine->digest_settings_page; } $this->support_email = $this->SoapEngine->support_email; $this->support_web = $this->SoapEngine->support_web; } function showEngineSelection() { $selected_soapEngine[$this->SoapEngine->service] =' selected'; $pstn_access = $this->getCustomerProperty('pstn_access'); printf(""); printf( "", $this->url ); } function showAfterEngineSelection() { } function showCustomerSelection() { $this->showCustomerForm(); } function showResellerSelection() { if ($this->adminonly) { $this->showResellerForm(); } else { printf("%s", $this->reseller); } } function showPagination($maxrows) { $url .= $this->url.'&'.$this->addFiltersToURL().sprintf( "&service=%s&sortBy=%s&sortOrder=%s", urlencode($this->SoapEngine->service), urlencode($this->sorting['sortBy']), urlencode($this->sorting['sortOrder']) ); print "
%s", $this->SoapEngine->ports[$this->SoapEngine->port]['description'] ); printf( "