cwp7.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681
  1. <?php
  2. /**
  3. * WHMCS cwp7 Provisioning Module
  4. *
  5. * Provisioning for User Account on the cwp7 Server
  6. *
  7. * @see https://centos-webpanel.com/
  8. * @copyright Copyright (c) Thurdata GmbH 2020
  9. * @license GPL
  10. */
  11. use WHMCS\Database\Capsule;
  12. require_once 'Net/DNS2.php';
  13. require_once 'Net/Whois.php';
  14. require_once(__DIR__ . '/api/cwp7/Admin.php');
  15. if (!defined('WHMCS')) {
  16. die('This file cannot be accessed directly');
  17. }
  18. //const NS1 = '10.200.22.100';
  19. //const NS1 = '9.9.9.10';
  20. const NS1 = '185.163.51.142';
  21. const NSTHURDATA = 'ns1.thurdata.ch';
  22. function cwp7_MetaData() {
  23. return array(
  24. 'DisplayName' => 'CentOS Web Panel Provisioning',
  25. 'APIVersion' => '1.2',
  26. 'DefaultNonSSLPort' => '2031',
  27. 'DefaultSSLPort' => '2031',
  28. 'RequiresServer' => true,
  29. 'ServiceSingleSignOnLabel' => 'Login to CWP7',
  30. 'AdminSingleSignOnLabel' => 'Login to CWP7 Admin'
  31. );
  32. }
  33. function cwp7_Testconnection($params) {
  34. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  35. $response = $cwp7->getServerType();
  36. if($response['status'] == 'OK') {
  37. return array(
  38. 'success' => true,
  39. 'error' => '',
  40. );
  41. }
  42. return array(
  43. 'success' => false,
  44. 'error' => $response['msj'],
  45. );
  46. }
  47. function cwp7_ConfigOptions() {
  48. $whmcs = App::self();
  49. $serverGroupID = $whmcs->get_req_var('servergroup');
  50. $serverIDObj = Capsule::table('tblservergroupsrel')
  51. ->select('serverid')
  52. ->where('groupid', '=', $serverGroupID)
  53. ->get();
  54. $serverIDs = array();
  55. foreach($serverIDObj as $serverID) {
  56. array_push($serverIDs, $serverID->serverid);
  57. }
  58. $server = Capsule::table('tblservers')
  59. ->select('hostname', 'accesshash')
  60. ->where('id', $serverIDs)
  61. ->where('active', '=', 1)
  62. ->first();
  63. $cwp7 = new cwp7_Admin($server->hostname, $server->accesshash);
  64. $cwp7Packages = $cwp7->getPackages();
  65. if($cwp7Packages['status'] != 'OK') {
  66. logModuleCall(
  67. 'cwp7',
  68. __FUNCTION__,
  69. $cwp7Packages['status'],
  70. 'Could not fetch packages',
  71. $cwp7Packages['msj']
  72. );
  73. return false;
  74. }
  75. $cwp7PackageNames = array();
  76. foreach($cwp7Packages['msj'] as $cwp7Package) {
  77. array_push($cwp7PackageNames, $cwp7Package['package_name']);
  78. }
  79. $configOptions = array();
  80. $configOptions['package'] = array(
  81. 'FriendlyName' => 'CWP7 Package',
  82. 'Type' => 'dropdown',
  83. 'Options' => implode(',', $cwp7PackageNames),
  84. 'Description' => 'Select CWP7 Package',
  85. );
  86. $configOptions['inode'] = array( "Type" => "text" , "Description" => "Max of inode", "Default" => "0",);
  87. $configOptions['nofile'] = array( "Type" => "text", "Description" => "Max of nofile", "Default" => "100",);
  88. $configOptions['nproc'] = array( "Type" => "text" , "Description" => "Nproc limit - 40 suggested", "Default" => "40",);
  89. return $configOptions;
  90. }
  91. function cwp7_CreateAccount($params) {
  92. $username = strtolower(substr($params['clientsdetails']['firstname'],0,2) . substr($params['clientsdetails']['lastname'],0,3)) . $params['serviceid'];
  93. $userdomain = $username . '.local';
  94. try {
  95. Capsule::table('tblhosting')
  96. ->where('id', '=', $params['serviceid'])
  97. ->update(
  98. array(
  99. 'username' => $username,
  100. 'domain' => $userdomain,
  101. )
  102. );
  103. } catch (\Exception $e) {
  104. logModuleCall(
  105. 'cwp7',
  106. __FUNCTION__,
  107. $params,
  108. 'Error: could save username & domain in database',
  109. $e->getMessage()
  110. );
  111. return 'Error: could save username & password in database';
  112. }
  113. if ($params["server"] == 1) {
  114. $data = array(
  115. 'package' => $params['configoption1'],
  116. 'domain' => $userdomain,
  117. 'user' => $username,
  118. 'pass' => $params['password'],
  119. 'email' => $params['clientsdetails']['email'],
  120. 'inode' => $params["configoption2"],
  121. 'nofile' => $params["configoption3"],
  122. 'nproc' => $params["configoption4"],
  123. 'server_ips'=>$params["serverip"]
  124. );
  125. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  126. $response = $cwp7->createAccount($data);
  127. }
  128. if($response['status'] != 'OK') {
  129. return 'Error: ' . $response['msj'];
  130. }
  131. return 'success';
  132. }
  133. function cwp7_TerminateAccount($params) {
  134. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  135. $response = $cwp7->deleteAccount(array('user' => $params['username'], 'email' => $params['clientsdetails']['email']));
  136. if($response['status'] != 'OK') {
  137. return 'Error: ' . $response['msj'];
  138. }
  139. return 'success';
  140. }
  141. function cwp7_SuspendAccount($params) {
  142. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  143. $response = $cwp7->suspendAccount($params['username']);
  144. if($response['status'] != 'OK') {
  145. return 'Error: ' . $response['msj'];
  146. }
  147. return 'success';
  148. }
  149. function cwp7_UnsuspendAccount($params) {
  150. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  151. $response = $cwp7->unsuspendAccount($params['username']);
  152. if($response['status'] != 'OK') {
  153. return 'Error: ' . $response['msj'];
  154. }
  155. return 'success';
  156. }
  157. function cwp7_ClientArea($params){
  158. $clientInfo = array('moduleclientarea' => '1');
  159. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  160. $response = $cwp7->getAutoSSL($params['username']);
  161. if($response['status'] == 'OK') {
  162. $sslSites = array();
  163. foreach($response['msj'] as $sslSite) {
  164. $sslSites[$sslSite['ssl']] = array(
  165. 'auotssl' => $sslSite['autossl'],
  166. 'expire' => $sslSite['exp'],
  167. );
  168. }
  169. }
  170. $response = $cwp7->getAccount($params['username']);
  171. if($response['status'] != 'OK') {
  172. logModuleCall(
  173. 'cwp7',
  174. __FUNCTION__,
  175. $params,
  176. 'debug',
  177. $response
  178. );
  179. }
  180. $domains = $response['result']['domains'];
  181. $subDomains = $response['result']['subdomins'];
  182. $clientInfo['domains'] = array();
  183. foreach($domains as $domain) {
  184. if($domain['path'] == '/home/' . $params['username'] . '/public_html') {
  185. $clientInfo['mgmtDomain'] = $domain['domain'];
  186. $clientInfo['mgmtEmail'] = $domain['email'];
  187. } else {
  188. if(array_key_exists($domain['domain'], $sslSites)) {
  189. $domain['ssl'] = 1;
  190. $domain['sslexpire'] = $sslSites[$domain['domain']]['expire'];
  191. $domain['autossl'] = $sslSites[$domain['domain']]['auotssl'];
  192. }
  193. if(cwp7CheckA($domain['domain'],$params['serverip']) == 1) {
  194. $domain['DNS'] = 1;
  195. }
  196. $domain['domainNS'] = cwp7CheckSOA($domain['domain']);
  197. $domain['subdomains'] = array();
  198. foreach($subDomains as $subDomain) {
  199. if($subDomain['domain'] == $domain['domain']) {
  200. $subFQDN = $subDomain['subdomain'] . '.' . $subDomain['domain'];
  201. if(array_key_exists($subFQDN, $sslSites)) {
  202. $subDomain['ssl'] = 1;
  203. $subDomain['sslexpire'] = $sslSites[$subFQDN]['expire'];
  204. $subDomain['autossl'] = $sslSites[$subFQDN]['auotssl'];
  205. } else {
  206. unset($subDomain['ssl']);
  207. unset($subDomain['sslexpire']);
  208. unset($subDomain['autossl']);
  209. }
  210. if(cwp7CheckA($subFQDN,$params['serverip']) == 1) {
  211. $subDomain['DNS'] = 1;
  212. } else {
  213. unset($subDomain['DNS']);
  214. }
  215. array_push($domain['subdomains'], $subDomain);
  216. }
  217. }
  218. array_push($clientInfo['domains'], $domain);
  219. }
  220. }
  221. return array(
  222. 'tabOverviewReplacementTemplate' => 'clientarea',
  223. 'vars' => $clientInfo,
  224. );
  225. }
  226. function cwp7_ServiceSingleSignOn($params) {
  227. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  228. $response = $cwp7->getLoginLink($params['username']);
  229. if($response['status'] == 'OK') {
  230. $link = $response['msj']['details'];
  231. $linkautologin = $link[0]['url'];
  232. return array(
  233. 'success' => true,
  234. 'redirectTo' => $linkautologin,
  235. );
  236. } else {
  237. return array(
  238. 'success' => false,
  239. 'redirectTo' => '',
  240. );
  241. }
  242. }
  243. function cwp7_ChangePassword($params){
  244. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  245. $response = $cwp7->changePass(array('user' => $params['username'], 'password' => $params['password']));
  246. if($response['status'] != 'OK') {
  247. return 'Error: ' . $response['msj'];
  248. }
  249. return 'success';
  250. }
  251. function cwp7_ChangePackage($params){
  252. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  253. $response = $cwp7->modifyAccount(array('user' => $params['username'], 'email' => $params['clientdetails']['email'], 'package' => $params['configoption1']));
  254. if($response['status'] != 'OK') {
  255. return 'Error: ' . $response['msj'];
  256. }
  257. return 'success';
  258. }
  259. function cwp7_UsageUpdate($params) {
  260. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  261. $response = $cwp7->getAllAccounts();
  262. if($response['status'] == 'OK'){
  263. $results = $response['msj'];
  264. for($i = 0; $i < count($results); $i++){
  265. if($results[$i]['diskusage'] == '') {
  266. $diskusage = 0;
  267. } else {
  268. $diskusage = trim($results[$i]['diskusage']);
  269. }
  270. if($results[$i]['disklimit'] == '') {
  271. $disklimit = 0;
  272. } else {
  273. $disklimit = trim($results[$i]['disklimit']);
  274. }
  275. if($results[$i]['bandwidth'] == '') {
  276. $bandwidth = 0;
  277. } else {
  278. $bandwidth =trim($results[$i]['bandwidth']);
  279. }
  280. if($results[$i]['bwlimit'] == '') {
  281. $bwlimit = 0;
  282. } else {
  283. $bwlimit = trim($results[$i]['bwlimit']);
  284. }
  285. $domain = trim($results[$i]['domain']);
  286. try {
  287. \WHMCS\Database\Capsule::table('tblhosting')
  288. ->where('server', $params['serverid'])
  289. ->where('domain', $domain)
  290. ->update([
  291. 'diskusage' => $diskusage,
  292. 'disklimit' => $disklimit,
  293. 'bwusage' => $bandwidth,
  294. 'bwlimit' => $bwlimit,
  295. 'lastupdate' => date('Y-m-d H:i:S'),
  296. ]);
  297. } catch (\Exception $e) {
  298. logActivity('ERROR: Unable to update server usage: ' . $e->getMessage());
  299. }
  300. }
  301. }
  302. }
  303. function cwp7_ClientAreaCustomButtonArray ($params)
  304. {
  305. return array(
  306. 'Neue Domaine' => 'newDomain',
  307. 'Neue Subdomaine' => 'newSubdomain',
  308. );
  309. }
  310. function cwp7_ClientAreaAllowedFunctions() {
  311. return array(
  312. "Enable SSL" => "enableSSL",
  313. "Renew SSL" => "renewSSL",
  314. "Set DNS" => "setDNS",
  315. "Info DNS" => "infoDNS",
  316. "Add Domain" => "addDomain",
  317. "Add Subdomain" => "addSubdomain",
  318. "Confirm Delete Domain" => "delDomainConfirm",
  319. "Delete Domain" => "delDomain",
  320. "Confirm Delete Subdomain" => "delSubdomainConfirm",
  321. "Delete Subdomain" => "delSubdomain",
  322. );
  323. }
  324. function cwp7_newDomain($params) {
  325. return array(
  326. 'breadcrumb' => array(
  327. 'clientarea.php?action=productdetails&id=' . $params['serviceid'] . '&modop=custom&a=newDomain' => 'Neue Domaine',
  328. ),
  329. 'templatefile' => 'cwp7_add_domain',
  330. );
  331. }
  332. function cwp7_addDomain($params) {
  333. if(!filter_var($_POST['d'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){
  334. return 'Error: invalid domain name';
  335. }
  336. $vars['user'] = $params['username'];
  337. $vars['name'] = $_POST['d'];
  338. $vars['type'] = 'domain';
  339. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  340. $response = $cwp7->addDomain($vars);
  341. if($response['status'] != 'OK') {
  342. return 'Error: ' . $response['msj'];
  343. }
  344. return 'success';
  345. }
  346. function cwp7_newSubdomain($params) {
  347. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  348. $response = $cwp7->getAccount($params['username']);
  349. if($response['status'] != 'OK') {
  350. logModuleCall(
  351. 'cwp7',
  352. __FUNCTION__,
  353. $params,
  354. 'debug',
  355. $response
  356. );
  357. }
  358. $domains = $response['result']['domains'];
  359. $clientdomains = array();
  360. foreach($domains as $domain){
  361. if($domain['domain'] != $params['domain']) {
  362. array_push($clientdomains, $domain['domain']);
  363. }
  364. }
  365. return array(
  366. 'breadcrumb' => array(
  367. 'clientarea.php?action=productdetails&id=' . $params['serviceid'] . '&modop=custom&a=newSubdomain' => 'Neue Subdomaine',
  368. ),
  369. 'templatefile' => 'cwp7_add_subdomain',
  370. 'vars' => array(
  371. 'domains' => $clientdomains,
  372. ),
  373. );
  374. }
  375. function cwp7_addSubdomain($params) {
  376. if(!filter_var($_POST['d'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){
  377. return 'Error: invalid domain name';
  378. }
  379. if(!filter_var($_POST['s'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){
  380. return 'Error: invalid subdomain name';
  381. }
  382. $vars['user'] = $params['username'];
  383. $vars['name'] = $_POST['s'] . '.' . $_POST['d'];
  384. $vars['type'] = 'subdomain';
  385. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  386. $response = $cwp7->addDomain($vars);
  387. logModuleCall(
  388. 'cwp7',
  389. __FUNCTION__,
  390. $vars,
  391. 'debug addSubdomain',
  392. $response
  393. );
  394. if($response['status'] != 'OK') {
  395. return 'Error: ' . $response['msj'];
  396. }
  397. return 'success';
  398. }
  399. function cwp7_delDomainConfirm($params) {
  400. return array(
  401. 'templatefile' => 'cwp7_del_domain_confirm',
  402. 'vars' => array(
  403. 'deldomain' => $_POST['d'],
  404. ),
  405. );
  406. }
  407. function cwp7_delDomain($params) {
  408. if(!filter_var($_POST['d'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){
  409. return 'Error: invalid domain name';
  410. }
  411. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  412. $response = $cwp7->getAccount($params['username']);
  413. if($response['status'] != 'OK') {
  414. logModuleCall(
  415. 'cwp7',
  416. __FUNCTION__,
  417. $params,
  418. 'debug',
  419. $response
  420. );
  421. }
  422. $domains = $response['result']['domains'];
  423. $clientdomains = array();
  424. foreach($domains as $domain){
  425. if($domain['domain'] != $params['domain']) {
  426. array_push($clientdomains, $domain['domain']);
  427. }
  428. }
  429. if(!in_array($_POST['d'], $clientdomains)) {
  430. logModuleCall(
  431. 'cwp7',
  432. __FUNCTION__,
  433. $_POST,
  434. 'POST DATA VIOLATION',
  435. $params
  436. );
  437. return 'Error: ' . $_POST['d'] . ' not in client domains';
  438. }
  439. // do delete domain
  440. $vars['user'] = $params['username'];
  441. $vars['name'] = $_POST['d'];
  442. $vars['type'] = 'domain';
  443. $response = $cwp7->deleteDomain($vars);
  444. if($response['status'] != 'OK') {
  445. return 'Error: ' . $response['msj'];
  446. }
  447. return 'success';
  448. }
  449. function cwp7_delSubdomainConfirm($params) {
  450. return array(
  451. 'templatefile' => 'cwp7_del_subdomain_confirm',
  452. 'vars' => array(
  453. 'delsubdomain' => $_POST['d'],
  454. ),
  455. );
  456. }
  457. function cwp7_delSubdomain($params) {
  458. if(!filter_var($_POST['d'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){
  459. return 'Error: invalid domain name';
  460. }
  461. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  462. $response = $cwp7->getAccount($params['username']);
  463. if($response['status'] != 'OK') {
  464. logModuleCall(
  465. 'cwp7',
  466. __FUNCTION__,
  467. $params,
  468. 'debug',
  469. $response
  470. );
  471. }
  472. $subdomains = $response['result']['subdomins'];
  473. $clientsubdomains = array();
  474. foreach($subdomains as $subdomain){
  475. if($subdomain['domain'] != $params['domain']) {
  476. array_push($clientsubdomains, $subdomain['subdomain'] . "." . $subdomain['domain']);
  477. }
  478. }
  479. if(!in_array($_POST['d'], $clientsubdomains)) {
  480. logModuleCall(
  481. 'cwp7',
  482. __FUNCTION__,
  483. $_POST,
  484. 'POST DATA VIOLATION',
  485. $params
  486. );
  487. return 'Error: ' . $_POST['d'] . ' not in client subdomains';
  488. }
  489. // do delete subdomain
  490. $vars['user'] = $params['username'];
  491. $vars['name'] = $_POST['d'];
  492. $vars['type'] = 'subdomain';
  493. $response = $cwp7->deleteDomain($vars);
  494. if($response['status'] != 'OK') {
  495. return 'Error: ' . $response['msj'];
  496. }
  497. return 'success';
  498. }
  499. function cwp7_enableSSL($params) {
  500. if(!filter_var($_POST['d'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){
  501. return 'Error: invalid domain name';
  502. }
  503. $vars['user'] = $params['username'];
  504. $vars['name'] = $_POST['d'];
  505. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  506. $response = $cwp7->addAutoSSL($vars);
  507. if($response['status'] != 'OK') {
  508. return 'Error: ' . $response['msj'];
  509. }
  510. return 'success';
  511. }
  512. function cwp7_renewSSL($params) {
  513. if(!filter_var($_POST['d'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){
  514. return 'Error: invalid domain name';
  515. }
  516. $vars['user'] = $params['username'];
  517. $vars['name'] = $_POST['d'];
  518. $cwp7 = new cwp7_Admin($params['serverhostname'], $params['serveraccesshash']);
  519. $response = $cwp7->updateAutoSSL($vars);
  520. logModuleCall(
  521. 'cwp7',
  522. __FUNCTION__,
  523. $_POST,
  524. 'debug custom',
  525. $response
  526. );
  527. if($response['status'] != 'OK') {
  528. return 'Error: ' . $response['msj'];
  529. }
  530. return 'success';
  531. }
  532. function cwp7_setDNS($params) {
  533. if(!filter_var($_POST['d'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){
  534. return 'Error: invalid domain name';
  535. }
  536. $domainName = $_POST['d'];
  537. if(isset($_POST['s'])){
  538. if(!filter_var($_POST['s'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){
  539. return 'Error: invalid domain name';
  540. }
  541. $hostName = $_POST['s'] . '.' . $domainName . '.';
  542. } else {
  543. $hostName = $domainName . '.';
  544. }
  545. $zoneIDcollection = Capsule::table('dns_manager2_zone')
  546. ->select('id')
  547. ->where('name', '=', $domainName)
  548. ->get();
  549. $zoneIDobj = $zoneIDcollection[0];
  550. $zoneID = $zoneIDobj->{'id'};
  551. if(!isset($zoneID)) {
  552. return 'Error: zone ID not found for domain ' . $domainName;
  553. }
  554. $dnsZone = localAPI('dnsmanager', array( 'dnsaction' => 'getZone', 'zone_id' => $zoneID));
  555. $zoneRecords = array();
  556. $newRecord = array(
  557. 'line' => $hostName.'|A|0',
  558. 'name' => $hostName,
  559. 'type' => 'A',
  560. 'class' => 'IN',
  561. 'data' => array(
  562. 'address' => $params['serverip'],
  563. ),
  564. );
  565. array_push($zoneRecords, $newRecord);
  566. foreach($dnsZone['data']->records as $record) {
  567. if($record->name != $hostName || ($record->type != 'A' && $record->type != 'CNAME')) {
  568. array_push($zoneRecords, $record);
  569. };
  570. }
  571. $result = localAPI('dnsmanager' ,
  572. array(
  573. 'dnsaction' => 'updateZone',
  574. 'zone_id' => $zoneID,
  575. 'records' => $zoneRecords,
  576. )
  577. );
  578. if($result['result'] != 'success') {
  579. return 'Error: ' . $result['message'];
  580. }
  581. return 'success';
  582. }
  583. function cwp7_infoDNS($params) {
  584. if(!filter_var($_POST['d'], FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)){
  585. return 'Error: invalid domain name';
  586. }
  587. $cwp7nameserver = cwp7CheckSOA($_POST['d']);
  588. return array(
  589. 'templatefile' => 'cwp7_help_dns',
  590. 'vars' => array(
  591. 'infodomain' => $_POST['d'],
  592. 'cwp7nameserver' => $cwp7nameserver,
  593. ),
  594. );
  595. }
  596. function cwp7CheckA($domain, $serverIP, $recurse = 0) {
  597. if($recurse > 3) {
  598. return false;
  599. }
  600. $nameserver = array(NS1);
  601. $resolver = new Net_DNS2_Resolver(array('nameservers' => $nameserver));
  602. try {
  603. $result = $resolver->query($domain, 'A');
  604. } catch(Net_DNS2_Exception $e) {
  605. logModuleCall(
  606. 'cwp7',
  607. __FUNCTION__,
  608. $e,
  609. 'DNS lookup exception',
  610. $e->getMessage()
  611. );
  612. }
  613. $domainA = $result->answer;
  614. if($domainA[0]->type == 'CNAME') {
  615. if(cwp7CheckA($domainA[0]->cname, $serverIP, $recurse++)) {
  616. return true;
  617. }
  618. }
  619. if($domainA[0]->type == 'A') {
  620. if($domainA[0]->address == $serverIP){
  621. return true;
  622. }
  623. }
  624. }
  625. function cwp7CheckSOA($domain) {
  626. $nameserver = array(NS1);
  627. $resolver = new Net_DNS2_Resolver(array('nameservers' => $nameserver));
  628. try {
  629. $result = $resolver->query($domain, 'SOA');
  630. } catch(Net_DNS2_Exception $e) {
  631. logModuleCall(
  632. 'cwp7',
  633. __FUNCTION__,
  634. $e,
  635. 'DNS lookup exception',
  636. $e->getMessage()
  637. );
  638. return 'none';
  639. }
  640. if($result->answer[0]->mname == NSTHURDATA) {
  641. return 'self';
  642. }
  643. return $result->answer[0]->mname;
  644. }