* @author Roland Käser * @version 0.9 * @copyright Copyright (c) 2021, Thurdata * @example ../test.php */ /** * cwp7_Admin class documentation */ /** * cwp7_Admin is a class which allows to manage cwp7 accounts via web-api * * You may create, modify, migrate, delete and get the attributes of a cwp7 account using this class * * For the usage examples of all class methods check the source code of test.php */ class cwp7_Admin { private $constructorSuccess; private $cwp7URL; private $cwp7ConType; private $cwp7Port; private $cwp7Secure; protected $cwp7Token; /** * Constructor * @param string $cwp7URL cwp7 URL (example: https://cwp7.my.lan) * @param string $username admin/user account's name * @param string $token api token * @param string $secure optional false to force unsecure (default true) */ function __construct($cwp7URL, $token, $secure=true) { if(!in_array('curl', get_loaded_extensions())) { $this->constructorSuccess = false; return array('error_msg' => 'Error: PHP curl extension not available'); } if (empty($cwp7URL) || empty($token)) { $this->constructorSuccess = false; return array('error_msg' => 'Error: Server login info missing, check server configuration'); } if(preg_match('/^https/', $cwp7URL)) { $this->cwp7ConType = 'https://'; if($secure) { $this->cwp7Secure = true; } else { $this->cwp7Secure = false; } } else { $this->cwp7ConType = 'http://'; $this->cwp7Secure = false; } $cwp7Hostname = str_replace(array('http://', 'https://'), array('',''), $cwp7URL); $cwp7Hostname = explode(':', $cwp7Hostname); if (gethostbyname($cwp7Hostname[0]) == $cwp7Hostname[0] && !filter_var($cwp7Hostname[0], FILTER_VALIDATE_IP)) { $this->constructorSuccess = false; return array('error_msg' => 'Error: Cannot resolve ' . $cwp7Hostname[0] . ', check server configuration'); } $this->cwp7Port = ($cwp7Hostname[1]) ? $cwp7Hostname[1] : '2304'; $this->cwp7URL = $this->cwp7ConType . $cwp7Hostname[0] . ':' . $this->cwp7Port; $this->cwp7Token = $token; $this->constructorSuccess = true; } public function constructorSuccess() { return $this->constructorSuccess; } /** * getAllAccounts * * @return array of cwp7 accounts array of informations or error message */ public function getAllAccounts() { $data = array(); return json_decode(doRequest('account', 'list', $data), true); } /** * getAccount * * @param string $user user * * @return array of account informations or error message */ public function getAccount($user) { $data = array( "user" => $user ); return json_decode(doRequest('accountdetail', 'list', $data), true); } /** * createAccount * * @param array $params avvount informations, email required. * * @return array of account informations or error message */ public function createAccount($params) { if(!isset($params['domain'])) { return array('error_msg' => 'Error: missing parameter domain'); } if(!isset($params['user'])) { return array('error_msg' => 'Error: missing parameter user'); } if(!isset($params['pass'])) { return array('error_msg' => 'Error: missing parameter pass'); } if(!isset($params['email'])) { return array('error_msg' => 'Error: missing parameter email'); } if(!isset($params['package'])) { return array('error_msg' => 'Error: missing parameter package'); } if(!isset($params['autossl'])) { $params['autossl'] = 0; } $data = array( "domain" => $params['domain'], "user" => $params['user'], "pass" => base64_encode($params['pass']), "email" => $params['email'], "package" => $params['package'], "autossl" => $params['autossl'], "encodepass" => true, ); return json_decode(doRequest('account', 'add', $data), true); } /** * modifyAccount * * @param array $params account informations, user, e-mail & new package required. * * @return array status -> OK or error message */ public function modifyAccount($params) { if(!isset($params['user'])) { return array('error_msg' => 'Error: missing parameter user'); } if(!isset($params['email'])) { return array('error_msg' => 'Error: missing parameter email'); } if(!isset($params['package'])) { return array('error_msg' => 'Error: missing parameter package'); } $data = array( 'user' => $params['user'], 'email' => $params['email'], 'package' => $params['package'], ); return json_decode(doRequest('account', 'upd', $data), true); } /** * deleteAccount * * @param array user & e-mail required * * @return array success => true or error message */ public function deleteAccount($params) { if(!isset($params['user'])) { return array('error_msg' => 'Error: missing parameter user'); } if(!isset($params['email'])) { return array('error_msg' => 'Error: missing parameter email'); } $data = array( "user" => $params['user'], "email" => $params['email'], ); return json_decode(doRequest('account', 'del', $data), true); } /** * suspendAccount * * @param string $user user * * @return array success => true or error message */ public function suspendAccount($user) { $data = array( "user" => $user, ); return json_decode(doRequest('account', 'susp', $data), true); } /** * unsuspendAccount * * @param string $user user * * @return array success => true or error message */ public function unsuspendAccount($user) { $data = array( 'user' => $user, ); return json_decode(doRequest('account', 'unsp', $data), true); } /** * getPackages * * @return array packages */ public function getPackages() { $data = array(); return json_decode(doRequest('packages', 'list', $data), true); } /** * changePassword * * @return array packages */ public function changePackage($params) { if(!isset($params['user'])) { return array('error_msg' => 'Error: missing parameter user'); } if(!isset($params['password'])) { return array('error_msg' => 'Error: missing parameter password'); } $data = array( 'user' => $params['user'], 'password' => $params['password'], ); return json_decode(doRequest('changepass', 'upd', $data), true); } /** * getQuota * * @param string $user user * * @return array quota details */ public function getQuota($user) { $data = array('user' => $user); return json_decode(doRequest('accountquota', 'list', $data), true); } /** * getAutoSSL * * @param string $user user * * @return array certificate data or error */ public function getAutoSSL($user) { $data = array('user' => $user); return json_decode(doRequest('autossl', 'list', $data), true); } /** * addAutoSSL * * @param array $user user, $name doaminname * * @return array status or error */ public function addAutoSSL($params) { if(!isset($params['user'])) { return array('error_msg' => 'Error: missing parameter user'); } if(!isset($params['name'])) { return array('error_msg' => 'Error: missing parameter name'); } $data = array('user' => $params['user'], 'name' => $params['name']); return json_decode(doRequest('autossl', 'add', $data), true); } /** * renewAutoSSL * * @param array $user user, $name cert name * * @return array status or error */ public function updateAutoSSL($params) { if(!isset($params['user'])) { return array('error_msg' => 'Error: missing parameter user'); } if(!isset($params['name'])) { return array('error_msg' => 'Error: missing parameter name'); } $data = array('user' => $params['user'], 'name' => $params['name']); return json_decode(doRequest('autossl', 'renew', $data), true); } /** * delAutoSSL * * @param array $user user, $name doaminname * * @return array status or error */ public function delAutoSSL($params) { if(!isset($params['user'])) { return array('error_msg' => 'Error: missing parameter user'); } if(!isset($params['name'])) { return array('error_msg' => 'Error: missing parameter name'); } $data = array('user' => $params['user'], 'name' => $params['name']); return json_decode(doRequest('autossl', 'del', $data), true); } /** * doRequest * * @param string $endpoint API endpoint * @param string $action endpoint action * @param array $data POST data * * @return array API response */ protected function doRequest($endpoint, $action, $data) { $data['key'] = $this->cwp7Token; $data['action'] = $action; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->cwp7URL . '/v1/' . $endpoint); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); if(!$this->cwp7Secure) { curl_setopt($cwp7Client, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($cwp7Client, CURLOPT_SSL_VERIFYHOST, false); } curl_setopt ($ch, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt ($ch, CURLOPT_POST, 1); $response = curl_exec($ch); if(curl_getinfo($ch, CURLINFO_RESPONSE_CODE) != 200) { curl_close($ch); return array('error_msg' => $response); }; curl_close($ch); return $response; } }