functions.rspamd.inc.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. <?php
  2. function rsettings($_action, $_data = null) {
  3. global $pdo;
  4. global $lang;
  5. $_data_log = $_data;
  6. switch ($_action) {
  7. case 'add':
  8. if ($_SESSION['mailcow_cc_role'] != "admin") {
  9. $_SESSION['return'][] = array(
  10. 'type' => 'danger',
  11. 'log' => array(__FUNCTION__, $_action, $_data_log),
  12. 'msg' => 'access_denied'
  13. );
  14. return false;
  15. }
  16. $content = $_data['content'];
  17. $desc = $_data['desc'];
  18. $active = intval($_data['active']);
  19. if (empty($content)) {
  20. $_SESSION['return'][] = array(
  21. 'type' => 'danger',
  22. 'log' => array(__FUNCTION__, $_action, $_data_log),
  23. 'msg' => 'map_content_empty'
  24. );
  25. return false;
  26. }
  27. try {
  28. $stmt = $pdo->prepare("INSERT INTO `settingsmap` (`content`, `desc`, `active`)
  29. VALUES (:content, :desc, :active)");
  30. $stmt->execute(array(
  31. ':content' => $content,
  32. ':desc' => $desc,
  33. ':active' => $active
  34. ));
  35. }
  36. catch (PDOException $e) {
  37. $_SESSION['return'][] = array(
  38. 'type' => 'danger',
  39. 'log' => array(__FUNCTION__, $_action, $_data_log),
  40. 'msg' => array('mysql_error', $e)
  41. );
  42. return false;
  43. }
  44. $_SESSION['return'][] = array(
  45. 'type' => 'success',
  46. 'log' => array(__FUNCTION__, $_action, $_data_log),
  47. 'msg' => 'settings_map_added'
  48. );
  49. break;
  50. case 'edit':
  51. if ($_SESSION['mailcow_cc_role'] != "admin") {
  52. $_SESSION['return'][] = array(
  53. 'type' => 'danger',
  54. 'log' => array(__FUNCTION__, $_action, $_data_log),
  55. 'msg' => 'access_denied'
  56. );
  57. return false;
  58. }
  59. $ids = (array)$_data['id'];
  60. foreach ($ids as $id) {
  61. $is_now = rsettings('details', $id);
  62. if (!empty($is_now)) {
  63. $content = (!empty($_data['content'])) ? $_data['content'] : $is_now['content'];
  64. $desc = (!empty($_data['desc'])) ? $_data['desc'] : $is_now['desc'];
  65. $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active_int'];
  66. }
  67. else {
  68. $_SESSION['return'][] = array(
  69. 'type' => 'danger',
  70. 'log' => array(__FUNCTION__, $_action, $_data_log),
  71. 'msg' => array('settings_map_invalid', $id)
  72. );
  73. continue;
  74. }
  75. $content = trim($content);
  76. try {
  77. $stmt = $pdo->prepare("UPDATE `settingsmap` SET
  78. `content` = :content,
  79. `desc` = :desc,
  80. `active` = :active
  81. WHERE `id` = :id");
  82. $stmt->execute(array(
  83. ':content' => $content,
  84. ':desc' => $desc,
  85. ':active' => $active,
  86. ':id' => $id
  87. ));
  88. }
  89. catch (PDOException $e) {
  90. $_SESSION['return'][] = array(
  91. 'type' => 'danger',
  92. 'log' => array(__FUNCTION__, $_action, $_data_log),
  93. 'msg' => array('mysql_error', $e)
  94. );
  95. continue;
  96. }
  97. $_SESSION['return'][] = array(
  98. 'type' => 'success',
  99. 'log' => array(__FUNCTION__, $_action, $_data_log),
  100. 'msg' => array('object_modified', htmlspecialchars($ids))
  101. );
  102. }
  103. break;
  104. case 'delete':
  105. if ($_SESSION['mailcow_cc_role'] != "admin") {
  106. $_SESSION['return'][] = array(
  107. 'type' => 'danger',
  108. 'log' => array(__FUNCTION__, $_action, $_data_log),
  109. 'msg' => 'access_denied'
  110. );
  111. return false;
  112. }
  113. $ids = (array)$_data['id'];
  114. foreach ($ids as $id) {
  115. try {
  116. $stmt = $pdo->prepare("DELETE FROM `settingsmap` WHERE `id`= :id");
  117. $stmt->execute(array(':id' => $id));
  118. }
  119. catch (PDOException $e) {
  120. $_SESSION['return'][] = array(
  121. 'type' => 'danger',
  122. 'log' => array(__FUNCTION__, $_action, $_data_log),
  123. 'msg' => array('mysql_error', $e)
  124. );
  125. return false;
  126. }
  127. $_SESSION['return'][] = array(
  128. 'type' => 'success',
  129. 'log' => array(__FUNCTION__, $_action, $_data_log),
  130. 'msg' => array('settings_map_removed', htmlspecialchars($id))
  131. );
  132. }
  133. break;
  134. case 'get':
  135. if ($_SESSION['mailcow_cc_role'] != "admin") {
  136. return false;
  137. }
  138. $settingsmaps = array();
  139. $stmt = $pdo->query("SELECT `id`, `desc`, `active` FROM `settingsmap`");
  140. $settingsmaps = $stmt->fetchAll(PDO::FETCH_ASSOC);
  141. return $settingsmaps;
  142. break;
  143. case 'details':
  144. if ($_SESSION['mailcow_cc_role'] != "admin" || !isset($_data)) {
  145. return false;
  146. }
  147. $settingsmapdata = array();
  148. $stmt = $pdo->prepare("SELECT `id`,
  149. `desc`,
  150. `content`,
  151. `active` AS `active_int`,
  152. CASE `active` WHEN 1 THEN '".$lang['mailbox']['yes']."' ELSE '".$lang['mailbox']['no']."' END AS `active`
  153. FROM `settingsmap`
  154. WHERE `id` = :id");
  155. $stmt->execute(array(':id' => $_data));
  156. $settingsmapdata = $stmt->fetch(PDO::FETCH_ASSOC);
  157. return $settingsmapdata;
  158. break;
  159. }
  160. }
  161. function rspamd($_action, $_data = null) {
  162. global $pdo;
  163. global $lang;
  164. global $RSPAMD_MAPS;
  165. $_data_log = $_data;
  166. switch ($_action) {
  167. case 'add':
  168. if ($_SESSION['mailcow_cc_role'] != "admin") {
  169. $_SESSION['return'][] = array(
  170. 'type' => 'danger',
  171. 'log' => array(__FUNCTION__, $_action, $_data_log),
  172. 'msg' => 'access_denied'
  173. );
  174. return false;
  175. }
  176. $content = $_data['content'];
  177. $desc = $_data['desc'];
  178. $active = intval($_data['active']);
  179. if (empty($content)) {
  180. $_SESSION['return'][] = array(
  181. 'type' => 'danger',
  182. 'log' => array(__FUNCTION__, $_action, $_data_log),
  183. 'msg' => 'map_content_empty'
  184. );
  185. return false;
  186. }
  187. try {
  188. $stmt = $pdo->prepare("INSERT INTO `settingsmap` (`content`, `desc`, `active`)
  189. VALUES (:content, :desc, :active)");
  190. $stmt->execute(array(
  191. ':content' => $content,
  192. ':desc' => $desc,
  193. ':active' => $active
  194. ));
  195. }
  196. catch (PDOException $e) {
  197. $_SESSION['return'][] = array(
  198. 'type' => 'danger',
  199. 'log' => array(__FUNCTION__, $_action, $_data_log),
  200. 'msg' => array('mysql_error', $e)
  201. );
  202. return false;
  203. }
  204. $_SESSION['return'][] = array(
  205. 'type' => 'success',
  206. 'log' => array(__FUNCTION__, $_action, $_data_log),
  207. 'msg' => 'settings_map_added'
  208. );
  209. break;
  210. case 'edit':
  211. if ($_SESSION['mailcow_cc_role'] != "admin") {
  212. $_SESSION['return'][] = array(
  213. 'type' => 'danger',
  214. 'log' => array(__FUNCTION__, $_action, $_data_log),
  215. 'msg' => 'access_denied'
  216. );
  217. return false;
  218. }
  219. $maps = (array)$_data['map'];
  220. foreach ($maps as $map) {
  221. foreach ($RSPAMD_MAPS as $rspamd_map_type) {
  222. if (!in_array($map, $rspamd_map_type)) {
  223. $_SESSION['return'][] = array(
  224. 'type' => 'danger',
  225. 'log' => array(__FUNCTION__, $_action, $_data_log),
  226. 'msg' => array('global_map_invalid', $map)
  227. );
  228. continue;
  229. }
  230. }
  231. try {
  232. if (file_exists('/rspamd_custom_maps/' . $map)) {
  233. $map_content = trim($_data['rspamd_map_data']);
  234. $map_handle = fopen('/rspamd_custom_maps/' . $map, 'w');
  235. if (!$map_handle) {
  236. throw new Exception($lang['danger']['file_open_error']);
  237. }
  238. fwrite($map_handle, $map_content . PHP_EOL);
  239. fclose($map_handle);
  240. sleep(1.5);
  241. touch('/rspamd_custom_maps/' . $map);
  242. }
  243. }
  244. catch (Exception $e) {
  245. $_SESSION['return'][] = array(
  246. 'type' => 'danger',
  247. 'log' => array(__FUNCTION__, $_action, $_data_log),
  248. 'msg' => array('global_map_write_error', htmlspecialchars($map), htmlspecialchars($e->getMessage()))
  249. );
  250. continue;
  251. }
  252. $_SESSION['return'][] = array(
  253. 'type' => 'success',
  254. 'log' => array(__FUNCTION__, $_action, $_data_log),
  255. 'msg' => array('object_modified', htmlspecialchars($map))
  256. );
  257. }
  258. break;
  259. case 'delete':
  260. if ($_SESSION['mailcow_cc_role'] != "admin") {
  261. $_SESSION['return'][] = array(
  262. 'type' => 'danger',
  263. 'log' => array(__FUNCTION__, $_action, $_data_log),
  264. 'msg' => 'access_denied'
  265. );
  266. return false;
  267. }
  268. $ids = (array)$_data['id'];
  269. foreach ($ids as $id) {
  270. try {
  271. $stmt = $pdo->prepare("DELETE FROM `settingsmap` WHERE `id`= :id");
  272. $stmt->execute(array(':id' => $id));
  273. }
  274. catch (PDOException $e) {
  275. $_SESSION['return'][] = array(
  276. 'type' => 'danger',
  277. 'log' => array(__FUNCTION__, $_action, $_data_log),
  278. 'msg' => array('mysql_error', $e)
  279. );
  280. return false;
  281. }
  282. $_SESSION['return'][] = array(
  283. 'type' => 'success',
  284. 'log' => array(__FUNCTION__, $_action, $_data_log),
  285. 'msg' => array('settings_map_removed', htmlspecialchars($id))
  286. );
  287. }
  288. break;
  289. case 'get':
  290. if ($_SESSION['mailcow_cc_role'] != "admin") {
  291. return false;
  292. }
  293. $settingsmaps = array();
  294. $stmt = $pdo->query("SELECT `id`, `desc`, `active` FROM `settingsmap`");
  295. $settingsmaps = $stmt->fetchAll(PDO::FETCH_ASSOC);
  296. return $settingsmaps;
  297. break;
  298. case 'details':
  299. if ($_SESSION['mailcow_cc_role'] != "admin" || !isset($_data)) {
  300. return false;
  301. }
  302. $settingsmapdata = array();
  303. $stmt = $pdo->prepare("SELECT `id`,
  304. `desc`,
  305. `content`,
  306. `active` AS `active_int`,
  307. CASE `active` WHEN 1 THEN '".$lang['mailbox']['yes']."' ELSE '".$lang['mailbox']['no']."' END AS `active`
  308. FROM `settingsmap`
  309. WHERE `id` = :id");
  310. $stmt->execute(array(':id' => $_data));
  311. $settingsmapdata = $stmt->fetch(PDO::FETCH_ASSOC);
  312. return $settingsmapdata;
  313. break;
  314. }
  315. }