functions.rspamd.inc.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  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'];
  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`
  152. FROM `settingsmap`
  153. WHERE `id` = :id");
  154. $stmt->execute(array(':id' => $_data));
  155. $settingsmapdata = $stmt->fetch(PDO::FETCH_ASSOC);
  156. return $settingsmapdata;
  157. break;
  158. }
  159. }
  160. function rspamd($_action, $_data = null) {
  161. global $pdo;
  162. global $lang;
  163. global $RSPAMD_MAPS;
  164. $_data_log = $_data;
  165. switch ($_action) {
  166. case 'add':
  167. if ($_SESSION['mailcow_cc_role'] != "admin") {
  168. $_SESSION['return'][] = array(
  169. 'type' => 'danger',
  170. 'log' => array(__FUNCTION__, $_action, $_data_log),
  171. 'msg' => 'access_denied'
  172. );
  173. return false;
  174. }
  175. $content = $_data['content'];
  176. $desc = $_data['desc'];
  177. $active = intval($_data['active']);
  178. if (empty($content)) {
  179. $_SESSION['return'][] = array(
  180. 'type' => 'danger',
  181. 'log' => array(__FUNCTION__, $_action, $_data_log),
  182. 'msg' => 'map_content_empty'
  183. );
  184. return false;
  185. }
  186. try {
  187. $stmt = $pdo->prepare("INSERT INTO `settingsmap` (`content`, `desc`, `active`)
  188. VALUES (:content, :desc, :active)");
  189. $stmt->execute(array(
  190. ':content' => $content,
  191. ':desc' => $desc,
  192. ':active' => $active
  193. ));
  194. }
  195. catch (PDOException $e) {
  196. $_SESSION['return'][] = array(
  197. 'type' => 'danger',
  198. 'log' => array(__FUNCTION__, $_action, $_data_log),
  199. 'msg' => array('mysql_error', $e)
  200. );
  201. return false;
  202. }
  203. $_SESSION['return'][] = array(
  204. 'type' => 'success',
  205. 'log' => array(__FUNCTION__, $_action, $_data_log),
  206. 'msg' => 'settings_map_added'
  207. );
  208. break;
  209. case 'edit':
  210. if ($_SESSION['mailcow_cc_role'] != "admin") {
  211. $_SESSION['return'][] = array(
  212. 'type' => 'danger',
  213. 'log' => array(__FUNCTION__, $_action, $_data_log),
  214. 'msg' => 'access_denied'
  215. );
  216. return false;
  217. }
  218. $maps = (array)$_data['map'];
  219. foreach ($maps as $map) {
  220. foreach ($RSPAMD_MAPS as $rspamd_map_type) {
  221. if (!in_array($map, $rspamd_map_type)) {
  222. $_SESSION['return'][] = array(
  223. 'type' => 'danger',
  224. 'log' => array(__FUNCTION__, $_action, $_data_log),
  225. 'msg' => array('global_map_invalid', $map)
  226. );
  227. continue;
  228. }
  229. }
  230. try {
  231. if (file_exists('/rspamd_custom_maps/' . $map)) {
  232. $map_content = trim($_data['rspamd_map_data']);
  233. $map_handle = fopen('/rspamd_custom_maps/' . $map, 'w');
  234. if (!$map_handle) {
  235. throw new Exception($lang['danger']['file_open_error']);
  236. }
  237. fwrite($map_handle, $map_content . PHP_EOL);
  238. fclose($map_handle);
  239. sleep(1.5);
  240. touch('/rspamd_custom_maps/' . $map);
  241. }
  242. }
  243. catch (Exception $e) {
  244. $_SESSION['return'][] = array(
  245. 'type' => 'danger',
  246. 'log' => array(__FUNCTION__, $_action, $_data_log),
  247. 'msg' => array('global_map_write_error', htmlspecialchars($map), htmlspecialchars($e->getMessage()))
  248. );
  249. continue;
  250. }
  251. $_SESSION['return'][] = array(
  252. 'type' => 'success',
  253. 'log' => array(__FUNCTION__, $_action, $_data_log),
  254. 'msg' => array('object_modified', htmlspecialchars($map))
  255. );
  256. }
  257. break;
  258. case 'delete':
  259. if ($_SESSION['mailcow_cc_role'] != "admin") {
  260. $_SESSION['return'][] = array(
  261. 'type' => 'danger',
  262. 'log' => array(__FUNCTION__, $_action, $_data_log),
  263. 'msg' => 'access_denied'
  264. );
  265. return false;
  266. }
  267. $ids = (array)$_data['id'];
  268. foreach ($ids as $id) {
  269. try {
  270. $stmt = $pdo->prepare("DELETE FROM `settingsmap` WHERE `id`= :id");
  271. $stmt->execute(array(':id' => $id));
  272. }
  273. catch (PDOException $e) {
  274. $_SESSION['return'][] = array(
  275. 'type' => 'danger',
  276. 'log' => array(__FUNCTION__, $_action, $_data_log),
  277. 'msg' => array('mysql_error', $e)
  278. );
  279. return false;
  280. }
  281. $_SESSION['return'][] = array(
  282. 'type' => 'success',
  283. 'log' => array(__FUNCTION__, $_action, $_data_log),
  284. 'msg' => array('settings_map_removed', htmlspecialchars($id))
  285. );
  286. }
  287. break;
  288. case 'get':
  289. if ($_SESSION['mailcow_cc_role'] != "admin") {
  290. return false;
  291. }
  292. $settingsmaps = array();
  293. $stmt = $pdo->query("SELECT `id`, `desc`, `active` FROM `settingsmap`");
  294. $settingsmaps = $stmt->fetchAll(PDO::FETCH_ASSOC);
  295. return $settingsmaps;
  296. break;
  297. case 'details':
  298. if ($_SESSION['mailcow_cc_role'] != "admin" || !isset($_data)) {
  299. return false;
  300. }
  301. $settingsmapdata = array();
  302. $stmt = $pdo->prepare("SELECT `id`,
  303. `desc`,
  304. `content`,
  305. `active`
  306. FROM `settingsmap`
  307. WHERE `id` = :id");
  308. $stmt->execute(array(':id' => $_data));
  309. $settingsmapdata = $stmt->fetch(PDO::FETCH_ASSOC);
  310. return $settingsmapdata;
  311. break;
  312. }
  313. }