Browse Source

[Web] Apple mobileconfig enhancements by @feldsam

andryyy 6 years ago
parent
commit
ca9c610460
2 changed files with 156 additions and 138 deletions
  1. 13 0
      data/web/inc/functions.inc.php
  2. 143 138
      data/web/mobileconfig.php

+ 13 - 0
data/web/inc/functions.inc.php

@@ -1452,4 +1452,17 @@ function get_logs($application, $lines = false) {
   }
   return false;
 }
+function getGUID() {
+  if (function_exists('com_create_guid')) {
+    return com_create_guid();
+  }
+  mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
+  $charid = strtoupper(md5(uniqid(rand(), true)));
+  $hyphen = chr(45);// "-"
+  return substr($charid, 0, 8).$hyphen
+        .substr($charid, 8, 4).$hyphen
+        .substr($charid,12, 4).$hyphen
+        .substr($charid,16, 4).$hyphen
+        .substr($charid,20,12);
+}
 ?>

+ 143 - 138
data/web/mobileconfig.php

@@ -1,5 +1,5 @@
 <?php
-require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
+require_once 'inc/prerequisites.inc.php';
 
 if (empty($mailcow_hostname)) {
   exit();
@@ -12,158 +12,163 @@ if (!isset($_SESSION['mailcow_cc_role']) || $_SESSION['mailcow_cc_role'] != 'use
 error_reporting(0);
 
 header('Content-Type: application/x-apple-aspen-config');
-header('Content-Disposition: attachment; filename="Mailcow.mobileconfig"');
+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(explode('.', $domain))) . '.iphoneprofile.mailcow';
+$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 = empty($MailboxData['name']) ? $email : $MailboxData['name'];
 }
 catch(PDOException $e) {
-  die("Failed to determine name from SQL");
-}
-if (!empty($MailboxData['name'])) {
-  $displayname = $MailboxData['name'];
-}
-else {
   $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>CalDAVAccountDescription</key>
-			<string><?php echo $domain; ?></string>
-			<key>CalDAVHostName</key>
-			<string><?php echo $autodiscover_config['caldav']['server']; ?></string>
-			<key>CalDAVPort</key>
-			<real><?php echo $autodiscover_config['caldav']['port']; ?></real>
-			<key>CalDAVPrincipalURL</key>
-			<string>/SOGo/dav/<?php echo $email; ?></string>
-			<key>CalDAVUseSSL</key>
-			<true/>
-			<key>CalDAVUsername</key>
-			<string><?php echo $email; ?></string>
-			<key>PayloadDescription</key>
-			<string>Configures CalDAV account.</string>
-			<key>PayloadDisplayName</key>
-			<string>CalDAV (<?php echo $domain; ?>)</string>
-			<key>PayloadIdentifier</key>
-			<string><?php echo $identifier; ?>.CalDAV</string>
-			<key>PayloadOrganization</key>
-			<string></string>
-			<key>PayloadType</key>
-			<string>com.apple.caldav.account</string>
-			<key>PayloadUUID</key>
-			<string>FC898573-EBA8-48AF-93BD-BFA0C9778FA7</string>
-			<key>PayloadVersion</key>
-			<integer>1</integer>
-		</dict>
-		<dict>
-			<key>EmailAccountDescription</key>
-			<string><?php echo $domain; ?></string>
-			<key>EmailAccountType</key>
-			<string>EmailTypeIMAP</string>
-			<key>EmailAccountName</key>
-			<string><?php echo $displayname; ?></string>
-			<key>EmailAddress</key>
-			<string><?php echo $email; ?></string>
-			<key>IncomingMailServerAuthentication</key>
-			<string>EmailAuthPassword</string>
-			<key>IncomingMailServerHostName</key>
-			<string><?php echo $autodiscover_config['imap']['server']; ?></string>
-			<key>IncomingMailServerPortNumber</key>
-			<integer><?php echo $autodiscover_config['imap']['port']; ?></integer>
-			<key>IncomingMailServerUseSSL</key>
-			<true/>
-			<key>IncomingMailServerUsername</key>
-			<string><?php echo $email; ?></string>
-			<key>OutgoingMailServerAuthentication</key>
-			<string>EmailAuthPassword</string>
-			<key>OutgoingMailServerHostName</key>
-			<string><?php echo $autodiscover_config['smtp']['server']; ?></string>
-			<key>OutgoingMailServerPortNumber</key>
-			<integer><?php echo $autodiscover_config['smtp']['port']; ?></integer>
-			<key>OutgoingMailServerUseSSL</key>
-			<true/>
-			<key>OutgoingMailServerUsername</key>
-			<string><?php echo $email; ?></string>
-			<key>OutgoingPasswordSameAsIncomingPassword</key>
-			<true/>
-			<key>PayloadDescription</key>
-			<string>Configures email account.</string>
-			<key>PayloadDisplayName</key>
-			<string>IMAP Account (<?php echo $domain; ?>)</string>
-			<key>PayloadIdentifier</key>
-			<string><?php echo $identifier; ?>.email</string>
-			<key>PayloadOrganization</key>
-			<string></string>
-			<key>PayloadType</key>
-			<string>com.apple.mail.managed</string>
-			<key>PayloadUUID</key>
-			<string>00294FBB-1016-413E-87B9-652D856D6875</string>
-			<key>PayloadVersion</key>
-			<integer>1</integer>
-			<key>PreventAppSheet</key>
-			<false/>
-			<key>PreventMove</key>
-			<false/>
-			<key>SMIMEEnabled</key>
-			<false/>
-		</dict>
-		<dict>
-			<key>CardDAVAccountDescription</key>
-			<string><?php echo $domain; ?></string>
-			<key>CardDAVHostName</key>
-			<string><?php echo $autodiscover_config['carddav']['server']; ?></string>
-			<key>CardDAVPort</key>
-			<integer><?php echo $autodiscover_config['carddav']['port']; ?></integer>
-			<key>CardDAVPrincipalURL</key>
-			<string>/SOGo/dav/<?php echo $email; ?></string>
-			<key>CardDAVUseSSL</key>
-			<true/>
-			<key>CardDAVUsername</key>
-			<string><?php echo $email; ?></string>
-			<key>PayloadDescription</key>
-			<string>Configures CardDAV accounts</string>
-			<key>PayloadDisplayName</key>
-			<string>CardDAV (<?php echo $domain; ?>)</string>
-			<key>PayloadIdentifier</key>
-			<string><?php echo $identifier; ?>.carddav</string>
-			<key>PayloadOrganization</key>
-			<string></string>
-			<key>PayloadType</key>
-			<string>com.apple.carddav.account</string>
-			<key>PayloadUUID</key>
-			<string>0797EF2B-B1F1-4BC7-ABCD-4580862252B4</string>
-			<key>PayloadVersion</key>
-			<integer>1</integer>
-		</dict>
-	</array>
-	<key>PayloadDescription</key>
-	<string>IMAP, CalDAV, CardDAV</string>
-	<key>PayloadDisplayName</key>
-	<string><?php echo $domain; ?> Mailcow</string>
-	<key>PayloadIdentifier</key>
-	<string><?php echo $identifier; ?></string>
-	<key>PayloadOrganization</key>
-	<string></string>
-	<key>PayloadRemovalDisallowed</key>
-	<false/>
-	<key>PayloadType</key>
-	<string>Configuration</string>
-	<key>PayloadUUID</key>
-	<string>5EE248C5-ACCB-42D8-9199-8F8ED08D5624</string>
-	<key>PayloadVersion</key>
-	<integer>1</integer>
-</dict>
+  <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>SMIMEEnabled</key>
+        <false/>
+      </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>