From c739091a672944be03c3615832028018ac9e5ec0 Mon Sep 17 00:00:00 2001
From: Michael Kuron <m.kuron@gmx.de>
Date: Fri, 16 Jun 2017 10:30:40 +0200
Subject: [PATCH 1/3] Customize the SOGo Integrator plugin for Thunderbird

---
 data/Dockerfiles/sogo/Dockerfile              |  3 +
 data/Dockerfiles/sogo/reconf-domains.sh       |  3 +
 data/web/thunderbird-plugins.php              | 96 +++++++++++++++++++
 data/web/thunderbird-plugins/.gitignore       |  4 +
 data/web/thunderbird-plugins/build-plugins.sh | 56 +++++++++++
 docker-compose.yml                            |  1 +
 6 files changed, 163 insertions(+)
 create mode 100644 data/web/thunderbird-plugins.php
 create mode 100644 data/web/thunderbird-plugins/.gitignore
 create mode 100644 data/web/thunderbird-plugins/build-plugins.sh

diff --git a/data/Dockerfiles/sogo/Dockerfile b/data/Dockerfiles/sogo/Dockerfile
index 88617816..b9dcf5a7 100644
--- a/data/Dockerfiles/sogo/Dockerfile
+++ b/data/Dockerfiles/sogo/Dockerfile
@@ -11,12 +11,15 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
 		ca-certificates \
 		cron \
 		gnupg \
+		make \
 		mysql-client \
 		supervisor \
 		syslog-ng \
 		syslog-ng-core \
 		syslog-ng-mod-redis \
+		tar \
 		wget \
+		zip \
 	&& rm -rf /var/lib/apt/lists/* \
 	&& dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')" \
 	&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch" \
diff --git a/data/Dockerfiles/sogo/reconf-domains.sh b/data/Dockerfiles/sogo/reconf-domains.sh
index 9ea2f6dd..1f33d97e 100755
--- a/data/Dockerfiles/sogo/reconf-domains.sh
+++ b/data/Dockerfiles/sogo/reconf-domains.sh
@@ -93,6 +93,9 @@ echo '    </dict>
 chown sogo:sogo -R /var/lib/sogo/
 chmod 600 /var/lib/sogo/GNUstep/Defaults/sogod.plist
 
+# Regenerate the SOGo Integrator plugin
+/thunderbird/build-plugins.sh $MAILCOW_HOSTNAME < <(mysql --host mysql -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT domain FROM domain;" -B -N)
+
 sleep 99999
 
 done
diff --git a/data/web/thunderbird-plugins.php b/data/web/thunderbird-plugins.php
new file mode 100644
index 00000000..8a1a7e9b
--- /dev/null
+++ b/data/web/thunderbird-plugins.php
@@ -0,0 +1,96 @@
+<?php
+/* updates.php - this file is part of SOGo
+ *
+ *  Copyright (C) 2006-2014 Inverse inc.
+ *
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* This script handles the automatic propagation of extensions pertaining to a
+   SOGo site. It requires PHP 4.1.0 or later. */
+$plugin_dir = 'thunderbird-plugins';
+chdir($plugin_dir);
+$plugins = array();
+
+if (file_exists('version.csv'))
+{
+  $fh = fopen('version.csv', 'r');
+  if ($fh)
+  {
+    while (($row = fgetcsv($fh, 1000, ';')) !== FALSE)
+    {
+      $plugins[$row[0]] = array(
+        'application' => 'thunderbird',
+        'version' => $row[1],
+        'filename' => str_replace('__DOMAIN__', $_GET["domain"], $row[2]),
+      );
+    }
+    fclose($fh);
+  }
+}
+
+$applications
+= array( "thunderbird" => "<em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>
+                <em:minVersion>31.0</em:minVersion>
+                <em:maxVersion>31.*</em:maxVersion>" );
+
+$pluginname = $_GET["plugin"];
+$plugin =& $plugins[$pluginname];
+$application =& $applications[$plugin["application"]];
+
+if ( $plugin ) {
+  $platform = $_GET["platform"];
+  if ( $platform
+       && file_exists( $platform . "/" . $plugin["filename"] ) ) {
+    $plugin["filename"] = $platform . "/" . $plugin["filename"];
+  }
+  elseif ( !file_exists( $plugin["filename"] ) ) {
+    $plugin = false;
+  }
+}
+
+if ( $plugin ) {
+  header("Content-type: text/xml; charset=utf-8");
+  echo ('<?xml version="1.0"?>' . "\n");
+?>
+<!DOCTYPE RDF>
+<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+  xmlns:em="http://www.mozilla.org/2004/em-rdf#">
+  <Description about="urn:mozilla:extension:<?php echo $pluginname ?>">
+    <em:updates>
+      <Seq>
+        <li>
+          <Description>
+            <em:version><?php echo $plugin["version"] ?></em:version>
+            <em:targetApplication>
+              <Description>
+                <?php echo $applications[$plugin["application"]] ?>
+                
+                <em:updateLink><?php echo 'https://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/' .  $plugin_dir . '/' . $plugin["filename"] ?></em:updateLink>
+              </Description>
+            </em:targetApplication>
+          </Description>
+        </li>
+      </Seq>
+    </em:updates>
+  </Description>
+</RDF>
+<?php
+} else {
+  header("Content-type: text/plain; charset=utf-8", true, 404);
+  echo( 'Plugin not found' );
+}
+?>
diff --git a/data/web/thunderbird-plugins/.gitignore b/data/web/thunderbird-plugins/.gitignore
new file mode 100644
index 00000000..6f8d20b0
--- /dev/null
+++ b/data/web/thunderbird-plugins/.gitignore
@@ -0,0 +1,4 @@
+*.zip
+sogo-*-master
+version.csv
+*.xpi
\ No newline at end of file
diff --git a/data/web/thunderbird-plugins/build-plugins.sh b/data/web/thunderbird-plugins/build-plugins.sh
new file mode 100644
index 00000000..85826ad7
--- /dev/null
+++ b/data/web/thunderbird-plugins/build-plugins.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+
+set -e
+
+MAILHOST=$1
+
+cd $(dirname $0)
+
+wget -O integrator.tar.gz https://github.com/inverse-inc/sogo-integrator.tb31/archive/master.tar.gz
+wget -O connector.tar.gz https://github.com/inverse-inc/sogo-connector.tb31/archive/master.tar.gz
+
+mkdir -p integrator connector
+tar --strip-components=1 -C integrator -xf integrator.tar.gz
+tar --strip-components=1 -C connector -xf connector.tar.gz
+
+# build custom integrator
+while read DOMAIN; do
+	echo "Building SOGo Integrator for $DOMAIN hosted on $MAILHOST"
+	cd integrator
+	echo 'pref("sogo-integrator.autocomplete.server.urlid", "'${DOMAIN}'");' > defaults/preferences/site.js
+	mkdir -p custom/${DOMAIN}
+	cp -r custom/sogo-demo/* custom/${DOMAIN}/
+	sed -i "s/http:\/\/sogo-demo\.inverse\.ca/https:\/\/${MAILHOST}/g" custom/${DOMAIN}/chrome/content/extensions.rdf
+	sed -i "s/plugins\/updates\.php[?]/thunderbird-plugins.php?domain=${DOMAIN}\&amp;/g" custom/${DOMAIN}/chrome/content/extensions.rdf
+	echo 'pref("sogo-integrator.autocomplete.server.urlid", "'${DOMAIN}'");' > custom/${DOMAIN}/defaults/preferences/site.js
+	sed -i 's/<\/Seq>/<li><Description em:id="sieve@mozdev.org" em:name="Sieve"\/><\/li><li><Description em:id="imap-acl@sirphreak.com" em:name="Imap-ACL-Extension"\/><\/li><\/Seq>/g' custom/${DOMAIN}/chrome/content/extensions.rdf
+	make build=${DOMAIN}
+	INTEGRATOR_VER=$(grep em:version install.rdf | awk -F '"' '{print $2}')
+	cp sogo-integrator*.xpi ../sogo-integrator-${INTEGRATOR_VER}-${DOMAIN}.xpi
+	cd ..
+done
+
+# build connector
+cd connector
+make
+CONNECTOR_VER=$(grep em:version install.rdf | awk -F '"' '{print $2}')
+cp sogo-connector*.xpi ../sogo-connector-${CONNECTOR_VER}.xpi
+cd ..
+
+# download Sieve plugin
+SIEVE_RELEASES=$(wget -qO - https://api.github.com/repos/thsmi/sieve/releases)
+SIEVE_VER=$(echo "$SIEVE_RELEASES" | grep '"tag_name": ' | head -n 1 | awk -F '"' '{print $4}')
+wget -O sieve-${SIEVE_VER}.xpi $(echo "$SIEVE_RELEASES" | grep '"browser_download_url": ' | head -n 1 | awk -F '"' '{print $4}')
+unset SIEVE_RELEASES
+
+# download ACL plugin
+IMAP_ACL_VER=0.2.7
+wget -O imap_acl_extension-${IMAP_ACL_VER}-tb.xpi https://addons.cdn.mozilla.net/user-media/addons/_attachments/176736/imap_acl_extension-${IMAP_ACL_VER}-tb.xpi
+
+# update version file
+echo "sogo-connector@inverse.ca;${CONNECTOR_VER};sogo-connector-${CONNECTOR_VER}.xpi" > version.csv
+echo "sogo-integrator@inverse.ca;${INTEGRATOR_VER};sogo-integrator-${INTEGRATOR_VER}-__DOMAIN__.xpi" >> version.csv
+echo "sieve@mozdev.org;${SIEVE_VER};sieve-${SIEVE_VER}.xpi" >> version.csv
+echo "imap-acl@sirphreak.com;${IMAP_ACL_VER};imap_acl_extension-${IMAP_ACL_VER}-tb.xpi" >> version.csv
+
+rm -rf connector integrator *.tar.gz
diff --git a/docker-compose.yml b/docker-compose.yml
index f3e373bb..eda7ccd4 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -135,6 +135,7 @@ services:
         - TZ=${TZ}
       volumes:
         - ./data/conf/sogo/:/etc/sogo/
+        - ./data/web/thunderbird-plugins:/thunderbird
       restart: always
       dns:
         - 172.22.1.254

From d8fa38010aae48c50ea9f23b7f2580453427dbc2 Mon Sep 17 00:00:00 2001
From: Michael Kuron <m.kuron@gmx.de>
Date: Fri, 16 Jun 2017 14:02:12 +0200
Subject: [PATCH 2/3] SOGo Integrator bugfix for multiple domains

---
 data/web/thunderbird-plugins/.gitignore       | 2 +-
 data/web/thunderbird-plugins/build-plugins.sh | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)
 mode change 100644 => 100755 data/web/thunderbird-plugins/build-plugins.sh

diff --git a/data/web/thunderbird-plugins/.gitignore b/data/web/thunderbird-plugins/.gitignore
index 6f8d20b0..9146c321 100644
--- a/data/web/thunderbird-plugins/.gitignore
+++ b/data/web/thunderbird-plugins/.gitignore
@@ -1,4 +1,4 @@
 *.zip
 sogo-*-master
 version.csv
-*.xpi
\ No newline at end of file
+*.xpi
diff --git a/data/web/thunderbird-plugins/build-plugins.sh b/data/web/thunderbird-plugins/build-plugins.sh
old mode 100644
new mode 100755
index 85826ad7..820bf6e6
--- a/data/web/thunderbird-plugins/build-plugins.sh
+++ b/data/web/thunderbird-plugins/build-plugins.sh
@@ -26,7 +26,7 @@ while read DOMAIN; do
 	sed -i 's/<\/Seq>/<li><Description em:id="sieve@mozdev.org" em:name="Sieve"\/><\/li><li><Description em:id="imap-acl@sirphreak.com" em:name="Imap-ACL-Extension"\/><\/li><\/Seq>/g' custom/${DOMAIN}/chrome/content/extensions.rdf
 	make build=${DOMAIN}
 	INTEGRATOR_VER=$(grep em:version install.rdf | awk -F '"' '{print $2}')
-	cp sogo-integrator*.xpi ../sogo-integrator-${INTEGRATOR_VER}-${DOMAIN}.xpi
+	cp sogo-integrator-*-${DOMAIN}.xpi ../sogo-integrator-${INTEGRATOR_VER}-${DOMAIN}.xpi
 	cd ..
 done
 
@@ -34,7 +34,7 @@ done
 cd connector
 make
 CONNECTOR_VER=$(grep em:version install.rdf | awk -F '"' '{print $2}')
-cp sogo-connector*.xpi ../sogo-connector-${CONNECTOR_VER}.xpi
+cp sogo-connector-*.xpi ../sogo-connector-${CONNECTOR_VER}.xpi
 cd ..
 
 # download Sieve plugin

From b3b5313336345ca34f6bb989ab5348bbfaffd20f Mon Sep 17 00:00:00 2001
From: Michael Kuron <m.kuron@gmx.de>
Date: Fri, 16 Jun 2017 17:00:46 +0200
Subject: [PATCH 3/3] SOGo Integrator: match some preferences to SOGo web
 defaults

---
 data/web/thunderbird-plugins/build-plugins.sh | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/data/web/thunderbird-plugins/build-plugins.sh b/data/web/thunderbird-plugins/build-plugins.sh
index 820bf6e6..f0ea14e4 100755
--- a/data/web/thunderbird-plugins/build-plugins.sh
+++ b/data/web/thunderbird-plugins/build-plugins.sh
@@ -17,12 +17,13 @@ tar --strip-components=1 -C connector -xf connector.tar.gz
 while read DOMAIN; do
 	echo "Building SOGo Integrator for $DOMAIN hosted on $MAILHOST"
 	cd integrator
-	echo 'pref("sogo-integrator.autocomplete.server.urlid", "'${DOMAIN}'");' > defaults/preferences/site.js
+	echo > defaults/preferences/site.js
 	mkdir -p custom/${DOMAIN}
 	cp -r custom/sogo-demo/* custom/${DOMAIN}/
 	sed -i "s/http:\/\/sogo-demo\.inverse\.ca/https:\/\/${MAILHOST}/g" custom/${DOMAIN}/chrome/content/extensions.rdf
 	sed -i "s/plugins\/updates\.php[?]/thunderbird-plugins.php?domain=${DOMAIN}\&amp;/g" custom/${DOMAIN}/chrome/content/extensions.rdf
 	echo 'pref("sogo-integrator.autocomplete.server.urlid", "'${DOMAIN}'");' > custom/${DOMAIN}/defaults/preferences/site.js
+	echo 'pref("mail.collect_email_address_outgoing", false);' >> custom/${DOMAIN}/defaults/preferences/site.js
 	sed -i 's/<\/Seq>/<li><Description em:id="sieve@mozdev.org" em:name="Sieve"\/><\/li><li><Description em:id="imap-acl@sirphreak.com" em:name="Imap-ACL-Extension"\/><\/li><\/Seq>/g' custom/${DOMAIN}/chrome/content/extensions.rdf
 	make build=${DOMAIN}
 	INTEGRATOR_VER=$(grep em:version install.rdf | awk -F '"' '{print $2}')