* @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 $cwp7Host cwp7 hostname or IP (example: cwp7.my.lan) * @param string $token api token * @param string $secure optional false to force unsecure (default true) */ function __construct($cwp7Host, $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($cwp7Host) || empty($token)) { $this->constructorSuccess = false; return array('error_msg' => 'Error: Server login info missing, check server configuration'); } if($secure) { $this->cwp7ConType = 'https://'; $this->cwp7Secure = true; } else { $this->cwp7ConType = 'http://'; $this->cwp7Secure = false; } $cwp7Hostname = explode(':', $cwp7Host); 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 = (isset($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 $this->doRequest('account', 'list', $data); } /** * getAccount * * @param string $user user * * @return array of account informations or error message */ public function getAccount($user) { $data = array( "user" => $user ); return $this->doRequest('accountdetail', 'list', $data); } /** * createAccount * * @param array $params avvount informations, email required. * * @return array of account informations or error message */ public function createAccount($params) { if(!isset($params['package'])) { return array('error_msg' => 'Error: missing parameter package'); } 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['inode'])) { return array('error_msg' => 'Error: missing parameter inode'); } if(!isset($params['nofile'])) { return array('error_msg' => 'Error: missing parameter nofile'); } if(!isset($params['nproc'])) { return array('error_msg' => 'Error: missing parameter nproc'); } if(!isset($params['server_ips'])) { return array('error_msg' => 'Error: missing parameter server_ips'); } if(!isset($params['autossl'])) { $params['autossl'] = 0; } $data = array( 'domain' => $params['domain'], 'user' => $params['user'], 'username' => $params['user'], 'pass' => base64_encode($params['pass']), 'email' => $params['email'], 'package' => $params['package'], 'autossl' => $params['autossl'], 'encodepass' => true, 'inode' => $params['inode'], 'limit_nofile' => $params['nofile'], 'limit_nproc' => $params['nproc'], 'server_ips' => $params['server_ips'], ); return $this->doRequest('account', 'add', $data); } /** * 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'); } return $this->doRequest('account', 'udp', $params); } /** * 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 $this->doRequest('account', 'del', $data); } /** * suspendAccount * * @param string $user user * * @return array success => true or error message */ public function suspendAccount($user) { $data = array( "user" => $user, ); return $this->doRequest('account', 'susp', $data); } /** * unsuspendAccount * * @param string $user user * * @return array success => true or error message */ public function unsuspendAccount($user) { $data = array( 'user' => $user, ); return $this->doRequest('account', 'unsp', $data); } /** * getPackages * * @return array packages */ public function getPackages() { $data = array(); return $this->doRequest('packages', 'list', $data); } /** * changePassword * * @return array packages */ public function changePass($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 $this->doRequest('changepass', 'upd', $data); } /** * addDomain * * @param array $user user, $name domainname, $type domain or subdomain * * @return array details */ public function addDomain($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'); } if(!isset($params['type'])) { return array('error_msg' => 'Error: missing parameter type'); } $data = array( 'user' => $params['user'], 'type' => $params['type'], 'name' => $params['name'], 'path' => '/domains/' . $params['name'], 'autossl' => 0, ); return $this->doRequest('admindomains', 'add', $data); } /** * deleteDomain * * @param array $user user, $name domainname, $type domain or subdomain * * @return array details */ public function deleteDomain($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'); } if(!isset($params['type'])) { return array('error_msg' => 'Error: missing parameter type'); } $data = array( 'user' => $params['user'], 'type' => $params['type'], 'name' => $params['name'], ); return $this->doRequest('admindomains', 'del', $data); } /** * getQuota * * @param string $user user * * @return array quota details */ public function getQuota($user) { $data = array('user' => $user); return $this->doRequest('accountquota', 'list', $data); } /** * getLimits * * @param string $user user * * @return array limits details */ public function getLimits($user) { $data = array('user' => $user); return $this->doRequest('quotalimit', 'list', $data); } /** * getAutoSSL * * @param string $user user * * @return array certificate data or error */ public function getAutoSSL($user) { $data = array('user' => $user); return $this->doRequest('autossl', 'list', $data); } /** * addAutoSSL * * @param array $user user, $name domainname * * @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 $this->doRequest('autossl', 'add', $data); } /** * 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 $this->doRequest('autossl', 'renew', $data); } /** * 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 $this->doRequest('autossl', 'del', $data); } /** * getServerType * * @return array status or error */ public function getServerType() { $data = array(); return $this->doRequest('typeserver', 'list', $data); } /** * getLoginLink * * @return array status or error */ public function getLoginLink($user, $timer=5) { $data = array('user' => $user, 'timer' => $timer); return $this->doRequest('user_session', 'list', $data); } /** * doRequest * * @param string $endpoint API endpoint * @param string $action endpoint action * @param array $data POST data * * @return string API response */ protected function doRequest($endpoint, $action, $data) { $data['key'] = $this->cwp7Token; $data['action'] = $action; // $data['debug'] = 1; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->cwp7URL . '/v1/' . $endpoint); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, 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('status' => 'Error', 'err_msg' => curl_error($ch)); }; curl_close($ch); return json_decode($response, true); } }