2
0

functions.tls_policy_maps.inc.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. function tls_policy_maps($_action, $_data = null, $attr = null) {
  3. global $pdo;
  4. global $lang;
  5. if ($_SESSION['mailcow_cc_role'] != "admin") {
  6. return false;
  7. }
  8. switch ($_action) {
  9. case 'add':
  10. $dest = idn_to_ascii(trim($_data['dest']), 0, INTL_IDNA_VARIANT_UTS46);
  11. $policy = strtolower(trim($_data['policy']));
  12. $parameters = (isset($_data['parameters']) && !empty($_data['parameters'])) ? $_data['parameters'] : '';
  13. if (!empty($parameters)) {
  14. foreach (explode(' ', $parameters) as $parameter) {
  15. if (!preg_match('/(.+)\=(.+)/i', $parameter)) {
  16. $_SESSION['return'][] = array(
  17. 'type' => 'danger',
  18. 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
  19. 'msg' => 'tls_policy_map_parameter_invalid'
  20. );
  21. return false;
  22. }
  23. }
  24. }
  25. $active = intval($_data['active']);
  26. $tls_policy_maps = tls_policy_maps('get');
  27. foreach ($tls_policy_maps as $tls_policy_map) {
  28. if (tls_policy_maps('details', $tls_policy_map)['dest'] == $dest) {
  29. $_SESSION['return'][] = array(
  30. 'type' => 'danger',
  31. 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
  32. 'msg' => array('tls_policy_map_entry_exists', htmlspecialchars($dest))
  33. );
  34. return false;
  35. }
  36. }
  37. $stmt = $pdo->prepare("INSERT INTO `tls_policy_override` (`dest`, `policy`, `parameters`, `active`) VALUES
  38. (:dest, :policy, :parameters, :active)");
  39. $stmt->execute(array(
  40. ':dest' => $dest,
  41. ':policy' => $policy,
  42. ':parameters' => $parameters,
  43. ':active' => $active
  44. ));
  45. $_SESSION['return'][] = array(
  46. 'type' => 'success',
  47. 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
  48. 'msg' => array('tls_policy_map_entry_saved', htmlspecialchars($dest))
  49. );
  50. break;
  51. case 'edit':
  52. $ids = (array)$_data['id'];
  53. foreach ($ids as $id) {
  54. $is_now = tls_policy_maps('details', $id);
  55. if (!empty($is_now)) {
  56. $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active_int'];
  57. $dest = (!empty($_data['dest'])) ? $_data['dest'] : $is_now['dest'];
  58. $policy = (!empty($_data['policy'])) ? $_data['policy'] : $is_now['policy'];
  59. $parameters = (isset($_data['parameters'])) ? $_data['parameters'] : $is_now['parameters'];
  60. }
  61. else {
  62. $_SESSION['return'][] = array(
  63. 'type' => 'danger',
  64. 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
  65. 'msg' => 'access_denied'
  66. );
  67. continue;
  68. }
  69. if (!empty($parameters)) {
  70. foreach (explode(' ', $parameters) as $parameter) {
  71. if (!preg_match('/(.+)\=(.+)/i', $parameter)) {
  72. $_SESSION['return'][] = array(
  73. 'type' => 'danger',
  74. 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
  75. 'msg' => 'tls_policy_map_parameter_invalid'
  76. );
  77. return false;
  78. }
  79. }
  80. }
  81. $tls_policy_maps = tls_policy_maps('get');
  82. foreach ($tls_policy_maps as $tls_policy_map) {
  83. if ($tls_policy_map == $id) { continue; }
  84. if (tls_policy_maps('details', $tls_policy_map)['dest'] == $dest) {
  85. $_SESSION['return'][] = array(
  86. 'type' => 'danger',
  87. 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
  88. 'msg' => array('recipient_map_entry_exists', htmlspecialchars($dest))
  89. );
  90. return false;
  91. }
  92. }
  93. $stmt = $pdo->prepare("UPDATE `tls_policy_override` SET
  94. `dest` = :dest,
  95. `policy` = :policy,
  96. `parameters` = :parameters,
  97. `active` = :active
  98. WHERE `id`= :id");
  99. $stmt->execute(array(
  100. ':dest' => $dest,
  101. ':policy' => $policy,
  102. ':parameters' => $parameters,
  103. ':active' => $active,
  104. ':id' => $id
  105. ));
  106. $_SESSION['return'][] = array(
  107. 'type' => 'success',
  108. 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
  109. 'msg' => array('tls_policy_map_entry_saved', htmlspecialchars($dest))
  110. );
  111. }
  112. break;
  113. case 'details':
  114. $mapdata = array();
  115. $id = intval($_data);
  116. $stmt = $pdo->prepare("SELECT `id`,
  117. `dest`,
  118. `policy`,
  119. `parameters`,
  120. `active` AS `active_int`,
  121. CASE `active` WHEN 1 THEN '".$lang['mailbox']['yes']."' ELSE '".$lang['mailbox']['no']."' END AS `active`,
  122. `created`,
  123. `modified` FROM `tls_policy_override`
  124. WHERE `id` = :id");
  125. $stmt->execute(array(':id' => $id));
  126. $mapdata = $stmt->fetch(PDO::FETCH_ASSOC);
  127. return $mapdata;
  128. break;
  129. case 'get':
  130. $mapdata = array();
  131. $all_items = array();
  132. $id = intval($_data);
  133. $stmt = $pdo->query("SELECT `id` FROM `tls_policy_override`");
  134. $all_items = $stmt->fetchAll(PDO::FETCH_ASSOC);
  135. foreach ($all_items as $i) {
  136. $mapdata[] = $i['id'];
  137. }
  138. $all_items = null;
  139. return $mapdata;
  140. break;
  141. case 'delete':
  142. $ids = (array)$_data['id'];
  143. foreach ($ids as $id) {
  144. if (!is_numeric($id)) {
  145. return false;
  146. }
  147. $stmt = $pdo->prepare("DELETE FROM `tls_policy_override` WHERE `id`= :id");
  148. $stmt->execute(array(':id' => $id));
  149. $_SESSION['return'][] = array(
  150. 'type' => 'success',
  151. 'log' => array(__FUNCTION__, $_action, $_data, $_attr),
  152. 'msg' => array('tls_policy_map_entry_deleted', htmlspecialchars($id))
  153. );
  154. }
  155. break;
  156. }
  157. }