git subrepo clone https://github.com/mailcow/mailcow-dockerized.git mailcow/src/mailcow-dockerized

subrepo: subdir:   "mailcow/src/mailcow-dockerized"
  merged:   "a832becb"
upstream: origin:   "https://github.com/mailcow/mailcow-dockerized.git"
  branch:   "master"
  commit:   "a832becb"
git-subrepo: version:  "0.4.3"
  origin:   "???"
  commit:   "???"
Change-Id: If5be2d621a211e164c9b6577adaa7884449f16b5
diff --git a/mailcow/src/mailcow-dockerized/data/web/mobileconfig.php b/mailcow/src/mailcow-dockerized/data/web/mobileconfig.php
new file mode 100644
index 0000000..256f638
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/mobileconfig.php
@@ -0,0 +1,185 @@
+<?php
+require_once 'inc/prerequisites.inc.php';
+
+if (empty($mailcow_hostname)) {
+  exit();
+}
+if (!isset($_SESSION['mailcow_cc_role']) || $_SESSION['mailcow_cc_role'] != 'user') {
+  session_destroy();
+  // probably better than appending the whole current http query string
+  $append_get = (isset($_GET['only_email'])) ? '&only_email' : '';
+  header('Location: index.php?mobileconfig' . $append_get);
+  die();
+}
+
+error_reporting(0);
+
+header('Content-Type: application/x-apple-aspen-config');
+header('Content-Disposition: attachment; filename="'.$UI_TEXTS['main_name'].'.mobileconfig"');
+
+$email = $_SESSION['mailcow_cc_username'];
+$domain = explode('@', $_SESSION['mailcow_cc_username'])[1];
+$identifier = implode('.', array_reverse(preg_split( '/(@|\.)/', $email))) . '.appleprofile.'.preg_replace('/[^a-zA-Z0-9]+/', '', $UI_TEXTS['main_name']);
+
+try {
+  $stmt = $pdo->prepare("SELECT `name` FROM `mailbox` WHERE `username`= :username");
+  $stmt->execute(array(':username' => $email));
+  $MailboxData = $stmt->fetch(PDO::FETCH_ASSOC);
+  $displayname = htmlspecialchars(empty($MailboxData['name']) ? $email : $MailboxData['name'], ENT_NOQUOTES);
+}
+catch(PDOException $e) {
+  $displayname = $email;
+}
+
+if (isset($_GET['only_email'])) {
+  $onlyEmailAccount = true;
+  $description = 'IMAP';  
+} else {
+  $onlyEmailAccount = false;
+  $description = 'IMAP, CalDAV, CardDAV'; 
+}
+
+echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
+?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>PayloadContent</key>
+    <array>
+      <dict>
+        <key>EmailAccountDescription</key>
+        <string><?=$email?></string>
+        <key>EmailAccountType</key>
+        <string>EmailTypeIMAP</string>
+        <key>EmailAccountName</key>
+        <string><?=$displayname?></string>
+        <key>EmailAddress</key>
+        <string><?=$email?></string>
+        <key>IncomingMailServerAuthentication</key>
+        <string>EmailAuthPassword</string>
+        <key>IncomingMailServerHostName</key>
+        <string><?=$autodiscover_config['imap']['server']?></string>
+        <key>IncomingMailServerPortNumber</key>
+        <integer><?=$autodiscover_config['imap']['port']?></integer>
+        <key>IncomingMailServerUseSSL</key>
+        <true/>
+        <key>IncomingMailServerUsername</key>
+        <string><?=$email?></string>
+        <key>OutgoingMailServerAuthentication</key>
+        <string>EmailAuthPassword</string>
+        <key>OutgoingMailServerHostName</key>
+        <string><?=$autodiscover_config['smtp']['server']?></string>
+        <key>OutgoingMailServerPortNumber</key>
+        <integer><?=$autodiscover_config['smtp']['port']?></integer>
+        <key>OutgoingMailServerUseSSL</key>
+        <true/>
+        <key>OutgoingMailServerUsername</key>
+        <string><?=$email?></string>
+        <key>OutgoingPasswordSameAsIncomingPassword</key>
+        <true/>
+        <key>PayloadDescription</key>
+        <string>Configures email account.</string>
+        <key>PayloadDisplayName</key>
+        <string>IMAP Account (<?=$email?>)</string>
+        <key>PayloadIdentifier</key>
+        <string><?=$identifier?>.email</string>
+        <key>PayloadOrganization</key>
+        <string></string>
+        <key>PayloadType</key>
+        <string>com.apple.mail.managed</string>
+        <key>PayloadUUID</key>
+        <string><?=getGUID()?></string>
+        <key>PayloadVersion</key>
+        <integer>1</integer>
+        <key>PreventAppSheet</key>
+        <false/>
+        <key>PreventMove</key>
+        <false/>
+        <key>SMIMESigningUserOverrideable</key>
+        <true/>
+        <key>SMIMESigningCertificateUUIDUserOverrideable</key>
+        <true/>
+        <key>SMIMEEncryptByDefaultUserOverrideable</key>
+        <true/>
+        <key>SMIMEEncryptionCertificateUUIDUserOverrideable</key>
+        <true/>
+        <key>SMIMEEnableEncryptionPerMessageSwitch</key>
+        <true/>
+      </dict>
+      <?php if($onlyEmailAccount === false): ?>
+      <dict>
+        <key>CalDAVAccountDescription</key>
+        <string><?=$email?></string>
+        <key>CalDAVHostName</key>
+        <string><?=$autodiscover_config['caldav']['server']?></string>
+        <key>CalDAVPort</key>
+        <real><?=$autodiscover_config['caldav']['port']?></real>
+        <key>CalDAVPrincipalURL</key>
+        <string>/SOGo/dav/<?=$email?></string>
+        <key>CalDAVUseSSL</key>
+        <true/>
+        <key>CalDAVUsername</key>
+        <string><?=$email?></string>
+        <key>PayloadDescription</key>
+        <string>Configures CalDAV account.</string>
+        <key>PayloadDisplayName</key>
+        <string>CalDAV (<?=$email?>)</string>
+        <key>PayloadIdentifier</key>
+        <string><?=$identifier?>.CalDAV</string>
+        <key>PayloadOrganization</key>
+        <string></string>
+        <key>PayloadType</key>
+        <string>com.apple.caldav.account</string>
+        <key>PayloadUUID</key>
+        <string><?=getGUID()?></string>
+        <key>PayloadVersion</key>
+        <integer>1</integer>
+      </dict>
+      <dict>
+        <key>CardDAVAccountDescription</key>
+        <string><?=$email?></string>
+        <key>CardDAVHostName</key>
+        <string><?=$autodiscover_config['carddav']['server']?></string>
+        <key>CardDAVPort</key>
+        <integer><?=$autodiscover_config['carddav']['port']?></integer>
+        <key>CardDAVPrincipalURL</key>
+        <string>/SOGo/dav/<?=$email?></string>
+        <key>CardDAVUseSSL</key>
+        <true/>
+        <key>CardDAVUsername</key>
+        <string><?=$email?></string>
+        <key>PayloadDescription</key>
+        <string>Configures CardDAV accounts</string>
+        <key>PayloadDisplayName</key>
+        <string>CardDAV (<?=$email?>)</string>
+        <key>PayloadIdentifier</key>
+        <string><?=$identifier?>.carddav</string>
+        <key>PayloadOrganization</key>
+        <string></string>
+        <key>PayloadType</key>
+        <string>com.apple.carddav.account</string>
+        <key>PayloadUUID</key>
+        <string><?=getGUID()?></string>
+        <key>PayloadVersion</key>
+        <integer>1</integer>
+      </dict>
+      <?php endif; ?>
+    </array>
+    <key>PayloadDescription</key>
+    <string><?=$description?></string>
+    <key>PayloadDisplayName</key>
+    <string><?=$email?></string>
+    <key>PayloadIdentifier</key>
+    <string><?=$identifier?></string>
+    <key>PayloadOrganization</key>
+    <string><?=$UI_TEXTS['main_name']?></string>
+    <key>PayloadRemovalDisallowed</key>
+    <false/>
+    <key>PayloadType</key>
+    <string>Configuration</string>
+    <key>PayloadUUID</key>
+    <string><?=getGUID()?></string>
+    <key>PayloadVersion</key>
+    <integer>1</integer>
+  </dict>
+</plist>