ptr_migration.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. <?php
  2. use \MGModule\DNSManager2 as main;
  3. define('DS', DIRECTORY_SEPARATOR);
  4. define('WHMCS_MAIN_DIR', substr(dirname(__FILE__),0, strpos(dirname(__FILE__),'modules'.DS.'addons')));
  5. define('ADDON_DIR', substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), DS.'cron')));
  6. define('IS_CLI', php_sapi_name() == 'cli' || (is_numeric($_SERVER['argc']) && $_SERVER['argc'] > 0));
  7. require_once WHMCS_MAIN_DIR.DS.'init.php';
  8. require_once ADDON_DIR.DS.'loader.php';
  9. $loader = new \MGModule\DNSManager2\loader();
  10. main\addon::I(true);
  11. if(!function_exists('dns_echo')) {
  12. function dns_echo($string = '', $error = false) {
  13. if(IS_CLI) {
  14. echo ($error? 'Error: ' : '') . strip_tags($string) . "\r\n";
  15. } else {
  16. echo ($error?'<span style="color: red"><b>Migration failed: <b>':'<span>') . $string . '</span></br>';
  17. }
  18. }
  19. }
  20. $migrate = false;
  21. if( isset($_GET['proceed']) || (isset($argv[1]) && $argv[1] == 'proceed')) {
  22. $migrate = true;
  23. }
  24. $whmcs_path = dirname(dirname(dirname(dirname(__DIR__))));
  25. $path = $whmcs_path . DS . 'templates' . DS . 'dns_templates' . DS . 'dns_controller.php';
  26. if(!file_exists($path)) {
  27. dns_echo('I cant find old DNS Manager For WHMCS under ' . $path, true);
  28. die();
  29. }
  30. $path2 = dirname(dirname(__DIR__)) . DS . 'dns_manager' . DS . 'dns_manager.php';
  31. if(!file_exists($path2)) {
  32. dns_echo('I cant find old DNS Manager For WHMCS under ' . $path2, true);
  33. die();
  34. }
  35. $path3 = $whmcs_path . DS . 'includes' . DS . 'dns_core.php';
  36. if(!file_exists($path3)) {
  37. dns_echo('I cant find old DNS Manager For WHMCS under ' . $path3, true);
  38. die();
  39. }
  40. if(!function_exists('dns_controller_listPtrRecords')) {
  41. require_once $path;
  42. dns_echo('DNS file loaded ('.$path. ')');
  43. }
  44. if(!function_exists('dns_manager_isMultiservers')) {
  45. require_once $path2;
  46. dns_echo('DNS file loaded ('.$path2. ')');
  47. }
  48. if(!class_exists('dns_core')) {
  49. require_once $path3;
  50. dns_echo('DNS file loaded ('.$path3. ')');
  51. }
  52. if(!function_exists('dns_controller_listPtrRecords') || !function_exists('dns_manager_isMultiservers') ) {
  53. dns_echo('Migration requires newest version of old DNS Manager For WHMCS', true);
  54. die();
  55. }
  56. if(!$migrate) {
  57. dns_echo();
  58. $script = __FILE__;
  59. if(IS_CLI) {
  60. dns_echo("If you want to proceed then run this command: 'php -q $script proceed 1'");
  61. die();
  62. } else {
  63. dns_echo('<form method="get"><input type="hidden" name="proceed" value="1" /><button type="submit">If you want to proceed click this button</button></form>');
  64. dns_echo("Or run this command in command line 'php -q $script proceed 1'");
  65. }
  66. die();
  67. }
  68. $multi = dns_manager_isMultiservers();
  69. $avaiable_submodules = main\mgLibs\custom\dns\Core::getAvailableSubmodules();
  70. $servers_map = array( //jesli tu nie ma to używa tej samej nazwy (sprawdzajac czy istnieje)
  71. 'dns_4psa' => 'DNS4PSA',
  72. 'parallels_plesk' => 'Plesk',
  73. 'cpanel' => 'CPanelOldApi',
  74. 'powerdns_hosted' => 'PowerDNSHosted',
  75. );
  76. if(!$multi) {
  77. $module = dns_manager_getWHMCSconfig('mg_dns_currentmodule');
  78. $server_config = unserialize(dns_manager_getWHMCSconfig("mg_dns_{$module}_config"));
  79. $config = unserialize(dns_manager_getWHMCSconfig('dns_processing'));
  80. $nameservers = unserialize(dns_manager_getWHMCSconfig('mg_dns_nameservers'));
  81. isset($server_config['defaultIP'])?$server_config['default_ip']:'';
  82. if(isset($servers_map[$module])) {
  83. $module = $servers_map[$module];
  84. }
  85. foreach($avaiable_submodules as $sub) {
  86. if(strtolower($sub) == strtolower($module)) {
  87. $module = $sub;
  88. }
  89. }
  90. if(empty($module)) {
  91. die();
  92. }
  93. $module_fields = main\mgLibs\custom\CoreManager::getConfiguration($module);
  94. $new_server_config = array();
  95. foreach($module_fields as $name => $arr)
  96. {
  97. if($name == 'default_ip'){
  98. $new_server_config['default_ip'] = $server_config['defaultIP'];
  99. }else if(isset($arr['type']) && $arr['type'] == 'password' && isset($server_config[$name])) {
  100. $new_server_config[$name] = decrypt($server_config[$name]);
  101. } else if(isset($arr['type']) && $arr['type'] == 'yesno') {
  102. $new_server_config[$name] = isset($server_config[$name]) && $server_config[$name]==1?'on':'';
  103. } else{
  104. $new_server_config[$name] = $server_config[$name];
  105. }
  106. }
  107. $server_setting = main\models\custom\server\setting\Repository::factory()
  108. ->byKey(main\models\custom\server\setting\ServerSettingEnum::MODULE_CONFIGURATION)
  109. ->byValue(serialize($new_server_config))
  110. ->one();
  111. if($server_setting === false) {
  112. $server_setting = main\models\custom\server\Repository::factory()->byModule($module)->one();
  113. if($server_setting === false) {
  114. dns_echo('Cannot find rDNS server', true);
  115. die();
  116. }
  117. }
  118. $server = $server_setting->getServer();
  119. } else {
  120. $data = main\mgLibs\MySQL\query::select(array('*'), 'dns_manager_servers',array('userdns' => 1))->fetch();
  121. if($data === false) {
  122. dns_echo('There is no server with reverse DNS enabled');
  123. die();
  124. }
  125. $server_config = unserialize($data['config']);
  126. $module = key($server_config);
  127. $nameservers = unserialize(main\mgLibs\MySQL\query::select(array('nameservers'), 'dns_manager_server_ns', array('serverid' => $data['id']))->fetchColumn())?:array();
  128. $default_records = main\mgLibs\MySQL\query::select(array('*'), 'mg_dns_default', array('serverid' => $data['id']))->fetchAll();
  129. if(isset($servers_map[$module])) { //ctrl + c -> ctrl + v bo rilis
  130. $module = $servers_map[$module];
  131. }
  132. foreach($avaiable_submodules as $sub) {
  133. if(strtolower($sub) == strtolower($module)) {
  134. $module = $sub;
  135. }
  136. }
  137. if(empty($module))
  138. {
  139. die();
  140. }
  141. $module_fields = main\mgLibs\custom\CoreManager::getConfiguration($module);
  142. $new_server_config = array();
  143. foreach($module_fields as $name => $arr)
  144. {
  145. if($name == 'default_ip'){
  146. $new_server_config['default_ip'] = $server_config['defaultIP'];
  147. }else if(isset($arr['type']) && $arr['type'] == 'password' && isset($server_config[$name])) {
  148. $new_server_config[$name] = decrypt($server_config[$name]);
  149. } else if(isset($arr['type']) && $arr['type'] == 'yesno') {
  150. $new_server_config[$name] = isset($server_config[$name]) && $server_config[$name]==1?'on':'';
  151. } else{
  152. $new_server_config[$name] = $server_config[$name];
  153. }
  154. }
  155. $server_setting = main\models\custom\server\setting\Repository::factory()
  156. ->byKey(main\models\custom\server\setting\ServerSettingEnum::MODULE_CONFIGURATION)
  157. ->byValue(serialize($new_server_config))
  158. ->one();
  159. if($server_setting === false) {
  160. $server_setting = main\models\custom\server\Repository::factory()->byModule($module)->one();
  161. if($server_setting === false) {
  162. dns_echo('Cannot find rDNS server', true);
  163. die();
  164. }
  165. }
  166. $server = $server_setting->getServer();
  167. }
  168. //===========================================================================================================
  169. //===========================================MIGRATE RDNS====================================================
  170. //===========================================================================================================
  171. $clients = main\mgLibs\MySQL\query::select(array('id'), 'tblclients');
  172. while($client = $clients->fetch()) {
  173. $_SESSION['uid'] = $client['id'];
  174. $records = dns_controller_listPtrRecords(true);
  175. foreach($records as $record) {
  176. if(strpos($record['zone'], 'ip6.arpa') !== false) {
  177. } else { //ipv4
  178. $domain = new main\mgLibs\custom\helpers\DomainHelper($record['value']);
  179. try {
  180. $zone = main\models\custom\zone\Repository::factory()->byServerID($server->id)->byName($domain->getDomainWithTLD())->one();
  181. if($zone === false) {
  182. try {
  183. $zone = new main\models\custom\zone\Zone();
  184. $zone->clientid = $client['id'];
  185. $zone->ip = $record['ip'];
  186. $zone->name = $domain->getDomainWithTLD();
  187. $zone->relid = 0;
  188. $zone->type = 0;
  189. $zone->status = 0;
  190. $zone->serverid = $server->id;
  191. $zone->save();
  192. } catch(Exception $exc) {
  193. dns_echo("ERROR: Something went wrong during creation of {$domain->getDomainWithTLD()} zone. Message: {$exc->getMessage()}");
  194. continue;
  195. }
  196. $module = $server->getModule();
  197. $module->setDomain($domain->getDomainWithTLD());
  198. try {
  199. if(!$module->zoneExists()) {
  200. $module->activateZone();
  201. $zone->setThatExist();
  202. }
  203. } catch(Exception $exc) {
  204. dns_echo('WARNING: Cannot activate zone ' . $domain->getDomainWithTLD() . ". Reason: {$exc->getMessage()}");
  205. }
  206. } else {
  207. if($zone->clientid != $client['id']) {
  208. dns_echo("ERROR: Client with id {$client['id']} do not own zone " . $domain->getDomainWithTLD() . ". Currentlly it is owned by client with id {$zone->clientid}");
  209. continue;
  210. }
  211. }
  212. $reverse = new main\models\custom\reverse\Reverse();
  213. $reverse->serverid = $server->id;
  214. $reverse->from = $domain->getDomainWithTLD();
  215. $reverse->ip = $record['ip'];
  216. $reverse->name = $record['zone'];
  217. $reverse->sub = $domain->getSubdomain();
  218. $reverse->ttl = '14400';
  219. $reverse->clientid = $zone->clientid;
  220. $reverse->save();
  221. } catch(Exception $e) {
  222. dns_echo("ERROR: Zone {$domain->getDomainWithTLD()} was created and added to user account but there was an error during migrating ptr records. Error Message: {$e->getMessage()} ");
  223. continue;
  224. }
  225. }
  226. }
  227. }
  228. dns_echo('DONE');