Configure Roundcube on community
authorJan Dittberner <jandd@cacert.org>
Fri, 16 Aug 2019 08:24:26 +0000 (10:24 +0200)
committerJan Dittberner <jandd@cacert.org>
Fri, 16 Aug 2019 08:25:11 +0000 (10:25 +0200)
- add clientcert_authentication plugin from internal repository
- configure managesieve and clientcert_authentication plugins

hieradata/nodes/community.yaml
sitemodules/profiles/manifests/roundcube.pp
sitemodules/profiles/templates/roundcube/clientcert_authentication-config.inc.php.epp [new file with mode: 0644]
sitemodules/profiles/templates/roundcube/config.inc.php.epp [new file with mode: 0644]
sitemodules/profiles/templates/roundcube/managesieve-config.inc.php.epp [new file with mode: 0644]

index 7485ac4..0031e80 100644 (file)
@@ -16,3 +16,24 @@ profiles::icinga2_agent::pki_ticket: >
     2Yt+/jBcBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBBv/L7t0DBN3lDygcWV
     AAa/gDAEkxZMiQL9ZuZ6KaLVzv3FNr+ACIvytNoi9JxLTX/PTpygEmRb35Fq
     xS+ioIVEWOE=]
     2Yt+/jBcBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBBv/L7t0DBN3lDygcWV
     AAa/gDAEkxZMiQL9ZuZ6KaLVzv3FNr+ACIvytNoi9JxLTX/PTpygEmRb35Fq
     xS+ioIVEWOE=]
+profiles::roundcube::des_key: >
+    ENC[PKCS7,MIIBiQYJKoZIhvcNAQcDoIIBejCCAXYCAQAxggEhMIIBHQIBADAFMAACAQEw
+    DQYJKoZIhvcNAQEBBQAEggEAqwu823+svisLj+8LxOGHbb05s1tIFsraXWH/
+    SDnuK8//+6q37kjoAvySC9uCbaRpB9dWfU9E46BUVAYg703LC/JMEeS5UfXK
+    v/44BFSGlzXjbQkM0tdfNY2DCk3AWcPAds+6SfReS3vBqXt1l3Sas5hSm17t
+    1zkELEsacMQ/+5a7MNWSUVfJbA51rdQUmrP88Pu+CfzlqduupNJVvgzI6xUz
+    C29+DJ866sevd90ByCtRgLzCkGVe5GFYjXi3VOHUF3yRmsmoHtP+bTsxmN42
+    +oU91+xXa0LzSp/dCt9LYMpUi1WXl4k8AXU6AqZMo7uYJvHH0p79ugYP4Xkr
+    fAE/ADBMBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBAnr12/n/QLzDyVRxaW
+    DaGygCDPJqWrEVXRR79E5Uu+jqPezAEMdYrzSCJDYFiS2cRgUQ==]
+profiles::roundcube::master_password: >
+    ENC[PKCS7,MIIBmQYJKoZIhvcNAQcDoIIBijCCAYYCAQAxggEhMIIBHQIBADAFMAACAQEw
+    DQYJKoZIhvcNAQEBBQAEggEAQym6DCbBEdEaW6q4f4fKNhVt9iCdn8butbqV
+    I3F5Br2b+68R/llQfA0MCBIKPWaF2vwUaUaJYow6uQ9KE96FLASVPCia0Tq7
+    eKkvZOJ6AXCFhU2fj7IWdzmFGBHlU5j39OhRuk5k/vwn9dtn2korYhUfkhdd
+    93htnI7ts3uu13fsDqg8fKG8GGuRiesvOfcLgmR6N13S+INMnmm1yogzt/H8
+    dP9Gmzh06H8LPLo09xkv7/VhqyyjGHFuqnpzEpEIiaI6yfpP2o0XxFVtIJ3d
+    kieIXuWP6Cn30EhfTtJ4+MuS/r/jjLTjvuuy+FH4J3Jw6ruTQpWGkszHCKKZ
+    qukXDDBcBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBBA45dXYksd5BAhgFD7
+    5NP+gDDvF8Cgnhpi/DhvI0fzwYJaLwelYhplqcWXJhml/58/yhYllUZVE/Cz
+    smDHq+RA9UI=]
index 30f52d8..05bca1a 100644 (file)
@@ -3,6 +3,20 @@
 #
 # This class installs and configures the roundcube webmail system.
 #
 #
 # This class installs and configures the roundcube webmail system.
 #
+# Parameters
+# ----------
+#
+# des_key          Key to encrypt the the client cookies, must be exactly 24
+#                  characters long
+#
+# email_host       Hostname of the email server
+#
+# mail_domain      Mail domain used to find matching user names from client
+#                  certificate Email SubjectAlternativeName extensions
+#
+# master_password  IMAP server master password used for client certificate
+#                  authentication
+#
 # Examples
 # --------
 #
 # Examples
 # --------
 #
 #
 # Copyright 2019 Jan Dittberner
 class profiles::roundcube (
 #
 # Copyright 2019 Jan Dittberner
 class profiles::roundcube (
+  String $des_key,
+  String $email_host = 'email.infra.cacert.org',
+  String $mail_domain = 'cacert.org',
+  String $master_password,
 ) {
 ) {
+  include profiles::cacert_debrepo
+
   package { 'mariadb-server':
     ensure => latest,
   }
 
   package { 'mariadb-server':
     ensure => latest,
   }
 
-  package { ['dbconfig-mysql', 'php-zip', 'php-gd', 'libapache2-mod-php', 'roundcube', 'roundcube-plugins', 'roundcube-mysql']:
+  package { ['dbconfig-mysql', 'php-zip', 'php-gd', 'libapache2-mod-php', 'roundcube', 'roundcube-plugins', 'roundcube-mysql', 'roundcube-plugin-clientcert-authentication']:
     ensure => latest,
   }
     ensure => latest,
   }
+
+  file { '/etc/roundcube/config.inc.php':
+    ensure  => file,
+    owner   => 'root',
+    group   => 'www-data',
+    mode    => '0640',
+    content => epp('profiles/roundcube/config.inc.php.epp', {
+      des_key     => $des_key,
+      email_host  => $email_host,
+      plugins     => ['clientcert_authentication', 'managesieve'],
+      skin        => 'larry',
+      smtp_port   => 587,
+      support_url => 'https://bugs.cacert.org/set_project.php?project_id=18;30',
+    },
+    require => [
+      Package['roundcube-core'],
+      Package['roundcube-plugins'],
+      Package['roundcube-plugin-clientcert-authentication'],
+    ],
+  }
+
+  file { '/etc/roundcube/plugins/managesieve/config.inc.php':
+    ensure  => file,
+    owner   => 'root',
+    group   => 'www-data',
+    mode    => '0640',
+    content => epp('profiles/roundcube/managesieve-config.inc.php.epp', {
+    },
+    require => Package['roundcube-plugins'],
+  }
+
+  file { '/etc/roundcube/plugins/clientcert_authentication/config.inc.php':
+    ensure  => file,
+    owner   => 'root',
+    group   => 'www-data',
+    mode    => '0640',
+    content => epp('profiles/roundcube/clientcert_authentication-config.inc.php.epp', {
+      mail_domain     => $mail_domain,
+      master_password => $master_password,
+    },
+    require => Package['roundcube-plugin-clientcert-authentication'],
+  }
 }
 }
diff --git a/sitemodules/profiles/templates/roundcube/clientcert_authentication-config.inc.php.epp b/sitemodules/profiles/templates/roundcube/clientcert_authentication-config.inc.php.epp
new file mode 100644 (file)
index 0000000..422ab18
--- /dev/null
@@ -0,0 +1,23 @@
+<%- | String $mail_domain,
+      String $master_password
+| -%>
+<?php
+
+// THIS FILE IS MANAGED BY PUPPET, MANUAL CHANGES WILL BE OVERWRITTEN BY THE
+// NEXT PUPPET RUN
+
+// X.509 Client Certificate Authentication Plugin options
+// ------------------------------------------------------
+
+// This domain will be used to form e-mail addresses of new users.
+$config['clientcert_authentication_mail_domain'] = '<%= $mail_domain %>';
+
+// Password to be used to authenticate on the IMAP server side. Username is
+// extracted from the first email address subject alternative name in presented
+// client certificate.
+//
+// As no password is provided in client certificate authentication, the
+// 'clientcert_authentication_password' here is used to access all accounts.
+// The IMAP and SMTP server (if smtp_pass has %p), also needs to accept this
+// password. 'clientcert_authentication_password' cannot be empty.
+$config['clientcert_authentication_password'] = '<%= $master_password %>';
diff --git a/sitemodules/profiles/templates/roundcube/config.inc.php.epp b/sitemodules/profiles/templates/roundcube/config.inc.php.epp
new file mode 100644 (file)
index 0000000..a780cd7
--- /dev/null
@@ -0,0 +1,95 @@
+<%- | Array[String] $plugins,
+      String $email_host,
+      Integer $smtp_port,
+      String $support_url,
+      String $des_key,
+      String $skin,
+| -%>
+<?php
+
+// THIS FILE IS MANAGED BY PUPPET, MANUAL CHANGES WILL BE OVERWRITTEN BY THE
+// NEXT PUPPET RUN
+
+/*
++-----------------------------------------------------------------------+
+| Local configuration for the Roundcube Webmail installation.           |
+|                                                                       |
+| This is a sample configuration file only containing the minimum       |
+| setup required for a functional installation. Copy more options       |
+| from defaults.inc.php to this file to override the defaults.          |
+|                                                                       |
+| This file is part of the Roundcube Webmail client                     |
+| Copyright (C) 2005-2013, The Roundcube Dev Team                       |
+|                                                                       |
+| Licensed under the GNU General Public License version 3 or            |
+| any later version with exceptions for skins & plugins.                |
+| See the README file for a full license statement.                     |
++-----------------------------------------------------------------------+
+*/
+
+$config = array();
+
+// The IMAP host chosen to perform the log-in.
+// Leave blank to show a textbox at login, give a list of hosts
+// to display a pulldown menu or set one host as string.
+// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls://
+// Supported replacement variables:
+// %n - hostname ($_SERVER['SERVER_NAME'])
+// %t - hostname without the first part
+// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
+// %s - domain name after the '@' from e-mail address provided at login screen
+// For example %n = mail.domain.tld, %t = domain.tld
+$config['default_host'] = 'tls://<%= $email_host %>';
+
+// SMTP server host (for sending mails).
+// Enter hostname with prefix tls:// to use STARTTLS, or use
+// prefix ssl:// to use the deprecated SSL over SMTP (aka SMTPS)
+// Supported replacement variables:
+// %h - user's IMAP hostname
+// %n - hostname ($_SERVER['SERVER_NAME'])
+// %t - hostname without the first part
+// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
+// %z - IMAP domain (IMAP hostname without the first part)
+// For example %n = mail.domain.tld, %t = domain.tld
+$config['smtp_server'] = 'tls://<%= $email_host %>';
+
+// SMTP port (default is 25; use 587 for STARTTLS or 465 for the
+// deprecated SSL over SMTP (aka SMTPS))
+$config['smtp_port'] = <%= $smtp_port %>;
+
+// SMTP username (if required) if you use %u as the username Roundcube
+// will use the current username for login
+$config['smtp_user'] = '%u';
+
+// SMTP password (if required) if you use %p as the password Roundcube
+// will use the current user's password for login
+$config['smtp_pass'] = '%p';
+
+// provide an URL where a user can get support for this Roundcube installation
+// PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!
+$config['support_url'] = '<%= $support_url %>';
+
+// Name your service. This is displayed on the login screen and in the window title
+$config['product_name'] = 'CAcert Community Roundcube Webmail';
+
+// this key is used to encrypt the users imap password which is stored
+// in the session record (and the client cookie if remember password is enabled).
+// please provide a string of exactly 24 chars.
+// YOUR KEY MUST BE DIFFERENT THAN THE SAMPLE VALUE FOR SECURITY REASONS
+$config['des_key'] = '<%= $des_key %>';
+
+
+// List of active plugins (in plugins/ directory)
+// Debian: install roundcube-plugins first to have any
+$config['plugins'] = array(
+<%- $plugins.each |$plugin| { %>    '<%= $plugin %>',<% } %>
+);
+
+// skin name: folder from skins/
+$config['skin'] = '<%= $skin %>';
+
+// Disable spellchecking
+// Debian: spellshecking needs additional packages to be installed, or calling external APIs
+//         see defaults.inc.php for additional informations
+$config['enable_spellcheck'] = false;
+
diff --git a/sitemodules/profiles/templates/roundcube/managesieve-config.inc.php.epp b/sitemodules/profiles/templates/roundcube/managesieve-config.inc.php.epp
new file mode 100644 (file)
index 0000000..6ea400a
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+
+// THIS FILE IS MANAGED BY PUPPET, MANUAL CHANGES WILL BE OVERWRITTEN BY THE
+// NEXT PUPPET RUN
+
+// managesieve server port. When empty the port will be determined automatically
+// using getservbyname() function, with 4190 as a fallback.
+$config['managesieve_port'] = null;
+
+// managesieve server address, default is localhost.
+// Replacement variables supported in host name:
+// %h - user's IMAP hostname
+// %n - http hostname ($_SERVER['SERVER_NAME'])
+// %d - domain (http hostname without the first part)
+// For example %n = mail.domain.tld, %d = domain.tld
+$config['managesieve_host'] = '%h';
+
+// authentication method. Can be CRAM-MD5, DIGEST-MD5, PLAIN, LOGIN, EXTERNAL
+// or none. Optional, defaults to best method supported by server.
+$config['managesieve_auth_type'] = null;
+
+// Optional managesieve authentication identifier to be used as authorization proxy.
+// Authenticate as a different user but act on behalf of the logged in user.
+// Works with PLAIN and DIGEST-MD5 auth.
+$config['managesieve_auth_cid'] = null;
+
+// Optional managesieve authentication password to be used for imap_auth_cid
+$config['managesieve_auth_pw'] = null;
+
+// use or not TLS for managesieve server connection
+// Note: tls:// prefix in managesieve_host is also supported
+$config['managesieve_usetls'] = true;
+
+// Connection scket context options
+// See http://php.net/manual/en/context.ssl.php
+// The example below enables server certificate validation
+//$config['managesieve_conn_options'] = array(
+//  'ssl'         => array(
+//     'verify_peer'  => true,
+//     'verify_depth' => 3,
+//     'cafile'       => '/etc/openssl/certs/ca.crt',
+//   ),
+// );
+// Note: These can be also specified as an array of options indexed by hostname
+$config['managesieve_conn_options'] = null;
+
+
+// default contents of filters script (eg. default spam filter)
+$config['managesieve_default'] = '/etc/dovecot/sieve/global';
+
+// The name of the script which will be used when there's no user script
+$config['managesieve_script_name'] = 'managesieve';
+
+// Sieve RFC says that we should use UTF-8 endcoding for mailbox names,
+// but some implementations does not covert UTF-8 to modified UTF-7.
+// Defaults to UTF7-IMAP
+$config['managesieve_mbox_encoding'] = 'UTF-8';
+
+// I need this because my dovecot (with listescape plugin) uses
+// ':' delimiter, but creates folders with dot delimiter
+$config['managesieve_replace_delimiter'] = '';
+
+// disabled sieve extensions (body, copy, date, editheader, encoded-character,
+// envelope, environment, ereject, fileinto, ihave, imap4flags, index,
+// mailbox, mboxmetadata, regex, reject, relational, servermetadata,
+// spamtest, spamtestplus, subaddress, vacation, variables, virustest, etc.
+// Note: not all extensions are implemented
+$config['managesieve_disabled_extensions'] = array();
+
+// Enables debugging of conversation with sieve server. Logs it into <log_dir>/sieve
+$config['managesieve_debug'] = false;
+
+// Enables features described in http://wiki.kolab.org/KEP:14
+$config['managesieve_kolab_master'] = false;
+
+// Script name extension used for scripts including. Dovecot uses '.sieve',
+// Cyrus uses '.siv'. Doesn't matter if you have managesieve_kolab_master disabled.
+$config['managesieve_filename_extension'] = '.sieve';
+
+// List of domains limiting destination emails in redirect action
+// If not empty, user will need to select domain from a list
+$config['managesieve_domains'] = array();
+
+// Enables separate management interface for vacation responses (out-of-office)
+// 0 - no separate section (default),
+// 1 - add Vacation section,
+// 2 - add Vacation section, but hide Filters section
+$config['managesieve_vacation'] = 0;
+
+// Default vacation interval (in days).
+// Note: If server supports vacation-seconds extension it is possible
+// to define interval in seconds here (as a string), e.g. "3600s".
+$config['managesieve_vacation_interval'] = 0;
+
+// Some servers require vacation :addresses to be filled with all
+// user addresses (aliases). This option enables automatic filling
+// of these on initial vacation form creation.
+$config['managesieve_vacation_addresses_init'] = false;
+
+// Sometimes you want to always reply with mail email address
+// This option enables automatic filling of :from field on initial vacation form creation.
+$config['managesieve_vacation_from_init'] = false;
+
+// Supported methods of notify extension. Default: 'mailto'
+$config['managesieve_notify_methods'] = array('mailto');
+
+// Enables scripts RAW editor feature
+$config['managesieve_raw_editor'] = true;