dnsmanager.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?php
  2. use \MGModule\DNSManager2\loader;
  3. //use \MGModule\DNSManager2\mgLibs\custom\reverse\ReverseDNS;
  4. //use \MGModule\DNSManager2\models\custom\reverse\Repository;
  5. //use \MGModule\DNSManager2\models\custom\server\Repository as Repository2;
  6. if (!defined("WHMCS")) {
  7. exit("This file cannot be accessed directly");
  8. }
  9. $addon_path = dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'modules'
  10. . DIRECTORY_SEPARATOR . 'addons' . DIRECTORY_SEPARATOR . 'DNSManager2';
  11. if(!class_exists('\MGModule\DNSManager2\loader')) {
  12. include_once $addon_path . DIRECTORY_SEPARATOR . 'loader.php';
  13. }
  14. $loader = new loader();
  15. MGModule\DNSManager2\addon::I(true,array());
  16. try {
  17. #MGLICENSE_CHECK_THROW_EXCEPTION#
  18. } catch (Exception $e) {
  19. $apiresults = array('result' => 'error', 'message' => 'Check your DNS Manager license');
  20. return ;
  21. }
  22. //error_reporting( E_ALL );
  23. //ini_set( 'display_errors', 1 );
  24. $data = $_REQUEST;
  25. if(empty($data['dnsaction'])) {
  26. $apiresults = array('result' => 'error', 'message' => 'DNS Action is required');
  27. return ;
  28. }
  29. try {
  30. $found = false;
  31. $method = $data['dnsaction'];
  32. $apiNamespace = '\MGModule\DNSManager2\mgLibs\ModuleAPI\\';
  33. $apiReflection = new ReflectionClass($apiNamespace . 'Api');
  34. foreach ($apiReflection->getMethods() as $methodObj) {
  35. $apiMethod = $methodObj->getName();
  36. if( strpos( $method, $apiMethod ) !== false )
  37. {
  38. try {
  39. # "try" construction is inside of "foreach", to prevent error and continue search
  40. $objName = preg_replace('/'.$apiMethod.'/', '', $method);
  41. $fullClassName = $apiNamespace . $objName;
  42. $apiObject = new $fullClassName($data);
  43. $apiResult = $apiObject->$apiMethod();
  44. $errors = $apiObject->getErrors();
  45. if(!empty($errors))
  46. {
  47. $apiresults = array('result' => 'error', 'message' => $errors[0]);
  48. return;
  49. }
  50. $found = true;
  51. } catch (\Exception $ex) {
  52. $trace = $ex->getTrace();
  53. if(!strpos($trace[0]['class'], '\loader'))
  54. {
  55. if( function_exists( 'logModuleCall' ))
  56. {
  57. \logModuleCall('DNS Manager', 'API('.$method.')', $data, $ex->getTrace());
  58. }
  59. $apiresults = array('result' => 'error', 'message' => $ex->getMessage());
  60. return ;
  61. }
  62. }
  63. }
  64. }
  65. if($found)
  66. {
  67. $apiresults = array('result' => 'success', 'data' => $apiResult);
  68. }else
  69. {
  70. $apiresults = array('result' => 'error', 'message' => 'DNS API Method is not found');
  71. }
  72. return;
  73. /*
  74. * UNUSED (not removed now, in case of neccesity)
  75. */
  76. switch ($action) {
  77. case 'getServerList':
  78. $out = array();
  79. $servers = Repository2::factory()->get();
  80. foreach($servers as $server) {
  81. $out[] = array(
  82. 'id' => $server->id,
  83. 'name' => $server->name,
  84. 'module' => $server->module,
  85. 'status' => $server->status,
  86. );
  87. }
  88. $apiresults = array('result' => 'success', 'servers' => json_encode($out));
  89. break;
  90. case 'saveRDNS':
  91. $reverse = Repository::factory()
  92. ->byServerID($data['params']['serverid'])
  93. ->byIP($data['params']['ip'])
  94. ->one();
  95. if($reverse == false) {
  96. $helper = new ReverseDNS();
  97. $helper->setClientID($data['params']['clientid']?:'0');
  98. $helper->setIP($data['params']['ip']);
  99. $helper->setServer($data['params']['serverid']);
  100. $helper->setTTL($data['params']['ttl']);
  101. $helper->setDomain($data['params']['rdata']);
  102. $helper->create();
  103. } else {
  104. $helper = new ReverseDNS($reverse);
  105. $helper->update();
  106. }
  107. $apiresults = array('result' => 'success');
  108. break;
  109. case 'removeRDNS':
  110. $reverse = Repository::factory()
  111. ->byServerID($data['params']['serverid'])
  112. ->byIP($data['params']['ip'])
  113. ->one();
  114. if($reverse != false) {
  115. $helper = new ReverseDNS($reverse);
  116. $helper->remove();
  117. $apiresults = array('result' => 'success');
  118. } else {
  119. $apiresults = array('result' => 'error', 'message' => 'Reverse not found in database');
  120. }
  121. break;
  122. default :
  123. $apiresults = array('result' => 'error', 'message' => 'Unknown action');
  124. break;
  125. }
  126. } catch(Whoops\Exception\ErrorException $e) {
  127. $apiresults = array('result' => 'error', 'message' => $e->getMessage());
  128. } catch(Exception $e) {
  129. $apiresults = array('result' => 'error', 'message' => $e->getMessage());
  130. }