diff --git a/library/NGNPro/Records/SipAccounts.php b/library/NGNPro/Records/SipAccounts.php index f83b718..7f10f3e 100644 --- a/library/NGNPro/Records/SipAccounts.php +++ b/library/NGNPro/Records/SipAccounts.php @@ -1,1300 +1,1268 @@ 'Change date', 'username' => 'Username', 'domain' => 'Domain' ); var $store_clear_text_passwords = true; var $default_account_type = 'postpaid'; var $group_filter_list = array( 'blocked' => 'Blocked', 'quota' => 'Quota Exceeded', 'prepaid' => 'Prepaid', 'free-pstn' => 'PSTN Access', 'anonymous' => 'Anonymous', 'anonymous-reject' => 'Reject Anonymous', 'voicemail' => 'Has Voicemail', 'missed-calls' => 'Missed Calls', 'trunking' => 'Trunking' ); public function __construct($SoapEngine) { dprint("init SipAccounts"); $this->filters = array( 'username' => strtolower(trim($_REQUEST['username_filter'])), 'domain' => strtolower(trim($_REQUEST['domain_filter'])), 'firstname'=> trim($_REQUEST['firstname_filter']), 'lastname' => trim($_REQUEST['lastname_filter']), 'email' => htmlspecialchars(trim($_REQUEST['email_filter'])), 'owner' => trim($_REQUEST['owner_filter']), 'customer' => trim($_REQUEST['customer_filter']), 'reseller' => trim($_REQUEST['reseller_filter']), 'group' => trim($_REQUEST['group_filter']) ); parent::__construct($SoapEngine); if (strlen($this->SoapEngine->call_limit)) { $this->platform_call_limit = $this->SoapEngine->call_limit; } else { $this->platform_call_limit; } $this->getTimezones(); } function getRecordKeys() { if (preg_match("/^(.*)@(.*)$/", $this->filters['username'], $m)) { $this->filters['username'] = $m[1]; $this->filters['domain'] = $m[2]; } // Filter $filter = array( 'username' => $this->filters['username'], 'domain' => $this->filters['domain'], 'firstName'=> $this->filters['firstname'], 'lastName' => $this->filters['lastname'], 'email' => $this->filters['email'], 'owner' => intval($this->filters['owner']), 'customer' => intval($this->filters['customer']), 'reseller' => intval($this->filters['reseller']), 'groups' => array($this->filters['group']) ); // Range $range = array( 'start' => 0, 'count' => 500 ); // Order if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate'; if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC'; $orderBy = array( 'attribute' => $this->sorting['sortBy'], 'direction' => $this->sorting['sortOrder'] ); // Compose query $Query = array( 'filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); // Insert credetials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action('getAccounts'); // Call function $result = $this->SoapEngine->soapclient->getAccounts($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); + if ($this->checkLogSoapError($result, true)) { return false; } else { foreach ($result->accounts as $account) { $this->selectionKeys[] = array( 'username' => $account->id->username, 'domain' => $account->id->domain ); } return true; } return false; } function listRecords() { $this->getAllowedDomains(); if (preg_match("/^(.*)@(.*)$/", $this->filters['username'], $m)) { $this->filters['username'] = $m[1]; $this->filters['domain'] = $m[2]; } $this->showSeachForm(); // Filter $filter = array( 'username' => $this->filters['username'], 'domain' => $this->filters['domain'], 'firstName'=> $this->filters['firstname'], 'lastName' => $this->filters['lastname'], 'email' => $this->filters['email'], 'owner' => intval($this->filters['owner']), 'customer' => intval($this->filters['customer']), 'reseller' => intval($this->filters['reseller']), 'groups' => array($this->filters['group']) ); $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : ''; // Range $range = array( 'start' => intval($this->next), 'count' => intval($this->maxrowsperpage) ); // Order if (!$this->sorting['sortBy']) $this->sorting['sortBy'] = 'changeDate'; if (!$this->sorting['sortOrder']) $this->sorting['sortOrder'] = 'DESC'; $orderBy = array( 'attribute' => $this->sorting['sortBy'], 'direction' => $this->sorting['sortOrder'] ); // Compose query $Query = array( 'filter' => $filter, 'orderBy' => $orderBy, 'range' => $range ); // Insert credentials $this->SoapEngine->soapclient->addHeader($this->SoapEngine->SoapAuth); $this->log_action('getAccounts'); // Call function $result = $this->SoapEngine->soapclient->getAccounts($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); + if ($this->checkLogSoapError($result, true)) { return false; } else { $this->rows = $result->total; if ($this->rows && $action != 'PerformActions' && $action != 'Delete') { $this->showActionsForm(); } print "
Id | SIP account"; $this->showSortCaret('username'); if ($this->sorting['sortBy'] == 'domain') { print " (domain "; $this->showSortCaret('domain'); print ")"; } print " | Full name | Email address | Timezone | Capacity | Quota | Balance | Owner | Change date"; $this->showSortCaret('changeDate'); print " | Actions |
---|---|---|---|---|---|---|---|---|---|---|
%s | %s | %s %s | %s | %s | %s | %s | %s | %s | %s | %s |
Please press on Confirm to confirm the delete. "; return true; } if ($dictionary['username']) { $username = $dictionary['username']; } else { $username = $_REQUEST['key']; } if ($dictionary['domain']) { $domain = $dictionary['domain']; } else { $domain = $this->filters['domain']; } if (!strlen($username) || !strlen($domain)) { print "
Error: missing SIP account username or domain. "; return false; } $account = array( 'username' => $username, 'domain' => $domain ); $function = array( 'commit' => array( 'name' => 'deleteAccount', 'parameters' => array($account), 'logs' => array('success' => sprintf('SIP account %s@%s has been deleted',$_REQUEST['key'], $this->filters['domain']) ) ) ); foreach (array_keys($this->filters) as $_filter) { if ($_filter == 'username' || $_filter == 'domain') continue; $new_filters[$_filter] = $this->filters[$_filter]; } $this->filters = $new_filters; return $this->SoapEngine->execute($function, $this->html); } function showAddForm() { if ($this->filters['username']) return; if (!count($this->allowedDomains)) { print "
Error: Missing SIP domain");
return false;
}
if (!$this->validDomain($domain)) {
print "Error: invalid domain name";
return false;
}
if ($dictionary['fullname']) {
$name_els = explode(" ", $dictionary['fullname']);
} else {
$name_els = explode(" ", trim($_REQUEST['fullname']));
}
if (strlen($name_els[0])) {
$firstName = $name_els[0];
} else {
$firstName='Account';
}
if (strlen($name_els[1])) {
$j=1;
while ($j < count($name_els)) {
$lastName .= $name_els[$j].' ';
$j++;
}
} else {
if ($username==" 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) {
if ($this->validDomain($_domain->domain)) {
$this->allowedDomains[] = $_domain->domain;
}
}
}
}
function showPasswordReminderForm($accounts = array())
{
print " Please choose new passwords for your account, if you leave them empty no change will be performed
Please press on Confirm to confirm the delete. ";
return true;
}
if ($dictionary['alias_username']) {
$alias_username=$dictionary['alias_username'];
} else {
$alias_username=$this->filters['alias_username'];
}
if ($dictionary['alias_domain']) {
$alias_domain=$dictionary['alias_domain'];
} else {
$alias_domain=$this->filters['alias_domain'];
}
if (!strlen($alias_username) || !strlen($alias_domain)) {
print " Error: missing SIP alias username or domain. ";
return false;
}
$alias=array('username' => $alias_username,
'domain' => $alias_domain
);
$function=array('commit' => array('name' => 'deleteAlias',
'parameters' => array($alias),
'logs' => array('success' => sprintf('SIP alias %s@%s has been deleted',$this->filters['alias_username'], $this->filters['alias_domain'])
)
)
);
unset($this->filters);
return $this->SoapEngine->execute($function, $this->html);
}
function showSeachFormCustom()
{
printf (" You must create at least one SIP domain before adding SIP aliases";
return false;
}
printf (" Error: Missing SIP domain");
}
return false;
}
if (!$this->validDomain($domain)) {
if ($this->html) {
print "Error: invalid domain name";
}
return false;
}
list($customer, $reseller)=$this->customerFromLogin($dictionary);
if (!$this->skipSaveProperties=true) {
$_p=array(
array('name' => 'sip_aliases_last_domain',
'category' => 'web',
'value' => strtolower($domain),
'permission' => 'customer'
)
);
$this->setCustomerProperties($_p);
}
$alias=array(
'id' => array('username' => strtolower($username),
'domain' => strtolower($domain)
),
'target' => array('username' => strtolower($target_username),
'domain' => strtolower($target_els[1])
),
'owner' => intval($owner)
);
$deleteAlias=array('username' => strtolower($username),
'domain' => strtolower($domain)
);
$function=array('commit' => array('name' => 'addAlias',
'parameters' => array($alias),
'logs' => array('success' => sprintf('SIP alias %s@%s has been added',$username, $domain)))
);
return $this->SoapEngine->execute($function, $this->html);
}
function getAllowedDomains()
{
// Filter
$filter=array(
'domain' => ''
);
// Range
$range=array('start' => 0,
'count' => 500
);
$orderBy = array('attribute' => 'domain',
'direction' => 'ASC'
);
// 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();
- $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);
+ $result = $this->SoapEngine->soapclient->getDomains($Query);
+
+ if ($this->checkLogSoapError($result, true)) {
return false;
} else {
foreach ($result->domains as $_domain) {
if ($this->validDomain($_domain->domain)) {
$this->allowedDomains[]=$_domain->domain;
}
}
}
}
function showTextBeforeCustomerSelection()
{
print _("Domain owner");
}
}
diff --git a/library/ngnpro_client.php b/library/ngnpro_client.php
index 26db63e..0df2ebf 100644
--- a/library/ngnpro_client.php
+++ b/library/ngnpro_client.php
@@ -1,13187 +1,13215 @@
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 (count($this->allowedPorts[$this->soapEngine]) > 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 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;
+ }
+
public function __construct($SoapEngine)
{
$this->SoapEngine = $SoapEngine;
$this->version = $this->SoapEngine->version;
$this->login_credentials = $this->SoapEngine->login_credentials;
$this->sorting['sortBy'] = trim($_REQUEST['sortBy']);
$this->sorting['sortOrder'] = trim($_REQUEST['sortOrder']);
$this->next = $_REQUEST['next'];
$this->adminonly = $this->SoapEngine->adminonly;
$this->reseller = $this->SoapEngine->reseller;
$this->customer = $this->SoapEngine->customer;
$this->impersonate = $this->SoapEngine->impersonate;
$this->url = $this->SoapEngine->url;
foreach (array_keys($this->filters) as $_filter) {
if (strlen($this->filters[$_filter]) && !in_array($_filter, $this->selectionActiveExceptions)) {
$this->selectionActive = true;
break;
}
}
if ($this->adminonly) {
$this->url .= sprintf('&adminonly=%s', $this->adminonly);
if ($this->login_credentials['reseller']) {
$this->filters['reseller'] = $this->login_credentials['reseller'];
} else {
$this->filters['reseller'] = trim($_REQUEST['reseller_filter']);
}
}
$this->filters['customer'] = trim($_REQUEST['customer_filter']);
//$this->getResellers();
$this->getCustomers();
$this->getLoginAccount();
if (strlen($this->SoapEngine->sip_settings_page)) {
$this->sip_settings_page = $this->SoapEngine->sip_settings_page;
}
if (strlen($this->SoapEngine->digest_settings_page)) {
$this->digest_settings_page = $this->SoapEngine->digest_settings_page;
}
$this->support_email = $this->SoapEngine->support_email;
$this->support_web = $this->SoapEngine->support_web;
}
function showEngineSelection()
{
$selected_soapEngine[$this->SoapEngine->service] =' selected';
$pstn_access = $this->getCustomerProperty('pstn_access');
printf("");
printf(
"",
$this->url
);
}
function showAfterEngineSelection()
{
}
function showCustomerSelection()
{
$this->showCustomerForm();
}
function showResellerSelection()
{
if ($this->adminonly) {
$this->showResellerForm();
} else {
printf("%s", $this->reseller);
}
}
function showPagination($maxrows)
{
$url .= $this->url.'&'.$this->addFiltersToURL().sprintf(
"&service=%s&sortBy=%s&sortOrder=%s",
urlencode($this->SoapEngine->service),
urlencode($this->sorting['sortBy']),
urlencode($this->sorting['sortOrder'])
);
print "
%s",
$this->SoapEngine->ports[$this->SoapEngine->port]['description']
);
printf(
"";
print _("Login account reminder");
print "
";
print _("Update passwords");
print "";
print " (for ";
print $account;
print ")
";
print _("Sip Account Reminder/Password Reset");
print "
";
$this->showPagination($maxrows);
/*
$_properties=array(
array('name' => $this->SoapEngine->port.'_sortBy',
'value' => $this->sorting['sortBy'],
'permission' => 'customer',
'category' => 'web'
),
array('name' => $this->SoapEngine->port.'_sortOrder',
'value' => $this->sorting['sortOrder'],
'permission' => 'customer',
'category' => 'web'
)
);
print_r($_properties);
$this->setCustomerProperties($_properties);
*/
return true;
}
}
function deleteRecord($dictionary=array())
{
if (!$dictionary['confirm'] && !$_REQUEST['confirm']) {
print "
";
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->aliases[$i]) break;
$alias = $result->aliases[$i];
$index=$this->next+$i+1;
$_url = $this->url.sprintf("&service=%s&action=Delete&alias_username_filter=%s&alias_domain_filter=%s",
urlencode($this->SoapEngine->service),
urlencode($alias->id->username),
urlencode($alias->id->domain)
);
if ($_REQUEST['action'] == 'Delete' &&
$_REQUEST['alias_username_filter'] == $alias->id->username &&
$_REQUEST['alias_domain_filter'] == $alias->id->domain) {
$_url .= "&confirm=1";
$actionText = "Confirm";
} else {
$actionText = "Delete";
}
/*
$_customer_url = $this->url.sprintf("&service=customers@%s&customer_filter=%s",
urlencode($this->SoapEngine->customer_engine),
urlencode($alias->customer)
);
*/
$_sip_accounts_url = $this->url.sprintf("&service=sip_accounts@%s&username_filter=%s&domain_filter=%s",
urlencode($this->SoapEngine->soapEngine),
urlencode($alias->target->username),
urlencode($alias->target->domain)
);
if ($alias->owner) {
$_owner_url = sprintf
("%s",
$this->url,
urlencode($this->SoapEngine->soapEngine),
urlencode($alias->owner),
$alias->owner
);
} else {
$_owner_url='';
}
printf("
Id
SIP alias
Redirect target
Owner
Change date
Actions
",
$index,
$alias->id->username,
$alias->id->domain,
$_sip_accounts_url,
$alias->target->username,
$alias->target->domain,
$_owner_url,
$alias->changeDate,
$_url,
$actionText
);
$i++;
}
}
print "%s
%s@%s
%s@%s
%s
%s
%s
";
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("
");
}
function showSeachFormCustom()
{
}
function showSeachForm()
{
if ($this->hide_html()) {
return;
}
printf(
"