diff --git a/library/NGNPro/Records/SipDomains.php b/library/NGNPro/Records/SipDomains.php new file mode 100644 index 0000000..6fd5bdd --- /dev/null +++ b/library/NGNPro/Records/SipDomains.php @@ -0,0 +1,944 @@ + array('type'=>'integer'), + ); + + var $Fields=array( + 'customer' => array('type'=>'integer'), + 'certificate' => array('type'=>'text'), + 'private_key' => array('type'=>'text'), + 'match_ip_address' => array('type'=>'text', 'name'=> 'Match IP addresses'), + 'verify_cert' => array('type'=>'boolean'), + 'require_cert' => array('type'=>'boolean') + ); + + public function __construct($SoapEngine) + { + dprint("init Domains"); + + $this->filters = array( + 'domain' => strtolower(trim($_REQUEST['domain_filter'])) + ); + + parent::__construct($SoapEngine); + + // keep default maxrowsperpage + $this->sortElements = array( + 'changeDate' => 'Change date', + 'domain' => 'Domain' + ); + } + + function listRecords() + { + $this->showSeachForm(); + + // Filter + $filter = array( + 'domain' => $this->filters['domain'], + '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 + ); + dprint_r($Query); + + // Insert credetials + $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); + $this->log_action('getDomains'); + + // Call function + $result = $this->SoapEngine->soapclient->getDomains($Query); + + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + $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); + return false; + } else { + $this->rows = $result->total; + + if ($_REQUEST['action'] == 'Export' and $this->rows) { + $this->exportDomain($result->domains[0]->domain); + return; + } + + + if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') { + $this->showActionsForm(); + } + + print " +
$this->rows records found
+

+ + + + + + + + + + + "; + + if (!$this->next) $this->next=0; + + if ($this->rows > $this->maxrowsperpage) { + $maxrows = $this->maxrowsperpage + $this->next; + if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage; + } else { + $maxrows=$this->rows; + } + + $i=0; + + if ($this->rows) { + while ($i < $maxrows) { + if (!$result->domains[$i]) break; + $domain = $result->domains[$i]; + + $index = $this->next+$i+1; + + $delete_url = $this->url.sprintf( + "&service=%s&action=Delete&domain_filter=%s", + urlencode($this->SoapEngine->service), + urlencode($domain->domain) + ); + + if ($_REQUEST['action'] == 'Delete' && + $_REQUEST['domain_filter'] == $domain->domain) { + $delete_url .= "&confirm=1"; + $deleteText = "Confirm"; + } else { + $deleteText = "Delete"; + } + + if ($_REQUEST['action'] == 'Delete' && + $_REQUEST['domain_filter'] == $domain->domain) { + $delete_url .= "&confirm=1"; + $deleteText = "Confirm"; + } else { + $deleteText = "Delete"; + } + + $_customer_url = $this->url.sprintf( + "&service=customers@%s&customer_filter=%s", + urlencode($this->SoapEngine->customer_engine), + urlencode($domain->customer) + ); + + $_sip_domains_url = $this->url.sprintf( + "&service=sip_domains@%s&domain_filter=%s", + urlencode($this->SoapEngine->soapEngine), + urlencode($domain->domain) + ); + + $_sip_accounts_url = $this->url.sprintf( + "&service=sip_accounts@%s&domain_filter=%s", + urlencode($this->SoapEngine->soapEngine), + urlencode($domain->domain) + ); + + $_sip_aliases_url = $this->url.sprintf( + "&service=sip_aliases@%s&alias_domain_filter=%s", + urlencode($this->SoapEngine->soapEngine), + urlencode($domain->domain) + ); + if ($this->adminonly) { + $export_url = $this->url.sprintf( + "&service=%s&action=Export&domain_filter=%s", + urlencode($this->SoapEngine->service), + urlencode($domain->domain) + ); + + printf( + " + + + + + + + + + + ", + $index, + $_customer_url, + $domain->customer, + $domain->reseller, + $_sip_domains_url, + $domain->domain, + $_sip_accounts_url, + $_sip_aliases_url, + $domain->changeDate, + $delete_url, + $deleteText, + $export_url + ); + } else { + printf( + " + + + + + + + + + ", + $index, + $_customer_url, + $domain->customer, + $domain->reseller, + $_sip_domains_url, + $domain->domain, + $_sip_accounts_url, + $_sip_aliases_url, + $domain->changeDate, + $delete_url, + $deleteText + ); + } + + $i++; + } + } + + print "
IdOwnerSIP domainChange dateActions
%s%s.%s%sSip accountsSip aliases%s%sExport
%s%s.%s%sSip accountsSip aliases%s%s
"; + + if ($this->rows == 1) { + $this->showRecord($domain); + } else { + $this->showPagination($maxrows); + } + + return true; + } + } + + function showSeachFormCustom() + { + printf ("

SIP domain
",$this->filters['domain']); + } + + function exportRecord($dictionary = array()) + { + } + + function deleteRecord($dictionary = array()) + { + if (!$dictionary['confirm'] && !$_REQUEST['confirm']) { + print "

Please press on Confirm to confirm the delete. "; + return true; + } + + if ($dictionary['domain']) { + $domain=$dictionary['domain']; + } else { + $domain=$this->filters['domain']; + } + + if (!strlen($domain)) { + print "

Error: missing SIP domain. "; + return false; + } + + $function=array('commit' => array('name' => 'deleteDomain', + 'parameters' => array($domain), + 'logs' => array('success' => sprintf('SIP domain %s has been deleted',$domain)) + ) + ); + + unset($this->filters); + return $this->SoapEngine->execute($function, $this->html); + } + + function showAddForm() { + if ($this->selectionActive) return; + printf ("

",$_SERVER['PHP_SELF']); + print " +
+ "; + + print " + + "; + + $this->showCustomerTextBox(); + + printf ("
SIP domain
"); + + $this->printHiddenFormElements(); + printf (" Import SIP domain from file: + +
+
+
+ +
+ + Select file + Change + + Remove + +
+
+ " + ); + print " +
+ "; + } + + function addRecord($dictionary = array()) + { + if ($this->adminonly && $_FILES['import_file']['tmp_name']) { + $content=fread(fopen($_FILES['import_file']['tmp_name'], "r"), $_FILES['import_file']['size']); + //print_r($content); + + if (!$imported_data=json_decode($content, true)) { + printf ("

Error: reading imported data. "); + return false; + } + + //print_r($imported_data); + + if (!in_array('sip_domains', array_keys($imported_data))) { + printf ("

Error: Missing SIP domains in imported data. "); + return false; + } + + if (!in_array('sip_accounts', array_keys($imported_data))) { + return false; + printf ("

Error: Missing SIP accounts in imported data. "); + } + + foreach($imported_data['customers'] as $customer) { + // Insert credetials + $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuth); + $this->log_action('addAccount'); + + $customer['credit'] = floatval($customer['credit']); + $customer['balance'] = floatval($customer['balance']); + // Call function + $result = $this->SoapEngine->soapclientCustomers->addAccount($customer); + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + if ($error_fault->detail->exception->errorcode == 5001) { + $result = $this->SoapEngine->soapclientCustomers->updateCustomer($customer); + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + $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); + printf ("

Error: $log"); + } else { + printf('

Customer %s has been updated',$customer['id']); + } + } else { + $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); + printf ("

Error: $log"); + } + } else { + printf('

Customer %s has been added',$customer['id']); + } + } + + foreach($imported_data['sip_domains'] as $domain) { + flush(); + $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); + $this->log_action('addDomain'); + $result = $this->SoapEngine->soapclient->addDomain($domain); + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + if ($error_fault->detail->exception->errorcode == 1001) { + $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); + $this->log_action('updateDomain'); + $result = $this->SoapEngine->soapclient->updateDomain($domain); + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + $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); + printf ("

Error: $log"); + } else { + printf('

SIP domain %s has been updated',$domain['domain']); + } + } else { + $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); + printf ("

Error: $log"); + } + } else { + printf('

SIP domain %s has been added',$domain['domain']); + } + + } + $i = 0; + $added = 0; + $updated = 0; + $failed = 0; + foreach($imported_data['sip_accounts'] as $account) { + $i+=1; + flush(); + $account['callLimit'] = intval($account['callLimit']); + $account['prepaid'] = intval($account['prepaid']); + $account['quota'] = intval($account['quota']); + $account['owner'] = intval($account['owner']); + $account['timeout'] = intval($account['timeout']); + + $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); + $this->log_action('addAccount'); + $result = $this->SoapEngine->soapclient->addAccount($account); + + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + if ($error_fault->detail->exception->errorcode == 1011) { + $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); + $result = $this->SoapEngine->soapclient->updateAccount($account); + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + $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); + printf ("

Error: $log"); + $failed += 1; + } else { + printf('

%d SIP account %s@%s has been updated',$i, $account['id']['username'], $account['id']['domain']); + $updated += 1; + } + } else { + $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); + printf ("

Error: $log"); + $failed += 1; + } + } else { + printf('

%d SIP account %s@%s has been added',$i, $account['id']['username'], $account['id']['domain']); + $added += 1; + } + } + if ($added) { + printf('

%d SIP accounts added',$added); + } + if ($updated) { + printf('

%d SIP accounts updated',$updated); + } + if ($failed) { + printf('

%d SIP accounts failed',$failed); + } + + $added = 0; + foreach($imported_data['sip_aliases'] as $alias) { + flush(); + + $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); + $this->log_action('addAlias'); + $result = $this->SoapEngine->soapclient->addAlias($alias); + + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + $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); + printf ("

Error: $log"); + } else { + $added += 1; + } + } + + if ($added) { + printf('

%d SIP aliases added',$added); + } + + return true; + } else { + if ($dictionary['domain']) { + $domain = $dictionary['domain']; + } else { + $domain = trim($_REQUEST['domain']); + } + + list($customer, $reseller)=$this->customerFromLogin($dictionary); + + if (!$this->validDomain($domain)) { + print "Error: invalid domain name"; + return false; + } + + $domainStructure = array('domain' => strtolower($domain), + 'customer' => intval($customer), + 'reseller' => intval($reseller) + ); + $function=array('commit' => array('name' => 'addDomain', + 'parameters' => array($domainStructure), + 'logs' => array('success' => sprintf('SIP domain %s has been added',$domain))) + ); + + return $this->SoapEngine->execute($function, $this->html); + } + } + + function getRecordKeys() + { + // Filter + $filter=array( + 'domain' => $this->filters['domain'], + '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 + ); + + $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); + $this->log_action('getDomains'); + $result = $this->SoapEngine->soapclient->getDomains($Query); + + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + printf ("

Error in getAllowedDomains from %s: %s (%s): %s",$this->SoapEngine->SOAPurl, $error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring); + //return false; + } else { + foreach ($result->domains as $_domain) { + $this->selectionKeys[]=$_domain->domain; + } + } + } + + function getRecord($domain) + { + // Filter + $filter=array( + 'domain' => $domain + ); + + // Range + $range=array('start' => 0, + 'count' => 1 + ); + + $orderBy = array('attribute' => 'changeDate', + 'direction' => 'DESC' + ); + + // Compose query + $Query=array('filter' => $filter, + 'orderBy' => $orderBy, + 'range' => $range + ); + dprint_r($Query); + + // Insert credetials + $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); + $this->log_action('getDomains'); + + // Call function + $result = $this->SoapEngine->soapclient->getDomains($Query); + + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + $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); + return false; + } else { + if ($result->domains[0]) { + return $result->domains[0]; + } else { + return false; + } + } + } + + function showRecord($domain) + { + if ($domain->certificate and $domain->private_key) { + $pemdata = sprintf("%s\n%s", $domain->certificate, $domain->private_key); + $cert = openssl_x509_read( $pemdata ); + if ($cert) { + $cert_data = openssl_x509_parse( $cert ); + openssl_x509_free( $cert ); + $expire = mktime($cert_data['validTo_time_t']); + } else { + $cert_data = ""; + } + } + + #print("

");
+        #print_r($cert_data);
+        #print("
"); + print ""; + print " + +
+ "; + printf ("",$_SERVER['PHP_SELF']); + print ""; + + print " + "; + + if ($cert_data) { + // Parse the resource and print out the contents. + $ts = $cert_data['validTo_time_t']; + $expire = new DateTime("@$ts"); + printf("", $cert_data['subject']['CN']); + printf("", $cert_data['issuer']['C'], $cert_data['issuer']['O'], $cert_data['issuer']['CN']);; + printf("", $expire->format('Y-m-d')); + } + if ($this->adminonly) { + foreach (array_keys($this->FieldsAdminOnly) as $item) { + if ($this->FieldsAdminOnly[$item]['name']) { + $item_name=$this->FieldsAdminOnly[$item]['name']; + } else { + $item_name=preg_replace("/_/"," ",ucfirst($item)); + } + + if ($this->FieldsAdminOnly[$item]['type'] == 'text') { + printf (" + + + ", + $item_name, + $item, + $domain->$item + ); + } else if ($this->FieldsAdminOnly[$item]['type'] == 'boolean') { + if ($domain->$item == 1) { + $checked = "checked"; + } else { + $checked = ""; + } + + printf (" + + + ", + $item_name, + $item, + $checked + ); + } else { + printf (" + + + ", + $item_name, + $item, + $domain->$item + ); + } + } + } + + foreach (array_keys($this->Fields) as $item) { + if ($this->Fields[$item]['name']) { + $item_name=$this->Fields[$item]['name']; + } else { + $item_name = preg_replace("/_/"," ",ucfirst($item)); + } + + if ($this->Fields[$item]['type'] == 'text') { + printf( + " + + + ", + $item_name, + $item, + $domain->$item + ); + } elseif ($this->Fields[$item]['type'] == 'boolean') { + if ($domain->$item == 1) { + $checked = "checked"; + } else { + $checked = ""; + } + + printf( + " + + + ", + $item_name, + $item, + $checked + ); + } else { + printf( + " + + + ", + $item_name, + $item, + $domain->$item + ); + } + } + + printf("", $domain->domain); + $this->printFiltersToForm(); + + $this->printHiddenFormElements(); + + print ""; + print "
+
TLS CN%s
CA Issuer%s %s %s
Expire date%s
%s
%s
%s
%s
%s
%s
"; + } + + function updateRecord() + { + //print "

Updating domain ..."; + + if (!$_REQUEST['domain_filter']) return false; + + if (!$domain = $this->getRecord($_REQUEST['domain_filter'])) { + return false; + } + + $domain_old=$domain; + + 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') { + $domain->$item = intval($_REQUEST[$var_name] == 1); + } else if ($this->Fields[$item]['type'] == 'boolean') { + $domain->$item = intval($_REQUEST[$var_name]); + } else { + $domain->$item = trim($_REQUEST[$var_name]); + } + } + + if ($this->adminonly) { + foreach (array_keys($this->FieldsAdminOnly) as $item) { + $var_name=$item.'_form'; + //printf ("
%s=%s",$var_name,$_REQUEST[$var_name]); + if ($this->FieldsAdminOnly[$item]['type'] == 'integer') { + $domain->$item = intval($_REQUEST[$var_name]); + } else if ($this->Fields[$item]['type'] == 'boolean') { + $domain->$item = intval($_REQUEST[$var_name]); + } else { + $domain->$item = trim($_REQUEST[$var_name]); + } + } + } + + $function=array('commit' => array('name' => 'updateDomain', + 'parameters' => array($domain), + 'logs' => array('success' => sprintf('Domain %s has been updated',$domain->domain))) + ); + + return $this->SoapEngine->execute($function, $this->html); + } + + function hide_html() { + if ($_REQUEST['action'] == 'Export') { + return true; + } else { + return false; + } + } + + function exportDomain($domain) { + $exported_data= array(); + // Filter + $filter=array( + 'domain' => $domain, + 'customer' => intval($this->filters['customer']), + 'reseller' => intval($this->filters['reseller']) + ); + + // Range + $range=array('start' => 0, + 'count' => 1000 + ); + // Compose query + $Query=array('filter' => $filter, + 'range' => $range + ); + + $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); + $this->log_action('getDomains'); + $result = $this->SoapEngine->soapclient->getDomains($Query); + + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + $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); + return false; + } else { + $i = 0 ; + + while ($i < $result->total) { + $domain = $result->domains[$i]; + if (!in_array($domain->customer, $export_customers)) { + $export_customers[]=$domain->customer; + } + if (!in_array($domain->reseller, $export_customers)) { + $export_customers[]=$domain->reseller; + } + $i+=1; + $exported_data['sip_domains'][] = objectToArray($domain); + } + } + + $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); + $this->log_action('getAccounts'); + // Call function + $result = call_user_func_array(array($this->SoapEngine->soapclient,'getAccounts'),array($Query)); + + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + $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); + return false; + } else { + $exported_data['sip_accounts'] = objectToArray($result->accounts); + foreach ($result->accounts as $account) { + if (!in_array($account->owner, $export_customers)) { + $export_customers[]=$account->owner; + } + + $sipId=array("username" => $account->id->username, + "domain" => $account->id->domain + ); + $this->SoapEngine->soapclientVoicemail->addHeader($this->SoapEngine->SoapAuthVoicemail); + $result = $this->SoapEngine->soapclientVoicemail->getAccount($sipId); + + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + if ($error_fault->detail->exception->errorcode != "2000" && $error_fault->detail->exception->errorcode != "1010") { + printf ("

Error (VoicemailPort): %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring); + } + } else { + $exported_data['voicemail_accounts'][] = $result; + } + + // Filter + $filter=array('targetUsername' => $account->id->username, + 'targetDomain' => $account->id->domain + ); + + // Range + $range=array('start' => 0, + 'count' => 20 + ); + + // Compose query + $Query=array('filter' => $filter, + 'range' => $range + ); + + // Call function + $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); + $this->log_action('getAliases'); + $result = $this->SoapEngine->soapclient->getAliases($Query); + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + printf ("

Error (SipPort): %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring); + } else { + foreach ($result->aliases as $alias) { + $exported_data['sip_aliases'][] = objectToArray($alias); + } + } + } + } + + foreach ($export_customers as $customer) { + if (!$customer) { + continue; + } + $filter=array( + 'customer' => intval($customer), + ); + + // Compose query + $Query=array('filter' => $filter + ); + + // Insert credetials + $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuth); + $this->log_action('getCustomers'); + + // Call function + $result = $this->SoapEngine->soapclientCustomers->getCustomers($Query); + if ((new PEAR)->isError($result)) { + $error_msg = $result->getMessage(); + $error_fault= $result->getFault(); + $error_code = $result->getCode(); + $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); + return false; + } else { + $exported_data['customers'] = objectToArray($result->accounts); + } + } + //print_r($exported_data['customers']); + + print_r(json_encode($exported_data)); + } +} diff --git a/library/ngnpro_client.php b/library/ngnpro_client.php index a847bc0..1988f23 100644 --- a/library/ngnpro_client.php +++ b/library/ngnpro_client.php @@ -1,3763 +1,2822 @@ 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) { if (!$this->soapHasError($result)) { return false; } $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); 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 buildUrl($data) { return sprintf( "%s&%s", $this->url, http_build_query($data) ); } 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 "

    "; if ($this->next != 0) { $show_next = $this->maxrowsperpage-$this->next; if ($show_next < 0) { $mod_show_next = $show_next-2*$show_next; } if (!$mod_show_next) $mod_show_next=0; printf("
  • ← Previous
  • ", $url, $mod_show_next); if ($mod_show_next/$this->maxrowsperpage >= 1) { printf("
  • Begin
  • ", $url); } } if ($this->next + $this->maxrowsperpage < $this->rows) { $show_next = $this->maxrowsperpage + $this->next; printf("
  • Next →
  • ", $url, $show_next); } print("
"); } function showSeachFormCustom() { } function showSeachForm() { if ($this->hide_html()) { return; } printf( "

%s", $this->SoapEngine->ports[$this->SoapEngine->port]['description'] ); printf( "

", $_SERVER['PHP_SELF'] ); //print " //
//"; print(""); $this->showEngineSelection(); $this->showAfterEngineSelection(); print("
Order by"); $this->showSortForm(); print("
"); $this->printHiddenFormElements('skipServiceElement'); print("

"); print("
"); $this->showTextBeforeCustomerSelection(); print(""); $this->showCustomerSelection(); $this->showResellerSelection(); print("
"); $this->showSeachFormCustom(); print(" "); if ($_REQUEST['action'] != 'Delete') $this->showAddForm(); } function listRecords() { } function getRecordKeys() { } function addRecord($dictionary = array()) { } function deleteRecord($dictionary = array()) { } function showSortCaret($sortSearch) { if ($this->sorting['sortBy'] == $sortSearch && $this->sorting['sortOrder'] == 'DESC') { print(''); } else if ($this->sorting['sortBy'] == $sortSearch && $this->sorting['sortOrder'] == 'ASC') { print(''); } } function tel2enum($tel, $tld) { if (strlen($tld) == 0) $tld="e164.arpa"; // transform telephone number in FQDN Enum style domain name if (preg_match("/^[+]?(\d+)$/", $tel, $m)) { $l = strlen($m[1]); $rev_num = ""; $z = 0; while ($z < $l) { $ss = substr($m[1], $z, 1); $enum = $ss.".".$enum; $z++; } preg_match("/^(.*)\.$/", $enum, $m); $enum = $m[1]; $enum = $enum.".$tld."; return($enum); } else { return($tel); } } function showAddForm() { if ($this->selectionActive) return; } function showSortForm() { if (empty($this->sortElements)) { return; } $selected_sortBy[$this->sorting['sortBy']]='selected'; print ""); $selected_sortOrder[$this->sorting['sortOrder']]='selected'; print(""); } function showTimezones($timezone) { if (!$fp = fopen("timezones", "r")) { print _("Failed to open timezone file."); return false; } print ""; fclose($fp); } function printHiddenFormElements($skipServiceElement = '') { if (!$skipServiceElement) { printf("", $this->SoapEngine->service); } if ($this->adminonly) { printf("", $this->adminonly); } if (is_array($this->SoapEngine->extraFormElements)) { foreach (array_keys($this->SoapEngine->extraFormElements) as $element) { if (!strlen($this->SoapEngine->extraFormElements[$element])) continue; printf( "\n", $element, $this->SoapEngine->extraFormElements[$element] ); } } } function getAllowedDomains() { } function showActionsForm() { if (!$this->selectionActive) { return; } $class_name = get_class($this).'Actions'; if (class_exists($class_name)) { $actions = new $class_name($this->SoapEngine, $this->login_credentials); $actions->showActionsForm($this->filters, $this->sorting); } } function executeActions() { $this->showSeachForm(); $this->getRecordKeys(); dprint_r($this->selectionKeys); $class_name=get_class($this).'Actions'; if (class_exists($class_name)) { $actions = new $class_name($this->SoapEngine, $this->login_credentials); $actions->execute( $this->selectionKeys, $_REQUEST['sub_action'], trim($_REQUEST['sub_action_parameter']) ); } } function getCustomers() { if (!$this->SoapEngine->customer_engine) { dprint ("No customer_engine available"); return true; } if (!$this->filters['reseller']) return; // Filter $filter = array('reseller'=>intval($this->filters['reseller'])); $range = array( 'start' => 0, 'count' => 100 ); // Order $orderBy = array( 'attribute' => 'customer', 'direction' => 'ASC' ); // Compose query $Query = array( 'filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); // Insert credetials $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers); $this->log_action('getCustomers'); // Call function $result = $this->SoapEngine->soapclientCustomers->getCustomers($Query); if ((new PEAR)->isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); $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); return false; } else { if ($result->total > $range['count']) return; if ($range['count'] <= $result->total) { $max = $range['count']; } else { $max = $result->total; } $i = 0; while ($i < $max) { $customer = $result->accounts[$i]; $this->customers[$customer->id] = $customer->firstName.' '.$customer->lastName; $i++; } return true; } } function getResellers() { if (!$this->SoapEngine->customer_engine) { dprint("No customer_engine available"); return true; } if (!$this->adminonly) return; // Filter $filter = array('reseller'=>intval($this->filters['reseller'])); $range = array( 'start' => 0, 'count' => 200 ); // Order $orderBy = array( 'attribute' => 'customer', 'direction' => 'ASC' ); // Compose query $Query = array( 'filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); // Insert credetials $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers); $this->log_action('getResellers'); // Call function $result = $this->SoapEngine->soapclientCustomers->getResellers($Query); if ((new PEAR)->isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); $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); return false; } else { //if ($result->total > $range['count']) return; if ($range['count'] <= $result->total) { $max = $range['count']; } else { $max = $result->total; } $i = 0; while ($i < $max) { $reseller = $result->accounts[$i]; if (strlen($reseller->organization) && $reseller->organization!= 'N/A') { $this->resellers[$reseller->id] = $reseller->organization; } else { $this->resellers[$reseller->id] = $reseller->firstName.' '.$reseller->lastName; } $i++; } dprint_r($this->resellers); return true; } } function getLoginAccount() { if (!$this->SoapEngine->customer_engine) { dprint("No customer_engine available"); return true; } if (!$this->customer) { //print ("No customer available"); return true; } $filter = array('customer'=>intval($this->customer)); $range = array('start' => 0,'count' => 1); $orderBy = array('attribute' => 'customer','direction' => 'ASC'); // Compose query $Query = array( 'filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); // Insert credetials $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers); $this->log_action('getResellers'); // Call function $result = $this->SoapEngine->soapclientCustomers->getResellers($Query); if ((new PEAR)->isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); $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); return false; } else { $this->loginAccount = $result->accounts[0]; $this->loginImpersonate = $result->accounts[0]->impersonate; $this->loginProperties = $this->loginAccount->properties; } if ($this->loginAccount->reseller == $this->customer) { $this->resellerProperties = $this->loginProperties; } else { $filter = array('customer' => intval($this->loginAccount->reseller)); $range = array('start' => 0, 'count' => 1); $orderBy = array('attribute' => 'customer', 'direction' => 'ASC'); // Compose query $Query = array( 'filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); // Insert credetials $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers); $this->log_action('getResellers'); // Call function $result = $this->SoapEngine->soapclientCustomers->getResellers($Query); if ((new PEAR)->isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); $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); return false; } else { $this->resellerProperties=$result->accounts[0]->properties; } } //dprint_r($this->resellerProperties); } function showCustomerForm($name = 'customer_filter') { if ($this->login_credentials['customer'] != $this->login_credentials['reseller']) { printf(" %s ", $this->login_credentials['customer']); } else { if (count($this->customers)) { $select_customer[$this->filters['customer']]='selected'; printf(""); } else { printf( "", $name, $this->filters['customer'] ); } } } function showResellerForm($name = 'reseller_filter') { if (!$this->adminonly) return; if ($this->login_credentials['reseller']) { printf(" %s ", $this->login_credentials['reseller']); } else { if (count($this->resellers)) { $select_reseller[$this->filters['reseller']] = 'selected'; printf(""); } else { printf( "", $name, $this->filters['reseller'] ); } } } function showTextBeforeCustomerSelection() { print _("Owner"); } function addFiltersToURL() { $url = ''; $j=0; foreach(array_keys($this->filters) as $filter) { if (strlen(trim($this->filters[$filter]))) { if ($j) $url .='&'; $url .= sprintf('%s_filter=%s',$filter,urlencode(trim($this->filters[$filter]))); } $j++; } return $url; } function printFiltersToForm() { foreach(array_keys($this->filters) as $filter) { if (strlen(trim($this->filters[$filter]))) { printf("",$filter,trim($this->filters[$filter])); } } } function getRecord($domain) { } function updateRecord() { } function copyRecord() { } function showRecord($record) { } function RandomString($len = 11) { $alf = array("a","b","c","d","e","f", "h","i","j","k","l","m", "n","p","r","s","t","w", "x","y","1","2","3","4", "5","6","7","8","9"); $i = 0; while ($i < $len) { srand((double)microtime()*1000000); $randval = rand(0, 28); $string = "$string"."$alf[$randval]"; $i++; } return $string; } function RandomNumber($len = 5) { $alf = array("0","1","2","3","4","5", "9","8","7","6"); $i = 0; while ($i < $len) { srand((double)microtime() * 1000000); $randval = rand(0, 9); $string = "$string"."$alf[$randval]"; $i++; } return $string; } function validDomain($domain) { if (!preg_match ("/^[A-Za-z0-9-.]{1,}\.[A-Za-z]{2,}$/", $domain)) { return false; } return true; } function getCarriers() { if (!empty($this->carriers)) { return true; } $Query=array('filter' => array('name'=>''), 'orderBy' => array('attribute' => 'name', 'direction' => 'ASC' ), 'range' => array('start' => 0, 'count' => 1000) ); $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action('getCarriers'); $result = $this->SoapEngine->soapclient->getCarriers($Query); if ((new PEAR)->isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); $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); return false; } else { foreach ($result->carriers as $_carrier) { $this->carriers[$_carrier->id]=$_carrier->name; } } } function getGateways() { if (!empty($this->gateways)) { return true; } $Query=array('filter' => array('name'=>''), 'orderBy' => array('attribute' => 'name', 'direction' => 'ASC' ), 'range' => array('start' => 0, 'count' => 1000) ); $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action('getGateways'); $result = $this->SoapEngine->soapclient->getGateways($Query); if ((new PEAR)->isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); $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); return false; } else { foreach ($result->gateways as $_gateway) { $this->gateways[$_gateway->id] = sprintf("%s, Carrier %s", $_gateway->name, $_gateway->carrier); } } } function updateBefore() { return true; } function updateAfter($customer, $customer_old) { return true; } function showCustomerTextBox() { print "
Owner"; if ($this->adminonly) { $this->showCustomerForm('customer'); print "
"; $this->showResellerForm('reseller'); print "
"; } else { $this->showCustomerForm('customer'); } } function makebar($w) { $return = "
"; if ($w < 0) $w = 0; if ($w > 100) $w = 100; $width = $w; $extra = 100 - $w; if ($width < 50) { $color = "black"; $return .= "
"; } elseif ($width < 70) { $return .= "
"; } else { $return .= "
"; } $return .="
"; return $return; } function customerFromLogin($dictionary = array()) { if ($this->login_credentials['reseller']) { $reseller = $this->login_credentials['reseller']; if ($dictionary['customer']) { $customer = $dictionary['customer']; } elseif ($_REQUEST['customer']) { $customer = $_REQUEST['customer']; } else { $customer = $this->login_credentials['customer']; } } else { if ($dictionary['reseller']) { $reseller = $dictionary['reseller']; } else { $reseller = trim($_REQUEST['reseller']); } if ($dictionary['customer']) { $customer = $dictionary['customer']; } else { $customer = trim($_REQUEST['customer']); } } if (!$customer) $customer = $reseller; return array(intval($customer),intval($reseller)); } function getCustomerProperties($customer = '') { if (!$customer) $customer=$this->customer; $log=sprintf("getCustomerProperties(%s,engine=%s)",$customer, $this->SoapEngine->customer_engine); dprint($log); if (!$this->SoapEngine->customer_engine) { dprint ("No customer_engine available"); return true; } if (!$customer) { dprint ("No customer available"); return true; } $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers); $this->log_action('getProperties'); $result = $this->SoapEngine->soapclientCustomers->getProperties(intval($customer)); if ((new PEAR)->isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); $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); return false; } else { $this->loginProperties=$result; } /* print "
";
         print_r($this->loginProperties);
         print "
"; */ return true; } function setCustomerProperties($properties, $customer = '') { if (!$customer) $customer=$this->customer; $log=sprintf("setCustomerProperties(%s,engine=%s)",$customer, $this->SoapEngine->customer_engine); dprint($log); if (!$this->SoapEngine->customer_engine) { dprint ("No customer_engine available"); return true; } if (!is_array($properties) || !$customer) return true; $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuthCustomers); $this->log_action('setProperties'); $result = $this->SoapEngine->soapclientCustomers->setProperties(intval($customer), $properties); if ((new PEAR)->isError($result)) { $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); $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); return false; } return true; } function getCustomerProperty($name = '') { if (empty($this->loginProperties)) { return false; } foreach ($this->loginProperties as $_property) { if ($_property->name == $name) { return $_property->value; } } return false; } function getResellerProperty($name = '') { if (empty($this->resellerProperties)) { return false; } foreach ($this->resellerProperties as $_property) { if ($_property->name == $name) { return $_property->value; } } return false; } function checkRecord($dictionary) { return true; } function showWelcomeMessage() { if (!strlen($this->SoapEngine->welcome_message)) return ; printf ("%s",$this->SoapEngine->welcome_message); } function print_w($obj) { print "
\n";
         print_r($obj);
         print "
\n"; } function hide_html() { return false; } } -class SipDomains extends Records -{ - var $FieldsAdminOnly=array( - 'reseller' => array('type'=>'integer'), - ); - - var $Fields=array( - 'customer' => array('type'=>'integer'), - 'certificate' => array('type'=>'text'), - 'private_key' => array('type'=>'text'), - 'match_ip_address' => array('type'=>'text', 'name'=> 'Match IP addresses'), - 'verify_cert' => array('type'=>'boolean'), - 'require_cert' => array('type'=>'boolean') - ); - - public function __construct($SoapEngine) - { - dprint("init Domains"); - - $this->filters = array( - 'domain' => strtolower(trim($_REQUEST['domain_filter'])) - ); - - parent::__construct($SoapEngine); - - // keep default maxrowsperpage - $this->sortElements = array( - 'changeDate' => 'Change date', - 'domain' => 'Domain' - ); - } - - function listRecords() - { - $this->showSeachForm(); - - // Filter - $filter = array( - 'domain' => $this->filters['domain'], - '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 - ); - dprint_r($Query); - - // Insert credetials - $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); - $this->log_action('getDomains'); - - // Call function - $result = $this->SoapEngine->soapclient->getDomains($Query); - - if ((new PEAR)->isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - $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); - return false; - } else { - $this->rows = $result->total; - - if ($_REQUEST['action'] == 'Export' and $this->rows) { - $this->exportDomain($result->domains[0]->domain); - return; - } - - - if ($this->rows && $_REQUEST['action'] != 'PerformActions' && $_REQUEST['action'] != 'Delete') { - $this->showActionsForm(); - } - - print " -
$this->rows records found
-

- - - - - - - - - - - "; - - if (!$this->next) $this->next=0; - - if ($this->rows > $this->maxrowsperpage) { - $maxrows = $this->maxrowsperpage + $this->next; - if ($maxrows > $this->rows) $maxrows = $this->maxrowsperpage; - } else { - $maxrows=$this->rows; - } - - $i=0; - - if ($this->rows) { - while ($i < $maxrows) { - if (!$result->domains[$i]) break; - $domain = $result->domains[$i]; - - $index = $this->next+$i+1; - - $delete_url = $this->url.sprintf( - "&service=%s&action=Delete&domain_filter=%s", - urlencode($this->SoapEngine->service), - urlencode($domain->domain) - ); - - if ($_REQUEST['action'] == 'Delete' && - $_REQUEST['domain_filter'] == $domain->domain) { - $delete_url .= "&confirm=1"; - $deleteText = "Confirm"; - } else { - $deleteText = "Delete"; - } - - if ($_REQUEST['action'] == 'Delete' && - $_REQUEST['domain_filter'] == $domain->domain) { - $delete_url .= "&confirm=1"; - $deleteText = "Confirm"; - } else { - $deleteText = "Delete"; - } - - $_customer_url = $this->url.sprintf( - "&service=customers@%s&customer_filter=%s", - urlencode($this->SoapEngine->customer_engine), - urlencode($domain->customer) - ); - - $_sip_domains_url = $this->url.sprintf( - "&service=sip_domains@%s&domain_filter=%s", - urlencode($this->SoapEngine->soapEngine), - urlencode($domain->domain) - ); - - $_sip_accounts_url = $this->url.sprintf( - "&service=sip_accounts@%s&domain_filter=%s", - urlencode($this->SoapEngine->soapEngine), - urlencode($domain->domain) - ); - - $_sip_aliases_url = $this->url.sprintf( - "&service=sip_aliases@%s&alias_domain_filter=%s", - urlencode($this->SoapEngine->soapEngine), - urlencode($domain->domain) - ); - if ($this->adminonly) { - $export_url = $this->url.sprintf( - "&service=%s&action=Export&domain_filter=%s", - urlencode($this->SoapEngine->service), - urlencode($domain->domain) - ); - - printf( - " - - - - - - - - - - ", - $index, - $_customer_url, - $domain->customer, - $domain->reseller, - $_sip_domains_url, - $domain->domain, - $_sip_accounts_url, - $_sip_aliases_url, - $domain->changeDate, - $delete_url, - $deleteText, - $export_url - ); - } else { - printf( - " - - - - - - - - - ", - $index, - $_customer_url, - $domain->customer, - $domain->reseller, - $_sip_domains_url, - $domain->domain, - $_sip_accounts_url, - $_sip_aliases_url, - $domain->changeDate, - $delete_url, - $deleteText - ); - } - - $i++; - } - } - - print "
IdOwnerSIP domainChange dateActions
%s%s.%s%sSip accountsSip aliases%s%sExport
%s%s.%s%sSip accountsSip aliases%s%s
"; - - if ($this->rows == 1) { - $this->showRecord($domain); - } else { - $this->showPagination($maxrows); - } - - return true; - } - } - - function showSeachFormCustom() - { - printf ("

SIP domain
",$this->filters['domain']); - } - - function exportRecord($dictionary = array()) - { - } - - function deleteRecord($dictionary = array()) - { - if (!$dictionary['confirm'] && !$_REQUEST['confirm']) { - print "

Please press on Confirm to confirm the delete. "; - return true; - } - - if ($dictionary['domain']) { - $domain=$dictionary['domain']; - } else { - $domain=$this->filters['domain']; - } - - if (!strlen($domain)) { - print "

Error: missing SIP domain. "; - return false; - } - - $function=array('commit' => array('name' => 'deleteDomain', - 'parameters' => array($domain), - 'logs' => array('success' => sprintf('SIP domain %s has been deleted',$domain)) - ) - ); - - unset($this->filters); - return $this->SoapEngine->execute($function, $this->html); - } - - function showAddForm() { - if ($this->selectionActive) return; - printf ("

",$_SERVER['PHP_SELF']); - print " -
- "; - - print " - - "; - - $this->showCustomerTextBox(); - - printf ("
SIP domain
"); - - $this->printHiddenFormElements(); - printf (" Import SIP domain from file: - -
-
-
- -
- - Select file - Change - - Remove - -
-
- " - ); - print "
- - "; - } - - function addRecord($dictionary = array()) - { - if ($this->adminonly && $_FILES['import_file']['tmp_name']) { - $content=fread(fopen($_FILES['import_file']['tmp_name'], "r"), $_FILES['import_file']['size']); - //print_r($content); - - if (!$imported_data=json_decode($content, true)) { - printf ("

Error: reading imported data. "); - return false; - } - - //print_r($imported_data); - - if (!in_array('sip_domains', array_keys($imported_data))) { - printf ("

Error: Missing SIP domains in imported data. "); - return false; - } - - if (!in_array('sip_accounts', array_keys($imported_data))) { - return false; - printf ("

Error: Missing SIP accounts in imported data. "); - } - - foreach($imported_data['customers'] as $customer) { - // Insert credetials - $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuth); - $this->log_action('addAccount'); - - $customer['credit'] = floatval($customer['credit']); - $customer['balance'] = floatval($customer['balance']); - // Call function - $result = $this->SoapEngine->soapclientCustomers->addAccount($customer); - if ((new PEAR)->isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - if ($error_fault->detail->exception->errorcode == 5001) { - $result = $this->SoapEngine->soapclientCustomers->updateCustomer($customer); - if ((new PEAR)->isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - $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); - printf ("

Error: $log"); - } else { - printf('

Customer %s has been updated',$customer['id']); - } - } else { - $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); - printf ("

Error: $log"); - } - } else { - printf('

Customer %s has been added',$customer['id']); - } - } - - foreach($imported_data['sip_domains'] as $domain) { - flush(); - $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); - $this->log_action('addDomain'); - $result = $this->SoapEngine->soapclient->addDomain($domain); - if ((new PEAR)->isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - if ($error_fault->detail->exception->errorcode == 1001) { - $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); - $this->log_action('updateDomain'); - $result = $this->SoapEngine->soapclient->updateDomain($domain); - if ((new PEAR)->isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - $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); - printf ("

Error: $log"); - } else { - printf('

SIP domain %s has been updated',$domain['domain']); - } - } else { - $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); - printf ("

Error: $log"); - } - } else { - printf('

SIP domain %s has been added',$domain['domain']); - } - - } - $i = 0; - $added = 0; - $updated = 0; - $failed = 0; - foreach($imported_data['sip_accounts'] as $account) { - $i+=1; - flush(); - $account['callLimit'] = intval($account['callLimit']); - $account['prepaid'] = intval($account['prepaid']); - $account['quota'] = intval($account['quota']); - $account['owner'] = intval($account['owner']); - $account['timeout'] = intval($account['timeout']); - - $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); - $this->log_action('addAccount'); - $result = $this->SoapEngine->soapclient->addAccount($account); - - if ((new PEAR)->isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - if ($error_fault->detail->exception->errorcode == 1011) { - $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); - $result = $this->SoapEngine->soapclient->updateAccount($account); - if ((new PEAR)->isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - $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); - printf ("

Error: $log"); - $failed += 1; - } else { - printf('

%d SIP account %s@%s has been updated',$i, $account['id']['username'], $account['id']['domain']); - $updated += 1; - } - } else { - $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); - printf ("

Error: $log"); - $failed += 1; - } - } else { - printf('

%d SIP account %s@%s has been added',$i, $account['id']['username'], $account['id']['domain']); - $added += 1; - } - } - if ($added) { - printf('

%d SIP accounts added',$added); - } - if ($updated) { - printf('

%d SIP accounts updated',$updated); - } - if ($failed) { - printf('

%d SIP accounts failed',$failed); - } - - $added = 0; - foreach($imported_data['sip_aliases'] as $alias) { - flush(); - - $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); - $this->log_action('addAlias'); - $result = $this->SoapEngine->soapclient->addAlias($alias); - - if ((new PEAR)->isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - $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); - printf ("

Error: $log"); - } else { - $added += 1; - } - } - - if ($added) { - printf('

%d SIP aliases added',$added); - } - - return true; - } else { - if ($dictionary['domain']) { - $domain = $dictionary['domain']; - } else { - $domain = trim($_REQUEST['domain']); - } - - list($customer, $reseller)=$this->customerFromLogin($dictionary); - - if (!$this->validDomain($domain)) { - print "Error: invalid domain name"; - return false; - } - - $domainStructure = array('domain' => strtolower($domain), - 'customer' => intval($customer), - 'reseller' => intval($reseller) - ); - $function=array('commit' => array('name' => 'addDomain', - 'parameters' => array($domainStructure), - 'logs' => array('success' => sprintf('SIP domain %s has been added',$domain))) - ); - - return $this->SoapEngine->execute($function, $this->html); - } - } - - function getRecordKeys() - { - // Filter - $filter=array( - 'domain' => $this->filters['domain'], - '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 - ); - - $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); - $this->log_action('getDomains'); - $result = $this->SoapEngine->soapclient->getDomains($Query); - - if ((new PEAR)->isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error in getAllowedDomains from %s: %s (%s): %s",$this->SoapEngine->SOAPurl, $error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring); - //return false; - } else { - foreach ($result->domains as $_domain) { - $this->selectionKeys[]=$_domain->domain; - } - } - } - - function getRecord($domain) - { - // Filter - $filter=array( - 'domain' => $domain - ); - - // Range - $range=array('start' => 0, - 'count' => 1 - ); - - $orderBy = array('attribute' => 'changeDate', - 'direction' => 'DESC' - ); - - // Compose query - $Query=array('filter' => $filter, - 'orderBy' => $orderBy, - 'range' => $range - ); - dprint_r($Query); - - // Insert credetials - $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); - $this->log_action('getDomains'); - - // Call function - $result = $this->SoapEngine->soapclient->getDomains($Query); - - if ((new PEAR)->isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - $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); - return false; - } else { - if ($result->domains[0]) { - return $result->domains[0]; - } else { - return false; - } - } - } - - function showRecord($domain) - { - if ($domain->certificate and $domain->private_key) { - $pemdata = sprintf("%s\n%s", $domain->certificate, $domain->private_key); - $cert = openssl_x509_read( $pemdata ); - if ($cert) { - $cert_data = openssl_x509_parse( $cert ); - openssl_x509_free( $cert ); - $expire = mktime($cert_data['validTo_time_t']); - } else { - $cert_data = ""; - } - } - - #print("

");
-        #print_r($cert_data);
-        #print("
"); - print ""; - print " - -
- "; - printf ("",$_SERVER['PHP_SELF']); - print ""; - - print " - "; - - if ($cert_data) { - // Parse the resource and print out the contents. - $ts = $cert_data['validTo_time_t']; - $expire = new DateTime("@$ts"); - printf("", $cert_data['subject']['CN']); - printf("", $cert_data['issuer']['C'], $cert_data['issuer']['O'], $cert_data['issuer']['CN']);; - printf("", $expire->format('Y-m-d')); - } - if ($this->adminonly) { - foreach (array_keys($this->FieldsAdminOnly) as $item) { - if ($this->FieldsAdminOnly[$item]['name']) { - $item_name=$this->FieldsAdminOnly[$item]['name']; - } else { - $item_name=preg_replace("/_/"," ",ucfirst($item)); - } - - if ($this->FieldsAdminOnly[$item]['type'] == 'text') { - printf (" - - - ", - $item_name, - $item, - $domain->$item - ); - } else if ($this->FieldsAdminOnly[$item]['type'] == 'boolean') { - if ($domain->$item == 1) { - $checked = "checked"; - } else { - $checked = ""; - } - - printf (" - - - ", - $item_name, - $item, - $checked - ); - } else { - printf (" - - - ", - $item_name, - $item, - $domain->$item - ); - } - } - } - - foreach (array_keys($this->Fields) as $item) { - if ($this->Fields[$item]['name']) { - $item_name=$this->Fields[$item]['name']; - } else { - $item_name = preg_replace("/_/"," ",ucfirst($item)); - } - - if ($this->Fields[$item]['type'] == 'text') { - printf( - " - - - ", - $item_name, - $item, - $domain->$item - ); - } elseif ($this->Fields[$item]['type'] == 'boolean') { - if ($domain->$item == 1) { - $checked = "checked"; - } else { - $checked = ""; - } - - printf( - " - - - ", - $item_name, - $item, - $checked - ); - } else { - printf( - " - - - ", - $item_name, - $item, - $domain->$item - ); - } - } - - printf("", $domain->domain); - $this->printFiltersToForm(); - - $this->printHiddenFormElements(); - - print ""; - print "
-
TLS CN%s
CA Issuer%s %s %s
Expire date%s
%s
%s
%s
%s
%s
%s
"; - } - - function updateRecord() - { - //print "

Updating domain ..."; - - if (!$_REQUEST['domain_filter']) return false; - - if (!$domain = $this->getRecord($_REQUEST['domain_filter'])) { - return false; - } - - $domain_old=$domain; - - 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') { - $domain->$item = intval($_REQUEST[$var_name] == 1); - } else if ($this->Fields[$item]['type'] == 'boolean') { - $domain->$item = intval($_REQUEST[$var_name]); - } else { - $domain->$item = trim($_REQUEST[$var_name]); - } - } - - if ($this->adminonly) { - foreach (array_keys($this->FieldsAdminOnly) as $item) { - $var_name=$item.'_form'; - //printf ("
%s=%s",$var_name,$_REQUEST[$var_name]); - if ($this->FieldsAdminOnly[$item]['type'] == 'integer') { - $domain->$item = intval($_REQUEST[$var_name]); - } else if ($this->Fields[$item]['type'] == 'boolean') { - $domain->$item = intval($_REQUEST[$var_name]); - } else { - $domain->$item = trim($_REQUEST[$var_name]); - } - } - } - - $function=array('commit' => array('name' => 'updateDomain', - 'parameters' => array($domain), - 'logs' => array('success' => sprintf('Domain %s has been updated',$domain->domain))) - ); - - return $this->SoapEngine->execute($function, $this->html); - } - - function hide_html() { - if ($_REQUEST['action'] == 'Export') { - return true; - } else { - return false; - } - } - - function exportDomain($domain) { - $exported_data= array(); - // Filter - $filter=array( - 'domain' => $domain, - 'customer' => intval($this->filters['customer']), - 'reseller' => intval($this->filters['reseller']) - ); - - // Range - $range=array('start' => 0, - 'count' => 1000 - ); - // Compose query - $Query=array('filter' => $filter, - 'range' => $range - ); - - $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); - $this->log_action('getDomains'); - $result = $this->SoapEngine->soapclient->getDomains($Query); - - if ((new PEAR)->isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - $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); - return false; - } else { - $i = 0 ; - - while ($i < $result->total) { - $domain = $result->domains[$i]; - if (!in_array($domain->customer, $export_customers)) { - $export_customers[]=$domain->customer; - } - if (!in_array($domain->reseller, $export_customers)) { - $export_customers[]=$domain->reseller; - } - $i+=1; - $exported_data['sip_domains'][] = objectToArray($domain); - } - } - - $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); - $this->log_action('getAccounts'); - // Call function - $result = call_user_func_array(array($this->SoapEngine->soapclient,'getAccounts'),array($Query)); - - if ((new PEAR)->isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - $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); - return false; - } else { - $exported_data['sip_accounts'] = objectToArray($result->accounts); - foreach ($result->accounts as $account) { - if (!in_array($account->owner, $export_customers)) { - $export_customers[]=$account->owner; - } - - $sipId=array("username" => $account->id->username, - "domain" => $account->id->domain - ); - $this->SoapEngine->soapclientVoicemail->addHeader($this->SoapEngine->SoapAuthVoicemail); - $result = $this->SoapEngine->soapclientVoicemail->getAccount($sipId); - - if ((new PEAR)->isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - if ($error_fault->detail->exception->errorcode != "2000" && $error_fault->detail->exception->errorcode != "1010") { - printf ("

Error (VoicemailPort): %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring); - } - } else { - $exported_data['voicemail_accounts'][] = $result; - } - - // Filter - $filter=array('targetUsername' => $account->id->username, - 'targetDomain' => $account->id->domain - ); - - // Range - $range=array('start' => 0, - 'count' => 20 - ); - - // Compose query - $Query=array('filter' => $filter, - 'range' => $range - ); - - // Call function - $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); - $this->log_action('getAliases'); - $result = $this->SoapEngine->soapclient->getAliases($Query); - if ((new PEAR)->isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - printf ("

Error (SipPort): %s (%s): %s",$error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring); - } else { - foreach ($result->aliases as $alias) { - $exported_data['sip_aliases'][] = objectToArray($alias); - } - } - } - } - - foreach ($export_customers as $customer) { - if (!$customer) { - continue; - } - $filter=array( - 'customer' => intval($customer), - ); - - // Compose query - $Query=array('filter' => $filter - ); - - // Insert credetials - $this->SoapEngine->soapclientCustomers->addHeader($this->SoapEngine->SoapAuth); - $this->log_action('getCustomers'); - - // Call function - $result = $this->SoapEngine->soapclientCustomers->getCustomers($Query); - if ((new PEAR)->isError($result)) { - $error_msg = $result->getMessage(); - $error_fault= $result->getFault(); - $error_code = $result->getCode(); - $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); - return false; - } else { - $exported_data['customers'] = objectToArray($result->accounts); - } - } - //print_r($exported_data['customers']); - - print_r(json_encode($exported_data)); - } -} +require_once 'NGNPro/Records/SipDomains.php'; require_once 'NGNPro/Records/SipAccounts.php'; require_once 'NGNPro/Records/SipAliases.php'; require_once 'NGNPro/Records/EnumRanges.php'; require_once 'NGNPro/Records/EnumMappings.php'; require_once 'NGNPro/Records/DnsZones.php'; require_once 'NGNPro/Records/DnsRecords.php'; require_once 'NGNPro/Records/DnsRecords/FancyRecords.php'; require_once 'NGNPro/Records/DnsRecords/FancyRecords/EmailAliases.php'; require_once 'NGNPro/Records/DnsRecords/FancyRecords/UrlRedirect.php'; require_once 'NGNPro/Records/TrustedPeers.php'; require_once 'NGNPro/Records/Carriers.php'; require_once 'NGNPro/Records/Gateways.php'; require_once 'NGNPro/Records/GatewayRules.php'; require_once 'NGNPro/Records/Routes.php'; require_once 'NGNPro/Records/Customers.php'; require_once 'NGNPro/Presence.php'; class recordGenerator extends SoapEngine { //this class generates in bulk enum numbers and sip accounts var $template = array(); var $allowedPorts = array(); var $maxRecords = 500; var $minimum_number_length = 4; var $maximum_number_length = 15; var $default_ip_access_list = ''; var $default_call_limit = ''; function recordGenerator($generatorId,$record_generators,$soapEngines,$login_credentials=array()) { $this->record_generators = $record_generators; $this->generatorId = $generatorId; $this->login_credentials = $login_credentials; //dprint_r($this->login_credentials); $keys = array_keys($this->record_generators); if (!$generatorId) $generatorId=$keys[0]; if (!in_array($generatorId,array_keys($this->record_generators))) { return false; } if (strlen($this->login_credentials['soap_filter'])) { $this->soapEngines = $this->getSoapEngineAllowed($soapEngines,$this->login_credentials['soap_filter']); } else { $this->soapEngines = $soapEngines; } if (in_array($this->record_generators[$generatorId]['sip_engine'],array_keys($this->soapEngines))) { // sip zones if (count($this->allowedPorts[$this->record_generators[$generatorId]['sip_engine']]) > 1 && !in_array('sip_accounts',$this->allowedPorts[$this->record_generators[$generatorId]['sip_engine']])) { // sip port not available dprint("sip port not avaliable"); } else { $sip_engine = 'sip_accounts@'.$this->record_generators[$generatorId]['sip_engine']; $this->SipSoapEngine = new SoapEngine($sip_engine,$soapEngines,$login_credentials); $_sip_class = $this->SipSoapEngine->records_class; $this->sipRecords = new $_sip_class($this->SipSoapEngine); $this->sipRecords->getAllowedDomains(); print_r($this->record_generators[$generatorId]['sip_engine']); if ($this->soapEngines[$this->record_generators[$generatorId]['sip_engine']]['ip_access_list']){ $this->default_ip_access_list = $this->soapEngines[$this->record_generators[$generatorId]['sip_engine']]['ip_access_list']; } if ($this->soapEngines[$this->record_generators[$generatorId]['sip_engine']]['call_limit']){ $this->default_call_limit = $this->soapEngines[$this->record_generators[$generatorId]['sip_engine']]['call_limit']; } } } else { printf ("Error: sip_engine %s does not exist",$this->record_generators[$generatorId]['sip_engine']); } if (in_array($this->record_generators[$generatorId]['enum_engine'],array_keys($this->soapEngines))) { if (count($this->allowedPorts[$this->record_generators[$generatorId]['enum_engine']]) > 1 && !in_array('enum_numbers',$this->allowedPorts[$this->record_generators[$generatorId]['enum_engine']])) { dprint("enum port not avaliable"); // enum port not available } else { // enum mappings $enum_engine = 'enum_numbers@'.$this->record_generators[$generatorId]['enum_engine']; $this->EnumSoapEngine = new SoapEngine($enum_engine,$soapEngines,$login_credentials); $_enum_class = $this->EnumSoapEngine->records_class; $this->enumRecords = new $_enum_class($this->EnumSoapEngine); } } else { printf ("Error: enum_engine %s does not exist",$this->record_generators[$generatorId]['enum_engine']); } if (in_array($this->record_generators[$generatorId]['customer_engine'],array_keys($this->soapEngines))) { if (count($this->allowedPorts[$this->record_generators[$generatorId]['customer_engine']]) > 1 && !in_array('customers',$this->allowedPorts[$this->record_generators[$generatorId]['customer_engine']])) { dprint("customer port not avaliable"); } else { $customer_engine = 'customers@'.$this->record_generators[$generatorId]['customer_engine']; $this->CustomerSoapEngine = new SoapEngine($customer_engine,$soapEngines,$login_credentials); $_customer_class = $this->CustomerSoapEngine->records_class; $this->customerRecords = new $_customer_class($this->CustomerSoapEngine); } } else { printf ("Error: customer_engine %s does not exist",$this->record_generators[$generatorId]['customer_engine']); } if ($_REQUEST['reseller_filter']) $this->template['reseller']=intval($_REQUEST['reseller_filter']); if ($_REQUEST['customer_filter']) $this->template['customer']=intval($_REQUEST['customer_filter']); } function showGeneratorForm() { print "

"; print _("ENUM number generator"); print "
"; print " "; print " "; if ($_REQUEST['add_prefix']) { $add_prefix=$_REQUEST['add_prefix']; } else { $add_prefix = $this->sipRecords->getCustomerProperty('enum_generator_add_prefix'); } print " ",$add_prefix); if ($_REQUEST['number_length']) { $number_length=$_REQUEST['number_length']; } else { $number_length = $this->sipRecords->getCustomerProperty('enum_generator_number_length'); } print " "; if ($_REQUEST['strip_digits']) { $strip_digits=$_REQUEST['strip_digits']; } else if ($strip_digits = $this->sipRecords->getCustomerProperty('enum_generator_strip_digits')) { } else { $strip_digits=0; } print " ",$strip_digits); print " "; print " "; if (count($this->sipRecords->allowedDomains) > 0) { print " "; print " "; print " ",$checked_create_sip); if ($_REQUEST['pstn']) { $checked_pstn='checked'; } else { $checked_pstn=''; } print " ",$checked_pstn); if ($_REQUEST['prepaid']) { $checked_prepaid='checked'; } else { $checked_prepaid=''; } print " ",$checked_prepaid); if ($_REQUEST['rpid_strip_digits']) { $rpid_strip_digits=$_REQUEST['rpid_strip_digits']; } else if ($rpid_strip_digits = $this->sipRecords->getCustomerProperty('enum_generator_rpid_strip_digits')) { } else { $rpid_strip_digits=0; } print " ",$rpid_strip_digits); print " ",$_REQUEST['quota']); print " ",$_REQUEST['password']); if (isset($_REQUEST['call_limit'])) { $call_limit=$_REQUEST['call_limit']; } else { $call_limit = $this->sipRecords->getCustomerProperty('enum_generator_call_limit'); } if (!strlen($call_limit) && strlen($this->default_call_limit)) { $call_limit = $this->default_call_limit; } print " ",$call_limit); if (isset($_REQUEST['ip_access_list'])) { $ip_access_list=$_REQUEST['ip_access_list']; } else { $ip_access_list = $this->sipRecords->getCustomerProperty('enum_generator_ip_access_list'); } if (!$ip_access_list && $this->default_ip_access_list) { $ip_access_list = $this->default_ip_access_list; } print " ",$ip_access_list); } if ($_REQUEST['nr_records']) { $nr_records=$_REQUEST['nr_records']; } else { $nr_records=1; } print " "; print " "; print " "; $this->printHiddenFormElements(); print "
"; print _("ENUM range"); print " "; /* if ($_REQUEST['range']) { $selected_range[$_REQUEST['range']]='selected'; } else if ($_last_range=$this->enumRecords->getCustomerProperty('enum_generator_range')) { $selected_range[$_last_range] = 'selected'; } if (is_array($this->enumRecords->ranges)) { print ""; } */ list($_range['prefix'],$_range['tld'])=explode("@",$_REQUEST['range']); printf ("+%s under %s",$_REQUEST['range'],$_range['prefix'],$_range['tld']); print "
"; print ""; print _("ENUM mapping template"); print ""; print "
"; print _("Add prefix after range:"); printf ("
"; print _("Number length:"); printf ("
",$number_length); print _("SIP domain:"); print " "; if (count($this->sipRecords->allowedDomains) > 0) { if ($_REQUEST['domain']) { $selected_domain[$_REQUEST['domain']]='selected'; } else if ($_last_domain=$this->sipRecords->getCustomerProperty('enum_generator_sip_domain')) { $selected_domain[$_last_domain] = 'selected'; } print " "; } else { print ""; } print " "; print "
"; print _("Strip digits:"); printf ("
"; print _("Owner:"); printf (" ",$_REQUEST['owner']); print "
"; print _("Info:"); printf (" ",$_REQUEST['info']); print "

"; print ""; print _("SIP account template"); print ""; print "
"; print _("Create SIP records"); if ($_REQUEST['create_sip']) { $checked_create_sip='checked'; } else { $checked_create_sip=''; } printf ("
"; print _("PSTN access"); printf ("
"; print _("Prepaid"); printf ("
"; print _("Strip digits from Caller-ID"); printf ("
"; print _("Quota"); printf ("
"; print _("Password"); printf ("
"; print _("PSTN call limit"); printf ("
"; print _("IP access list"); printf ("

"; print ""; print ""; printf (" Number of records: ",$nr_records); print ""; print "

"; print _("Existing records will not be overwritten. "); print "

"; } function checkGenerateRequest() { // check number of records $this->template['create_sip']=trim($_REQUEST['create_sip']); $ip_access_list = preg_replace("/\s+/"," ", $_REQUEST['ip_access_list']); if (strlen($ip_access_list) and !check_ip_access_list(trim($ip_access_list), true)) { printf ("Error: IP access lists must be a space separated list of IP network/mask, example: 10.0.20.40/24"); return false; } $this->template['ip_access_list'] = trim($ip_access_list); if (strlen($_REQUEST['call_limit']) && !is_numeric($_REQUEST['call_limit'])) { printf ("Error: PSTN call limit must be numeric"); return false; } $this->template['call_limit']=$_REQUEST['call_limit']; $this->template['rpid_strip_digits']=intval($_REQUEST['rpid_strip_digits']); $this->template['info']=trim($_REQUEST['info']); $nr_records=trim($_REQUEST['nr_records']); if (!is_numeric($nr_records) || $nr_records < 1 || $nr_records > $this->maxRecords) { printf ("Error: number of records must be a number between 1 and %d",$this->maxRecords); return false; } $this->template['nr_records'] = $nr_records; $number_length=trim($_REQUEST['number_length']); if (!is_numeric($number_length) || $number_length < $this->minimum_number_length || $number_length > $this->maximum_number_length) { printf ("Error: number length must be a number between 4 and 15",$this->minimum_number_length,$this->maximum_number_length); return false; } $this->template['number_length'] = $number_length; $strip_digits=trim($_REQUEST['strip_digits']); if (!is_numeric($strip_digits) || $strip_digits < 0 || $number_length < $strip_digits + 3) { printf ("Error: strip digits + 3 must be smaller then %d",$number_length); return false; } $this->template['strip_digits'] = $strip_digits; // sip domain $domain=trim($_REQUEST['domain']); if (!strlen($domain)) { print "Error: SIP domain is missing"; return false; } $this->template['domain'] = $domain; $add_prefix=trim($_REQUEST['add_prefix']); if (strlen($add_prefix) && !is_numeric($add_prefix)) { print "Error: Add prefix must be numeric"; return false; } $this->template['add_prefix'] = $add_prefix; $owner=trim($_REQUEST['owner']); if (strlen($owner) && !is_numeric($owner)) { print "Error: Owner must be an integer"; return false; } // check ENUM TLD list($rangePrefix,$tld)=explode('@',trim($_REQUEST['range'])); $this->template['range'] = trim($_REQUEST['range']); $this->template['rangePrefix'] = $rangePrefix; $this->template['tld'] = $tld; $this->template['quota'] = intval($_REQUEST['quota']); $this->template['owner'] = intval($owner); $this->template['pstn'] = intval($_REQUEST['pstn']); $this->template['prepaid'] = intval($_REQUEST['prepaid']); $this->template['password'] = trim($_REQUEST['password']); /////////////////////////////////////// // logical checks if (strlen($this->template['add_prefix'])) { $start = $this->template['add_prefix']; } else { $start = 0; } $this->template['digitsAfterRange'] = $this->template['number_length'] - strlen($this->template['rangePrefix']); if ($this->template['number_length'] == strlen($this->template['rangePrefix']) + strlen($this->template['add_prefix'])) { $this->template['firstNumber'] = $this->template['rangePrefix'].$this->template['add_prefix']; $this->template['lastNumber'] = substr($this->template['firstNumber'],0,-1).'9'; $this->template['maxNumbers'] = $this->template['lastNumber'] - $this->template['firstNumber'] + 1; } else { $this->template['firstNumber'] = $this->template['rangePrefix'].str_pad($start,$this->template['digitsAfterRange'],'0'); $this->template['lastNumber'] = sprintf("%.0f", $this->template['firstNumber'] + pow(10,$this->template['digitsAfterRange']-strlen($this->template['add_prefix'])) - 1); $this->template['maxNumbers'] = pow(10,$this->template['digitsAfterRange']-strlen($this->template['add_prefix'])); } dprint_r($this->template); if ($this->template['maxNumbers'] < $this->template['nr_records']) { printf ("Error: Insufficient numbers in range, requested = %d, available = %d",$this->template['nr_records'],$this->template['maxNumbers']); return false; } return true; } function generateRecords() { print "

"; if (!$this->checkGenerateRequest()) { return false; } print "

Generating records

    "; $_p=array( array('name' => 'enum_generator_sip_domain', 'category' => 'web', 'value' => strval($this->template['domain']), 'permission' => 'customer' ), array('name' => 'enum_generator_range', 'category' => 'web', 'value' => strval($this->template['range']), 'permission' => 'customer' ), array('name' => 'enum_generator_strip_digits', 'category' => 'web', 'value' => strval($this->template['strip_digits']), 'permission' => 'customer' ), array('name' => 'enum_generator_number_length', 'category' => 'web', 'value' => strval($this->template['number_length']), 'permission' => 'customer' ), array('name' => 'enum_generator_add_prefix', 'category' => 'web', 'value' => strval($this->template['add_prefix']), 'permission' => 'customer' ), array('name' => 'enum_generator_rpid_strip_digits', 'category' => 'web', 'value' => strval($this->template['rpid_strip_digits']), 'permission' => 'customer' ), array('name' => 'enum_generator_call_limit', 'category' => 'web', 'value' => strval($this->template['call_limit']), 'permission' => 'customer' ), array('name' => 'enum_generator_ip_access_list', 'category' => 'web', 'value' => strval($this->template['ip_access_list']), 'permission' => 'customer' ) ); $this->enumRecords->setCustomerProperties($_p); if ($this->template['owner']) { if ($customer = $this->customerRecords->getRecord($this->template['owner'])) { $this->template['email'] = $customer->email; $this->template['firstName'] = $customer->firstName; $this->template['lastName'] = $customer->lastName; if (!strlen($this->template['info'])) { $this->template['info'] = $customer->firstName.' '.$customer->lastName; } } else { printf ("Error: cannot retrieve customer information for owner %d",$this->template['owner']); } } dprint_r($this->template); $i=0; while ($i < $this->template['nr_records']) { $number = sprintf("%.0f", $this->template['firstNumber'] + $i); $username = substr($number,$this->template['strip_digits']); $mapto = 'sip:'.$username.'@'.$this->template['domain']; print "
  1. "; printf ('Generating number +%s with mapping %s ',$number,$mapto); flush(); $enumMapping = array('tld' => $this->template['tld'], 'number' => $number, 'type' => 'sip', 'mapto' => $mapto, 'info' => $this->template['info'], 'owner' => $this->template['owner'] ); if ($this->template['create_sip']) { if (preg_match("/^0/",$username)) { printf ('SIP accounts starting with 0 are not generated (%s@%s)',$username,$this->template['domain']); continue; } $groups=array(); printf ('and sip account %s@%s ',$username,$this->template['domain']); $ip_access_list = check_ip_access_list($this->template['ip_access_list']); $sipAccount = array('account' => $username.'@'.$this->template['domain'], 'quota' => $this->template['quota'], 'prepaid' => $this->template['prepaid'], 'password' => $this->template['password'], 'groups' => $groups, 'owner' => $this->template['owner'], 'pstn' => $this->template['pstn'], 'ip_access_list' => $ip_access_list, 'call_limit' => $this->template['call_limit'] ); if ($this->template['firstName']) { $sipAccount['fullname'] = $this->template['firstName'].' '.$this->template['lastName']; } if ($this->template['email']) { $sipAccount['email'] = $this->template['email']; } if ($this->template['pstn']) { $strip_rpid=intval($this->template['rpid_strip_digits']); if ($strip_rpid && strlen($number) > $strip_rpid) { $sipAccount['rpid']=substr($number,intval($this->template['rpid_strip_digits'])); } else { $sipAccount['rpid']=$number; } } } else { unset($sipAccount); } dprint_r($sipAccount); if (is_array($enumMapping)) $this->enumRecords->addRecord($enumMapping); if (is_array($sipAccount)) $this->sipRecords->addRecord($sipAccount); $i++; } print "
"; return true; } function printHiddenFormElements () { printf("",$this->generatorId); if ($this->adminonly) { printf("",$this->adminonly); } if ($this->template['customer']) { printf("",$this->template['customer']); } if ($this->template['reseller']) { printf("",$this->template['reseller']); } foreach (array_keys($this->EnumSoapEngine->extraFormElements) as $element) { if (!strlen($this->EnumSoapEngine->extraFormElements[$element])) continue; printf ("\n",$element,$this->EnumSoapEngine->extraFormElements[$element]); } } function getSoapEngineAllowed($soapEngines,$filter) { // filter syntax: // $filter="engine1:port1,port2,port3 engine2 engine3"; // where engine is a connection from ngnpro_engines.inc and // port is valid port from that engine like sip_accounts or enum_numbers $_filter_els=explode(" ",trim($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 ($_engine == $_allowed_engine) { $soapEngines_checked[$_engine]=$soapEngines[$_engine]; $this->allowedPorts[$_engine]=$_allowed_ports; continue; } } } return $soapEngines_checked; } } class Actions { // this class perfom actions on an array of entities returned by selections var $actions = array(); var $version = 1; var $sub_action_parameter_size = 35; var $html = true; function __construct($SoapEngine, $login_credentials) { $this->SoapEngine = $SoapEngine; $this->login_credentials = $login_credentials; $this->version = $this->SoapEngine->version; $this->adminonly = $this->SoapEngine->adminonly; } 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); } function checkLogSoapError($result, $syslog = false) { if (!(new PEAR)->isError($result)) { return false; } $error_msg = $result->getMessage(); $error_fault= $result->getFault(); $error_code = $result->getCode(); 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); } else { printf( "Error: %s (%s): %s", $error_msg, $error_fault->detail->exception->errorcode, $error_fault->detail->exception->errorstring ); } return true; } function execute($selectionKeys, $action, $sub_action_parameter) { } function showActionsForm($filters,$sorting,$hideParameter=false) { if (!count($this->actions)) return; printf ("
",$_SERVER['PHP_SELF']); print "
"; print " "; if ($this->adminonly) { print " adminonly> "; } print ""; if (!$hideParameter) { printf (" ",$this->sub_action_parameter_size); } print "

"; print " Maximum of 500 records

"; foreach (array_keys($filters) as $_filter) { printf ("\n", $_filter,$filters[$_filter]); } foreach (array_keys($sorting) as $_sorting) { printf ("\n", $_sorting,$sorting[$_sorting]); } printf("",$this->SoapEngine->service); foreach (array_keys($this->SoapEngine->extraFormElements) as $element) { if (!strlen($this->SoapEngine->extraFormElements[$element])) continue; printf ("\n",$element,$this->SoapEngine->extraFormElements[$element]); } print "
"; } } require_once 'NGNPro/Actions/SipAccounts.php'; require_once 'NGNPro/Actions/SipAliases.php'; require_once 'NGNPro/Actions/EnumMappings.php'; require_once 'NGNPro/Actions/DnsRecords.php'; require_once 'NGNPro/Actions/DnsZones.php'; require_once 'NGNPro/Actions/Customers.php'; function check_ip_access_list($acl_string, $check=false) { $list=explode(" ",$acl_string); $ip_access_list = array(); foreach ($list as $el) { $els = explode("/",$el); if (count($els) != 2) { if ($check) { return false; } else { continue; } } list($ip,$mask) = $els; if ($mask <0 or $mask > 32) { if ($check) { return false; } else { continue; } } if (!preg_match("/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/",$ip)) { if ($check) { return false; } else { continue; } } $ip_access_list[]=array('ip'=>$ip, 'mask'=>intval($mask)); } if ($check) { return true; } else { return $ip_access_list; } } function objectToArray($d) { if (is_object($d)) { // Gets the properties of the given object // with get_object_vars function $d = get_object_vars($d); } if (is_array($d)) { /* * Return array converted to object * Using __FUNCTION__ (Magic constant) * for recursive call */ return array_map(__FUNCTION__, $d); } else { // Return array return $d; } } ?>