controller =& $controller; } /* * initialization */ function init($host,$user,$accessHash) { $this->host=$host; $this->user=$user; $accessHash = str_replace(array("\r", "\n"),"",$accessHash); $this->accessHash=$accessHash; } /* * connect to the xml api * Output: true on success, false on fail */ function connect($api_path) { /* * Open a socket for HTTPS */ $this->fp = fsockopen("ssl://" . $this->host, 2087, $errno, $errstr, 30); /* * Uncomment to use unsecure HTTP instead */ //$this->fp = fsockopen("ssl://" . $this->host, 2087, $errno, $errstr, 30); /* * Die on error initializing socket */ if ($errno == 0 && $this->fp == false) { $this->errors[]="Socket Error: Could not initialize socket."; return false; } elseif ($this->fp == false) { $this->errors[]="Socket Error #" . $errno . ": " . $errstr; return false; } /* * Assemble the header to send */ $header = ""; $header .= "GET " . $api_path . " HTTP/1.0\r\n"; $header .= "Host: " . $this->host . "\r\n"; $header .= "Connection: Close\r\n"; $header .= "Authorization: WHM " . $this->user . ":" . $this->accessHash . "\r\n"; // Comment above line and uncomment below line to use password authentication in place of hash authentication //$header .= "Authorization: Basic " . base64_encode($user . ":" . $pass) . "\r\n"; $header .= "\r\n"; /* * Send the Header */ if(!@fputs($this->fp, $header)) { $this->errors[]='Unable to send header.'; return false; } } /* * Close the socket */ function disconnect() { fclose($this->fp); } /* * Get the raw output from the server * Output: string */ function getOutput() { $rawResult = ""; while (!feof($this->fp)) { $rawResult .= @fgets($this->fp, 128); // Suppress errors with @ } /* * Ignore headers */ $rawResultParts = explode("\r\n\r\n",$rawResult); $result = $rawResultParts[1]; /* * Output XML */ return $result; } /* * This function lists the verison of cPanel and WHM installed on the server. * Output: string */ function version() { //connect using prpoer xml api address $this->connect('/xml-api/version'); //get the output $xmlstr=$this->getOutput(); if($xmlstr=='') { $this->errors[]='No output.'; return false; } //disconnect $this->disconnect(); //get the output xml as an array using simple xml $xml = new SimpleXMLElement($xmlstr); return $xml->version; } /* * This function lists the server's hostname. * Output: string */ function gethostname() { //connect using prpoer xml api address $this->connect('/xml-api/gethostname'); //get the output $xmlstr=$this->getOutput(); if($xmlstr=='') { $this->errors[]='No output.'; return false; } //disconnect $this->disconnect(); //get the output xml as an array using simple xml $xml = new SimpleXMLElement($xmlstr); return $xml->hostname; } /* * list currently active accounts * Output: array on success, false on fail */ function listaccts() { //connect using prpoer xml api address $this->connect('/xml-api/listaccts'); //get the output $xmlstr=$this->getOutput(); if($xmlstr=='') { $this->errors[]='No output.'; return false; } //disconnect $this->disconnect(); $xml = new DOMDocument(); $xml->loadXML($xmlstr); // statement block to get the elements of the xml document $list = $xml->getElementsByTagName('user'); $i=0; foreach ($list AS $element) { foreach ($element->childNodes AS $item) { $result[$i]['user']=$item->nodeValue; $i++; } } $list = $xml->getElementsByTagName('domain'); $i=0; foreach ($list AS $element) { foreach ($element->childNodes AS $item) { $result[$i]['domain']=$item->nodeValue; $i++; } } $list = $xml->getElementsByTagName('plan'); $i=0; foreach ($list AS $element) { foreach ($element->childNodes AS $item) { $result[$i]['package']=$item->nodeValue; $i++; } } $list = $xml->getElementsByTagName('unix_startdate'); $i=0; foreach ($list AS $element) { foreach ($element->childNodes AS $item) { $result[$i]['start_date']=$item->nodeValue; $i++; } } //return the result array return $result; } /* * list packages * Output: array on success, false on fail */ function listPkgs() { //connect using prpoer xml api address $this->connect('/xml-api/listpkgs'); //get the output $xmlstr=$this->getOutput(); if($xmlstr=='') { $this->errors[]='No output.'; return false; } //disconnect $this->disconnect(); $xml = new DOMDocument(); $xml->loadXML($xmlstr); $list = $xml->getElementsByTagName('name'); $i=0; foreach ($list AS $element) { foreach ($element->childNodes AS $item) { $result[$i]['package_name']=$item->nodeValue; $i++; } } $list = $xml->getElementsByTagName('QUOTA'); $i=0; foreach ($list AS $element) { foreach ($element->childNodes AS $item) { $result[$i]['package_quota']=$item->nodeValue; $i++; } } $list = $xml->getElementsByTagName('BWLIMIT'); $i=0; foreach ($list AS $element) { foreach ($element->childNodes AS $item) { $result[$i]['package_bw_limit']=$item->nodeValue; $i++; } } //return the result array return $result; } /* * create a cpanel account * Output: array on success, false on fail */ function createAccount($acctDomain,$acctUser,$acctPass,$acctPackg) { //connect using prpoer xml api address $this->connect("/xml-api/createacct?username=$acctUser&password=$acctPass&plan=$acctPackg&domain=$acctDomain&ip=n&cgi=y&frontpage=y&cpmod=x3&useregns=0&reseller=0"); //get the output $xmlstr=$this->getOutput(); if($xmlstr=='') { $this->errors[]='No output.'; return false; } //disconnect $this->disconnect(); //get the output xml as an array using simple xml $xml = new SimpleXMLElement($xmlstr); if($xml->result->status==1) { $result['status']=$xml->result->status; $result['statusmsg']=$xml->result->statusmsg; $result['ip']=$xml->result->options->ip; $result['nameserver']=$xml->result->options->nameserver; $result['nameserver2']=$xml->result->options->nameserver2; $result['nameserver3']=$xml->result->options->nameserver3; $result['nameserver4']=$xml->result->options->nameserver4; $result['package']=$xml->result->options->package; $result['rawout']=$xml->result->rawout; return $result; } else { $this->errors[]=$xml->result->statusmsg; return false; } } /* * This function displays pertient account information for a specific account. * Output: array on success , false on fail */ function accountsummary($accUser) { //connect using prpoer xml api address $this->connect("/xml-api/accountsummary?user=$accUser"); //get the output $xmlstr=$this->getOutput(); if($xmlstr=='') { $this->errors[]='No output.'; return false; } //disconnect $this->disconnect(); //get the output xml as an array using simple xml $xml = new SimpleXMLElement($xmlstr); if($xml->status==1) { $result['disklimit']=$xml->acct->disklimit; $result['diskused']=$xml->acct->diskused; $result['diskused']=$xml->acct->diskused; $result['domain']=$xml->acct->domain; $result['email']=$xml->acct->email; $result['ip']=$xml->acct->ip; $result['owner']=$xml->acct->owner; $result['partition']=$xml->acct->partition; $result['plan']=$xml->acct->plan; $result['startdate']=$xml->acct->startdate; $result['theme']=$xml->acct->theme; $result['unix_startdate']=$xml->acct->unix_startdate; $result['user']=$xml->acct->user; return $result; } else { $this->errors[]=$xml->statusmsg; return false; } } /* *This function changes the passwd of a domain owner (cPanel) or reseller (WHM) account. * Output: array on success , false on fail */ function passwd($accUser,$pass) { //connect using prpoer xml api address $this->connect("/xml-api/passwd?user=$accUser&pass=$pass"); //get the output $xmlstr=$this->getOutput(); if($xmlstr=='') { $this->errors[]='No output.'; return false; } //disconnect $this->disconnect(); //get the output xml as an array using simple xml $xml = new SimpleXMLElement($xmlstr); if($xml->passwd->status==1) { $result['statusmsg']=$xml->passwd->statusmsg; $result['frontpage']=$xml->passwd->frontpage; $result['ftp']=$xml->passwd->ftp; $result['mail']=$xml->passwd->mail; $result['mysql']=$xml->passwd->mysql; $result['system']=$xml->passwd->system; $result['rawout']=$xml->passwd->rawout; return $result; } else { $this->errors[]=$xml->passwd->statusmsg; return false; } } /* * suspend a cpanel account * Output: string (statusmsg) on success, false on fail */ function suspend($acctUser,$reason) { //connect using prpoer xml api address $this->connect("/xml-api/suspendacct?user=$acctUser&reason=$reason"); //get the output $xmlstr=$this->getOutput(); if($xmlstr=='') { $this->errors[]='No output.'; return false; } //disconnect $this->disconnect(); //get the output xml as an array using simple xml $xml = new SimpleXMLElement($xmlstr); if($xml->result->status==1) { return $xml->result->statusmsg; } else { $this->errors[]=$xml->result->statusmsg; return false; } } /* * unsuspend a suspended cpanel account * Output: string (statusmsg) on success, false on fail */ function unsuspend($acctUser) { //connect using prpoer xml api address $this->connect("/xml-api/unsuspendacct?user=$acctUser"); //get the output $xmlstr=$this->getOutput(); if($xmlstr=='') { $this->errors[]='No output.'; return false; } //disconnect $this->disconnect(); //get the output xml as an array using simple xml $xml = new SimpleXMLElement($xmlstr); if($xml->result->status==1) { return $xml->result->statusmsg; } else { $this->errors[]=$xml->result->statusmsg; return false; } } /* * terminate a cpanel account * Output: string (statusmsg) on success, false on fail */ function terminate($acctUser,$keepDns=0) { //connect using prpoer xml api address $this->connect("/xml-api/removeacct?user=$acctUser&keepdns=$keepDns"); //get the output $xmlstr=$this->getOutput(); if($xmlstr=='') { $this->errors[]='No output.'; return false; } //disconnect $this->disconnect(); //get the output xml as an array using simple xml $xml = new SimpleXMLElement($xmlstr); if($xml->result->status==1) { return $xml->result->statusmsg; } else { $this->errors[]=$xml->result->statusmsg; return false; } } /* * Upgrade/Downgrade and Account (Change Package) * Output: array on success, false on fail */ function changepackage($accUser,$pkg) { //connect using prpoer xml api address $this->connect("/xml-api/changepackage?user=$accUser&pkg=$pkg"); //get the output $xmlstr=$this->getOutput(); if($xmlstr=='') { $this->errors[]='No output.'; return false; } //disconnect $this->disconnect(); //get the output xml as an array using simple xml $xml = new SimpleXMLElement($xmlstr); if($xml->result->status==1) { $result['statusmsg']=$xml->result->statusmsg; $result['rawout']=$xml->result->rawout; return $result; } else { $this->errors[]=$xml->result->statusmsg; return false; } } } ?>