Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • awit-whmcs/whmcs-coza-epp
  • weheartwebsites/whmcs-coza-epp
  • qbitza/whmcs-coza-epp
  • wyrie/whmcs-coza-epp
  • Woklet/whmcs-coza-epp
  • jaymcc/whmcs-coza-epp
  • cmcawood/whmcs-coza-epp
7 results
Show changes
Commits on Source (111)
Showing
with 648 additions and 853 deletions
See http://devlabs.linuxassist.net/projects/whmcs-coza-epp See http://gitlab.devlabs.linuxassist.net/awit-whmcs/whmcs-coza-epp/wikis/home
v.0.1.x to v1.0.0:
- Support added for .web.za, .org.za and .net.za
v0.1.0 to v0.1.1:
- Remove cronjob for modules/registrars/cozaepp/cozaeppsync.php, this is done by WHMCS automagically
#!/usr/bin/env php
<?php
# Copyright (c) 2012-2013, AllWorldIT
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Official Website:
# http://devlabs.linuxassist.net/projects/whmcs-coza-epp
# Lead developer:
# Nigel Kukard <nkukard@lbsd.net>
# ! ! P L E A S E N O T E ! !
# * If you make changes to this file, please consider contributing
# anything useful back to the community. Don't be a sour prick.
# * If you find this module useful please consider making a
# donation to support modules like this.
# WHMCS hosting, theming, module development, payment gateway
# integration, customizations and consulting all available from
# http://allworldit.com
# ! ! CONFIGURATION REQUIRED ! !
# Set the path below to the dbconnect.php file of your WHMCS installation.
$dbconnpath = dirname(__FILE__) . '/../init.php';
// Function that displays help
function _displayHelp() {
echo "usage: {$argv[0]} [--help|-h] <command> [<args>]\n\nAvailable commands are:\n\n changepassword Change ZACR account password.";
}
// This file brings in a few constants we need
require_once $dbconnpath;
// Setup include dir
$include_path = ROOTDIR . '/modules/registrars/cozaepp';
set_include_path($include_path . PATH_SEPARATOR . get_include_path());
// Include EPP stuff we need
require_once 'cozaepp.php';
// Additional functions we need
require_once ROOTDIR . '/includes/functions.php';
// Include registrar functions aswell
require_once ROOTDIR . '/includes/registrarfunctions.php';
// Changes old password to given new password for the specified SLD
function changePassword($sld, $current_password, $new_password)
{
// Grab module parameters
$params = getregistrarconfigoptions('cozaepp');
try {
$client = _cozaepp_Client($sld);
$result = $client->request('
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<login>
<clID>'.$params['Username'].'</clID>
<pw>'.$current_password.'</pw>
<newPW>'.$new_password.'</newPW>
<options>
<version>1.0</version>
<lang>en</lang>
</options>
<svcs>
<objURI>urn:ietf:params:xml:ns:domain-1.0</objURI>
<objURI>urn:ietf:params:xml:ns:contact-1.0</objURI>
</svcs>
</login>
</command>
</epp>');
$doc= new DOMDocument();
$doc->loadXML($result);
$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
$msg = $doc->getElementsByTagName('msg')->item(0)->nodeValue;
if ($coderes != '1000') {
$values["error"] = "ChangePassword($sld): Code ($coderes) $msg";
return $values;
}
$values['status'] = $msg;
} catch (Exception $e) {
$values["error"] = 'changePassword/EPP: '.$e->getMessage();
return $values;
}
return $values;
}
$_command = strtolower($argv[1]);
switch ($_command) {
case 'changepassword':
if (empty($argv['2']) || empty($argv['3']) || empty($argv['4'])) {
echo "\033[1;31mError: changepassword expects 3 arguments.\033[1;0m\n\n";
echo "{$argv[0]} changepassword <sld> <current password> <new password>\n\n";
exit(1);
}
$res = changePassword($argv['2'], $argv['3'], $argv['4']);
break;
case '-h':
exit(0);
case '--help':
exit(0);
default:
exit(1);
_displayHelp();
break;
}
if (is_array($res)) {
if (array_key_exists('error', $res)) {
echo $res['error'];
exit(2);
} elseif (array_key_exists('status', $res)) {
echo $res['status'];
exit(0);
}
} else {
echo "\033[1;31mError: Unexpected result from command call\033[1;0m\n\n";
var_dump($res);
}
<?php
/**
* Copyright (c) 2012-2015, AllWorldIT
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* Official Website:
* https://gitlab.devlabs.linuxassist.net/awit-whmcs/whmcs-coza-epp/wikis/home
* Lead developer:
* Nigel Kukard <nkukard@lbsd.net>
* ! ! P L E A S E N O T E ! !
* * If you make changes to this file, please consider contributing
* anything useful back to the community. Don't be a sour prick.
* * If you find this module useful please consider making a
* donation to support modules like this.
* WHMCS hosting, theming, module development, payment gateway
* integration, customizations and consulting all available from
* http://allworldit.com
* Buzybuy - cozaepp Disable Auto Renew
* This script is a modification of the original cozaeppsync.php script from AllWorldIT combined with code from
* Everything Web CC script.
* This script will loop through all the coza domains in your WHMCS database.
* Each domain's auto renew will be set to false on the domain.
* This script can also be reversed and set each domain's auto renew to true by editing the flag value below.
* http://www.buzybuy.com
*/
// This file brings in a few constants we need
require_once dirname(__FILE__) . '/../../../init.php';
// Setup include dir
$include_path = ROOTDIR . '/modules/registrars/cozaepp';
set_include_path($include_path . PATH_SEPARATOR . get_include_path());
// Include EPP stuff we need
require_once 'cozaepp.php';
// Additional functions we need
require_once ROOTDIR . '/includes/functions.php';
// Include registrar functions aswell
require_once ROOTDIR . '/includes/registrarfunctions.php';
// Grab module parameters
$params = getregistrarconfigoptions('cozaepp');
echo("COZA-EPP Domain Set Auto Renew To False Report\n");
echo("---------------------------------------------------\n");
// Request balance from registrar
try {
$client = _cozaepp_Client();
// Pull list of domains which are registered using this module
$queryresult = mysql_query("
SELECT
domain
FROM
tbldomains
WHERE registrar = 'cozaepp'"
);
while($data = mysql_fetch_array($queryresult)) {
$domains[] = trim(strtolower($data['domain']));
}
// Loop with each one
foreach ($domains as $domain) {
sleep(1);
// Get domain info
$output = $client->request('
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<command>
<info>
<domain:info xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
<domain:name hosts="all">'.$domain.'</domain:name>
</domain:info>
</info>
<extension>
<cozadomain:info xmlns:cozadomain="http://co.za/epp/extensions/cozadomain-1-0"
xsi:schemaLocation="http://co.za/epp/extensions/cozadomain-1-0 coza-domain-1.0.xsd">
</cozadomain:info>
</extension>
</command>
</epp>
');
$doc= new DOMDocument();
$doc->loadXML($output);
$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
if ($coderes == '1000') {
// Is autorenew enabled?
if ($doc->getElementsByTagName('autorenew') &&
$doc->getElementsByTagName('autorenew')->item(0) &&
strtolower(trim($doc->getElementsByTagName('autorenew')->item(0)->nodeValue)) != "false"
) {
sleep(1);
// Disable autorenew via update
$output = $client->request('
<epp:epp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:cozadomain="http://co.za/epp/extensions/cozadomain-1-0"
xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<epp:command>
<epp:update>
<domain:update xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
<domain:name>'.$domain.'</domain:name>
</domain:update>
</epp:update>
<epp:extension>
<cozadomain:update xsi:schemaLocation="http://co.za/epp/extensions/cozadomain-1-0 coza-domain-1.0.xsd">
<cozadomain:chg>
<cozadomain:autorenew>false</cozadomain:autorenew>
</cozadomain:chg>
</cozadomain:update>
</epp:extension>
</epp:command>
</epp:epp>
');
$doc= new DOMDocument();
$doc->loadXML($output);
$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
if($coderes == '1001') {
if($doc->getElementsByTagName('msg')) {
if($doc->getElementsByTagName('msg')->item(0)) {
echo "- ".$domain." results: ".$doc->getElementsByTagName('msg')->item(0)->nodeValue."\n";
} else {
$status = "$domain response error\n";
continue;
}
}
} else {
echo "Domain renew status update on $domain not successful: "._cozaepp_message($coderes)."\n";
continue;
}
} else {
echo "- ".$domain." already has auto-renew disabled.\n";
continue;
}
} else {
echo "Domain info on $domain not successful: "._cozaepp_message($coderes)."\n";
continue;
}
}
} catch (Exception $e) {
echo("ERROR: ".$e->getMessage()."\n");
exit;
}
<?php
/**
* AWIT COZAEPP - COZA EPP Module
* Copyright (c) 2014, AllWorldIT
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// Make sure we not being accssed directly
if (!defined("WHMCS"))
die("This file cannot be accessed directly");
// Our global supported field list
$AWIT_COZAEPP_SUPPORTED_FIELDS = array(
"max_items"
);
// Addon configuration
function awit_cozaepp_config()
{
// Configuration
$configarray = array(
"name" => "AWIT COZAEPP",
"description" => "This module is to facilitate displaying of epp messages.",
"version" => "1.2",
"author" => "AllWorldIT",
"language" => "english",
"fields" => array(
// Admin User
"max_items" => array (
"FriendlyName" => "Items Per Page",
"Description" => "Amount of items to list per page",
"Type" => "text", "Size" => "30",
"Default" => "100"
),
)
);
return $configarray;
}
function awit_cozaepp_get_config_custom_fields()
{
global $AWIT_COZAEPP_SUPPORTED_FIELDS;
// Query modules table
$table = "tbladdonmodules";
$fields = "setting,value";
$where = array( 'module' => 'awit_cozaepp' );
$result = select_query($table,$fields,$where);
// Filter out the settings we need
$custom_fields = array();
while ($row = mysql_fetch_array($result)) {
// Check in our global list
if (in_array($row['setting'],$AWIT_COZAEPP_SUPPORTED_FIELDS)) {
$custom_fields[$row['setting']] = $row['value'];
}
}
return $custom_fields;
}
function _awit_cozaepp_getMaxItems()
{
$customFields = awit_cozaepp_get_config_custom_fields();
return $customFields['max_items'];
}
// Addon activation
function awit_cozaepp_activate()
{
// Create Custom DB Table
$result = mysql_query("
CREATE TABLE `mod_awit_cozaepp_messages` (
`id` INT( 1 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`created` DATETIME NOT NULL,
`code` VARCHAR(10) NOT NULL,
`message` TEXT NOT NULL
)
");
// Return Result
if (!$result) {
return array("status" => "error", "description"=>"There was a problem activating the module.");
} else {
return array("status" => "success","description" =>"Open module configuration for configuration options.");
}
}
function awit_cozaepp_deactivate()
{
// Remove custom tables
$result1 = mysql_query("
DROP TABLE `mod_awit_cozaepp_messages`
");
if (!$result) {
return array("status"=>"error","description"=>"There was an error deactivating the module.");
} else {
return array("status"=>"success","description"=>"Module has been deactivated.");
}
}
// Addon output
function awit_cozaepp_output($vars)
{
// Check if we have to display all records
if (isset($_POST['button']) && $_POST['button'] == 'Display All') {
$whereClause = '';
} else if (!empty($_POST['date_to']) && !empty($_POST['date_from'])) {
// Default dates
try {
$dateTo = new DateTime($_POST['date_to']);
$dateTo = $dateTo->format('Y-m-d');
$dateFrom = new DateTime($_POST['date_from']);
$dateFrom = $dateFrom->format('Y-m-d');
} catch (Exception $ex) {
// Catching exception against valid date
$dateFrom = new DateTime(date("Y-m-d"));
$dateFrom = $dateFrom->format('Y-m-d');
$dateFrom->modify('+1 day');
$dateTo = $dateTo->format('Y-m-d');
}
$whereClause = "WHERE Date(created) >= Date('".mysql_real_escape_string($dateFrom)."')
AND Date(created) <= Date('".mysql_real_escape_string($dateTo)."')";
}
// Make link to use
$link = $vars['modulelink'];
// Fancy date picker
echo '
<script>
$(function() {
$( "#date_from" ).datepicker({
dateFormat: "yy-mm-dd",
constrainInput: true
});
$( "#date_to" ).datepicker({
dateFormat: "yy-mm-dd",
constrainInput: true
});
});
</script>
';
// Date search fields
echo "<p>Select a start and end date and hit search.</p>";
echo "<form action='$link' method='post'>";
echo "<input id='date_from' type='text' value='$dateFrom' name='date_from' />";
echo "<input id='date_to' type='text' value='$dateTo' name='date_to' />";
echo "<input type='submit' name='button' value='Search' />";
echo "<input type='submit' name='button' value='Display All' />";
echo "<br /><br />";
$orderClause = 'ORDER BY created DESC';
// Max amount of records to show per page
$recordMax = _awit_cozaepp_getMaxItems();
// Validation
if (!is_numeric($recordMax)) {
$recordMax = 100;
}
// Setting page number
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else if (isset($_POST['page'])) {
$page = $_POST['page'];
}
// Ensuring valid page number
if ($page < 1) {
$page = 1;
}
// Pagination button handler
if (isset($_POST['prevPage'])) {
// Prev Page
$page = ($page > 1)? ($page - 1) : 1;
} else if (isset($_POST['nextPage'])) {
// Next Page
$page = $page + 1;
}
$recordCurrent = intval(abs($recordMax * $page)) - $recordMax;
$limitClause = "LIMIT $recordCurrent, $recordMax";
// Query the database, getting the total amount of records
$result = mysql_query(sprintf("
SELECT
COUNT(*) AS cnt
FROM
mod_awit_cozaepp_messages
%s %s
",
$whereClause,
$orderClause
));
$row = mysql_fetch_array($result);
$totalRecords = $row['cnt'];
$lastPage = ceil($totalRecords / $recordMax);
// Query the database
$result = mysql_query(sprintf("
SELECT
*
FROM
mod_awit_cozaepp_messages
%s %s %s
",
$whereClause,
$orderClause,
$limitClause
));
// Loop through results and genenrate form
$includeForm = 0;
while ($row = mysql_fetch_array($result)) {
// Open form
if (!$includeForm) {
$includeForm = 1;
echo '<div class="tablebg">';
echo '<table id="epp-message-log" class="datatable" width="100%" border="0" cellspacing="1" cellpadding="3">';
echo "<tr>";
echo "<th>Timestamp</th>";
echo "<th>Code</th>";
echo "<th>Message</th>";
echo "</tr>";
}
echo "<tr>";
echo "<td>".$row['created']."</td>";
echo "<td>".$row['code']."</td>";
echo "<td>".$row['message']."</td>";
echo "</tr>";
}
// Close form
if ($includeForm) {
echo "<tr><td colspan='5'>";
if ($page >= $lastPage) {
echo "<button name='prevPage'> &lt;&lt; Previous Page </button> Page $page";
} else if ($page == 1) {
echo " Page $page <button name='nextPage'> Next Page &gt;&gt; </button>";
} else {
echo "<button name='prevPage'> &lt;&lt; Previous Page </button> Page $page";
echo "<button name='nextPage'> Next Page &gt;&gt; </button>";
}
echo "</td></tr>";
echo "</table><br>";
echo "<input type='hidden' name='page' value='$page'>";
echo "</form>";
echo "</div>";
} else {
echo "<p>No logs yet for selected period..</p>";
}
}
<?php
$_ADDONLANG['intro'] = "AWIT COZAEPP Module";
$_ADDONLANG['description'] = "This module is to facilitate displaying of epp messages.";
$_ADDONLANG['documentation'] = "Pending..";
<?php
# Copyright (c) 2012, AllWorldIT
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Official Website:
# http://devlabs.linuxassist.net/projects/whmcs-coza-epp
# Lead developer:
# Nigel Kukard <nkukard@lbsd.net>
# ! ! P L E A S E N O T E ! !
# * If you make changes to this file, please cosider contributing
# anything useful to the community. Don't be a sour prick.
# * If you find this module useful please consider making a
# donation to support modules like this.
# WHMCS hosting, theming, module development, payment gateway
# integration, customizations and consulting all available from
# http://allworldit.com
## VERSION: 0.1.0 ##
# Configuration array
function cozaepp_getConfigArray() {
$configarray = array(
"Username" => array( "Type" => "text", "Size" => "20", "Description" => "Enter your username here" ),
"Password" => array( "Type" => "password", "Size" => "20", "Description" => "Enter your password here" ),
"Server" => array( "Type" => "text", "Size" => "20", "Description" => "Enter EPP Server Address" ),
"Port" => array( "Type" => "text", "Size" => "20", "Description" => "Enter EPP Server Port" ),
"SSL" => array( "Type" => "yesno" ),
"Certificate" => array( "Type" => "text", "Description" => "Path of certificate .pem" )
);
return $configarray;
}
# Function to return current nameservers
function cozaepp_GetNameservers($params) {
# Grab variables
$tld = $params["tld"];
$sld = $params["sld"];
$domain = "{$sld}.{$tld}";
# Create new EPP client
$client = _cozaepp_Client();
$result = $client->request($xml = '
<epp:epp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<epp:command>
<epp:info>
<domain:info xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
<domain:name hosts="all">'.$domain.'</domain:name>
</domain:info>
</epp:info>
</epp:command>
</epp:epp>
');
# Check results
if(!is_array($result)) {
# Parse XML
$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
$doc->loadXML($result);
$ns = $doc->getElementsByTagName('hostName');
# Extract nameservers
$i =0;
$values = array();
foreach ($ns as $nn) {
$i++;
$values["ns{$i}"] = $nn->nodeValue;
}
}
return $values;
}
# Function to save set of nameservers
function cozaepp_SaveNameservers($params) {
# Grab variables
$tld = $params["tld"];
$sld = $params["sld"];
# Generate XML for nameservers
if ($nameserver1 = $params["ns1"]) {
$add_hosts = '
<domain:hostAttr>
<domain:hostName>'.$nameserver1.'</domain:hostName>
</domain:hostAttr>
';
}
if ($nameserver2 = $params["ns2"]) {
$add_hosts .= '
<domain:hostAttr>
<domain:hostName>'.$nameserver2.'</domain:hostName>
</domain:hostAttr>
';
}
if ($nameserver3 = $params["ns3"]) {
$add_hosts .= '
<domain:hostAttr>
<domain:hostName>'.$nameserver3.'</domain:hostName>
</domain:hostAttr>
';
}
if ($nameserver4 = $params["ns4"]) {
$add_hosts .= '
<domain:hostAttr>
<domain:hostName>'.$nameserver4.'</domain:hostName>
</domain:hostAttr>';
}
if ($nameserver5 = $params["ns5"]) {
$add_hosts .= '
<domain:hostAttr>
<domain:hostName>'.$nameserver5.'</domain:hostName>
</domain:hostAttr>';
}
# Grab list of current nameservers
$client = _cozaepp_Client();
$registrarinfo = $client->request('
<epp:epp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<epp:command>
<epp:info>
<domain:info xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
<domain:name hosts="all">'.$sld.'.'.$tld.'</domain:name>
</domain:info>
</epp:info>
</epp:command>
</epp:epp>
');
# Parse XML
$doc= new DOMDocument();
$doc->loadXML($registrarinfo);
$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
if($coderes != '1000') {
$values["error"] = "Code (".$coderes.") ".$msg;
} else {
# Generate list of nameservers to remove
$hostlist = $doc->getElementsByTagName('hostName');
foreach ($hostlist as $host) {
$rem_hosts .= '
<domain:hostAttr>
<domain:hostName>'.$host->nodeValue.'</domain:hostName>
</domain:hostAttr>
';
}
# Build request
$domainrenew = $client->request('
<epp:epp xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<epp:command>
<epp:update>
<domain:update>
<domain:name>'.$sld.'.'.$tld.'</domain:name>
<domain:add>
<domain:ns>'.$add_hosts.' </domain:ns>
</domain:add>
<domain:rem>
<domain:ns>'.$rem_hosts.'</domain:ns>
</domain:rem>
</domain:update>
</epp:update>
</epp:command>
</epp:epp>
');
# Parse XML result
$doc= new DOMDocument();
$doc->loadXML($domainrenew);
$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
$msg = $doc->getElementsByTagName('msg')->item(0)->nodeValue;
if($coderes != '1001') {
$values["error"] = "Code (".$coderes.") ".$msg;
} else {
$values['status'] = "Domain update Pending. Based on .co.za policy, the estimated time taken is around 5 days.";
}
}
# If error, return the error message in the value below
$values["error"] = $error;
return $values;
}
# NOT IMPLEMENTED
function cozaepp_GetRegistrarLock($params) {
# Grab variables
$tld = $params["tld"];
$sld = $params["sld"];
# Get lock status
$lock = 1;
if ($lock=="1") {
$lockstatus="locked";
} else {
$lockstatus="unlocked";
}
return $lockstatus;
}
# NOT IMPLEMENTED
function cozaepp_SaveRegistrarLock($params) {
$values["error"] = "Current co.za policy does not allow for the addition of client-side statuses on domains.";
return $values;
}
# Function to register domain
function cozaepp_RegisterDomain($params) {
# Grab varaibles
$tld = $params["tld"];
$sld = $params["sld"];
$regperiod = $params["regperiod"];
# Get registrant details
$RegistrantFirstName = $params["firstname"];
$RegistrantLastName = $params["lastname"];
$RegistrantAddress1 = $params["address1"];
$RegistrantAddress2 = $params["address2"];
$RegistrantCity = $params["city"];
$RegistrantStateProvince = $params["state"];
$RegistrantPostalCode = $params["postcode"];
$RegistrantCountry = $params["country"];
$RegistrantEmailAddress = $params["email"];
$RegistrantPhone = $params["phonenumber"];
# Get admin Details
$AdminFirstName = $params["adminfirstname"];
$AdminLastName = $params["adminlastname"];
$AdminAddress1 = $params["adminaddress1"];
$AdminAddress2 = $params["adminaddress2"];
$AdminCity = $params["admincity"];
$AdminStateProvince = $params["adminstate"];
$AdminPostalCode = $params["adminpostcode"];
$AdminCountry = $params["admincountry"];
$AdminEmailAddress = $params["adminemail"];
$AdminPhone = $params["adminphonenumber"];
# Generate XML for namseverss
if ($nameserver1 = $params["ns1"]) {
$add_hosts = '
<domain:hostAttr>
<domain:hostName>'.$nameserver1.'</domain:hostName>
</domain:hostAttr>
';
}
if ($nameserver2 = $params["ns2"]) {
$add_hosts .= '
<domain:hostAttr>
<domain:hostName>'.$nameserver2.'</domain:hostName>
</domain:hostAttr>
';
}
if ($nameserver3 = $params["ns3"]) {
$add_hosts .= '
<domain:hostAttr>
<domain:hostName>'.$nameserver3.'</domain:hostName>
</domain:hostAttr>
';
}
if ($nameserver4 = $params["ns4"]) {
$add_hosts .= '
<domain:hostAttr>
<domain:hostName>'.$nameserver4.'</domain:hostName>
</domain:hostAttr>';
}
if ($nameserver5 = $params["ns5"]) {
$add_hosts .= '
<domain:hostAttr>
<domain:hostName>'.$nameserver5.'</domain:hostName>
</domain:hostAttr>';
}
# Send registration
$client = _cozaepp_Client();
$contact = $client->request('
<epp:epp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<epp:command>
<epp:create>
<contact:create xsi:schemaLocation="urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd">
<contact:id>'.$RegistrantFirstName.$params['userid'].'</contact:id>
<contact:postalInfo type="loc">
<contact:name>'.$RegistrantFirstName.' '.$RegistrantLastName.'</contact:name>
<contact:addr>
<contact:street>'.$RegistrantAddress1.'</contact:street>
<contact:street>'.$RegistrantAddress2.'</contact:street>
<contact:city>'.$RegistrantCity.'</contact:city>
<contact:sp>'.$RegistrantStateProvince.'</contact:sp>
<contact:pc>'.$RegistrantPostalCode.'</contact:pc>
<contact:cc>'.$RegistrantCountry.'</contact:cc>
</contact:addr>
</contact:postalInfo>
<contact:voice>'.$params["phonenumber"].'</contact:voice>
<contact:fax></contact:fax>
<contact:email>'.$RegistrantEmailAddress.'</contact:email>
<contact:authInfo>
<contact:pw>AxA8AjXbAH'.rand().rand().'</contact:pw>
</contact:authInfo>
</contact:create>
</epp:create>
</epp:command>
</epp:epp>
');
# Parse XML result
$doc= new DOMDocument();
$doc->loadXML($contact);
$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
if($coderes == '1000') {
$contactid = $RegistrantFirstName.$params['userid'];
$values['contact'] = 'Contact Created';
} else if($coderes == '2302') {
$contactid = $RegistrantFirstName.$params['userid'];
$values['contact'] = 'Contact Already exists';
} else {
$values["error"] = "Code (".$coderes.") ".$msg;
}
# If our result is success, carry on
if ( $coderes == '1000' or $coderes =='2302' ) {
$domaincreate = $client->request('
<epp:epp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<epp:command>
<epp:create>
<domain:create xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
<domain:name>'.$sld.'.'.$tld.'</domain:name>
<domain:ns>'.$add_hosts.'</domain:ns>
<domain:registrant>'.$contactid.'</domain:registrant>
<domain:authInfo>
<domain:pw>coza</domain:pw>
</domain:authInfo>
</domain:create>
</epp:create>
</epp:command>
</epp:epp>
');
$doc= new DOMDocument();
$doc->loadXML($domaincreate);
$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
$msg = $doc->getElementsByTagName('msg')->item(0)->nodeValue;
if($coderes != '1000') {
$values["error"] = "Code (".$coderes.") ".$msg;
} else {
$values["status"] = $msg;
}
}
return $values;
}
# Function to transfer a domain
function cozaepp_TransferDomain($params) {
# Grab variables
$testmode = $params["TestMode"];
$tld = $params["tld"];
$sld = $params["sld"];
# Domain info
$regperiod = $params["regperiod"];
$transfersecret = $params["transfersecret"];
$nameserver1 = $params["ns1"];
$nameserver2 = $params["ns2"];
# Registrant Details
$RegistrantFirstName = $params["firstname"];
$RegistrantLastName = $params["lastname"];
$RegistrantAddress1 = $params["address1"];
$RegistrantAddress2 = $params["address2"];
$RegistrantCity = $params["city"];
$RegistrantStateProvince = $params["state"];
$RegistrantPostalCode = $params["postcode"];
$RegistrantCountry = $params["country"];
$RegistrantEmailAddress = $params["email"];
$RegistrantPhone = $params["phonenumber"];
# Admin Details
$AdminFirstName = $params["adminfirstname"];
$AdminLastName = $params["adminlastname"];
$AdminAddress1 = $params["adminaddress1"];
$AdminAddress2 = $params["adminaddress2"];
$AdminCity = $params["admincity"];
$AdminStateProvince = $params["adminstate"];
$AdminPostalCode = $params["adminpostcode"];
$AdminCountry = $params["admincountry"];
$AdminEmailAddress = $params["adminemail"];
$AdminPhone = $params["adminphonenumber"];
# Grab registrar info
$client = _cozaepp_Client();
$registrarinfo = $client->request('
<epp:epp xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<epp:command>
<epp:transfer op="request">
<domain:transfer>
<domain:name>'.$sld.'.'.$tld.'</domain:name>
</domain:transfer>
</epp:transfer>
</epp:command>
</epp:epp>');
# Parse XML result
$doc= new DOMDocument();
$doc->loadXML($registrarinfo);
$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
$msg = $doc->getElementsByTagName('msg')->item(0)->nodeValue;
if($coderes != '1001') {
$values["error"] = "Code (".$coderes.") ".$msg;
} else {
$values["status"] = $msg;
# Create contact details
$contact = $client->request('
<epp:epp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<epp:command>
<epp:create>
<contact:create xsi:schemaLocation="urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd">
<contact:id>'.$RegistrantFirstName.$params['userid'].'</contact:id>
<contact:postalInfo type="loc">
<contact:name>'.$RegistrantFirstName.' '.$RegistrantLastName.'</contact:name>
<contact:addr>
<contact:street>'.$RegistrantAddress1.'</contact:street>
<contact:street>'.$RegistrantAddress2.'</contact:street>
<contact:city>'.$RegistrantCity.'</contact:city>
<contact:sp>'.$RegistrantStateProvince.'</contact:sp>
<contact:pc>'.$RegistrantPostalCode.'</contact:pc>
<contact:cc>'.$RegistrantCountry.'</contact:cc>
</contact:addr>
</contact:postalInfo>
<contact:voice>'.$params["phonenumber"].'</contact:voice>
<contact:fax></contact:fax>
<contact:email>'.$RegistrantEmailAddress.'</contact:email>
<contact:authInfo>
<contact:pw>AxA8AjXbAH'.rand().rand().'</contact:pw>
</contact:authInfo>
</contact:create>
</epp:create>
</epp:command>
</epp:epp>
');
# Parse XML result
$doc= new DOMDocument();
$doc->loadXML($contact);
$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
if($coderes == '1000') {
$contactid = $RegistrantFirstName.$params['userid'];
$values['contact'] = 'Contact Created';
} else if($coderes == '2302') {
$contactid = $RegistrantFirstName.$params['userid'];
$values['contact'] = 'Contact Already exists';
} else {
$values["error"] = "Code (".$coderes.") ".$msg;
}
}
return $values;
}
# Function to renew domain
function cozaepp_RenewDomain($params) {
# Grab variables
$tld = $params["tld"];
$sld = $params["sld"];
$regperiod = $params["regperiod"];
# Put your code to renew domain here
$client = _cozaepp_Client();
$registrarinfo = $client->request('
<epp:epp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<epp:command>
<epp:info>
<domain:info xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
<domain:name hosts="all">'.$sld.'.'.$tld.'</domain:name>
</domain:info>
</epp:info>
</epp:command>
</epp:epp>
');
# Parse XML result
$doc= new DOMDocument();
$doc->loadXML($registrarinfo);
$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
if($coderes != '1000') {
$values["error"] = "Code (".$coderes.") ".$msg;
} else {
# Sanitize expiry date
$expdate = substr($doc->getElementsByTagName('exDate')->item(0)->nodeValue,0,10);
# Send request to renew
$domainrenew = $client->request('
<epp:epp xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<epp:command>
<epp:renew>
<domain:renew>
<domain:name>'.$sld.'.'.$tld.'</domain:name>
<domain:curExpDate>'.$expdate.'</domain:curExpDate>
</domain:renew>
</epp:renew>
</epp:command>
</epp:epp>
');
# Parse XML result
$doc= new DOMDocument();
$doc->loadXML($domainrenew);
$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
$msg = $doc->getElementsByTagName('msg')->item(0)->nodeValue;
if($coderes != '1000') {
$values["error"] = "Code (".$coderes.") ".$msg;
} else {
$values["status"] = $msg;
}
}
# If error, return the error message in the value below
return $values;
}
# Function to grab contact details
function cozaepp_GetContactDetails($params) {
# Grab variables
$tld = $params["tld"];
$sld = $params["sld"];
# Grab contact details
$client = _cozaepp_Client();
$registrarinfo = $client->request('
<epp:epp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<epp:command>
<epp:info>
<domain:info xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
<domain:name hosts="all">'.$sld.'.'.$tld.'</domain:name>
</domain:info>
</epp:info>
</epp:command>
</epp:epp>
');
# Parse XML result
$doc= new DOMDocument();
$doc->loadXML($registrarinfo);
$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
$msg = $doc->getElementsByTagName('msg')->item(0)->nodeValue;
# Check result
if($coderes != '1000') {
$values["error"] = "Code (".$coderes.") ".$msg;
} else {
# Grab contact info
$registrant = $doc->getElementsByTagName('registrant')->item(0)->nodeValue;
$domaininfo = $client->request('
<epp:epp xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<epp:command>
<epp:info>
<contact:info>
<contact:id>'.$registrant.'</contact:id>
</contact:info>
</epp:info>
</epp:command>
</epp:epp>
');
# Parse XML result
$doc= new DOMDocument();
$doc->loadXML($domaininfo);
$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
$msg = $doc->getElementsByTagName('msg')->item(0)->nodeValue;
# Check result
if($coderes != '1000') {
$values["error"] = "Code (".$coderes.") ".$msg;
} else {
# Setup return values
$values["Registrant"]["Contact Name"] = $doc->getElementsByTagName('name')->item(0)->nodeValue;
$values["Registrant"]["Organisation"] = $doc->getElementsByTagName('org')->item(0)->nodeValue;
$values["Registrant"]["Address line 1"] = $doc->getElementsByTagName('street')->item(0)->nodeValue;
$values["Registrant"]["Address line 2"] = $doc->getElementsByTagName('street')->item(1)->nodeValue;
$values["Registrant"]["TownCity"] = $doc->getElementsByTagName('city')->item(0)->nodeValue;
$values["Registrant"]["State"] = $doc->getElementsByTagName('sp')->item(0)->nodeValue;
$values["Registrant"]["Zip code"] = $doc->getElementsByTagName('pc')->item(0)->nodeValue;
$values["Registrant"]["Country Code"] = $doc->getElementsByTagName('cc')->item(0)->nodeValue;
$values["Registrant"]["Phone"] = $doc->getElementsByTagName('voice')->item(0)->nodeValue;
$values["Registrant"]["Email"] = $doc->getElementsByTagName('email')->item(0)->nodeValue;
}
}
return $values;
}
# Function to save contact details
function cozaepp_SaveContactDetails($params) {
# Grab variables
$tld = $params["tld"];
$sld = $params["sld"];
# Registrant Details
$registrant_name = $params["contactdetails"]["Registrant"]["Contact Name"];
$registrant_org = $params["contactdetails"]["Registrant"]["Organisation"];
$registrant_address1 = $params["contactdetails"]["Registrant"]["Address line 1"];
$registrant_address2 = $params["contactdetails"]["Registrant"]["Address line 2"];
$registrant_town = $params["contactdetails"]["Registrant"]["TownCity"];
$registrant_state = $params["contactdetails"]["Registrant"]["State"];
$registrant_zipcode = $params["contactdetails"]["Registrant"]["Zip code"];
$registrant_countrycode = $params["contactdetails"]["Registrant"]["Country Code"];
$registrant_phone = $params["contactdetails"]["Registrant"]["Phone"];
#$registrant_fax = '',
$registrant_email = $params["contactdetails"]["Registrant"]["Email"];
#Grab domain info
$client = _cozaepp_Client();
$registrarinfo = $client->request('
<epp:epp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<epp:command>
<epp:info>
<domain:info xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
<domain:name hosts="all">'.$sld.'.'.$tld.'</domain:name>
</domain:info>
</epp:info>
</epp:command>
</epp:epp>
');
# Parse XML result
$doc= new DOMDocument();
$doc->loadXML($registrarinfo);
$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
if($coderes != '1000') {
$values["error"] = "Code (".$coderes.") ".$msg;
} else {
# Time to do the update
$registrant = $doc->getElementsByTagName('registrant')->item(0)->nodeValue;
$contact = $client->request('
<epp:epp xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<epp:command>
<epp:update>
<contact:update>
<contact:id>'.$registrant.'</contact:id>
<contact:chg>
<contact:postalInfo type="loc">
<contact:name>'.$registrant_name.'</contact:name>
<contact:org>'.$registrant_org.'</contact:org>
<contact:addr>
<contact:street>'.$registrant_address1.'</contact:street>
<contact:street>'.$registrant_address2.'</contact:street>
<contact:city>'.$registrant_town.'</contact:city>
<contact:sp>'.$registrant_state.'</contact:sp>
<contact:pc>'.$registrant_zipcode.'</contact:pc>
<contact:cc>'.$registrant_countrycode.'</contact:cc>
</contact:addr>
</contact:postalInfo>
<contact:voice>'.$registrant_phone.'</contact:voice>
<contact:fax></contact:fax>
<contact:email>'.$registrant_email.'</contact:email>
</contact:chg>
</contact:update>
</epp:update>
</epp:command>
</epp:epp>
');
# Parse XML result
$doc= new DOMDocument();
$doc->loadXML($contact);
$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
$msg = $doc->getElementsByTagName('msg')->item(0)->nodeValue;
if($coderes == '1001') {
$values['status'] = $msg;
} else {
$values["error"] = "Code (".$coderes.") ".$msg;
}
}
return $values;
}
# NOT IMPLEMENTED
function cozaepp_GetEPPCode($params) {
# Grab variables
$username = $params["Username"];
$password = $params["Password"];
$testmode = $params["TestMode"];
$tld = $params["tld"];
$sld = $params["sld"];
$values["eppcode"] = '';
# If error, return the error message in the value below
//$values["error"] = 'error';
return $values;
}
# NOT IMPLEMENTED
function cozaepp_RegisterNameserver($params) {
# Grab varaibles
$username = $params["Username"];
$password = $params["Password"];
$testmode = $params["TestMode"];
$tld = $params["tld"];
$sld = $params["sld"];
$nameserver = $params["nameserver"];
$ipaddress = $params["ipaddress"];
# If error, return the error message in the value below
$values["error"] = $error;
return $values;
}
# NOT IMPLEMENTED
function cozaepp_ModifyNameserver($params) {
# Grab variables
$username = $params["Username"];
$password = $params["Password"];
$testmode = $params["TestMode"];
$tld = $params["tld"];
$sld = $params["sld"];
$nameserver = $params["nameserver"];
$currentipaddress = $params["currentipaddress"];
$newipaddress = $params["newipaddress"];
# If error, return the error message in the value below
$values["error"] = $error;
return $values;
}
# NOT IMPLEMENTED
function cozaepp_DeleteNameserver($params) {
# Grab variables
$username = $params["Username"];
$password = $params["Password"];
$testmode = $params["TestMode"];
$tld = $params["tld"];
$sld = $params["sld"];
$nameserver = $params["nameserver"];
# If error, return the error message in the value below
$values["error"] = $error;
return $values;
}
# Function to create internal COZA EPP request
function _cozaepp_Client() {
# Setup include dir
$include_path = '../modules/registrars/cozaepp';
set_include_path(get_include_path() . PATH_SEPARATOR . $include_path);
include_once 'Net/EPP/Client.php';
include_once 'Net/EPP/Protocol.php';
# Grab module parameters
$params = getregistrarconfigoptions('cozaepp');
# Create EPP client
$client = new Net_EPP_Client();
# Set certificate if we have one
$use_ssl = false;
if (isset($params['SSL']) && $params['SSL'] == "on" && isset($params['Certificate']) && file_exists($params['Certificate'])) {
# Create SSL context
$context = stream_context_create();
stream_context_set_option($context, 'ssl', 'local_cert', $params['Certificate']);
$use_ssl = true;
}
# Connect
$client->connect($params['Server'], $params['Port'], 50, $use_ssl, $context);
# Perform login
$result = $client->request('
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<login>
<clID>'.$params['Username'].'</clID>
<pw>'.$params['Password'].'</pw>
<options>
<version>1.0</version>
<lang>en</lang>
</options>
<svcs>
<objURI>urn:ietf:params:xml:ns:domain-1.0</objURI>
<objURI>urn:ietf:params:xml:ns:contact-1.0</objURI>
</svcs>
</login>
<clTRID>RAR-LOGIN-0000001</clTRID>
</command>
</epp>
');
return $client;
}
?>
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
* @revision $Id: Client.php,v 1.13 2010/10/21 11:55:07 gavin Exp $ * @revision $Id: Client.php,v 1.13 2010/10/21 11:55:07 gavin Exp $
*/ */
require_once('PEAR.php');
require_once('Net/EPP/Protocol.php'); require_once('Net/EPP/Protocol.php');
$GLOBALS['Net_EPP_Client_Version'] = '0.0.4'; $GLOBALS['Net_EPP_Client_Version'] = '0.0.4';
...@@ -45,41 +44,51 @@ ...@@ -45,41 +44,51 @@
* This method establishes the connection to the server. If the connection was * This method establishes the connection to the server. If the connection was
* established, then this method will call getFrame() and return the EPP <greeting> * established, then this method will call getFrame() and return the EPP <greeting>
* frame which is sent by the server upon connection. If connection fails, then * frame which is sent by the server upon connection. If connection fails, then
* a PEAR_Error object explaining the error will be returned instead. * an exception with a message explaining the error will be thrown and handled
* in the calling code.
* @param string $host the hostname * @param string $host the hostname
* @param integer $port the TCP port * @param integer $port the TCP port
* @param integer $timeout the timeout in seconds * @param integer $timeout the timeout in seconds
* @param boolean $ssl whether to connect using SSL * @param boolean $ssl whether to connect using SSL
* @param resource $context a stream resource to use when setting up the socket connection * @param resource $context a stream resource to use when setting up the socket connection
* @return PEAR_Error|string a PEAR_Error on failure, or a string containing the server <greeting> * @throws Exception on connection errors
* @return a string containing the server <greeting>
*/ */
function connect($host, $port=700, $timeout=1, $ssl=true, $context=NULL) { function connect($host, $port=700, $timeout=1, $ssl=true, $context=NULL) {
$target = sprintf('%s://%s:%d', ($ssl === true ? 'tls' : 'tcp'), $host, $port); $target = sprintf('%s://%s:%d', ($ssl === true ? 'ssl' : 'tcp'), $host, $port);
if (is_resource($context)) { if (is_resource($context)) {
$result = stream_socket_client($target, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $context); $result = stream_socket_client($target, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $context);
} else { } else {
$result = stream_socket_client($target, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT); $result = stream_socket_client($target, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT);
}
if ($result === False) {
throw new Exception("Error connecting to $target: $errstr (code $errno)");
} }
if (!$result) {
return new PEAR_Error("Error connecting to $target: $errstr (code $errno)");
} else { // Set our socket
$this->socket = $result; $this->socket = $result;
return $this->getFrame();
// Set stream timeout
if (!stream_set_timeout($this->socket,$timeout)) {
throw new Exception("Failed to set timeout on socket: $errstr (code $errno)");
}
// Set blocking
if (!stream_set_blocking($this->socket,0)) {
throw new Exception("Failed to set blocking on socket: $errstr (code $errno)");
} }
return $this->getFrame();
} }
/** /**
* Get an EPP frame from the server. * Get an EPP frame from the server.
* This retrieves a frame from the server. Since the connection is blocking, this * This retrieves a frame from the server. Since the connection is blocking, this
* method will wait until one becomes available. If the connection has been broken, * method will wait until one becomes available. If the connection has been broken,
* this method will return a PEAR_Error object, otherwise it will return a string * this method will return a string containing the XML from the server
* containing the XML from the server * @throws Exception on frame errors
* @return PEAR_Error|string a PEAR_Error on failure, or a string containing the frame * @return a string containing the frame
*/ */
function getFrame() { function getFrame() {
return Net_EPP_Protocol::getFrame($this->socket); return Net_EPP_Protocol::getFrame($this->socket);
...@@ -89,6 +98,7 @@ ...@@ -89,6 +98,7 @@
* Send an XML frame to the server. * Send an XML frame to the server.
* This method sends an EPP frame to the server. * This method sends an EPP frame to the server.
* @param string the XML data to send * @param string the XML data to send
* @throws Exception when it doesn't complete the write to the socket
* @return boolean the result of the fwrite() operation * @return boolean the result of the fwrite() operation
*/ */
function sendFrame($xml) { function sendFrame($xml) {
...@@ -98,10 +108,11 @@ ...@@ -98,10 +108,11 @@
/** /**
* a wrapper around sendFrame() and getFrame() * a wrapper around sendFrame() and getFrame()
* @param string $xml the frame to send to the server * @param string $xml the frame to send to the server
* @return PEAR_Error|string the frame returned by the server, or an error object * @throws Exception when it doesn't complete the write to the socket
* @return string the frame returned by the server, or an error object
*/ */
function request($xml) { function request($xml) {
$this->sendFrame($xml); $res = $this->sendFrame($xml);
return $this->getFrame(); return $this->getFrame();
} }
......