diff --git a/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/calendar.inc.php b/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/calendar.inc.php index e4bff23b..d000f20f 100644 --- a/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/calendar.inc.php +++ b/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/calendar.inc.php @@ -1,32 +1,38 @@ diff --git a/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/chwala.inc.php b/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/chwala.inc.php index 260e6234..1fd0a6be 100644 --- a/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/chwala.inc.php +++ b/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/chwala.inc.php @@ -1,163 +1,167 @@ array( 'driver' => 'seafile', 'host' => 'seacloud.cc', // when username is set to '%u' current user name and password // will be used to authenticate to this storage source 'username' => '%u', ), 'Public-Files' => array( 'driver' => 'webdav', 'baseuri' => 'https://some.host.tld/Files', 'username' => 'admin', 'password' => 'pass', ), ); */ // $config['fileapi_sources'] = array( // 'Public-Files' => array( // 'driver' => 'webdav', // 'baseuri' => 'https://kolab.local/dav/drive/user/admin@kolab.local/', // 'username' => '%u', // 'password' => 'simple123', // ), // ); // Default values for sources configuration dialog. // Note: use driver names as the array keys. // Note: %u variable will be resolved to the current username. /* $config['fileapi_presets'] = array( 'seafile' => array( 'host' => 'seacloud.cc', 'username' => '%u', ), 'webdav' => array( 'baseuri' => 'https://some.host.tld/Files', 'username' => '%u', ), ); */ // Disables listing folders from the backend storage. // This is useful when you configured an external source(s) and // you want to use it exclusively, ignoring Kolab folders. $config['fileapi_backend_storage_disabled'] = false; // Manticore service URL. Enables use of WebODF collaborative editor. // Note: this URL should be accessible from Chwala host and Roundcube host as well. $config['fileapi_manticore'] = null; // WOPI/Office service URL. Enables use of collaborative editor supporting WOPI. // Note: this URL should be accessible from the Chwala host $config['fileapi_wopi_office'] = getenv('FILEAPI_WOPI_OFFICE'); // Name of the user interface skin. $config['file_api_skin'] = 'default'; // Chwala UI communicates with Chwala API via HTTP protocol // The URL here is a location of Chwala API service. By default // the UI location is used with addition of /api/ suffix. # Force https if we're behind a proxy. Browsers don't allow mixed content. $config['file_api_url'] = getenv('FILE_API_URL') ?: 'https://' . ($_SERVER['HTTP_HOST'] ?? null) . '/chwala/api/'; // URL for the wopi service to connect back to us (instead of file_api_url) $config['file_api_server_url'] = getenv('FILE_API_SERVER_URL'); // Type of Chwala cache. Supported values: 'db', 'apc' and 'memcache'. // Note: This is only for some additional data like WOPI capabilities. $config['fileapi_cache'] = 'db'; // lifetime of Chwala cache // possible units: s, m, h, d, w $config['fileapi_cache_ttl'] = '1d'; // LDAP addressbook that would be searched for user names autocomplete. // That should be an array refering to the Roundcube's $config['ldap_public'] // array key or complete addressbook configuration array. // FIXME: replace with non ldap solution // $config['fileapi_users_source'] = 'kolab_addressbook'; // The LDAP attribute which will be used as ACL user identifier // $config['fileapi_users_field'] = 'mail'; // The LDAP search filter will be combined with search queries // $config['fileapi_users_filter'] = ''; // Include groups in searching // $config['fileapi_groups'] = false; // Prefix added to the group name to build IMAP ACL identifier // $config['fileapi_group_prefix'] = 'group:'; // The LDAP attribute (or field name) which will be used as ACL group identifier // $config['fileapi_group_field'] = 'name'; // ------------------------------------------------ // SeaFile driver settings // ------------------------------------------------ // Enables SeaFile Web API conversation log $config['fileapi_seafile_debug'] = false; // Enables caching of some SeaFile information e.g. folders list // Note: 'db', 'apc' and 'memcache' are supported $config['fileapi_seafile_cache'] = 'db'; // Expiration time of SeaFile cache entries $config['fileapi_seafile_cache_ttl'] = '7d'; // Default SeaFile Web API host // Note: http:// and https:// (default) prefixes can be used here $config['fileapi_seafile_host'] = 'localhost'; // Enables SSL certificates validation when connecting // with any SeaFile server $config['fileapi_seafile_ssl_verify_host'] = false; $config['fileapi_seafile_ssl_verify_peer'] = false; // To support various Seafile configurations when fetching a file // from Seafile server we proxy it via Chwala server. // Enable this option to allow direct downloading of files // from Seafile server to user browser. $config['fileapi_seafile_allow_redirects'] = false; // ------------------------------------------------ // WebDAV driver settings // ------------------------------------------------ // Default URI location for WebDAV storage $config['fileapi_webdav_baseuri'] = 'https://imap/dav'; ?> diff --git a/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/config.inc.php b/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/config.inc.php index 92fd9a7f..33248bd2 100644 --- a/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/config.inc.php +++ b/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/config.inc.php @@ -1,214 +1,218 @@ 2) { array_shift($components); } $config['session_domain'] = implode('.', $components); $config['des_key'] = getenv('DES_KEY'); $config['username_domain'] = getenv('APP_DOMAIN'); $config['use_secure_urls'] = true; $config['mail_domain'] = ''; // IMAP Server Settings $config['default_host'] = getenv('IMAP_HOST'); $config['default_port'] = getenv('IMAP_PORT'); $config['imap_delimiter'] = '/'; $config['imap_force_lsub'] = true; if (str_contains(getenv('IMAP_HOST'), 'tls') || str_contains(getenv('IMAP_HOST'), 'ssl')) { $config['imap_conn_options'] = [ 'ssl' => [ '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'] = [ 'ssl' => [ 'verify_peer_name' => false, 'verify_peer' => false, 'allow_self_signed' => true ] ]; // 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 $plugins = [ 'acl', 'archive', 'calendar', 'jqueryui', 'kolab_activesync', 'kolab_addressbook', 'kolab_files', 'managesieve', 'newmail_notifier', 'odfviewer', 'redundant_attachments', 'contextmenu', 'tasklist', 'enigma', ]; - // 'kolab_auth', - // 'kolab_config', - // 'kolab_delegation', - // 'kolab_folders', - // 'kolab_notes', - // 'kolab_tags', + + if (getenv('KOLABOBJECTS_COMPAT_MODE') == "true") { + $plugins[] = 'kolab_config'; + $plugins[] = 'kolab_folders'; + $plugins[] = 'kolab_notes'; + $plugins[] = 'kolab_tags'; + + // These require ldap + // $plugins[] = 'kolab_auth'; + // $plugins[] = 'kolab_delegation'; + } if ($disabledPlugins = getenvlist('DISABLED_PLUGINS')) { $plugins = array_diff($plugins, $disabledPlugins); } if ($extraPlugins = getenvlist('EXTRA_PLUGINS')) { $plugins = array_merge($plugins, $extraPlugins); } // contextmenu must be after kolab_addressbook (#444) $plugins[] = 'contextmenu'; $config['plugins'] = $plugins; // 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'] = 'logfmt'; $config['per_user_logging'] = true; $config['log_date_format'] = 'd-M-Y H:i:s,u O'; $config['smtp_log'] = false; $config['log_logins'] = true; $config['log_session'] = false; $config['sql_debug'] = getenv('SQL_DEBUG'); $config['memcache_debug'] = getenv('MEMCACHE_DEBUG'); $config['imap_debug'] = getenv('IMAP_DEBUG'); $config['smtp_debug'] = getenv('SMTP_DEBUG'); $config['dav_debug'] = getenv('DAV_DEBUG'); $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; // Disable the default addressbook and use the dav addressbook by default $config['address_book_type'] = ''; $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'); @include('chwala.inc.php'); ?> diff --git a/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/dav.inc.php b/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/dav.inc.php index 43dc1342..41e99607 100644 --- a/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/dav.inc.php +++ b/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/dav.inc.php @@ -1,54 +1,60 @@ . | | | +-------------------------------------------------------------------------+ */ $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; +// Avoid loading the kolab_auth plugin (because of ldap) +$config['kolabdav_plugins'] = [ + 'libcalendaring', + 'libkolab' +]; + // 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; diff --git a/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_auth.inc.php b/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_auth.inc.php index 013267c7..759c6960 100644 --- a/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_auth.inc.php +++ b/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_auth.inc.php @@ -1,70 +1,42 @@ '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', - ), - ); + // Ends up being read by iRony even without the plugin configured, so must be empty + $config['kolab_auth_addressbook'] = ""; // 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/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_syncroton.inc.php b/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_syncroton.inc.php index f8044bea..ec886699 100644 --- a/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_syncroton.inc.php +++ b/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/kolab_syncroton.inc.php @@ -1,129 +1,131 @@ 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/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/tasklist.inc.php b/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/tasklist.inc.php index 7e534503..24306e77 100644 --- a/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/tasklist.inc.php +++ b/docker/roundcube/rootfs/opt/app-root/src/roundcubemail-config-templates/tasklist.inc.php @@ -1,11 +1,15 @@