diff --git a/config.legacy/docker-compose.override.yml b/config.legacy/docker-compose.override.yml
new file mode 100644
index 00000000..72ca2ea3
--- /dev/null
+++ b/config.legacy/docker-compose.override.yml
@@ -0,0 +1,178 @@
+version: '3'
+services:
+ kolab:
+ build:
+ context: ./docker/kolab/
+ args:
+ DB_KOLAB_DATABASE: kolab
+ DB_KOLAB_USERNAME: kolab
+ DB_KOLAB_PASSWORD: ${DB_PASSWORD:?"DB_PASSWORD is missing"}
+ LDAP_HOST: ldap
+ LDAP_ADMIN_BIND_DN: ${LDAP_ADMIN_BIND_DN}
+ LDAP_ADMIN_BIND_PW: ${LDAP_ADMIN_BIND_PW}
+ LDAP_SERVICE_BIND_PW: ${LDAP_SERVICE_BIND_PW}
+ IMAP_ADMIN_LOGIN: ${IMAP_ADMIN_LOGIN}
+ IMAP_ADMIN_PASSWORD: ${IMAP_ADMIN_PASSWORD}
+ container_name: kolab
+ privileged: true
+ restart: on-failure
+ tty: true
+ depends_on:
+ mariadb:
+ condition: service_healthy
+ pdns:
+ condition: service_healthy
+ ldap:
+ condition: service_healthy
+ extra_hosts:
+ - "kolab.mgmt.com:127.0.0.1"
+ - "services.${APP_DOMAIN}:172.18.0.4"
+ environment:
+ - APP_DOMAIN=${APP_DOMAIN}
+ - LDAP_HOST=ldap
+ - LDAP_ADMIN_BIND_DN=${LDAP_ADMIN_BIND_DN}
+ - LDAP_ADMIN_BIND_PW=${LDAP_ADMIN_BIND_PW}
+ - LDAP_SERVICE_BIND_PW=${LDAP_SERVICE_BIND_PW}
+ - DB_HOST=mariadb
+ - DB_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
+ - DB_HKCCP_DATABASE=${DB_DATABASE}
+ - DB_HKCCP_USERNAME=${DB_USERNAME}
+ - DB_HKCCP_PASSWORD=${DB_PASSWORD:?"DB_PASSWORD is missing"}
+ - DB_KOLAB_DATABASE=kolab
+ - DB_KOLAB_USERNAME=kolab
+ - DB_KOLAB_PASSWORD=${DB_PASSWORD:?"DB_PASSWORD is missing"}
+ - SSL_CERTIFICATE=${KOLAB_SSL_CERTIFICATE:?"KOLAB_SSL_CERTIFICATE is missing"}
+ - SSL_CERTIFICATE_FULLCHAIN=${KOLAB_SSL_CERTIFICATE_FULLCHAIN:?"KOLAB_SSL_CERTIFICATE_FULLCHAIN is missing"}
+ - SSL_CERTIFICATE_KEY=${KOLAB_SSL_CERTIFICATE_KEY:?"KOLAB_SSL_CERTIFICATE_KEY is missing"}
+ - IMAP_HOST=127.0.0.1
+ - IMAP_PORT=11993
+ - IMAP_ADMIN_LOGIN=${IMAP_ADMIN_LOGIN}
+ - IMAP_ADMIN_PASSWORD=${IMAP_ADMIN_PASSWORD}
+ - MAIL_HOST=127.0.0.1
+ - MAIL_PORT=10587
+ healthcheck:
+ interval: 10s
+ test: "systemctl is-active kolab-init || exit 1"
+ timeout: 5s
+ retries: 30
+ start_period: 5m
+ # This makes docker's dns, resolve via pdns for this container.
+ # Please note it does not affect /etc/resolv.conf
+ dns: 172.18.0.11
+ hostname: kolab.mgmt.com
+ image: kolab
+ networks:
+ kolab:
+ ipv4_address: 172.18.0.5
+ ports:
+ - "12143:12143"
+ tmpfs:
+ - /run
+ - /tmp
+ - /var/run
+ - /var/tmp
+ volumes:
+ - ./ext/:/src/:ro
+ - /etc/letsencrypt/:/etc/letsencrypt/:ro
+ - ./docker/certs/ca.cert:/etc/pki/tls/certs/ca.cert:ro
+ - ./docker/certs/ca.cert:/etc/pki/ca-trust/source/anchors/ca.cert:ro
+ - ./docker/certs/kolab.hosted.com.cert:${KOLAB_SSL_CERTIFICATE:?err}
+ - ./docker/certs/kolab.hosted.com.chain.pem:${KOLAB_SSL_CERTIFICATE_FULLCHAIN:?err}
+ - ./docker/certs/kolab.hosted.com.key:${KOLAB_SSL_CERTIFICATE_KEY:?err}
+ - ./docker/kolab/utils:/root/utils:ro
+ - /sys/fs/cgroup:/sys/fs/cgroup:ro
+ - imap:/imapdata
+
+ ldap:
+ build:
+ context: ./docker/ldap/
+ container_name: kolab-ldap
+ restart: on-failure
+ tty: true
+ hostname: ldap
+ privileged: true
+ environment:
+ - APP_DOMAIN=${APP_DOMAIN}
+ - LDAP_ADMIN_ROOT_DN=${LDAP_ADMIN_ROOT_DN}
+ - LDAP_ADMIN_BIND_DN=${LDAP_ADMIN_BIND_DN}
+ - LDAP_ADMIN_BIND_PW=${LDAP_ADMIN_BIND_PW}
+ - LDAP_SERVICE_BIND_PW=${LDAP_SERVICE_BIND_PW}
+ - LDAP_HOSTED_BIND_PW=${LDAP_HOSTED_BIND_PW}
+ - IMAP_ADMIN_PASSWORD=${IMAP_ADMIN_PASSWORD}
+ healthcheck:
+ interval: 10s
+ test: "systemctl status dirsrv@kolab || exit 1"
+ timeout: 5s
+ retries: 30
+ start_period: 5m
+ image: kolab-ldap
+ networks:
+ kolab:
+ ipv4_address: 172.18.0.12
+ tmpfs:
+ - /run
+ - /tmp
+ - /var/run
+ - /var/tmp
+ volumes:
+ - /sys/fs/cgroup:/sys/fs/cgroup:ro
+ - ldap:/ldapdata
+ roundcube:
+ build:
+ context: ./docker/roundcube/
+ container_name: kolab-roundcube
+ hostname: roundcube.hosted.com
+ restart: on-failure
+ depends_on:
+ mariadb:
+ condition: service_healthy
+ pdns:
+ condition: service_healthy
+ kolab:
+ condition: service_healthy
+ environment:
+ - APP_DOMAIN=${APP_DOMAIN}
+ - LDAP_HOST=ldap
+ - LDAP_ADMIN_BIND_DN=${LDAP_ADMIN_BIND_DN}
+ - LDAP_ADMIN_BIND_PW=${LDAP_ADMIN_BIND_PW}
+ - LDAP_SERVICE_BIND_PW=${LDAP_SERVICE_BIND_PW}
+ - LDAP_HOSTED_BIND_PW=${LDAP_HOSTED_BIND_PW}
+ - DB_HOST=mariadb
+ - DB_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
+ - DB_RC_DATABASE=roundcube
+ - DB_RC_USERNAME=roundcube
+ - DB_RC_PASSWORD=${DB_PASSWORD:?"DB_PASSWORD is missing"}
+ - IMAP_PROXY_PROTOCOL=2
+ - IMAP_HOST=tls://haproxy
+ - IMAP_PORT=11143
+ - IMAP_PROXY_PROTOCOL=2
+ - IMAP_ADMIN_LOGIN=${IMAP_ADMIN_LOGIN}
+ - IMAP_ADMIN_PASSWORD=${IMAP_ADMIN_PASSWORD}
+ - MAIL_HOST=tls://kolab
+ - MAIL_PORT=10587
+ haproxy:
+ build:
+ context: ./docker/haproxy/
+ healthcheck:
+ interval: 10s
+ test: "kill -0 $$(cat /var/run/haproxy.pid)"
+ timeout: 5s
+ retries: 30
+ container_name: kolab-haproxy
+ restart: on-failure
+ hostname: haproxy.hosted.com
+ image: kolab-haproxy
+ networks:
+ kolab:
+ ipv4_address: 172.18.0.6
+ tmpfs:
+ - /run
+ - /tmp
+ - /var/run
+ - /var/tmp
+ volumes:
+ - ./docker/certs/:/etc/certs/:ro
+ - /etc/letsencrypt/:/etc/letsencrypt/:ro
+volumes:
+ ldap:
+ imap:
diff --git a/docker/kolab/Dockerfile b/config.legacy/docker/kolab/Dockerfile
similarity index 100%
rename from docker/kolab/Dockerfile
rename to config.legacy/docker/kolab/Dockerfile
diff --git a/docker/kolab/cyrus.conf b/config.legacy/docker/kolab/cyrus.conf
similarity index 100%
rename from docker/kolab/cyrus.conf
rename to config.legacy/docker/kolab/cyrus.conf
diff --git a/docker/kolab/guam.conf b/config.legacy/docker/kolab/guam.conf
similarity index 100%
rename from docker/kolab/guam.conf
rename to config.legacy/docker/kolab/guam.conf
diff --git a/docker/kolab/imapd.annotations.conf b/config.legacy/docker/kolab/imapd.annotations.conf
similarity index 100%
rename from docker/kolab/imapd.annotations.conf
rename to config.legacy/docker/kolab/imapd.annotations.conf
diff --git a/docker/kolab/imapd.conf b/config.legacy/docker/kolab/imapd.conf
similarity index 100%
rename from docker/kolab/imapd.conf
rename to config.legacy/docker/kolab/imapd.conf
diff --git a/docker/kolab/kolab-init.service b/config.legacy/docker/kolab/kolab-init.service
similarity index 100%
rename from docker/kolab/kolab-init.service
rename to config.legacy/docker/kolab/kolab-init.service
diff --git a/docker/kolab/kolab-init.sh b/config.legacy/docker/kolab/kolab-init.sh
similarity index 100%
rename from docker/kolab/kolab-init.sh
rename to config.legacy/docker/kolab/kolab-init.sh
diff --git a/docker/kolab/kolab-setenv.service b/config.legacy/docker/kolab/kolab-setenv.service
similarity index 100%
rename from docker/kolab/kolab-setenv.service
rename to config.legacy/docker/kolab/kolab-setenv.service
diff --git a/docker/kolab/kolab.conf b/config.legacy/docker/kolab/kolab.conf
similarity index 100%
rename from docker/kolab/kolab.conf
rename to config.legacy/docker/kolab/kolab.conf
diff --git a/docker/kolab/rootfs/etc/postfix/header_checks.inbound b/config.legacy/docker/kolab/rootfs/etc/postfix/header_checks.inbound
similarity index 100%
rename from docker/kolab/rootfs/etc/postfix/header_checks.inbound
rename to config.legacy/docker/kolab/rootfs/etc/postfix/header_checks.inbound
diff --git a/docker/kolab/rootfs/etc/postfix/header_checks.internal b/config.legacy/docker/kolab/rootfs/etc/postfix/header_checks.internal
similarity index 100%
rename from docker/kolab/rootfs/etc/postfix/header_checks.internal
rename to config.legacy/docker/kolab/rootfs/etc/postfix/header_checks.internal
diff --git a/docker/kolab/rootfs/etc/postfix/header_checks.submission b/config.legacy/docker/kolab/rootfs/etc/postfix/header_checks.submission
similarity index 100%
rename from docker/kolab/rootfs/etc/postfix/header_checks.submission
rename to config.legacy/docker/kolab/rootfs/etc/postfix/header_checks.submission
diff --git a/docker/kolab/rootfs/etc/postfix/ldap/local_recipient_maps.cf b/config.legacy/docker/kolab/rootfs/etc/postfix/ldap/local_recipient_maps.cf
similarity index 100%
rename from docker/kolab/rootfs/etc/postfix/ldap/local_recipient_maps.cf
rename to config.legacy/docker/kolab/rootfs/etc/postfix/ldap/local_recipient_maps.cf
diff --git a/docker/kolab/rootfs/etc/postfix/ldap/mailenabled_distgroups.cf b/config.legacy/docker/kolab/rootfs/etc/postfix/ldap/mailenabled_distgroups.cf
similarity index 100%
rename from docker/kolab/rootfs/etc/postfix/ldap/mailenabled_distgroups.cf
rename to config.legacy/docker/kolab/rootfs/etc/postfix/ldap/mailenabled_distgroups.cf
diff --git a/docker/kolab/rootfs/etc/postfix/ldap/mailenabled_dynamic_distgroups.cf b/config.legacy/docker/kolab/rootfs/etc/postfix/ldap/mailenabled_dynamic_distgroups.cf
similarity index 100%
rename from docker/kolab/rootfs/etc/postfix/ldap/mailenabled_dynamic_distgroups.cf
rename to config.legacy/docker/kolab/rootfs/etc/postfix/ldap/mailenabled_dynamic_distgroups.cf
diff --git a/docker/kolab/rootfs/etc/postfix/ldap/mydestination.cf b/config.legacy/docker/kolab/rootfs/etc/postfix/ldap/mydestination.cf
similarity index 100%
rename from docker/kolab/rootfs/etc/postfix/ldap/mydestination.cf
rename to config.legacy/docker/kolab/rootfs/etc/postfix/ldap/mydestination.cf
diff --git a/docker/kolab/rootfs/etc/postfix/ldap/transport_maps.cf b/config.legacy/docker/kolab/rootfs/etc/postfix/ldap/transport_maps.cf
similarity index 100%
rename from docker/kolab/rootfs/etc/postfix/ldap/transport_maps.cf
rename to config.legacy/docker/kolab/rootfs/etc/postfix/ldap/transport_maps.cf
diff --git a/docker/kolab/rootfs/etc/postfix/ldap/virtual_alias_maps.cf b/config.legacy/docker/kolab/rootfs/etc/postfix/ldap/virtual_alias_maps.cf
similarity index 100%
rename from docker/kolab/rootfs/etc/postfix/ldap/virtual_alias_maps.cf
rename to config.legacy/docker/kolab/rootfs/etc/postfix/ldap/virtual_alias_maps.cf
diff --git a/docker/kolab/rootfs/etc/postfix/ldap/virtual_alias_maps_mailforwarding.cf b/config.legacy/docker/kolab/rootfs/etc/postfix/ldap/virtual_alias_maps_mailforwarding.cf
similarity index 100%
rename from docker/kolab/rootfs/etc/postfix/ldap/virtual_alias_maps_mailforwarding.cf
rename to config.legacy/docker/kolab/rootfs/etc/postfix/ldap/virtual_alias_maps_mailforwarding.cf
diff --git a/docker/kolab/rootfs/etc/postfix/ldap/virtual_alias_maps_sharedfolders.cf b/config.legacy/docker/kolab/rootfs/etc/postfix/ldap/virtual_alias_maps_sharedfolders.cf
similarity index 100%
rename from docker/kolab/rootfs/etc/postfix/ldap/virtual_alias_maps_sharedfolders.cf
rename to config.legacy/docker/kolab/rootfs/etc/postfix/ldap/virtual_alias_maps_sharedfolders.cf
diff --git a/docker/kolab/rootfs/etc/postfix/main.cf b/config.legacy/docker/kolab/rootfs/etc/postfix/main.cf
similarity index 100%
rename from docker/kolab/rootfs/etc/postfix/main.cf
rename to config.legacy/docker/kolab/rootfs/etc/postfix/main.cf
diff --git a/docker/kolab/rootfs/etc/postfix/master.cf b/config.legacy/docker/kolab/rootfs/etc/postfix/master.cf
similarity index 100%
rename from docker/kolab/rootfs/etc/postfix/master.cf
rename to config.legacy/docker/kolab/rootfs/etc/postfix/master.cf
diff --git a/docker/kolab/rootfs/etc/postfix/transport b/config.legacy/docker/kolab/rootfs/etc/postfix/transport
similarity index 100%
rename from docker/kolab/rootfs/etc/postfix/transport
rename to config.legacy/docker/kolab/rootfs/etc/postfix/transport
diff --git a/docker/kolab/utils/01-reverse-etc-hosts.sh b/config.legacy/docker/kolab/utils/01-reverse-etc-hosts.sh
similarity index 100%
rename from docker/kolab/utils/01-reverse-etc-hosts.sh
rename to config.legacy/docker/kolab/utils/01-reverse-etc-hosts.sh
diff --git a/docker/kolab/utils/02-write-my.cnf.sh b/config.legacy/docker/kolab/utils/02-write-my.cnf.sh
similarity index 100%
rename from docker/kolab/utils/02-write-my.cnf.sh
rename to config.legacy/docker/kolab/utils/02-write-my.cnf.sh
diff --git a/docker/kolab/utils/03-setup-kolab.sh b/config.legacy/docker/kolab/utils/03-setup-kolab.sh
similarity index 100%
rename from docker/kolab/utils/03-setup-kolab.sh
rename to config.legacy/docker/kolab/utils/03-setup-kolab.sh
diff --git a/docker/kolab/utils/04-reset-mysql-kolab-password.sh b/config.legacy/docker/kolab/utils/04-reset-mysql-kolab-password.sh
similarity index 100%
rename from docker/kolab/utils/04-reset-mysql-kolab-password.sh
rename to config.legacy/docker/kolab/utils/04-reset-mysql-kolab-password.sh
diff --git a/docker/kolab/utils/05-adjust-configs.sh b/config.legacy/docker/kolab/utils/05-adjust-configs.sh
similarity index 100%
rename from docker/kolab/utils/05-adjust-configs.sh
rename to config.legacy/docker/kolab/utils/05-adjust-configs.sh
diff --git a/docker/kolab/utils/09-enable-debugging.sh b/config.legacy/docker/kolab/utils/09-enable-debugging.sh
similarity index 100%
rename from docker/kolab/utils/09-enable-debugging.sh
rename to config.legacy/docker/kolab/utils/09-enable-debugging.sh
diff --git a/docker/kolab/utils/10-reset-kolab-service-password.sh b/config.legacy/docker/kolab/utils/10-reset-kolab-service-password.sh
similarity index 100%
rename from docker/kolab/utils/10-reset-kolab-service-password.sh
rename to config.legacy/docker/kolab/utils/10-reset-kolab-service-password.sh
diff --git a/docker/kolab/utils/101-update-pykolab.sh b/config.legacy/docker/kolab/utils/101-update-pykolab.sh
similarity index 100%
rename from docker/kolab/utils/101-update-pykolab.sh
rename to config.legacy/docker/kolab/utils/101-update-pykolab.sh
diff --git a/docker/kolab/utils/103-import-mailbox.sh b/config.legacy/docker/kolab/utils/103-import-mailbox.sh
similarity index 100%
rename from docker/kolab/utils/103-import-mailbox.sh
rename to config.legacy/docker/kolab/utils/103-import-mailbox.sh
diff --git a/docker/kolab/utils/11-reset-cyrus-admin-password.sh b/config.legacy/docker/kolab/utils/11-reset-cyrus-admin-password.sh
similarity index 100%
rename from docker/kolab/utils/11-reset-cyrus-admin-password.sh
rename to config.legacy/docker/kolab/utils/11-reset-cyrus-admin-password.sh
diff --git a/docker/kolab/utils/23-patch-system.sh b/config.legacy/docker/kolab/utils/23-patch-system.sh
similarity index 100%
rename from docker/kolab/utils/23-patch-system.sh
rename to config.legacy/docker/kolab/utils/23-patch-system.sh
diff --git a/docker/kolab/utils/cyrusadmin.sh b/config.legacy/docker/kolab/utils/cyrusadmin.sh
similarity index 100%
rename from docker/kolab/utils/cyrusadmin.sh
rename to config.legacy/docker/kolab/utils/cyrusadmin.sh
diff --git a/docker/kolab/utils/extra/00-allow-anonymous-bind.sh b/config.legacy/docker/kolab/utils/extra/00-allow-anonymous-bind.sh
similarity index 100%
rename from docker/kolab/utils/extra/00-allow-anonymous-bind.sh
rename to config.legacy/docker/kolab/utils/extra/00-allow-anonymous-bind.sh
diff --git a/docker/kolab/utils/extra/00-disallow-anonymous-bind.sh b/config.legacy/docker/kolab/utils/extra/00-disallow-anonymous-bind.sh
similarity index 100%
rename from docker/kolab/utils/extra/00-disallow-anonymous-bind.sh
rename to config.legacy/docker/kolab/utils/extra/00-disallow-anonymous-bind.sh
diff --git a/docker/kolab/utils/extra/10-test-detected-vlv.sh b/config.legacy/docker/kolab/utils/extra/10-test-detected-vlv.sh
similarity index 100%
rename from docker/kolab/utils/extra/10-test-detected-vlv.sh
rename to config.legacy/docker/kolab/utils/extra/10-test-detected-vlv.sh
diff --git a/docker/kolab/utils/extra/10d-test-use-detected-vlv.sh b/config.legacy/docker/kolab/utils/extra/10d-test-use-detected-vlv.sh
similarity index 100%
rename from docker/kolab/utils/extra/10d-test-use-detected-vlv.sh
rename to config.legacy/docker/kolab/utils/extra/10d-test-use-detected-vlv.sh
diff --git a/docker/kolab/utils/extra/10e-test-use-detected-vlv-with-search.sh b/config.legacy/docker/kolab/utils/extra/10e-test-use-detected-vlv-with-search.sh
similarity index 100%
rename from docker/kolab/utils/extra/10e-test-use-detected-vlv-with-search.sh
rename to config.legacy/docker/kolab/utils/extra/10e-test-use-detected-vlv-with-search.sh
diff --git a/docker/kolab/utils/extra/11-test-detected-vlv-with-search.sh b/config.legacy/docker/kolab/utils/extra/11-test-detected-vlv-with-search.sh
similarity index 100%
rename from docker/kolab/utils/extra/11-test-detected-vlv-with-search.sh
rename to config.legacy/docker/kolab/utils/extra/11-test-detected-vlv-with-search.sh
diff --git a/docker/kolab/utils/extra/20-disable-access-log.sh b/config.legacy/docker/kolab/utils/extra/20-disable-access-log.sh
similarity index 100%
rename from docker/kolab/utils/extra/20-disable-access-log.sh
rename to config.legacy/docker/kolab/utils/extra/20-disable-access-log.sh
diff --git a/docker/kolab/utils/extra/21-enable-access-log.sh b/config.legacy/docker/kolab/utils/extra/21-enable-access-log.sh
similarity index 100%
rename from docker/kolab/utils/extra/21-enable-access-log.sh
rename to config.legacy/docker/kolab/utils/extra/21-enable-access-log.sh
diff --git a/docker/kolab/utils/extra/30-enable-audit-log.sh b/config.legacy/docker/kolab/utils/extra/30-enable-audit-log.sh
similarity index 100%
rename from docker/kolab/utils/extra/30-enable-audit-log.sh
rename to config.legacy/docker/kolab/utils/extra/30-enable-audit-log.sh
diff --git a/docker/kolab/utils/extra/31-disable-audit-log.sh b/config.legacy/docker/kolab/utils/extra/31-disable-audit-log.sh
similarity index 100%
rename from docker/kolab/utils/extra/31-disable-audit-log.sh
rename to config.legacy/docker/kolab/utils/extra/31-disable-audit-log.sh
diff --git a/docker/kolab/utils/extra/settings.sh b/config.legacy/docker/kolab/utils/extra/settings.sh
similarity index 100%
rename from docker/kolab/utils/extra/settings.sh
rename to config.legacy/docker/kolab/utils/extra/settings.sh
diff --git a/docker/kolab/utils/injectmimemessage.sh b/config.legacy/docker/kolab/utils/injectmimemessage.sh
similarity index 100%
rename from docker/kolab/utils/injectmimemessage.sh
rename to config.legacy/docker/kolab/utils/injectmimemessage.sh
diff --git a/docker/kolab/utils/settings.sh b/config.legacy/docker/kolab/utils/settings.sh
similarity index 100%
rename from docker/kolab/utils/settings.sh
rename to config.legacy/docker/kolab/utils/settings.sh
diff --git a/docker/ldap/Dockerfile b/config.legacy/docker/ldap/Dockerfile
similarity index 100%
rename from docker/ldap/Dockerfile
rename to config.legacy/docker/ldap/Dockerfile
diff --git a/docker/ldap/init.sh b/config.legacy/docker/ldap/init.sh
similarity index 100%
rename from docker/ldap/init.sh
rename to config.legacy/docker/ldap/init.sh
diff --git a/docker/ldap/kolab-init.service b/config.legacy/docker/ldap/kolab-init.service
similarity index 100%
rename from docker/ldap/kolab-init.service
rename to config.legacy/docker/ldap/kolab-init.service
diff --git a/docker/ldap/kolab-setenv.service b/config.legacy/docker/ldap/kolab-setenv.service
similarity index 100%
rename from docker/ldap/kolab-setenv.service
rename to config.legacy/docker/ldap/kolab-setenv.service
diff --git a/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/acl.inc.php b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/acl.inc.php
new file mode 100644
index 00000000..e6a6a017
--- /dev/null
+++ b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/acl.inc.php
@@ -0,0 +1,14 @@
+
diff --git a/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/calendar.inc.php b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/calendar.inc.php
new file mode 100644
index 00000000..1a97b475
--- /dev/null
+++ b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/calendar.inc.php
@@ -0,0 +1,73 @@
+ 'Kolab Resources',
+ 'hosts' => getenv('LDAP_HOST'),
+ 'port' => 389,
+ 'use_tls' => false,
+ 'base_dn' => 'dc=hosted,dc=com',
+ 'user_specific' => true,
+ 'bind_dn' => '%dn',
+ 'bind_pass' => '',
+ 'search_base_dn' => 'dc=hosted,dc=com',
+ 'search_bind_dn' => 'uid=kolab-service,ou=Special Users,dc=mgmt,dc=com',
+ 'search_bind_pw' => getenv('LDAP_SERVICE_BIND_PW'),
+ 'search_filter' => '(&(objectClass=inetorgperson)(mail=%fu))',
+ 'ldap_version' => 3,
+ 'filter' => '(|(|(objectclass=groupofuniquenames)(objectclass=groupofurls))(objectclass=kolabsharedfolder))',
+ 'search_fields' => array('cn'),
+ 'sort' => array('cn'),
+ 'scope' => 'sub',
+ 'fuzzy_search' => true,
+ 'fieldmap' => array(
+ // Internal => LDAP
+ 'name' => 'cn',
+ 'email' => 'mail',
+ 'owner' => 'owner',
+ 'description' => 'description',
+ 'attributes' => 'kolabdescattribute',
+ 'members' => 'uniquemember',
+ // these mappings are required for owner display
+ 'phone' => 'telephoneNumber',
+ 'mobile' => 'mobile',
+ ),
+
+ 'class_type_map' => array(
+ 'kolabsharedfolder' => 'resource',
+ 'groupofuniquenames' => 'collection',
+ ),
+
+ 'groups' => array(
+ 'name_attr' => 'cn',
+ ),
+ );
+
+ if (file_exists(RCUBE_CONFIG_DIR . '/' . ($_SERVER["HTTP_HOST"] ?? null) . '/' . basename(__FILE__))) {
+ include_once(RCUBE_CONFIG_DIR . '/' . ($_SERVER["HTTP_HOST"] ?? null) . '/' . basename(__FILE__));
+ }
+
+?>
diff --git a/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/config.inc.php b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/config.inc.php
new file mode 100644
index 00000000..d91a094d
--- /dev/null
+++ b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/config.inc.php
@@ -0,0 +1,263 @@
+ [
+ // 'verify_peer_name' => false,
+ // 'verify_peer' => false,
+ // 'allow_self_signed' => true
+ // ],
+ // 'proxy_protocol' => getenv('IMAP_PROXY_PROTOCOL')
+ // ];
+ // }
+ $config['proxy_whitelist'] = getenvlist('PROXY_WHITELIST');
+
+ // Caching and storage settings
+ $config['imap_cache'] = 'db';
+ $config['imap_cache_ttl'] = '10d';
+ $config['messages_cache'] = 'db';
+ $config['message_cache_ttl'] = '10d';
+ $config['session_storage'] = 'db';
+
+ // SMTP Server Settings
+ $config['smtp_server'] = getenv('MAIL_HOST');
+ $config['smtp_port'] = getenv('MAIL_PORT');
+ $config['smtp_user'] = '%u';
+ $config['smtp_pass'] = '%p';
+ $config['smtp_helo_host'] = $_SERVER["HTTP_HOST"] ?? null;
+ // $config['smtp_conn_options'] = Array(
+ // 'ssl' => Array(
+ // 'verify_peer_name' => false,
+ // 'verify_peer' => false,
+ // 'allow_self_signed' => true
+ // )
+ // );
+
+ // LDAP Settings
+ $config['ldap_cache'] = 'db';
+ $config['ldap_cache_ttl'] = '1h';
+
+ // Kolab specific defaults
+ $config['product_name'] = 'Kolab Groupware';
+ $config['quota_zero_as_unlimited'] = false;
+ $config['login_lc'] = 2;
+ $config['auto_create_user'] = true;
+ $config['enable_installer'] = false;
+ // The SMTP server does not allow empty identities
+ $config['mdn_use_from'] = true;
+
+ // Plugins
+ $config['plugins'] = array(
+ // 'kolab_auth',
+ 'acl',
+ 'archive',
+ 'calendar',
+ 'jqueryui',
+ 'kolab_activesync',
+ 'kolab_addressbook',
+ 'kolab_config',
+ //'kolab_delegation',
+ 'kolab_files',
+ 'kolab_folders',
+ 'kolab_notes',
+ 'kolab_tags',
+ 'managesieve',
+ 'newmail_notifier',
+ 'odfviewer',
+ 'password',
+ 'redundant_attachments',
+ 'tasklist',
+ // contextmenu must be after kolab_addressbook (#444)
+ 'contextmenu',
+'enigma',
+ );
+
+
+ // Do not show deleted messages, mark deleted messages as read,
+ // and flag them as deleted instead of moving them to the Trash
+ // folder.
+ $config['skip_deleted'] = true;
+ $config['read_when_deleted'] = true;
+ $config['flag_for_deletion'] = true;
+ $config['delete_always'] = true;
+
+ $config['session_lifetime'] = 180;
+ $config['password_charset'] = 'UTF-8';
+ $config['useragent'] = 'Kolab 16/Roundcube ' . RCUBE_VERSION;
+
+ $config['message_sort_col'] = 'date';
+
+ $config['spellcheck_engine'] = 'pspell';
+ $config['spellcheck_dictionary'] = true;
+ $config['spellcheck_ignore_caps'] = true;
+ $config['spellcheck_ignore_nums'] = true;
+ $config['spellcheck_ignore_syms'] = true;
+ $config['spellcheck_languages'] = array(
+ 'da' => 'Dansk',
+ 'de' => 'Deutsch',
+ 'en' => 'English',
+ 'es' => 'Español',
+ 'fr' => 'Français',
+ 'it' => 'Italiano',
+ 'nl' => 'Nederlands',
+ 'pt' => 'Português',
+ 'ru' => 'Русский',
+ 'sv' => 'Svenska'
+ );
+
+ $config['undo_timeout'] = 10;
+ $config['upload_progress'] = 2;
+ $config['address_template'] = '{street}
{locality} {zipcode}
{country} {region}';
+ $config['preview_pane'] = true;
+ $config['preview_pane_mark_read'] = 0;
+
+ $config['autoexpand_threads'] = 2;
+ $config['top_posting'] = 0;
+ $config['sig_above'] = false;
+ $config['mdn_requests'] = 0;
+ $config['mdn_default'] = false;
+ $config['dsn_default'] = false;
+ $config['reply_same_folder'] = false;
+
+ if (file_exists(RCUBE_CONFIG_DIR . '/' . ($_SERVER["HTTP_HOST"] ?? null) . '/' . basename(__FILE__))) {
+ include_once(RCUBE_CONFIG_DIR . '/' . ($_SERVER["HTTP_HOST"] ?? null) . '/' . basename(__FILE__));
+ }
+
+ // Re-apply mandatory settings here.
+
+ $config['debug_level'] = 1;
+ $config['devel_mode'] = false;
+ $config['log_driver'] = 'stdout';
+ $config['per_user_logging'] = true;
+ $config['log_date_format'] = 'd-M-Y H:i:s,u O';
+ $config['syslog_id'] = 'roundcube';
+ $config['syslog_facility'] = LOG_USER;
+ $config['smtp_log'] = false;
+ $config['log_logins'] = true;
+ $config['log_session'] = false;
+ $config['sql_debug'] = false;
+ $config['memcache_debug'] = false;
+ $config['imap_debug'] = true;
+ $config['ldap_debug'] = false;
+ $config['smtp_debug'] = false;
+
+ $config['skin'] = 'kolab';
+ $config['skin_include_php'] = false;
+ $config['mime_magic'] = null;
+ $config['im_identify_path'] = '/usr/bin/identify';
+ $config['im_convert_path'] = '/usr/bin/convert';
+ $config['log_dir'] = 'logs/';
+ #$config['temp_dir'] = '/var/lib/roundcubemail/';
+
+ // Some additional default folders (archive plugin)
+ $config['archive_mbox'] = 'Archive';
+ // The Kolab daemon by default creates 'Spam'
+ $config['junk_mbox'] = 'Spam';
+ $config['default_folders'] = array('INBOX', 'Drafts', 'Sent', 'Spam', 'Trash', 'Archive');
+
+ $config['address_book_type'] = 'ldap';
+ $config['autocomplete_min_length'] = 3;
+ $config['autocomplete_threads'] = 0;
+ $config['autocomplete_max'] = 15;
+ $config['ldap_public'] = array(
+ 'kolab_addressbook' => array(
+ 'name' => 'Global Address Book',
+ 'hosts' => Array(getenv('LDAP_HOST')),
+ 'port' => 389,
+ 'use_tls' => false,
+ 'base_dn' => 'dc=hosted,dc=com',
+ 'user_specific' => true,
+ 'bind_dn' => '%dn',
+ 'bind_pass' => '',
+ 'search_base_dn' => 'dc=hosted,dc=com',
+ 'search_bind_dn' => 'uid=kolab-service,ou=Special Users,dc=mgmt,dc=com',
+ 'search_bind_pw' => getenv('LDAP_SERVICE_BIND_PW'),
+ 'search_filter' => '(&(objectClass=inetorgperson)(mail=%fu))',
+ 'writable' => false,
+ 'LDAP_Object_Classes' => array("top", "inetorgperson"),
+ 'required_fields' => array("cn", "sn", "mail"),
+ 'LDAP_rdn' => 'uid',
+ 'ldap_version' => 3, // using LDAPv3
+ 'search_fields' => array('displayname', 'mail'),
+ 'sort' => array('displayname', 'sn', 'givenname', 'cn'),
+ 'scope' => 'sub',
+ 'filter' => '(objectClass=inetorgperson)',
+ 'vlv' => true,
+ 'vlv_search' => true,
+ 'fuzzy_search' => true,
+ 'sizelimit' => '0',
+ 'timelimit' => '0',
+ 'fieldmap' => Array(
+ // Roundcube => LDAP
+ 'name' => 'displayName',
+ 'surname' => 'sn',
+ 'firstname' => 'givenName',
+ 'middlename' => 'initials',
+ 'email:primary' => 'mail',
+ 'email:alias' => 'alias',
+ 'email:personal' => 'mailalternateaddress',
+ 'phone:main' => 'telephoneNumber',
+ 'phone:work' => 'alternateTelephoneNumber',
+ 'phone:mobile' => 'mobile',
+ 'phone:work2' => 'blackberry',
+ 'jobtitle' => 'title',
+ 'manager' => 'manager',
+ 'assistant' => 'secretary',
+ 'photo' => 'jpegphoto'
+ ),
+ 'groups' => Array(
+ 'base_dn' => 'dc=hosted,dc=com',
+ 'filter' => '(&' . '(|(objectclass=groupofuniquenames)(objectclass=groupofurls))' . '(mail=*))',
+ 'object_classes' => Array("top", "groupOfUniqueNames"),
+ 'member_attr' => 'uniqueMember',
+ ),
+ ),
+ );
+
+ $config['autocomplete_addressbooks'] = Array(
+ 'kolab_addressbook'
+ );
+
+ $config['autocomplete_single'] = true;
+
+ $config['htmleditor'] = 0;
+
+ $config['kolab_http_request'] = Array(
+ 'ssl_verify_host' => false,
+ 'ssl_verify_peer' => false,
+ );
+
+ @include('kolab_syncroton.inc.php');
+
+?>
diff --git a/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/dav.inc.php b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/dav.inc.php
new file mode 100644
index 00000000..257c1ec7
--- /dev/null
+++ b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/dav.inc.php
@@ -0,0 +1,160 @@
+. |
+ | |
+ +-------------------------------------------------------------------------+
+*/
+
+$config = array();
+
+// The HTTP path to the iRony root directory.
+// Set to / if the service is registered as document root for a virtual host
+$config['base_uri'] = '/iRony/';
+
+// User agent string written to kolab storage MIME messages
+$config['useragent'] = 'Kolab DAV Server libkolab/' . RCUBE_VERSION;
+
+// Type of Auth cache. Supported values: 'db', 'apc' and 'memcache'.
+// Note: This is only for username canonification map.
+$config['kolabdav_auth_cache'] = 'db';
+
+// lifetime of the Auth cache, possible units: s, m, h, d, w
+$config['kolabdav_auth_cache_ttl'] = '1h';
+
+// enable debug console showing the internal function calls triggered
+// by http requests. This will write log to /var/log/iRony/console
+$config['kolabdav_console'] = false;
+
+// enable logging of full HTTP payload
+// (bitmask of these values: 2 = HTTP Requests, 4 = HTTP Responses)
+$config['kolabdav_http_log'] = 0;
+
+// expose iTip invitations from email inbox in CalDAV scheduling inbox.
+// this will make capable CalDAV clients process event invitations and
+// as a result, the invitation messages are removed from the email inbox.
+// WARNING: this feature is still experimental and not fully implemented.
+// See https://git.kolab.org/T93 for details and implementation status.
+$config['kolabdav_caldav_inbox'] = false;
+
+// Enables the CardDAV Directory Gateway Extension by exposing an
+// LDAP-based address book in the pricipals address book collection.
+// Properties of this option are the same as for $config['ldap_public'] entries.
+// NOTE: Mapping of (additional) 'uid' and 'changed' fields is required!
+/*
+$config['kolabdav_ldap_directory'] = array(
+ 'name' => 'Global Address Book',
+ 'hosts' => 'localhost',
+ 'port' => 389,
+ 'use_tls' => false,
+ // If true the base_dn, bind_dn and bind_pass default to the user's credentials.
+ 'user_specific' => false,
+ // It's possible to bind with the current user's credentials for individual address books.
+ // The login name is used to search for the DN to bind with
+ 'search_base_dn' => 'ou=People,dc=example,dc=org',
+ 'search_bind_dn' => 'uid=kolab-service,ou=Special Users,dc=example,dc=org',
+ 'search_bind_pw' => 'Welcome2KolabSystems',
+ 'search_filter' => '(&(objectClass=inetOrgPerson)(mail=%fu))',
+ // When 'user_specific' is enabled following variables can be used in base_dn/bind_dn config:
+ // %fu - The full username provided, assumes the username is an email
+ // address, uses the username_domain value if not an email address.
+ // %u - The username prior to the '@'.
+ // %d - The domain name after the '@'.
+ // %dc - The domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
+ // %dn - DN found by ldap search when search_filter/search_base_dn are used
+ 'base_dn' => 'ou=People,dc=example,dc=org',
+ 'bind_dn' => 'uid=kolab-service,ou=Special Users,dc=example,dc=org',
+ 'bind_pass' => 'Welcome2KolabSystems',
+ 'ldap_version' => 3,
+ 'filter' => '(objectClass=inetOrgPerson)',
+ 'search_fields' => array('displayname', 'mail'),
+ 'sort' => array('displayname', 'sn', 'givenname', 'cn'),
+ 'scope' => 'sub',
+ 'searchonly' => true, // Set to false to enable listing
+ 'sizelimit' => '1000',
+ 'timelimit' => '0',
+ 'fieldmap' => array(
+ // Roundcube => LDAP
+ 'name' => 'displayName',
+ 'surname' => 'sn',
+ 'firstname' => 'givenName',
+ 'middlename' => 'initials',
+ 'prefix' => 'title',
+ 'email:work' => 'mail',
+ 'email:other' => 'alias',
+ 'phone:main' => 'telephoneNumber',
+ 'phone:work' => 'alternateTelephoneNumber',
+ 'phone:mobile' => 'mobile',
+ 'phone:work2' => 'blackberry',
+ 'street' => 'street',
+ 'zipcode' => 'postalCode',
+ 'locality' => 'l',
+ 'organization' => 'o',
+ 'jobtitle' => 'title',
+ 'photo' => 'jpegphoto',
+ // required for internal handling and caching
+ 'uid' => 'nsuniqueid',
+ 'changed' => 'modifytimestamp',
+ ),
+);
+
+// Expose all resources as an LDAP-based address book in the pricipals address book collection.
+// This enables Non-Kolab-Clients to add resources to an event.
+// Properties of this option are the same as for $config['kolabdav_ldap_directory'] entries.
+$config['kolabdav_ldap_resources'] = array(
+ 'name' => 'Global Resources',
+ 'hosts' => 'localhost',
+ 'port' => 389,
+ 'use_tls' => false,
+ 'user_specific' => false,
+ 'search_base_dn' => 'ou=People,dc=example,dc=org',
+ 'search_bind_dn' => 'uid=kolab-service,ou=Special Users,dc=example,dc=org',
+ 'search_bind_pw' => 'Welcome2KolabSystems',
+ 'search_filter' => '(&(objectClass=inetOrgPerson)(mail=%fu))',
+ 'base_dn' => 'ou=Resources,dc=example,dc=org',
+ 'bind_dn' => 'uid=kolab-service,ou=Special Users,dc=example,dc=org',
+ 'bind_pass' => 'Welcome2KolabSystems',
+ 'ldap_version' => 3,
+ 'filter' => '(|(objectclass=groupofuniquenames)(objectclass=groupofurls)(objectclass=kolabsharedfolder))',
+ 'search_fields' => array('displayname', 'mail'),
+ 'sort' => array('displayname', 'sn', 'givenname', 'cn'),
+ 'scope' => 'sub',
+ 'searchonly' => false, // Set to false to enable listing
+ 'sizelimit' => '1000',
+ 'timelimit' => '0',
+ 'fieldmap' => array(
+ // Internal => LDAP
+ 'name' => 'cn',
+ 'email' => 'mail',
+ 'owner' => 'owner',
+ 'description' => 'description',
+ 'attributes' => 'kolabdescattribute',
+ 'members' => 'uniquemember',
+ // these mappings are required for owner display
+ 'phone' => 'telephoneNumber',
+ 'mobile' => 'mobile',
+ ),
+);
+
+*/
+
+// Enable caching for LDAP directory data.
+// This is recommended with 'searchonly' => false to speed-up sychronization of multiple clients
+// $config['kolabdav_ldap_cache'] = 'memcache';
+// $config['kolabdav_ldap_cache_ttl'] = 600; // in seconds
diff --git a/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_activesync.inc.php b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_activesync.inc.php
new file mode 100644
index 00000000..20011256
--- /dev/null
+++ b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_activesync.inc.php
@@ -0,0 +1,7 @@
+ not subscribed, 1 => subscribed, 2 => subscribed with alarm
+$config['activesync_force_subscriptions'] = array('windowsoutlook15' => array('INBOX' => 1, 'Sent' => 1, 'Trash' => 1, 'Calendar' => 1, 'Contacts' => 1, 'Tasks' => 1));
diff --git a/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_addressbook.inc.php b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_addressbook.inc.php
new file mode 100644
index 00000000..0f6b8ab6
--- /dev/null
+++ b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_addressbook.inc.php
@@ -0,0 +1,20 @@
+
diff --git a/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_auth.inc.php b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_auth.inc.php
new file mode 100644
index 00000000..013267c7
--- /dev/null
+++ b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_auth.inc.php
@@ -0,0 +1,70 @@
+ 'Kolab Auth',
+ 'hosts' => Array(getenv('LDAP_HOST')),
+ 'port' => 389,
+ 'use_tls' => false,
+ 'user_specific' => true,
+ 'base_dn' => 'dc=hosted,dc=com',
+ 'bind_dn' => 'uid=kolab-service,ou=Special Users,dc=mgmt,dc=com',
+ 'bind_pass' => getenv('LDAP_SERVICE_BIND_PW'),
+ 'writable' => false,
+ 'ldap_version' => 3, // using LDAPv3
+ 'fieldmap' => Array(
+ 'name' => 'displayname',
+ 'email' => 'mail',
+ 'email:alias' => 'alias',
+ 'role' => 'nsroledn',
+ ),
+ 'sort' => 'displayname',
+ 'scope' => 'sub',
+ 'filter' => '(objectClass=*)',
+ 'fuzzy_search' => true,
+ 'sizelimit' => '0',
+ 'timelimit' => '0',
+ 'groups' => Array(
+ 'base_dn' => 'dc=hosted,dc=com',
+ 'filter' => '(|(objectclass=groupofuniquenames)(objectclass=groupofurls))',
+ 'object_classes' => Array('top', 'groupOfUniqueNames'),
+ 'member_attr' => 'uniqueMember',
+ ),
+ );
+
+
+ // This will overwrite defined filter
+ $config['kolab_auth_filter'] = '(&' . '(objectclass=inetorgperson)' . '(|(uid=%u)(mail=%fu)(alias=%fu)))';
+
+ // Use this fields (from fieldmap configuration) to get authentication ID
+ $config['kolab_auth_login'] = 'email';
+
+ // Use this fields (from fieldmap configuration) for default identity
+ $config['kolab_auth_name'] = 'name';
+ $config['kolab_auth_alias'] = 'alias';
+ $config['kolab_auth_email'] = 'email';
+
+ if (preg_match('/\/helpdesk-login\//', $_SERVER["REQUEST_URI"] ?? null) ) {
+
+ // Login and password of the admin user. Enables "Login As" feature.
+ $config['kolab_auth_admin_login'] = getenv('IMAP_ADMIN_LOGIN');
+ $config['kolab_auth_admin_password'] = getenv('IMAP_ADMIN_PASSWORD');
+
+ $config['kolab_auth_auditlog'] = true;
+ }
+
+ // Administrative role field (from fieldmap configuration) which must be filled with
+ // specified value which adds privilege to login as another user.
+ $config['kolab_auth_role'] = 'role';
+ $config['kolab_auth_role_value'] = 'cn=kolab-admin,dc=mgmt,dc=com';
+
+ // Administrative group name to which user must be assigned to
+ // which adds privilege to login as another user.
+ $config['kolab_auth_group'] = 'Kolab Helpdesk';
+
+ if (file_exists(RCUBE_CONFIG_DIR . '/' . ($_SERVER["HTTP_HOST"] ?? null) . '/' . basename(__FILE__))) {
+ include_once(RCUBE_CONFIG_DIR . '/' . ($_SERVER["HTTP_HOST"] ?? null) . '/' . basename(__FILE__));
+ }
+
+?>
diff --git a/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_delegation.inc.php b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_delegation.inc.php
new file mode 100644
index 00000000..f8358198
--- /dev/null
+++ b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_delegation.inc.php
@@ -0,0 +1,14 @@
+
diff --git a/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_files.inc.php b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_files.inc.php
new file mode 100644
index 00000000..d67cb373
--- /dev/null
+++ b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_files.inc.php
@@ -0,0 +1,30 @@
+
diff --git a/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_folders.inc.php b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_folders.inc.php
new file mode 100644
index 00000000..d64717b0
--- /dev/null
+++ b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_folders.inc.php
@@ -0,0 +1,21 @@
+
diff --git a/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_syncroton.inc.php b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_syncroton.inc.php
new file mode 100644
index 00000000..a72b3555
--- /dev/null
+++ b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_syncroton.inc.php
@@ -0,0 +1,125 @@
+ Roundcube contact fields map for GAL search
+/* Default: array(
+ 'alias' => 'nickname',
+ 'company' => 'organization',
+ 'displayName' => 'name',
+ 'emailAddress' => 'email',
+ 'firstName' => 'firstname',
+ 'lastName' => 'surname',
+ 'mobilePhone' => 'phone.mobile',
+ 'office' => 'office',
+ 'picture' => 'photo',
+ 'phone' => 'phone',
+ 'title' => 'jobtitle',
+);
+*/
+$config['activesync_gal_fieldmap'] = null;
+
+// List of device types that will sync the LDAP addressbook(s) as a normal folder.
+// For devices that do not support GAL searching, e.g. Outlook.
+// Note: To make the LDAP addressbook sources working we need two additional
+// fields ('uid' and 'changed') specified in the fieldmap array
+// of the LDAP configuration ('ldap_public' option). For example:
+// 'uid' => 'nsuniqueid',
+// 'changed' => 'modifytimestamp',
+// Examples:
+// array('windowsoutlook') # enable for Oultook only
+// true # enable for all
+$config['activesync_gal_sync'] = false;
+
+// GAL cache. As reading all contacts from LDAP may be slow, caching is recommended.
+$config['activesync_gal_cache'] = 'db';
+
+// TTL of GAL cache entries. Technically this causes that synchronized
+// contacts will not be updated (queried) often than the specified interval.
+$config['activesync_gal_cache_ttl'] = '1d';
+
+// List of Roundcube plugins
+// WARNING: Not all plugins used in Roundcube can be listed here
+$config['activesync_plugins'] = array(
+ 'libcalendaring',
+ 'libkolab'
+);
+
+// Defines for how many seconds we'll sleep between every
+// action for detecting changes in folders. Default: 60
+$config['activesync_ping_timeout'] = 60;
+
+// Defines maximum Ping interval in seconds. Default: 900 (15 minutes)
+$config['activesync_ping_interval'] = 900;
+
+// We start detecting changes n seconds since the last sync of a folder
+// Default: 180
+$config['activesync_quiet_time'] = 0;
+
+// Defines maximum number of folders in a single Sync/Ping request. Default: 100.
+$config['activesync_max_folders'] = 100;
+
+// When a device is reqistered, by default a set of folders are
+// subscribed for syncronization, i.e. INBOX and personal folders with
+// defined folder type:
+// mail.drafts, mail.wastebasket, mail.sentitems, mail.outbox,
+// event, event.default,
+// contact, contact.default,
+// task, task.default
+// This default set can be extended by adding following values:
+// 1 - all subscribed folders in personal namespace
+// 2 - all folders in personal namespace
+// 4 - all subscribed folders in other users namespace
+// 8 - all folders in other users namespace
+// 16 - all subscribed folders in shared namespace
+// 32 - all folders in shared namespace
+$config['activesync_init_subscriptions'] = 21;
+
+// Defines blacklist of devices (device type strings) that do not support folder hierarchies.
+// When set to an array folder hierarchies are used on all devices not listed here.
+// When set to null an old whitelist approach will be used where we do opposite
+// action and enable folder hierarchies only on device types known to support it.
+$config['activesync_multifolder_blacklist'] = array();
+
+// Blacklist overwrites for specified object type. If set to an array
+// it will have a precedence over 'activesync_multifolder_blacklist' list only for that type.
+// Note: Outlook does not support multiple folders for contacts,
+// in that case use $config['activesync_multifolder_blacklist_contact'] = array('windowsoutlook');
+$config['activesync_multifolder_blacklist_mail'] = null;
+$config['activesync_multifolder_blacklist_event'] = null;
+$config['activesync_multifolder_blacklist_contact'] = array('windowsoutlook');
+$config['activesync_multifolder_blacklist_note'] = null;
+$config['activesync_multifolder_blacklist_task'] = null;
+
+$config['activesync_protected_folders'] = array('windowsoutlook' => array('INBOX', 'Sent', 'Trash'));
+
+// Enables adding sender name in the From: header of send email
+// when a device uses email address only (e.g. iOS devices)
+$config['activesync_fix_from'] = false;
diff --git a/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/libkolab.inc.php b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/libkolab.inc.php
new file mode 100644
index 00000000..76161ce8
--- /dev/null
+++ b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/libkolab.inc.php
@@ -0,0 +1,16 @@
+
diff --git a/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/managesieve.inc.php b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/managesieve.inc.php
new file mode 100644
index 00000000..db2024ee
--- /dev/null
+++ b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/managesieve.inc.php
@@ -0,0 +1,31 @@
+ Array(
+ 'verify_peer_name' => false,
+ 'verify_peer' => false,
+ 'allow_self_signed' => true
+ )
+ );
+
+ if (file_exists(RCUBE_CONFIG_DIR . '/' . $_SERVER["HTTP_HOST"] . '/' . basename(__FILE__))) {
+ include_once(RCUBE_CONFIG_DIR . '/' . $_SERVER["HTTP_HOST"] . '/' . basename(__FILE__));
+ }
+
+?>
diff --git a/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/mimetypes.inc.php b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/mimetypes.inc.php
new file mode 100644
index 00000000..efb4698e
--- /dev/null
+++ b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/mimetypes.inc.php
@@ -0,0 +1,56 @@
+ 'application/vnd.ms-excel',
+ 'xlm' => 'application/vnd.ms-excel',
+ 'xla' => 'application/vnd.ms-excel',
+ 'xlc' => 'application/vnd.ms-excel',
+ 'xlt' => 'application/vnd.ms-excel',
+ 'xlw' => 'application/vnd.ms-excel',
+ 'pdf' => 'application/pdf',
+ 'ppt' => 'application/vnd.ms-powerpoint',
+ 'pps' => 'application/vnd.ms-powerpoint',
+ 'pot' => 'application/vnd.ms-powerpoint',
+ 'doc' => 'application/msword',
+ 'dot' => 'application/msword',
+ 'odc' => 'application/vnd.oasis.opendocument.chart',
+ 'otc' => 'application/vnd.oasis.opendocument.chart-template',
+ 'odf' => 'application/vnd.oasis.opendocument.formula',
+ 'otf' => 'application/vnd.oasis.opendocument.formula-template',
+ 'odg' => 'application/vnd.oasis.opendocument.graphics',
+ 'otg' => 'application/vnd.oasis.opendocument.graphics-template',
+ 'odi' => 'application/vnd.oasis.opendocument.image',
+ 'oti' => 'application/vnd.oasis.opendocument.image-template',
+ 'odp' => 'application/vnd.oasis.opendocument.presentation',
+ 'otp' => 'application/vnd.oasis.opendocument.presentation-template',
+ 'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
+ 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
+ 'odt' => 'application/vnd.oasis.opendocument.text',
+ 'otm' => 'application/vnd.oasis.opendocument.text-master',
+ 'ott' => 'application/vnd.oasis.opendocument.text-template',
+ 'oth' => 'application/vnd.oasis.opendocument.text-web',
+ 'docm' => 'application/vnd.ms-word.document.macroEnabled.12',
+ 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+ 'dotm' => 'application/vnd.ms-word.template.macroEnabled.12',
+ 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
+ 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',
+ 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
+ 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',
+ 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
+ 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
+ 'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12',
+ 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ 'xps' => 'application/vnd.ms-xpsdocument',
+ 'rar' => 'application/x-rar-compressed',
+ '7z' => 'application/x-7z-compressed',
+ 's7z' => 'application/x-7z-compressed',
+ 'vcf' => 'text/vcard',
+ 'ics' => 'text/calendar',
+];
diff --git a/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/password.inc.php b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/password.inc.php
new file mode 100644
index 00000000..09808d92
--- /dev/null
+++ b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/password.inc.php
@@ -0,0 +1,155 @@
+
diff --git a/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/recipient_to_contact.inc.php b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/recipient_to_contact.inc.php
new file mode 100644
index 00000000..9d22aeb8
--- /dev/null
+++ b/config.legacy/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/recipient_to_contact.inc.php
@@ -0,0 +1,3 @@
+
+
+ Here could be your Message of the Day. +
+ +