'CentOS Web Panel Provisioning', 'APIVersion' => '1.2', 'DefaultNonSSLPort' => '2031', 'DefaultSSLPort' => '2031', 'RequiresServer' => true, 'ServiceSingleSignOnLabel' => 'Login to CWP7', 'AdminSingleSignOnLabel' => 'Login to CWP7 Admin' ); } function cwp7_Testconnection($params) { $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->getServerType(); if($response['status'] == 'OK') { return array( 'success' => true, 'error' => '', ); } return array( 'success' => false, 'error' => $response['msj'], ); } function cwp7_ConfigOptions() { $whmcs = App::self(); $serverGroupID = $whmcs->get_req_var('servergroup'); $serverIDObj = Capsule::table('tblservergroupsrel') ->select('serverid') ->where('groupid', '=', $serverGroupID) ->get(); $serverIDs = array(); foreach($serverIDObj as $serverID) { array_push($serverIDs, $serverID->serverid); } $server = Capsule::table('tblservers') ->select('hostname', 'accesshash') ->where('id', $serverIDs) ->where('active', '=', 1) ->first(); $cwp7 = new cwp7_Admin($server->hostname, $server->accesshash); $cwp7Packages = $cwp7->getPackages(); if($cwp7Packages['status'] != 'OK') { logModuleCall( 'cwp7', __FUNCTION__, $cwp7Packages['status'], 'Could not fetch packages', $cwp7Packages['msj'] ); return false; } $cwp7PackageNames = array(); foreach($cwp7Packages['msj'] as $cwp7Package) { array_push($cwp7PackageNames, $cwp7Package['package_name']); } $configOptions = array(); $configOptions['package'] = array( 'FriendlyName' => 'CWP7 Package', 'Type' => 'dropdown', 'Options' => implode(',', $cwp7PackageNames), 'Description' => 'Select CWP7 Package', ); $configOptions['inode'] = array( "Type" => "text" , "Description" => "Max of inode", "Default" => "0",); $configOptions['nofile'] = array( "Type" => "text", "Description" => "Max of nofile", "Default" => "100",); $configOptions['nproc'] = array( "Type" => "text" , "Description" => "Nproc limit - 40 suggested", "Default" => "40",); $configOptions['Nameserver IP for lookups'] = array( "Type" => "text" , "Description" => "Name Server IP", "Default" => "185.163.51.142",); $configOptions['Name of own Nameserver'] = array( "Type" => "text" , "Description" => "Name Server Name", "Default" => "ns1.thurdata.ch",); return $configOptions; } function cwp7_CreateAccount($params) { $username = strtolower(substr($params['clientsdetails']['firstname'],0,2) . substr($params['clientsdetails']['lastname'],0,3)) . $params['serviceid']; $userdomain = $username . '.local'; try { Capsule::table('tblhosting') ->where('id', '=', $params['serviceid']) ->update( array( 'username' => $username, 'domain' => $userdomain, ) ); } catch (\Exception $e) { logModuleCall( 'cwp7', __FUNCTION__, $params, 'Error: could save username & domain in database', $e->getMessage() ); return 'Error: could save username & password in database'; } if ($params["server"] == 1) { $data = array( 'package' => $params['configoption1'], 'domain' => $userdomain, 'user' => $username, 'pass' => $params['password'], 'email' => $params['clientsdetails']['email'], 'inode' => $params["configoption2"], 'nofile' => $params["configoption3"], 'nproc' => $params["configoption4"], 'server_ips'=>$params["serverip"] ); $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->createAccount($data); } if($response['status'] != 'OK') { return 'Error: ' . $response['msj']; } return 'success'; } function cwp7_TerminateAccount($params) { $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->deleteAccount(array('user' => $params['username'], 'email' => $params['clientsdetails']['email'])); if($response['status'] != 'OK') { return 'Error: ' . $response['msj']; } return 'success'; } function cwp7_SuspendAccount($params) { $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->suspendAccount($params['username']); if($response['status'] != 'OK') { return 'Error: ' . $response['msj']; } return 'success'; } function cwp7_UnsuspendAccount($params) { $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->unsuspendAccount($params['username']); if($response['status'] != 'OK') { return 'Error: ' . $response['msj']; } return 'success'; } function cwp7_ClientArea($params) { $clientInfo = array('moduleclientarea' => '1'); $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->getAutoSSL($params['username']); if($response['status'] == 'OK') { $sslSites = array(); foreach($response['msj'] as $sslSite) { $sslSites[$sslSite['ssl']] = array( 'auotssl' => $sslSite['autossl'], 'expire' => $sslSite['exp'], ); } } $response = $cwp7->getAccount($params['username']); if($response['status'] != 'OK') { logModuleCall( 'cwp7', __FUNCTION__, $params, 'debug', $response ); } $domains = $response['result']['domains']; $subDomains = $response['result']['subdomins']; $clientInfo['domains'] = array(); foreach($domains as $domain) { if($domain['path'] == '/home/' . $params['username'] . '/public_html') { $clientInfo['mgmtDomain'] = $domain['domain']; $clientInfo['mgmtEmail'] = $domain['email']; } else { if(array_key_exists($domain['domain'], $sslSites)) { $domain['ssl'] = 1; $domain['sslexpire'] = $sslSites[$domain['domain']]['expire']; $domain['autossl'] = $sslSites[$domain['domain']]['auotssl']; } if(cwp7CheckA($domain['domain'],$params['serverip'],$params['configoption5']) == 1) { $domain['DNS'] = 1; } $domain['domainNS'] = cwp7CheckSOA($domain['domain'],$params['configoption5'],$params['configoption6']); $domain['subdomains'] = array(); foreach($subDomains as $subDomain) { if($subDomain['domain'] == $domain['domain']) { $subFQDN = $subDomain['subdomain'] . '.' . $subDomain['domain']; if(array_key_exists($subFQDN, $sslSites)) { $subDomain['ssl'] = 1; $subDomain['sslexpire'] = $sslSites[$subFQDN]['expire']; $subDomain['autossl'] = $sslSites[$subFQDN]['auotssl']; } else { unset($subDomain['ssl']); unset($subDomain['sslexpire']); unset($subDomain['autossl']); } if(cwp7CheckA($subFQDN,$params['serverip'],$params['configoption5']) == 1) { $subDomain['DNS'] = 1; } else { unset($subDomain['DNS']); } array_push($domain['subdomains'], $subDomain); } } array_push($clientInfo['domains'], $domain); } } return array( 'tabOverviewReplacementTemplate' => 'clientarea', 'vars' => $clientInfo, ); } function cwp7_ServiceSingleSignOn($params) { $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->getLoginLink($params['username']); if($response['status'] == 'OK') { $link = $response['msj']['details']; $linkautologin = $link[0]['url']; return array( 'success' => true, 'redirectTo' => $linkautologin, ); } else { return array( 'success' => false, 'redirectTo' => '', ); } } function cwp7_ChangePassword($params) { $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->changePass(array('user' => $params['username'], 'password' => $params['password'])); if($response['status'] != 'OK') { return 'Error: ' . $response['msj']; } return 'success'; } function cwp7_ChangePackage($params) { $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->modifyAccount(array('user' => $params['username'], 'email' => $params['clientdetails']['email'], 'package' => $params['configoption1'])); if($response['status'] != 'OK') { return 'Error: ' . $response['msj']; } return 'success'; } function cwp7_UsageUpdate($params) { $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->getAllAccounts(); if($response['status'] == 'OK'){ $results = $response['msj']; for($i = 0; $i < count($results); $i++){ if($results[$i]['diskusage'] == '') { $diskusage = 0; } else { $diskusage = trim($results[$i]['diskusage']); } if($results[$i]['disklimit'] == '') { $disklimit = 0; } else { $disklimit = trim($results[$i]['disklimit']); } if($results[$i]['bandwidth'] == '') { $bandwidth = 0; } else { $bandwidth =trim($results[$i]['bandwidth']); } if($results[$i]['bwlimit'] == '') { $bwlimit = 0; } else { $bwlimit = trim($results[$i]['bwlimit']); } $domain = trim($results[$i]['domain']); try { \WHMCS\Database\Capsule::table('tblhosting') ->where('server', $params['serverid']) ->where('domain', $domain) ->update([ 'diskusage' => $diskusage, 'disklimit' => $disklimit, 'bwusage' => $bandwidth, 'bwlimit' => $bwlimit, 'lastupdate' => date('Y-m-d H:i:S'), ]); } catch (\Exception $e) { logActivity('ERROR: Unable to update server usage: ' . $e->getMessage()); } } } } function cwp7_ClientAreaCustomButtonArray ($params) { $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->getAccount($params['username']); if($response['status'] != 'OK') { logModuleCall( 'cwp7', __FUNCTION__, $params, 'debug', $response ); } if(count($response['result']['domains']) < 2) { return array( 'Neue Domaine' => 'newDomain', ); }; return array( 'Neue Domaine' => 'newDomain', 'Neue Subdomaine' => 'newSubdomain', ); } function cwp7_ClientAreaAllowedFunctions() { return array( "Enable SSL" => "enableSSL", "Renew SSL" => "renewSSL", "Set DNS" => "setDNS", "Confirm Enable SSL" => "enableSSLConfirm", "Confirm Renew SSL" => "renewSSLConfirm", "Confirm Set DNS" => "setDNSConfirm", "Info DNS" => "infoDNS", "Add Domain" => "addDomain", "Add Subdomain" => "addSubdomain", "Confirm Delete Domain" => "delDomainConfirm", "Delete Domain" => "delDomain", "Confirm Delete Subdomain" => "delSubdomainConfirm", "Delete Subdomain" => "delSubdomain", ); } function cwp7_newDomain($params) { return array( 'breadcrumb' => array( 'clientarea.php?action=productdetails&id=' . $params['serviceid'] . '&modop=custom&a=newDomain' => 'Neue Domaine', ), 'templatefile' => 'cwp7_add_domain', ); } function cwp7_addDomain($params) { if(!filter_var($_POST['d'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){ return 'Error: invalid domain name'; } $vars['user'] = $params['username']; $vars['name'] = $_POST['d']; $vars['type'] = 'domain'; $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->addDomain($vars); if($response['status'] != 'OK') { return 'Error: ' . $response['msj']; } return 'success'; } function cwp7_newSubdomain($params) { $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->getAccount($params['username']); if($response['status'] != 'OK') { logModuleCall( 'cwp7', __FUNCTION__, $params, 'debug', $response ); } $domains = $response['result']['domains']; $clientdomains = array(); foreach($domains as $domain){ if($domain['domain'] != $params['domain']) { array_push($clientdomains, $domain['domain']); } } return array( 'breadcrumb' => array( 'clientarea.php?action=productdetails&id=' . $params['serviceid'] . '&modop=custom&a=newSubdomain' => 'Neue Subdomaine', ), 'templatefile' => 'cwp7_add_subdomain', 'vars' => array( 'domains' => $clientdomains, ), ); } function cwp7_addSubdomain($params) { if(!filter_var($_POST['d'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){ return 'Error: invalid domain name'; } if(!filter_var($_POST['s'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){ return 'Error: invalid subdomain name'; } $vars['user'] = $params['username']; $vars['name'] = $_POST['s'] . '.' . $_POST['d']; $vars['type'] = 'subdomain'; $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->addDomain($vars); logModuleCall( 'cwp7', __FUNCTION__, $vars, 'debug addSubdomain', $response ); if($response['status'] != 'OK') { return 'Error: ' . $response['msj']; } return 'success'; } function cwp7_delDomainConfirm($params) { return array( 'templatefile' => 'cwp7_del_domain_confirm', 'vars' => array( 'deldomain' => $_POST['d'], ), ); } function cwp7_delDomain($params) { if(!filter_var($_POST['d'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){ return 'Error: invalid domain name'; } $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->getAccount($params['username']); if($response['status'] != 'OK') { logModuleCall( 'cwp7', __FUNCTION__, $params, 'debug', $response ); } $domains = $response['result']['domains']; $clientdomains = array(); foreach($domains as $domain){ if($domain['domain'] != $params['domain']) { array_push($clientdomains, $domain['domain']); } } if(!in_array($_POST['d'], $clientdomains)) { logModuleCall( 'cwp7', __FUNCTION__, $_POST, 'POST DATA VIOLATION', $params ); return 'Error: ' . $_POST['d'] . ' not in client domains'; } // do delete domain $vars['user'] = $params['username']; $vars['name'] = $_POST['d']; $vars['type'] = 'domain'; $response = $cwp7->deleteDomain($vars); if($response['status'] != 'OK') { return 'Error: ' . $response['msj']; } return 'success'; } function cwp7_delSubdomainConfirm($params) { return array( 'templatefile' => 'cwp7_del_subdomain_confirm', 'vars' => array( 'delsubdomain' => $_POST['d'], ), ); } function cwp7_delSubdomain($params) { if(!filter_var($_POST['d'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){ return 'Error: invalid domain name'; } $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->getAccount($params['username']); if($response['status'] != 'OK') { logModuleCall( 'cwp7', __FUNCTION__, $params, 'debug', $response ); } $subdomains = $response['result']['subdomins']; $clientsubdomains = array(); foreach($subdomains as $subdomain){ if($subdomain['domain'] != $params['domain']) { array_push($clientsubdomains, $subdomain['subdomain'] . "." . $subdomain['domain']); } } if(!in_array($_POST['d'], $clientsubdomains)) { logModuleCall( 'cwp7', __FUNCTION__, $_POST, 'POST DATA VIOLATION', $params ); return 'Error: ' . $_POST['d'] . ' not in client subdomains'; } // do delete subdomain $vars['user'] = $params['username']; $vars['name'] = $_POST['d']; $vars['type'] = 'subdomain'; $response = $cwp7->deleteDomain($vars); if($response['status'] != 'OK') { return 'Error: ' . $response['msj']; } return 'success'; } function cwp7_enableSSLConfirm($params) { return array( 'templatefile' => 'cwp7_enable_SSL_confirm', 'vars' => array( 'SSLdomain' => $_POST['d'], ), ); } function cwp7_enableSSL($params) { if(!filter_var($_POST['d'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){ return 'Error: invalid domain name'; } $vars['user'] = $params['username']; $vars['name'] = $_POST['d']; $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->addAutoSSL($vars); if($response['status'] != 'OK') { return 'Error: ' . $response['msj']; } return 'success'; } function cwp7_renewSSLConfirm($params) { return array( 'templatefile' => 'cwp7_renew_SSL_confirm', 'vars' => array( 'SSLdomain' => $_POST['d'], ), ); } function cwp7_renewSSL($params) { if(!filter_var($_POST['d'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){ return 'Error: invalid domain name'; } $vars['user'] = $params['username']; $vars['name'] = $_POST['d']; $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']); $response = $cwp7->updateAutoSSL($vars); if($response['status'] != 'OK') { return 'Error: ' . $response['msj']; } return 'success'; } function cwp7_setDNSConfirm($params) { if(isset($_POST['s'])){ return array( 'templatefile' => 'cwp7_set_DNS_confirm', 'vars' => array( 'DNSdomain' => $_POST['d'], 'DNSsubdomain' => $_POST['s'], ), ); } return array( 'templatefile' => 'cwp7_set_DNS_confirm', 'vars' => array( 'DNSdomain' => $_POST['d'], ), ); } function cwp7_setDNS($params) { if(!filter_var($_POST['d'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){ return 'Error: invalid domain name'; } $domainName = $_POST['d']; $zoneRecords = array(); if(isset($_POST['s'])){ if(!filter_var($_POST['s'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){ return 'Error: invalid subdomain name'; } $hostName = $_POST['s'] . '.' . $domainName . '.'; $newRecord = array( 'line' => $hostName.'|A|0', 'name' => $hostName, 'type' => 'A', 'class' => 'IN', 'data' => array( 'address' => $params['serverip'], ), ); array_push($zoneRecords, $newRecord); } else { $hostName = $domainName . '.'; $domainRecord = array( 'line' => $hostName.'|A|0', 'name' => $hostName, 'type' => 'A', 'class' => 'IN', 'data' => array( 'address' => $params['serverip'], ), ); array_push($zoneRecords, $domainRecord); $wwwRecord = array( 'line' => 'www'.$hostName.'|A|0', 'name' => 'www'.$hostName, 'type' => 'A', 'class' => 'IN', 'data' => array( 'address' => $params['serverip'], ), ); array_push($zoneRecords, $wwwRecord); } $zoneIDcollection = Capsule::table('dns_manager2_zone') ->select('id') ->where('name', '=', $domainName) ->get(); $zoneIDobj = $zoneIDcollection[0]; $zoneID = $zoneIDobj->{'id'}; if(!isset($zoneID)) { return 'Error: zone ID not found for domain ' . $domainName; } $dnsZone = localAPI('dnsmanager', array( 'dnsaction' => 'getZone', 'zone_id' => $zoneID)); foreach($dnsZone['data']->records as $record) { if(($record->name != $hostName && $record->name != 'www.'.$domainName . '.') || ($record->type != 'A' && $record->type != 'CNAME')) { array_push($zoneRecords, $record); }; } $result = localAPI('dnsmanager' , array( 'dnsaction' => 'updateZone', 'zone_id' => $zoneID, 'records' => $zoneRecords, ) ); if($result['result'] != 'success') { return 'Error: ' . $result['message']; } return 'success'; } function cwp7_infoDNS($params) { if(!filter_var($_POST['d'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){ return 'Error: invalid domain name'; } $cwp7nameserver = cwp7CheckSOA($_POST['d'],$params['configoption5'],$params['configoption6']); return array( 'templatefile' => 'cwp7_help_dns', 'vars' => array( 'infodomain' => $_POST['d'], 'cwp7nameserver' => $cwp7nameserver, ), ); } function cwp7CheckA($domain, $serverIP, $nameserverIP, $recurse = 0) { if($recurse > 3) { return false; } $nameserver = array($nameserverIP); $resolver = new Net_DNS2_Resolver(array('nameservers' => $nameserver)); try { $result = $resolver->query($domain, 'A'); } catch(Net_DNS2_Exception $e) { logModuleCall( 'cwp7', __FUNCTION__, $e, 'DNS lookup exception', $e->getMessage() ); } $domainA = $result->answer; if($domainA[0]->type == 'CNAME') { if(cwp7CheckA($domainA[0]->cname, $serverIP, $nameserverIP, $recurse++)) { return true; } } if($domainA[0]->type == 'A') { if($domainA[0]->address == $serverIP){ return true; } } } function cwp7CheckSOA($domain, $nameserverIP, $nameserverName ) { $nameserver = array($nameserverIP); $resolver = new Net_DNS2_Resolver(array('nameservers' => $nameserver)); try { $result = $resolver->query($domain, 'SOA'); } catch(Net_DNS2_Exception $e) { logModuleCall( 'cwp7', __FUNCTION__, $e, 'DNS lookup exception', $e->getMessage() ); return 'none'; } if($result->answer[0]->mname == $nameserverName) { return 'self'; } return $result->answer[0]->mname; }