DNS.class.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. <?php
  2. /**
  3. * DNS
  4. *
  5. * TODO: Too many "if" statements. Code should be refactored in order to not use a lot of "if" conditions
  6. *
  7. * @author vesta, http://vestacp.com/
  8. * @author Dmitry Malishev <dima.malishev@gmail.com>
  9. * @author Dmitry Naumov-Socolov <naumov.socolov@gmail.com>
  10. * @copyright vesta 2010-2011
  11. */
  12. class DNS extends AjaxHandler
  13. {
  14. /**
  15. * Get DNS entries
  16. *
  17. * @param Request $request
  18. * @return string - Ajax Reply
  19. */
  20. public function getListExecute($request)
  21. {
  22. $user = $this->getLoggedUser();
  23. $reply = array();
  24. $result = Vesta::execute(Vesta::V_LIST_DNS_DOMAINS, array($user['uid'], Config::get('response_type')));
  25. foreach ($result['data'] as $dns_domain => $details) {
  26. $reply[] = array(
  27. 'DNS_DOMAIN' => $dns_domain,
  28. 'IP' => $details['IP'],
  29. 'TPL' => $details['TPL'],
  30. 'TTL' => $details['TTL'],
  31. 'EXP' => $details['EXP'],
  32. 'SOA' => $details['SOA'],
  33. 'SUSPEND' => $details['SUSPEND'],
  34. 'DATE' => date(Config::get('ui_date_format', strtotime($details['DATE'])))
  35. );
  36. }
  37. if (!$result['status']) {
  38. $this->errors[] = array($result['error_code'] => $result['error_message']);
  39. }
  40. return $this->reply($result['status'], $reply);
  41. }
  42. /**
  43. * Get DNS records
  44. *
  45. * @param Request $request
  46. * @return string - Ajax Reply
  47. */
  48. public function getListRecordsExecute($request)
  49. {
  50. $_s = $request->getParameter('spell');
  51. $user = $this->getLoggedUser();
  52. $reply = array();
  53. $result = Vesta::execute(Vesta::V_LIST_DNS_DOMAIN_RECORDS, array($user['uid'], $_s['DNS_DOMAIN'], Config::get('response_type')));
  54. foreach ($result['data'] as $record_id => $details) {
  55. $reply[$record_id] = array(
  56. 'RECORD_ID' => $record_id,
  57. 'RECORD' => $details['RECORD'],
  58. 'RECORD_TYPE' => $details['TYPE'],
  59. 'RECORD_VALUE' => $details['VALUE'],
  60. 'SUSPEND' => $details['SUSPEND'],
  61. 'DATE' => date(Config::get('ui_date_format', strtotime($details['DATE'])))
  62. );
  63. }
  64. if (!$result['status']) {
  65. $this->errors[] = array($result['error_code'] => $result['error_message']);
  66. }
  67. return $this->reply($result['status'], $reply);
  68. }
  69. /**
  70. * Add DNS entry
  71. *
  72. * v_add_dns_domain user domain ip [template] [exp] [soa] [ttl]
  73. * http://95.163.16.160:8083/dispatch.php?jedi_method=DNS.add&USER=vesta&DOMAIN=dev.vestacp.com&IP_ADDRESS=95.163.16.160&TEMPLATE=default&EXP=01-01-12&SOA=ns1.vestacp.com&TTL=3600
  74. *
  75. * @param Request $request
  76. * @return string - Ajax Reply
  77. */
  78. public function addExecute($request)
  79. {
  80. $user = $this->getLoggedUser();
  81. $_s = $request->getParameter('spell');
  82. $params = array(
  83. 'USER' => $user['uid'], /// OWNER ???
  84. 'DNS_DOMAIN' => $_s['DNS_DOMAIN'],
  85. 'IP' => $_s['IP']
  86. );
  87. // TODO: rewrite this block. Get away from if/if/if/if
  88. if ($_s['TPL']) {
  89. $params['TPL'] = $_s['TPL'];
  90. }
  91. if ($_s['EXP']) {
  92. $params['EXP'] = $_s['EXP'];
  93. }
  94. if ($_s['SOA']) {
  95. $params['SOA'] = $_s['SOA'];
  96. }
  97. if ($_s['TTL']) {
  98. $params['TTL'] = $_s['TTL'];
  99. }
  100. $result = Vesta::execute(Vesta::V_ADD_DNS_DOMAIN, $params);
  101. if (!$result['status']) {
  102. $this->errors[] = array($result['error_code'] => $result['error_message']);
  103. }
  104. return $this->reply($result['status'], $result['data']);
  105. }
  106. /**
  107. * Add DNS record
  108. *
  109. * v_add_dns_domain_record user domain record type value [id]
  110. * http://95.163.16.160:8083/dispatch.php?jedi_method=DNS.addRecord&USER=vesta&DOMAIN=dev.vestacp.com&RECORD=ftp&TYPE=a&VALUE=87.248.190.222
  111. *
  112. * @param Request $request
  113. * @return string - Ajax Reply
  114. */
  115. public function addRecordExecute($request)
  116. {
  117. $user = $this->getLoggedUser();
  118. $_s = $request->getParameter('spell');
  119. $params = array(
  120. 'USER' => $user['uid'], /// OWNER ???
  121. 'DOMAIN' => $_s['DOMAIN'],
  122. 'RECORD' => $_s['RECORD'],
  123. 'RECORD_TYPE' => $_s['TYPE'],
  124. 'RECORD_VALUE' => $_s['VALUE'],
  125. 'RECORD_ID' => $_s['RECORD_ID']
  126. );
  127. $result = Vesta::execute(Vesta::V_ADD_DNS_DOMAIN_RECORD, $params);
  128. if (!$result['status']) {
  129. $this->errors[] = array($result['error_code'] => $result['error_message']);
  130. }
  131. return $this->reply($result['status'], $result['data']);
  132. }
  133. /**
  134. * Delete DNS entry
  135. *
  136. * v_del_dns_domain user domain
  137. * http://95.163.16.160:8083/dispatch.php?jedi_method=DNS.del&USER=vesta&DOMAIN=dev.vestacp.com
  138. *
  139. * @param Request $request
  140. * @return string - Ajax Reply
  141. */
  142. public function deleteExecute($request)
  143. {
  144. $user = $this->getLoggedUser();
  145. $_s = $request->getParameter('spell');
  146. $params = array(
  147. 'USER' => $user['uid'], /// OWNER ???
  148. 'DOMAIN' => $_s['DNS_DOMAIN'],
  149. );
  150. $result = Vesta::execute(Vesta::V_DEL_DNS_DOMAIN, $params);
  151. if (!$result['status']) {
  152. $this->errors[] = array($result['error_code'] => $result['error_message']);
  153. }
  154. return $this->reply($result['status'], $result['data']);
  155. }
  156. /**
  157. * Add DNS record
  158. *
  159. * v_del_dns_domain_record user domain id
  160. * http://95.163.16.160:8083/dispatch.php?jedi_method=DNS.delRecord&USER=vesta&DOMAIN=dev.vestacp.com&RECORD_ID=9
  161. *
  162. * @param Request $request
  163. * @return string - Ajax Reply
  164. */
  165. public function delRecordExecute($request)
  166. {
  167. $_s = $request->getParameter('spell');
  168. $user = $this->getLoggedUser();
  169. $params = array(
  170. 'USER' => $user['uid'], // TODO: OWNER ???
  171. 'DOMAIN' => $_s['DOMAIN'],
  172. 'RECORD_ID' => $_s['RECORD_ID']
  173. );
  174. $result = Vesta::execute(Vesta::V_DEL_DNS_DOMAIN_RECORD, $params);
  175. if (!$result['status']) {
  176. $this->errors[] = array($result['error_code'] => $result['error_message']);
  177. }
  178. return $this->reply($result['status'], $result['data']);
  179. }
  180. /**
  181. * Change DNS entry
  182. *
  183. * TODO: get away from multiple "if" statements
  184. *
  185. * DNS.change&spell={"old":{"DNS_DOMAIN": "dev.vestacp.com","IP": "95.163.16.160","TPL": "default","TTL": "3377","EXP": "12-12-12","SOA": "ns2.vestacp.com"},"new":{"DNS_DOMAIN": "dev.vestacp.com","IP": "95.163.16.160","TPL": "default","TTL": "3600","EXP": "02-02-12","SOA": "ns1.vestacp.com"}}
  186. *
  187. * @param Request $request
  188. * @return string - Ajax Reply
  189. */
  190. public function changeExecute($request)
  191. {
  192. $_old = $request->getParameter('old');
  193. $_new = $request->getParameter('new');
  194. $user = $this->getLoggedUser();
  195. $_DNS_DOMAIN = $_old['DNS_DOMAIN'];
  196. if ($_old['IP'] != $_new['IP']) {
  197. $result = array();
  198. $result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_IP, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['IP']));
  199. if (!$result['status']) {
  200. $this->status = FALSE;
  201. $this->errors['IP_ADDRESS'] = array($result['error_code'] => $result['error_message']);
  202. }
  203. }
  204. if ($_old['TPL'] != $_new['TPL']) {
  205. $result = array();
  206. $result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TPL, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['TPL']));
  207. if (!$result['status']) {
  208. $this->status = FALSE;
  209. $this->errors['TPL'] = array($result['error_code'] => $result['error_message']);
  210. }
  211. }
  212. if ($_old['TTL'] != $_new['TTL']) {
  213. $result = array();
  214. $result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TTL, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['TTL']));
  215. if (!$result['status']) {
  216. $this->status = FALSE;
  217. $this->errors['TTL'] = array($result['error_code'] => $result['error_message']);
  218. }
  219. }
  220. if ($_old['EXP'] != $_new['EXP']) {
  221. $result = array();
  222. $result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_EXP, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['EXP']));
  223. if (!$result['status']) {
  224. $this->status = FALSE;
  225. $this->errors['EXP'] = array($result['error_code'] => $result['error_message']);
  226. }
  227. }
  228. if ($_old['SOA'] != $_new['SOA']) {
  229. $result = array();
  230. $result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_SOA, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_new['DNS_DOMAIN'], 'IP' => $_new['SOA']));
  231. if (!$result['status']) {
  232. $this->status = FALSE;
  233. $this->errors['SOA'] = array($result['error_code'] => $result['error_message']);
  234. }
  235. }
  236. if (!$this->status) {
  237. Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_IP, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['IP']));
  238. Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TPL, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['TPL']));
  239. Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TTL, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['TTL']));
  240. Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_EXP, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['EXP']));
  241. Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_SOA, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_new['DNS_DOMAIN'], 'IP' => $_old['SOA']));
  242. }
  243. return $this->reply($this->status, '');
  244. }
  245. /**
  246. * Change DNS record
  247. *
  248. * @param Request $request
  249. * @return string - Ajax Reply
  250. */
  251. public function changeRecordsExecute($request)
  252. {
  253. $_old = $request->getParameter('old');
  254. $_new = $request->getParameter('new');
  255. $user = $this->getLoggedUser();
  256. $_DNS_DOMAIN = $_s['DNS_DOMAIN'];
  257. foreach ($_new as $record_id => $record_data) {
  258. // checking if record existed - update
  259. if (is_array($_old[$record_id])) {
  260. $result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_RECORD,
  261. array(
  262. 'USER' => $user['uid'],
  263. 'DNS_DOMAIN' => $_DNS_DOMAIN,
  264. 'ID' => $record_id,
  265. 'RECORD' => $record_data['RECORD'],
  266. 'TYPE' => $record_data['RECORD_TYPE'],
  267. 'VALUE' => $record_data['RECORD_VALUE']
  268. ));
  269. if (!$result['status']) {
  270. $this->status = FALSE;
  271. $this->errors[$record_id] = array($result['error_code'] => $result['error_message']);
  272. }
  273. }
  274. else {
  275. $result = Vesta::execute(Vesta::V_ADD_DNS_DOMAIN_RECORD, array('USER' => $user['uid'], 'DNS_DOMAIN' => $_DNS_DOMAIN, 'RECORD' => $record_data['RECORD'], 'TYPE' => $record_data['RECORD_TYPE'], 'VALUE' => $record_data['RECORD_VALUE'], 'ID' => $record_id));
  276. if (!$result['status']) {
  277. $this->status = FALSE;
  278. $this->errors[$record_id] = array($result['error_code'] => $result['error_message']);
  279. }
  280. }
  281. unset($_old[$record_id]);
  282. }
  283. // in $_old have remained only record that do not present in new - so they have to be deleted
  284. foreach ($_old as $record_id => $record_data) {
  285. /*
  286. $result = Vesta::execute(Vesta::V_DEL_DNS_DOMAIN_RECORD, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'ID' => $record_id,));
  287. if (!$result['status']) {
  288. $this->status = FALSE;
  289. $this->errors[$record_id] = array($result['error_code'] => $result['error_message']);
  290. }
  291. */
  292. }
  293. return $this->reply($this->status, '');
  294. }
  295. }