mobileconfig.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <?php
  2. require_once 'inc/prerequisites.inc.php';
  3. if (empty($mailcow_hostname)) {
  4. exit();
  5. }
  6. if (!isset($_SESSION['mailcow_cc_role']) || $_SESSION['mailcow_cc_role'] != 'user') {
  7. session_destroy();
  8. // probably better than appending the whole current http query string
  9. $append_get = (isset($_GET['only_email'])) ? '&only_email' : '';
  10. header('Location: index.php?mobileconfig' . $append_get);
  11. die();
  12. }
  13. error_reporting(0);
  14. header('Content-Type: application/x-apple-aspen-config');
  15. header('Content-Disposition: attachment; filename="'.$UI_TEXTS['main_name'].'.mobileconfig"');
  16. $email = $_SESSION['mailcow_cc_username'];
  17. $domain = explode('@', $_SESSION['mailcow_cc_username'])[1];
  18. $identifier = implode('.', array_reverse(preg_split( '/(@|\.)/', $email))) . '.appleprofile.'.preg_replace('/[^a-zA-Z0-9]+/', '', $UI_TEXTS['main_name']);
  19. try {
  20. $stmt = $pdo->prepare("SELECT `name` FROM `mailbox` WHERE `username`= :username");
  21. $stmt->execute(array(':username' => $email));
  22. $MailboxData = $stmt->fetch(PDO::FETCH_ASSOC);
  23. $displayname = htmlspecialchars(empty($MailboxData['name']) ? $email : $MailboxData['name'], ENT_NOQUOTES);
  24. }
  25. catch(PDOException $e) {
  26. $displayname = $email;
  27. }
  28. if (isset($_GET['only_email'])) {
  29. $onlyEmailAccount = true;
  30. $description = 'IMAP';
  31. } else {
  32. $onlyEmailAccount = false;
  33. $description = 'IMAP, CalDAV, CardDAV';
  34. }
  35. echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
  36. ?>
  37. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  38. <plist version="1.0">
  39. <dict>
  40. <key>PayloadContent</key>
  41. <array>
  42. <dict>
  43. <key>EmailAccountDescription</key>
  44. <string><?=$email?></string>
  45. <key>EmailAccountType</key>
  46. <string>EmailTypeIMAP</string>
  47. <key>EmailAccountName</key>
  48. <string><?=$displayname?></string>
  49. <key>EmailAddress</key>
  50. <string><?=$email?></string>
  51. <key>IncomingMailServerAuthentication</key>
  52. <string>EmailAuthPassword</string>
  53. <key>IncomingMailServerHostName</key>
  54. <string><?=$autodiscover_config['imap']['server']?></string>
  55. <key>IncomingMailServerPortNumber</key>
  56. <integer><?=$autodiscover_config['imap']['port']?></integer>
  57. <key>IncomingMailServerUseSSL</key>
  58. <true/>
  59. <key>IncomingMailServerUsername</key>
  60. <string><?=$email?></string>
  61. <key>OutgoingMailServerAuthentication</key>
  62. <string>EmailAuthPassword</string>
  63. <key>OutgoingMailServerHostName</key>
  64. <string><?=$autodiscover_config['smtp']['server']?></string>
  65. <key>OutgoingMailServerPortNumber</key>
  66. <integer><?=$autodiscover_config['smtp']['port']?></integer>
  67. <key>OutgoingMailServerUseSSL</key>
  68. <true/>
  69. <key>OutgoingMailServerUsername</key>
  70. <string><?=$email?></string>
  71. <key>OutgoingPasswordSameAsIncomingPassword</key>
  72. <true/>
  73. <key>PayloadDescription</key>
  74. <string>Configures email account.</string>
  75. <key>PayloadDisplayName</key>
  76. <string>IMAP Account (<?=$email?>)</string>
  77. <key>PayloadIdentifier</key>
  78. <string><?=$identifier?>.email</string>
  79. <key>PayloadOrganization</key>
  80. <string></string>
  81. <key>PayloadType</key>
  82. <string>com.apple.mail.managed</string>
  83. <key>PayloadUUID</key>
  84. <string><?=getGUID()?></string>
  85. <key>PayloadVersion</key>
  86. <integer>1</integer>
  87. <key>PreventAppSheet</key>
  88. <false/>
  89. <key>PreventMove</key>
  90. <false/>
  91. <key>SMIMESigningUserOverrideable</key>
  92. <true/>
  93. <key>SMIMESigningCertificateUUIDUserOverrideable</key>
  94. <true/>
  95. <key>SMIMEEncryptByDefaultUserOverrideable</key>
  96. <true/>
  97. <key>SMIMEEncryptionCertificateUUIDUserOverrideable</key>
  98. <true/>
  99. <key>SMIMEEnableEncryptionPerMessageSwitch</key>
  100. <true/>
  101. </dict>
  102. <?php if($onlyEmailAccount === false): ?>
  103. <dict>
  104. <key>CalDAVAccountDescription</key>
  105. <string><?=$email?></string>
  106. <key>CalDAVHostName</key>
  107. <string><?=$autodiscover_config['caldav']['server']?></string>
  108. <key>CalDAVPort</key>
  109. <real><?=$autodiscover_config['caldav']['port']?></real>
  110. <key>CalDAVPrincipalURL</key>
  111. <string>/SOGo/dav/<?=$email?></string>
  112. <key>CalDAVUseSSL</key>
  113. <true/>
  114. <key>CalDAVUsername</key>
  115. <string><?=$email?></string>
  116. <key>PayloadDescription</key>
  117. <string>Configures CalDAV account.</string>
  118. <key>PayloadDisplayName</key>
  119. <string>CalDAV (<?=$email?>)</string>
  120. <key>PayloadIdentifier</key>
  121. <string><?=$identifier?>.CalDAV</string>
  122. <key>PayloadOrganization</key>
  123. <string></string>
  124. <key>PayloadType</key>
  125. <string>com.apple.caldav.account</string>
  126. <key>PayloadUUID</key>
  127. <string><?=getGUID()?></string>
  128. <key>PayloadVersion</key>
  129. <integer>1</integer>
  130. </dict>
  131. <dict>
  132. <key>CardDAVAccountDescription</key>
  133. <string><?=$email?></string>
  134. <key>CardDAVHostName</key>
  135. <string><?=$autodiscover_config['carddav']['server']?></string>
  136. <key>CardDAVPort</key>
  137. <integer><?=$autodiscover_config['carddav']['port']?></integer>
  138. <key>CardDAVPrincipalURL</key>
  139. <string>/SOGo/dav/<?=$email?></string>
  140. <key>CardDAVUseSSL</key>
  141. <true/>
  142. <key>CardDAVUsername</key>
  143. <string><?=$email?></string>
  144. <key>PayloadDescription</key>
  145. <string>Configures CardDAV accounts</string>
  146. <key>PayloadDisplayName</key>
  147. <string>CardDAV (<?=$email?>)</string>
  148. <key>PayloadIdentifier</key>
  149. <string><?=$identifier?>.carddav</string>
  150. <key>PayloadOrganization</key>
  151. <string></string>
  152. <key>PayloadType</key>
  153. <string>com.apple.carddav.account</string>
  154. <key>PayloadUUID</key>
  155. <string><?=getGUID()?></string>
  156. <key>PayloadVersion</key>
  157. <integer>1</integer>
  158. </dict>
  159. <?php endif; ?>
  160. </array>
  161. <key>PayloadDescription</key>
  162. <string><?=$description?></string>
  163. <key>PayloadDisplayName</key>
  164. <string><?=$email?></string>
  165. <key>PayloadIdentifier</key>
  166. <string><?=$identifier?></string>
  167. <key>PayloadOrganization</key>
  168. <string><?=$UI_TEXTS['main_name']?></string>
  169. <key>PayloadRemovalDisallowed</key>
  170. <false/>
  171. <key>PayloadType</key>
  172. <string>Configuration</string>
  173. <key>PayloadUUID</key>
  174. <string><?=getGUID()?></string>
  175. <key>PayloadVersion</key>
  176. <integer>1</integer>
  177. </dict>
  178. </plist>