2
0

functions.autoconfiguration.inc.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. function autoconfiguration($_action, $_type, $_data = null) {
  3. global $pdo;
  4. global $lang;
  5. switch ($_action) {
  6. case 'edit':
  7. if (!isset($_SESSION['acl']['eas_autoconfig']) || $_SESSION['acl']['eas_autoconfig'] != "1" ) {
  8. $_SESSION['return'] = array(
  9. 'type' => 'danger',
  10. 'msg' => sprintf($lang['danger']['access_denied'])
  11. );
  12. return false;
  13. }
  14. switch ($_type) {
  15. case 'autodiscover':
  16. $objects = (array)$_data['object'];
  17. foreach ($objects as $object) {
  18. if (is_valid_domain_name($object) && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)) {
  19. $exclude_regex = (isset($_data['exclude_regex'])) ? $_data['exclude_regex'] : null;
  20. $exclude_regex = (isset($_data['exclude_regex'])) ? $_data['exclude_regex'] : null;
  21. try {
  22. $stmt = $pdo->prepare("SELECT COUNT(`domain`) AS `domain_c` FROM `autodiscover`
  23. WHERE `domain` = :domain");
  24. $stmt->execute(array(':domain' => $object));
  25. $num_results = $stmt->fetchColumn();
  26. if ($num_results > 0) {
  27. $stmt = $pdo->prepare("SELECT COUNT(`domain`) AS `domain_c` FROM `autodiscover`
  28. WHERE `domain` = :domain");
  29. }
  30. }
  31. catch(PDOException $e) {
  32. $_SESSION['return'] = array(
  33. 'type' => 'danger',
  34. 'msg' => 'MySQL: '.$e
  35. );
  36. return false;
  37. }
  38. }
  39. elseif (filter_var($object, FILTER_VALIDATE_EMAIL) === true && hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)) {
  40. }
  41. }
  42. $_SESSION['return'] = array(
  43. 'type' => 'success',
  44. 'msg' => sprintf($lang['success']['domain_modified'], htmlspecialchars(implode(', ', $objects)))
  45. );
  46. break;
  47. }
  48. break;
  49. case 'get':
  50. switch ($_type) {
  51. case 'autodiscover':
  52. $autodiscover = array();
  53. if (is_valid_domain_name($_data) && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
  54. try {
  55. $stmt = $pdo->prepare("SELECT * FROM `autodiscover`
  56. WHERE `domain` = :domain");
  57. $stmt->execute(array(':domain' => $_data));
  58. $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
  59. while($row = array_shift($rows)) {
  60. $autodiscover['mailbox'] = $row['mailbox'];
  61. $autodiscover['domain'] = $row['domain'];
  62. $autodiscover['service'] = $row['service'];
  63. $autodiscover['exclude_regex'] = $row['exclude_regex'];
  64. $autodiscover['created'] = $row['created'];
  65. $autodiscover['modified'] = $row['modified'];
  66. }
  67. }
  68. catch(PDOException $e) {
  69. $_SESSION['return'] = array(
  70. 'type' => 'danger',
  71. 'msg' => 'MySQL: '.$e
  72. );
  73. return false;
  74. }
  75. }
  76. elseif (filter_var($_data, FILTER_VALIDATE_EMAIL) === true && hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
  77. try {
  78. $stmt = $pdo->prepare("SELECT * FROM `autodiscover`
  79. WHERE `mailbox` = :mailbox");
  80. $stmt->execute(array(':mailbox' => $_data));
  81. $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
  82. while($row = array_shift($rows)) {
  83. $autodiscover['mailbox'] = $row['mailbox'];
  84. $autodiscover['domain'] = $row['domain'];
  85. $autodiscover['service'] = $row['service'];
  86. $autodiscover['exclude_regex'] = $row['exclude_regex'];
  87. $autodiscover['created'] = $row['created'];
  88. $autodiscover['modified'] = $row['modified'];
  89. }
  90. }
  91. catch(PDOException $e) {
  92. $_SESSION['return'] = array(
  93. 'type' => 'danger',
  94. 'msg' => 'MySQL: '.$e
  95. );
  96. return false;
  97. }
  98. }
  99. return $autodiscover;
  100. break;
  101. }
  102. break;
  103. case 'reset':
  104. switch ($_type) {
  105. case 'autodiscover':
  106. if ($_SESSION['mailcow_cc_role'] != "admin" && $_SESSION['mailcow_cc_role'] != "domainadmin") {
  107. return false;
  108. }
  109. break;
  110. }
  111. break;
  112. }
  113. }
  114. $miau = "Microsoft Office/15.0 (Windows NT 5.1; macOS Outlook 16.0.4734; Pro)";
  115. preg_match("/^((?!.*Mac|.*emClient).)*(Outlook|Office).+1[5-9].*/i", $miau, $output_array);
  116. if (empty($output_array)) {
  117. echo "imap";
  118. }