smartmachine 1.3.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/smart_machine/apps/app.rb +1 -0
- data/lib/smart_machine/buildpackers/buildpacker.rb +2 -2
- data/lib/smart_machine/commands/grid_commands/roundcube.rb +42 -0
- data/lib/smart_machine/engine.rb +1 -1
- data/lib/smart_machine/grids/emailer/imapsync.rb +7 -0
- data/lib/smart_machine/grids/roundcube.rb +126 -56
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/postfix/main.cf +5 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/roundcube/docker/custom-docker-entrypoint.sh +185 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/roundcube/docker/entrypoint.rb +58 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/roundcube/etc/apache2/sites-available/000-default.conf +1 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/roundcube/var/www/html/plugins/password/config.inc.php +523 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/roundcube.yml +12 -4
- data/lib/smart_machine/version.rb +1 -1
- metadata +39 -9
- /data/lib/smart_machine/grids/{emailer → roundcube}/.keep +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77a473a51fb2d59eaf9ac27e62ca6564a078d3785f7aebcc7154d3199b034668
|
4
|
+
data.tar.gz: b3585bff1d2bc40cddd557c4876507f7c3fd99d90c55cfc6bfe3d34737341fe4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83d98d2d1ee25354e75a7beacb27d32d7c29000694149d56596e5595a6cc40bdbb1c35c3224eb4be5751606f451e7d862c4e4ff32800b6fd56a4a47ce4790ee3
|
7
|
+
data.tar.gz: 27e7660555110321dfb73b0d5217d288465aef2080547c4ab540a85faa14b878107156a8458f7654b4e65017ca6fd4cf96b8d5f54cd13f18a9b29c215bf1514f
|
@@ -91,8 +91,8 @@ module SmartMachine
|
|
91
91
|
poppler-utils && \
|
92
92
|
rm -rf /var/lib/apt/lists/* && \
|
93
93
|
# ImageMagick 7. Remove this after its dependency is gone from ruby on rails.
|
94
|
-
cd /opt && wget https://download.imagemagick.org/archive/releases/ImageMagick-7.1.1-29.tar.
|
95
|
-
tar
|
94
|
+
cd /opt && wget https://download.imagemagick.org/archive/releases/ImageMagick-7.1.1-29.tar.xz && \
|
95
|
+
tar xvJf ImageMagick-7.1.1-29.tar.xz && \
|
96
96
|
cd ImageMagick-7.1.1-29 && \
|
97
97
|
./configure && \
|
98
98
|
make && \
|
@@ -4,6 +4,30 @@ module SmartMachine
|
|
4
4
|
class Roundcube < SubThor
|
5
5
|
include Utilities
|
6
6
|
|
7
|
+
desc "install", "Install roundcube grid"
|
8
|
+
def install
|
9
|
+
inside_machine_dir do
|
10
|
+
with_docker_running do
|
11
|
+
puts "-----> Installing Roundcube"
|
12
|
+
machine = SmartMachine::Machine.new
|
13
|
+
machine.run_on_machine commands: "smartengine grid roundcube installer"
|
14
|
+
puts "-----> Roundcube Installation Complete"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "uninstall", "Uninstall roundcube grid"
|
20
|
+
def uninstall
|
21
|
+
inside_machine_dir do
|
22
|
+
with_docker_running do
|
23
|
+
puts "-----> Uninstalling Roundcube"
|
24
|
+
machine = SmartMachine::Machine.new
|
25
|
+
machine.run_on_machine commands: "smartengine grid roundcube uninstaller"
|
26
|
+
puts "-----> Roundcube Uninstallation Complete"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
7
31
|
desc "up", "Take UP the roundcube grid"
|
8
32
|
option :name, type: :string
|
9
33
|
def up
|
@@ -28,6 +52,24 @@ module SmartMachine
|
|
28
52
|
end
|
29
53
|
end
|
30
54
|
|
55
|
+
desc "installer", "Roundcube grid installer", hide: true
|
56
|
+
def installer
|
57
|
+
inside_engine_machine_dir do
|
58
|
+
name, config = SmartMachine.config.grids.roundcube.first
|
59
|
+
roundcube = SmartMachine::Grids::Roundcube.new(name: name.to_s)
|
60
|
+
roundcube.installer
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
desc "uninstaller", "Roundcube grid uninstaller", hide: true
|
65
|
+
def uninstaller
|
66
|
+
inside_engine_machine_dir do
|
67
|
+
name, config = SmartMachine.config.grids.roundcube.first
|
68
|
+
roundcube = SmartMachine::Grids::Roundcube.new(name: name.to_s)
|
69
|
+
roundcube.uninstaller
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
31
73
|
desc "uper", "Roundcube grid uper", hide: true
|
32
74
|
option :name, type: :string
|
33
75
|
def uper
|
data/lib/smart_machine/engine.rb
CHANGED
@@ -28,7 +28,7 @@ module SmartMachine
|
|
28
28
|
|
29
29
|
puts "-----> Creating image for Engine ... "
|
30
30
|
command = [
|
31
|
-
"docker image build --
|
31
|
+
"docker image build --tag #{engine_image_name_with_version}",
|
32
32
|
"--build-arg TZDATA_TIMEZONE='#{SmartMachine.config.engine.dig(:engineone).dig(:timezone)}'",
|
33
33
|
"--build-arg SMARTMACHINE_MASTER_KEY=#{SmartMachine::Credentials.new.read_key}",
|
34
34
|
"--build-arg USER_NAME=`id -un`",
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# TODO: Add imapsync feature to emailer.
|
2
|
+
# https://imapsync.lamiral.info
|
3
|
+
# https://hub.docker.com/r/gilleslamiral/imapsync/
|
4
|
+
# docker run --rm --network=networkone gilleslamiral/imapsync imapsync --host1 <hostname> --user1 <email> --password1 <password> --host2 <hostname> --user2 <email> --password2 <password> --addheader --useheader Message-Id
|
5
|
+
# Add the following options to delete messages and then their respective folders on the host1 server.
|
6
|
+
# --delete1 --delete1emptyfolders --noexpungeaftereach
|
7
|
+
# Display Message to User: For Specific IMAP Server Tips go to https://imapsync.lamiral.info/#doc
|
@@ -6,7 +6,7 @@ module SmartMachine
|
|
6
6
|
raise "roundcube config for #{name} not found." unless config
|
7
7
|
|
8
8
|
@fqdn = config.dig(:fqdn)
|
9
|
-
@image =
|
9
|
+
@image = "smartmachine/roundcube:#{SmartMachine.version}"
|
10
10
|
@sysadmin_email = config.dig(:sysadmin_email)
|
11
11
|
@networks = config.dig(:networks)
|
12
12
|
@database_type = config.dig(:database_type)
|
@@ -21,6 +21,11 @@ module SmartMachine
|
|
21
21
|
@smtp_port = config.dig(:smtp_port)
|
22
22
|
@request_path = config.dig(:request_path)
|
23
23
|
@plugins = config.dig(:plugins)
|
24
|
+
@plugins_password_database_type = config.dig(:plugins_password_database_type)
|
25
|
+
@plugins_password_database_host = config.dig(:plugins_password_database_host)
|
26
|
+
@plugins_password_database_user = config.dig(:plugins_password_database_user)
|
27
|
+
@plugins_password_database_pass = config.dig(:plugins_password_database_pass)
|
28
|
+
@plugins_password_database_name = config.dig(:plugins_password_database_name)
|
24
29
|
@skin = config.dig(:skin)
|
25
30
|
@upload_max_filesize = config.dig(:upload_max_filesize)
|
26
31
|
@aspell_dictionaries = config.dig(:aspell_dictionaries)
|
@@ -29,67 +34,110 @@ module SmartMachine
|
|
29
34
|
@home_dir = File.expand_path('~')
|
30
35
|
end
|
31
36
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
"
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
"--env LETSENCRYPT_HOST=#{@fqdn}",
|
46
|
-
"--env LETSENCRYPT_EMAIL=#{@sysadmin_email}",
|
47
|
-
"--env LETSENCRYPT_TEST=false",
|
48
|
-
"--env CONTAINER_NAME='#{@name}'",
|
49
|
-
"--env FQDN='#{@fqdn}'",
|
50
|
-
"--env ROUNDCUBEMAIL_DEFAULT_HOST='#{@mail_host}'",
|
51
|
-
"--env ROUNDCUBEMAIL_DEFAULT_PORT='#{@mail_port}'",
|
52
|
-
"--env ROUNDCUBEMAIL_SMTP_SERVER='#{@smtp_host}'",
|
53
|
-
"--env ROUNDCUBEMAIL_SMTP_PORT='#{@smtp_port}'",
|
54
|
-
"--env ROUNDCUBEMAIL_USERNAME_DOMAIN=''",
|
55
|
-
"--env ROUNDCUBEMAIL_REQUEST_PATH='#{@request_path}'",
|
56
|
-
"--env ROUNDCUBEMAIL_PLUGINS='#{@plugins.join(',')}'",
|
57
|
-
"--env ROUNDCUBEMAIL_INSTALL_PLUGINS='1'",
|
58
|
-
"--env ROUNDCUBEMAIL_SKIN='#{@skin}'",
|
59
|
-
"--env ROUNDCUBEMAIL_UPLOAD_MAX_FILESIZE='#{@upload_max_filesize}'",
|
60
|
-
"--env ROUNDCUBEMAIL_SPELLCHECK_URI=''",
|
61
|
-
"--env ROUNDCUBEMAIL_ASPELL_DICTS='#{@aspell_dictionaries.join(',')}'",
|
62
|
-
"--env ROUNDCUBEMAIL_DB_TYPE='#{@database_type}'",
|
63
|
-
"--env ROUNDCUBEMAIL_DB_HOST='#{@database_host}'",
|
64
|
-
"--env ROUNDCUBEMAIL_DB_PORT='#{@database_port}'",
|
65
|
-
"--env ROUNDCUBEMAIL_DB_USER='#{@database_user}'",
|
66
|
-
"--env ROUNDCUBEMAIL_DB_PASSWORD='#{@database_pass}'",
|
67
|
-
"--env ROUNDCUBEMAIL_DB_NAME='#{@database_name}'",
|
68
|
-
"--volume='#{@home_dir}/smartmachine/config/roundcube/etc/apache2/sites-available/000-default.conf:/etc/apache2/sites-available/000-default.conf:ro'",
|
69
|
-
"--volume='#{@home_dir}/smartmachine/config/roundcube/usr/local/etc/php/conf.d/zzz_roundcube-custom.ini:/usr/local/etc/php/conf.d/zzz_roundcube-custom.ini:ro'",
|
70
|
-
"--volume='#{@home_dir}/smartmachine/config/roundcube/var/roundcube/config:/var/roundcube/config:ro'",
|
71
|
-
"--volume='#{@home_dir}/smartmachine/grids/roundcube/#{@name}/data/html:/var/www/html'",
|
72
|
-
"--volume='#{@home_dir}/smartmachine/grids/roundcube/#{@name}/data/roundcube-temp:/tmp/roundcube-temp'",
|
73
|
-
"--tmpfs /run/tmpfs",
|
74
|
-
"--init",
|
75
|
-
"--restart='always'",
|
76
|
-
"--network='nginx-network'",
|
77
|
-
"#{@image}"
|
78
|
-
]
|
79
|
-
if system(command.compact.join(" "), out: File::NULL)
|
80
|
-
@networks.each do |network|
|
81
|
-
system("docker network connect #{network} #{@name}")
|
37
|
+
def installer
|
38
|
+
unless system("docker image inspect #{@image}", [:out, :err] => File::NULL)
|
39
|
+
puts "-----> Creating image #{@image} ... "
|
40
|
+
command = [
|
41
|
+
"docker image build -t #{@image}",
|
42
|
+
"--build-arg SMARTMACHINE_VERSION=#{SmartMachine.version}",
|
43
|
+
"-f- #{SmartMachine.config.gem_dir}/lib/smart_machine/grids/roundcube",
|
44
|
+
"<<'EOF'\n#{dockerfile}EOF"
|
45
|
+
]
|
46
|
+
if system(command.join(" "), out: File::NULL)
|
47
|
+
puts "done"
|
48
|
+
else
|
49
|
+
raise "Error: Could not install image: #{@image}"
|
82
50
|
end
|
51
|
+
else
|
52
|
+
raise "Error: Image already installed: #{@image}. Please uninstall using 'smartmachine grids roundcube uninstall' and try installing again."
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def uninstaller
|
57
|
+
unless system("docker inspect -f '{{.State.Running}}' '#{@name}'", [:out, :err] => File::NULL)
|
58
|
+
if system("docker image inspect #{@image}", [:out, :err] => File::NULL)
|
59
|
+
puts "-----> Removing image #{@image} ... "
|
60
|
+
if system("docker image rm #{@image}", out: File::NULL)
|
61
|
+
puts "done"
|
62
|
+
end
|
63
|
+
else
|
64
|
+
raise "Error: Roundcube already uninstalled. Please install using 'smartmachine grids roundcube install' and try uninstalling again."
|
65
|
+
end
|
66
|
+
else
|
67
|
+
raise "Error: Roundcube is currently running. Please stop the roundcube using 'smartmachine grids roundcube down' and try uninstalling again."
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def uper
|
72
|
+
if system("docker image inspect #{@image}", [:out, :err] => File::NULL)
|
73
|
+
FileUtils.mkdir_p("#{@home_dir}/machine/grids/roundcube/#{@name}/backups")
|
74
|
+
FileUtils.mkdir_p("#{@home_dir}/machine/grids/roundcube/#{@name}/data/roundcube-temp")
|
75
|
+
|
76
|
+
# Setting entrypoint permission.
|
77
|
+
system("chmod +x #{@home_dir}/machine/config/roundcube/docker/custom-docker-entrypoint.sh")
|
78
|
+
system("chmod +x #{@home_dir}/machine/config/roundcube/docker/entrypoint.rb")
|
79
|
+
|
80
|
+
# Creating & Starting containers
|
81
|
+
print "-----> Creating container #{@name} ... "
|
82
|
+
|
83
|
+
command = [
|
84
|
+
"docker create",
|
85
|
+
"--name='#{@name}'",
|
86
|
+
"--env VIRTUAL_HOST=#{@fqdn}",
|
87
|
+
"--env VIRTUAL_PATH='#{@request_path}'",
|
88
|
+
"--env LETSENCRYPT_HOST=#{@fqdn}",
|
89
|
+
"--env LETSENCRYPT_EMAIL=#{@sysadmin_email}",
|
90
|
+
"--env LETSENCRYPT_TEST=false",
|
91
|
+
"--env CONTAINER_NAME='#{@name}'",
|
92
|
+
"--env FQDN='#{@fqdn}'",
|
93
|
+
"--env ROUNDCUBEMAIL_DEFAULT_HOST='#{@mail_host}'",
|
94
|
+
"--env ROUNDCUBEMAIL_DEFAULT_PORT='#{@mail_port}'",
|
95
|
+
"--env ROUNDCUBEMAIL_SMTP_SERVER='#{@smtp_host}'",
|
96
|
+
"--env ROUNDCUBEMAIL_SMTP_PORT='#{@smtp_port}'",
|
97
|
+
"--env ROUNDCUBEMAIL_USERNAME_DOMAIN=''",
|
98
|
+
"--env ROUNDCUBEMAIL_REQUEST_PATH='#{@request_path}'",
|
99
|
+
"--env ROUNDCUBEMAIL_PLUGINS='#{@plugins.join(',')}'",
|
100
|
+
"--env ROUNDCUBEMAIL_PLUGINS_PASSWORD_DATABASE_TYPE='#{@plugins_password_database_type}'",
|
101
|
+
"--env ROUNDCUBEMAIL_PLUGINS_PASSWORD_DATABASE_HOST='#{@plugins_password_database_host}'",
|
102
|
+
"--env ROUNDCUBEMAIL_PLUGINS_PASSWORD_DATABASE_USER='#{@plugins_password_database_user}'",
|
103
|
+
"--env ROUNDCUBEMAIL_PLUGINS_PASSWORD_DATABASE_PASS='#{@plugins_password_database_pass}'",
|
104
|
+
"--env ROUNDCUBEMAIL_PLUGINS_PASSWORD_DATABASE_NAME='#{@plugins_password_database_name}'",
|
105
|
+
"--env ROUNDCUBEMAIL_INSTALL_PLUGINS='1'",
|
106
|
+
"--env ROUNDCUBEMAIL_SKIN='#{@skin}'",
|
107
|
+
"--env ROUNDCUBEMAIL_UPLOAD_MAX_FILESIZE='#{@upload_max_filesize}'",
|
108
|
+
"--env ROUNDCUBEMAIL_SPELLCHECK_URI=''",
|
109
|
+
"--env ROUNDCUBEMAIL_ASPELL_DICTS='#{@aspell_dictionaries.join(',')}'",
|
110
|
+
"--env ROUNDCUBEMAIL_DB_TYPE='#{@database_type}'",
|
111
|
+
"--env ROUNDCUBEMAIL_DB_HOST='#{@database_host}'",
|
112
|
+
"--env ROUNDCUBEMAIL_DB_PORT='#{@database_port}'",
|
113
|
+
"--env ROUNDCUBEMAIL_DB_USER='#{@database_user}'",
|
114
|
+
"--env ROUNDCUBEMAIL_DB_PASSWORD='#{@database_pass}'",
|
115
|
+
"--env ROUNDCUBEMAIL_DB_NAME='#{@database_name}'",
|
116
|
+
"--volume='#{@home_dir}/smartmachine/config/roundcube:/smartmachine/config/roundcube:ro'",
|
117
|
+
"--volume='#{@home_dir}/smartmachine/grids/roundcube/#{@name}/data/roundcube-temp:/tmp/roundcube-temp'",
|
118
|
+
"--tmpfs /run/tmpfs",
|
119
|
+
"--init",
|
120
|
+
"--restart='always'",
|
121
|
+
"--network='nginx-network'",
|
122
|
+
"#{@image}"
|
123
|
+
]
|
124
|
+
if system(command.compact.join(" "), out: File::NULL)
|
125
|
+
@networks.each do |network|
|
126
|
+
system("docker network connect #{network} #{@name}")
|
127
|
+
end
|
83
128
|
|
84
|
-
puts "done"
|
85
|
-
puts "-----> Starting container #{@name} ... "
|
86
|
-
if system("docker start #{@name}", out: File::NULL)
|
87
129
|
puts "done"
|
130
|
+
puts "-----> Starting container #{@name} ... "
|
131
|
+
if system("docker start #{@name}", out: File::NULL)
|
132
|
+
puts "done"
|
133
|
+
else
|
134
|
+
raise "Error: Could not start container: #{@name}"
|
135
|
+
end
|
88
136
|
else
|
89
|
-
raise "Error: Could not
|
137
|
+
raise "Error: Could not create container: #{@name}"
|
90
138
|
end
|
91
139
|
else
|
92
|
-
raise "Error: Could not
|
140
|
+
raise "Error: Could not find image: #{@image}"
|
93
141
|
end
|
94
142
|
end
|
95
143
|
|
@@ -109,6 +157,28 @@ module SmartMachine
|
|
109
157
|
end
|
110
158
|
end
|
111
159
|
end
|
160
|
+
|
161
|
+
private
|
162
|
+
|
163
|
+
def dockerfile
|
164
|
+
file = <<~'DOCKERFILE'
|
165
|
+
ARG SMARTMACHINE_VERSION
|
166
|
+
|
167
|
+
FROM roundcube/roundcubemail:1.6.8-apache
|
168
|
+
LABEL maintainer="plainsource <plainsource@humanmind.me>"
|
169
|
+
|
170
|
+
RUN apt-get update && \
|
171
|
+
apt-get install -y --no-install-recommends \
|
172
|
+
ruby-full build-essential zlib1g-dev \
|
173
|
+
dovecot-common && \
|
174
|
+
rm -rf /var/lib/apt/lists/*
|
175
|
+
|
176
|
+
ENTRYPOINT ["/smartmachine/config/roundcube/docker/custom-docker-entrypoint.sh"]
|
177
|
+
CMD ["apache2-foreground"]
|
178
|
+
DOCKERFILE
|
179
|
+
|
180
|
+
format(file, "mailname": @mailname)
|
181
|
+
end
|
112
182
|
end
|
113
183
|
end
|
114
184
|
end
|
@@ -86,6 +86,11 @@ virtual_alias_domains = mysql:/etc/postfix/mysql-virtual-alias-domains.cf
|
|
86
86
|
# Alias mappings for domains, users and users to themselves.
|
87
87
|
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps-domains.cf, mysql:/etc/postfix/mysql-virtual-alias-maps-masters.cf, mysql:/etc/postfix/mysql-virtual-alias-maps-users.cf, mysql:/etc/postfix/mysql-virtual-alias-maps-userstothemselves.cf
|
88
88
|
|
89
|
+
# Setting Message Size (default: 10240000).
|
90
|
+
# Changed to 37.5MB to allow approximately 25MB of file attachments (includes mime expansion bloat).
|
91
|
+
# https://serverfault.com/questions/189508/considering-mime-expansion-bloat-how-does-that-affect-settings-for-exchange-200/189510#189510
|
92
|
+
message_size_limit = 39321600
|
93
|
+
|
89
94
|
# Even more Restrictions and MTA params
|
90
95
|
disable_vrfy_command = yes
|
91
96
|
strict_rfc821_envelopes = yes
|
data/lib/smart_machine/templates/dotsmartmachine/config/roundcube/docker/custom-docker-entrypoint.sh
ADDED
@@ -0,0 +1,185 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
# set -ex
|
3
|
+
|
4
|
+
# PWD=`pwd`
|
5
|
+
|
6
|
+
if [[ "$1" == apache2* || "$1" == php-fpm || "$1" == bin* ]]; then
|
7
|
+
INSTALLDIR=`pwd`
|
8
|
+
# docroot is empty
|
9
|
+
if ! [ -e index.php -a -e bin/installto.sh ]; then
|
10
|
+
echo >&2 "roundcubemail not found in $PWD - copying now..."
|
11
|
+
if [ "$(ls -A)" ]; then
|
12
|
+
echo >&2 "WARNING: $PWD is not empty - press Ctrl+C now if this is an error!"
|
13
|
+
( set -x; ls -A; sleep 10 )
|
14
|
+
fi
|
15
|
+
tar cf - --one-file-system -C /usr/src/roundcubemail . | tar xf -
|
16
|
+
echo >&2 "Complete! ROUNDCUBEMAIL has been successfully copied to $INSTALLDIR"
|
17
|
+
# update Roundcube in docroot
|
18
|
+
else
|
19
|
+
echo >&2 "roundcubemail found in $INSTALLDIR - installing update..."
|
20
|
+
(cd /usr/src/roundcubemail && bin/installto.sh -y $INSTALLDIR)
|
21
|
+
# Re-install composer modules (including plugins)
|
22
|
+
composer \
|
23
|
+
--working-dir=${INSTALLDIR} \
|
24
|
+
--prefer-dist \
|
25
|
+
--no-dev \
|
26
|
+
--no-interaction \
|
27
|
+
--optimize-autoloader \
|
28
|
+
install
|
29
|
+
fi
|
30
|
+
|
31
|
+
if [ -f /run/secrets/roundcube_db_user ]; then
|
32
|
+
ROUNDCUBEMAIL_DB_USER=`cat /run/secrets/roundcube_db_user`
|
33
|
+
fi
|
34
|
+
if [ -f /run/secrets/roundcube_db_password ]; then
|
35
|
+
ROUNDCUBEMAIL_DB_PASSWORD=`cat /run/secrets/roundcube_db_password`
|
36
|
+
fi
|
37
|
+
if [ -f /run/secrets/roundcube_oauth_client_secret ]; then
|
38
|
+
ROUNDCUBEMAIL_OAUTH_CLIENT_SECRET=`cat /run/secrets/roundcube_oauth_client_secret`
|
39
|
+
fi
|
40
|
+
|
41
|
+
if [ ! -z "${!POSTGRES_ENV_POSTGRES_*}" ] || [ "$ROUNDCUBEMAIL_DB_TYPE" == "pgsql" ]; then
|
42
|
+
: "${ROUNDCUBEMAIL_DB_TYPE:=pgsql}"
|
43
|
+
: "${ROUNDCUBEMAIL_DB_HOST:=postgres}"
|
44
|
+
: "${ROUNDCUBEMAIL_DB_PORT:=5432}"
|
45
|
+
: "${ROUNDCUBEMAIL_DB_USER:=${POSTGRES_ENV_POSTGRES_USER}}"
|
46
|
+
: "${ROUNDCUBEMAIL_DB_PASSWORD:=${POSTGRES_ENV_POSTGRES_PASSWORD}}"
|
47
|
+
: "${ROUNDCUBEMAIL_DB_NAME:=${POSTGRES_ENV_POSTGRES_DB:-roundcubemail}}"
|
48
|
+
: "${ROUNDCUBEMAIL_DSNW:=${ROUNDCUBEMAIL_DB_TYPE}://${ROUNDCUBEMAIL_DB_USER}:${ROUNDCUBEMAIL_DB_PASSWORD}@${ROUNDCUBEMAIL_DB_HOST}:${ROUNDCUBEMAIL_DB_PORT}/${ROUNDCUBEMAIL_DB_NAME}}"
|
49
|
+
|
50
|
+
/wait-for-it.sh ${ROUNDCUBEMAIL_DB_HOST}:${ROUNDCUBEMAIL_DB_PORT} -t 30
|
51
|
+
elif [ ! -z "${!MYSQL_ENV_MYSQL_*}" ] || [ "$ROUNDCUBEMAIL_DB_TYPE" == "mysql" ]; then
|
52
|
+
: "${ROUNDCUBEMAIL_DB_TYPE:=mysql}"
|
53
|
+
: "${ROUNDCUBEMAIL_DB_HOST:=mysql}"
|
54
|
+
: "${ROUNDCUBEMAIL_DB_PORT:=3306}"
|
55
|
+
: "${ROUNDCUBEMAIL_DB_USER:=${MYSQL_ENV_MYSQL_USER:-root}}"
|
56
|
+
if [ "$ROUNDCUBEMAIL_DB_USER" = 'root' ]; then
|
57
|
+
: "${ROUNDCUBEMAIL_DB_PASSWORD:=${MYSQL_ENV_MYSQL_ROOT_PASSWORD}}"
|
58
|
+
else
|
59
|
+
: "${ROUNDCUBEMAIL_DB_PASSWORD:=${MYSQL_ENV_MYSQL_PASSWORD}}"
|
60
|
+
fi
|
61
|
+
: "${ROUNDCUBEMAIL_DB_NAME:=${MYSQL_ENV_MYSQL_DATABASE:-roundcubemail}}"
|
62
|
+
: "${ROUNDCUBEMAIL_DSNW:=${ROUNDCUBEMAIL_DB_TYPE}://${ROUNDCUBEMAIL_DB_USER}:${ROUNDCUBEMAIL_DB_PASSWORD}@${ROUNDCUBEMAIL_DB_HOST}:${ROUNDCUBEMAIL_DB_PORT}/${ROUNDCUBEMAIL_DB_NAME}}"
|
63
|
+
|
64
|
+
/wait-for-it.sh ${ROUNDCUBEMAIL_DB_HOST}:${ROUNDCUBEMAIL_DB_PORT} -t 30
|
65
|
+
else
|
66
|
+
# use local SQLite DB in /var/roundcube/db
|
67
|
+
: "${ROUNDCUBEMAIL_DB_TYPE:=sqlite}"
|
68
|
+
: "${ROUNDCUBEMAIL_DB_DIR:=/var/roundcube/db}"
|
69
|
+
: "${ROUNDCUBEMAIL_DB_NAME:=sqlite}"
|
70
|
+
: "${ROUNDCUBEMAIL_DSNW:=${ROUNDCUBEMAIL_DB_TYPE}:///$ROUNDCUBEMAIL_DB_DIR/${ROUNDCUBEMAIL_DB_NAME}.db?mode=0646}"
|
71
|
+
|
72
|
+
mkdir -p $ROUNDCUBEMAIL_DB_DIR
|
73
|
+
chown www-data:www-data $ROUNDCUBEMAIL_DB_DIR
|
74
|
+
fi
|
75
|
+
|
76
|
+
: "${ROUNDCUBEMAIL_DEFAULT_HOST:=localhost}"
|
77
|
+
: "${ROUNDCUBEMAIL_DEFAULT_PORT:=143}"
|
78
|
+
: "${ROUNDCUBEMAIL_SMTP_SERVER:=localhost}"
|
79
|
+
: "${ROUNDCUBEMAIL_SMTP_PORT:=587}"
|
80
|
+
: "${ROUNDCUBEMAIL_PLUGINS:=archive,zipdownload}"
|
81
|
+
: "${ROUNDCUBEMAIL_SKIN:=elastic}"
|
82
|
+
: "${ROUNDCUBEMAIL_TEMP_DIR:=/tmp/roundcube-temp}"
|
83
|
+
: "${ROUNDCUBEMAIL_REQUEST_PATH:=/}"
|
84
|
+
: "${ROUNDCUBEMAIL_COMPOSER_PLUGINS_FOLDER:=$INSTALLDIR}"
|
85
|
+
|
86
|
+
if [ ! -z "${ROUNDCUBEMAIL_COMPOSER_PLUGINS}" ]; then
|
87
|
+
echo "Installing plugins from the list"
|
88
|
+
echo "Plugins: ${ROUNDCUBEMAIL_COMPOSER_PLUGINS}"
|
89
|
+
|
90
|
+
# Change ',' into a space
|
91
|
+
ROUNDCUBEMAIL_COMPOSER_PLUGINS_SH=`echo "${ROUNDCUBEMAIL_COMPOSER_PLUGINS}" | tr ',' ' '`
|
92
|
+
|
93
|
+
composer \
|
94
|
+
--working-dir=${ROUNDCUBEMAIL_COMPOSER_PLUGINS_FOLDER} \
|
95
|
+
--prefer-dist \
|
96
|
+
--prefer-stable \
|
97
|
+
--update-no-dev \
|
98
|
+
--no-interaction \
|
99
|
+
--optimize-autoloader \
|
100
|
+
require \
|
101
|
+
-- \
|
102
|
+
${ROUNDCUBEMAIL_COMPOSER_PLUGINS_SH};
|
103
|
+
fi
|
104
|
+
|
105
|
+
if [ ! -e config/config.inc.php ]; then
|
106
|
+
GENERATED_DES_KEY=`head /dev/urandom | base64 | head -c 24`
|
107
|
+
touch config/config.inc.php
|
108
|
+
|
109
|
+
echo "Write root config to $PWD/config/config.inc.php"
|
110
|
+
echo "<?php
|
111
|
+
\$config['plugins'] = [];
|
112
|
+
\$config['log_driver'] = 'stdout';
|
113
|
+
\$config['zipdownload_selection'] = true;
|
114
|
+
\$config['des_key'] = '${GENERATED_DES_KEY}';
|
115
|
+
\$config['enable_spellcheck'] = true;
|
116
|
+
\$config['spellcheck_engine'] = 'pspell';
|
117
|
+
include(__DIR__ . '/config.docker.inc.php');
|
118
|
+
" > config/config.inc.php
|
119
|
+
|
120
|
+
elif ! grep -q "config.docker.inc.php" config/config.inc.php; then
|
121
|
+
echo "include(__DIR__ . '/config.docker.inc.php');" >> config/config.inc.php
|
122
|
+
fi
|
123
|
+
|
124
|
+
ROUNDCUBEMAIL_PLUGINS_PHP=`echo "${ROUNDCUBEMAIL_PLUGINS}" | sed -E "s/[, ]+/', '/g"`
|
125
|
+
echo "Write Docker config to $PWD/config/config.docker.inc.php"
|
126
|
+
echo "<?php
|
127
|
+
\$config['db_dsnw'] = '${ROUNDCUBEMAIL_DSNW}';
|
128
|
+
\$config['db_dsnr'] = '${ROUNDCUBEMAIL_DSNR}';
|
129
|
+
\$config['imap_host'] = '${ROUNDCUBEMAIL_DEFAULT_HOST}:${ROUNDCUBEMAIL_DEFAULT_PORT}';
|
130
|
+
\$config['smtp_host'] = '${ROUNDCUBEMAIL_SMTP_SERVER}:${ROUNDCUBEMAIL_SMTP_PORT}';
|
131
|
+
\$config['username_domain'] = '${ROUNDCUBEMAIL_USERNAME_DOMAIN}';
|
132
|
+
\$config['temp_dir'] = '${ROUNDCUBEMAIL_TEMP_DIR}';
|
133
|
+
\$config['skin'] = '${ROUNDCUBEMAIL_SKIN}';
|
134
|
+
\$config['request_path'] = '${ROUNDCUBEMAIL_REQUEST_PATH}';
|
135
|
+
\$config['plugins'] = array_filter(array_unique(array_merge(\$config['plugins'], ['${ROUNDCUBEMAIL_PLUGINS_PHP}'])));
|
136
|
+
" > config/config.docker.inc.php
|
137
|
+
|
138
|
+
if [ -e /run/secrets/roundcube_des_key ]; then
|
139
|
+
echo "\$config['des_key'] = file_get_contents('/run/secrets/roundcube_des_key');" >> config/config.docker.inc.php
|
140
|
+
elif [ ! -z "${ROUNDCUBEMAIL_DES_KEY}" ]; then
|
141
|
+
echo "\$config['des_key'] = getenv('ROUNDCUBEMAIL_DES_KEY');" >> config/config.docker.inc.php
|
142
|
+
fi
|
143
|
+
|
144
|
+
if [ ! -z "${ROUNDCUBEMAIL_OAUTH_CLIENT_SECRET}" ]; then
|
145
|
+
echo "\$config['oauth_client_secret'] = '${ROUNDCUBEMAIL_OAUTH_CLIENT_SECRET}';" >> config/config.docker.inc.php
|
146
|
+
fi
|
147
|
+
|
148
|
+
if [ ! -z "${ROUNDCUBEMAIL_SPELLCHECK_URI}"]; then
|
149
|
+
echo "\$config['spellcheck_engine'] = 'googie';" >> config/config.docker.inc.php
|
150
|
+
echo "\$config['spellcheck_uri'] = '${ROUNDCUBEMAIL_SPELLCHECK_URI}';" >> config/config.docker.inc.php
|
151
|
+
fi
|
152
|
+
|
153
|
+
# include custom config files
|
154
|
+
for fn in `ls /var/roundcube/config/*.php 2>/dev/null || true`; do
|
155
|
+
echo "include('$fn');" >> config/config.docker.inc.php
|
156
|
+
done
|
157
|
+
|
158
|
+
# initialize or update DB
|
159
|
+
bin/initdb.sh --dir=$PWD/SQL --update || echo "Failed to initialize/update the database. Please start with an empty database and restart the container."
|
160
|
+
|
161
|
+
if [ ! -z "${ROUNDCUBEMAIL_TEMP_DIR}" ]; then
|
162
|
+
mkdir -p ${ROUNDCUBEMAIL_TEMP_DIR} && chown www-data ${ROUNDCUBEMAIL_TEMP_DIR}
|
163
|
+
fi
|
164
|
+
|
165
|
+
if [ ! -z "${ROUNDCUBEMAIL_UPLOAD_MAX_FILESIZE}" ]; then
|
166
|
+
echo "upload_max_filesize=${ROUNDCUBEMAIL_UPLOAD_MAX_FILESIZE}" >> /usr/local/etc/php/conf.d/roundcube-override.ini
|
167
|
+
echo "post_max_size=${ROUNDCUBEMAIL_UPLOAD_MAX_FILESIZE}" >> /usr/local/etc/php/conf.d/roundcube-override.ini
|
168
|
+
fi
|
169
|
+
|
170
|
+
: "${ROUNDCUBEMAIL_LOCALE:=en_US.UTF-8 UTF-8}"
|
171
|
+
|
172
|
+
if [ -e /usr/sbin/locale-gen ] && [ ! -z "${ROUNDCUBEMAIL_LOCALE}" ]; then
|
173
|
+
echo "${ROUNDCUBEMAIL_LOCALE}" > /etc/locale.gen
|
174
|
+
/usr/sbin/locale-gen
|
175
|
+
fi
|
176
|
+
|
177
|
+
if [ ! -z "${ROUNDCUBEMAIL_ASPELL_DICTS}" ]; then
|
178
|
+
ASPELL_PACKAGES=`echo -n "aspell-${ROUNDCUBEMAIL_ASPELL_DICTS}" | sed -E "s/[, ]+/ aspell-/g"`
|
179
|
+
which apt-get && apt-get install -y $ASPELL_PACKAGES
|
180
|
+
which apk && apk add --no-cache $ASPELL_PACKAGES
|
181
|
+
fi
|
182
|
+
|
183
|
+
fi
|
184
|
+
|
185
|
+
exec ruby /smartmachine/config/roundcube/docker/entrypoint.rb "$@"
|
@@ -0,0 +1,58 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'fileutils'
|
5
|
+
require 'logger'
|
6
|
+
require 'cgi'
|
7
|
+
|
8
|
+
logger = Logger.new(STDOUT)
|
9
|
+
STDOUT.sync = true
|
10
|
+
|
11
|
+
def update_envkeys_in(filepaths, envkeys)
|
12
|
+
filepaths.each do |filepath|
|
13
|
+
str = File.read(filepath)
|
14
|
+
str = str.gsub(/%(?!<)/, '%%')
|
15
|
+
str = format(str, envkeys)
|
16
|
+
File.open(filepath, "w") { |file| file << str }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# initial setup
|
21
|
+
unless File.exist?('/run/initial_container_start')
|
22
|
+
FileUtils.touch('/run/initial_container_start')
|
23
|
+
|
24
|
+
# EnvKeys
|
25
|
+
envkeys = {
|
26
|
+
container_name: ENV.delete('CONTAINER_NAME'),
|
27
|
+
fqdn: ENV.delete('FQDN'),
|
28
|
+
timezone: `cat /etc/timezone`.chomp,
|
29
|
+
roundcubemail_request_path: ENV.delete('ROUNDCUBEMAIL_REQUEST_PATH'),
|
30
|
+
roundcubemail_plugins_password_database_type: ENV.delete('ROUNDCUBEMAIL_PLUGINS_PASSWORD_DATABASE_TYPE'),
|
31
|
+
roundcubemail_plugins_password_database_host: ENV.delete('ROUNDCUBEMAIL_PLUGINS_PASSWORD_DATABASE_HOST'),
|
32
|
+
roundcubemail_plugins_password_database_user: CGI.escape(ENV.delete('ROUNDCUBEMAIL_PLUGINS_PASSWORD_DATABASE_USER')),
|
33
|
+
roundcubemail_plugins_password_database_pass: CGI.escape(ENV.delete('ROUNDCUBEMAIL_PLUGINS_PASSWORD_DATABASE_PASS')),
|
34
|
+
roundcubemail_plugins_password_database_name: ENV.delete('ROUNDCUBEMAIL_PLUGINS_PASSWORD_DATABASE_NAME')
|
35
|
+
}
|
36
|
+
|
37
|
+
# Config
|
38
|
+
FileUtils.cp '/smartmachine/config/roundcube/etc/apache2/sites-available/000-default.conf', '/etc/apache2/sites-available/000-default.conf'
|
39
|
+
FileUtils.cp '/smartmachine/config/roundcube/usr/local/etc/php/conf.d/zzz_roundcube-custom.ini', '/usr/local/etc/php/conf.d/zzz_roundcube-custom.ini'
|
40
|
+
FileUtils.cp '/smartmachine/config/roundcube/var/roundcube/config/config.custom.inc.php', '/var/roundcube/config/config.custom.inc.php'
|
41
|
+
filepaths = [
|
42
|
+
'/etc/apache2/sites-available/000-default.conf'
|
43
|
+
]
|
44
|
+
update_envkeys_in(filepaths, envkeys)
|
45
|
+
|
46
|
+
# Plugins
|
47
|
+
FileUtils.cp '/smartmachine/config/roundcube/var/www/html/plugins/password/config.inc.php', '/var/www/html/plugins/password/config.inc.php'
|
48
|
+
filepaths = [
|
49
|
+
'/var/www/html/plugins/password/config.inc.php'
|
50
|
+
]
|
51
|
+
update_envkeys_in(filepaths, envkeys)
|
52
|
+
system("chown root:www-data /var/www/html/plugins/password/config.inc.php")
|
53
|
+
system("chmod u=rw,g=r,o= /var/www/html/plugins/password/config.inc.php")
|
54
|
+
|
55
|
+
logger.info "Initial setup completed for #{envkeys[:container_name]}."
|
56
|
+
end
|
57
|
+
|
58
|
+
exec(*ARGV)
|
@@ -16,6 +16,7 @@
|
|
16
16
|
# If you are setting a different request_path other than '/' in roundcube.yml config file,
|
17
17
|
# then please uncomment the below line and add that path here as an alias.
|
18
18
|
#Alias /your/request/path /var/www/html
|
19
|
+
Alias %<roundcubemail_request_path>s /var/www/html
|
19
20
|
|
20
21
|
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
|
21
22
|
# error, crit, alert, emerg.
|
@@ -0,0 +1,523 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
// Password Plugin options
|
4
|
+
// -----------------------
|
5
|
+
// A driver to use for password change. Default: "sql".
|
6
|
+
// See README file for list of supported driver names.
|
7
|
+
$config['password_driver'] = 'sql';
|
8
|
+
|
9
|
+
// A driver to use for checking password strength. Default: null (disabled).
|
10
|
+
// See README file for list of supported driver names.
|
11
|
+
$config['password_strength_driver'] = null;
|
12
|
+
|
13
|
+
// Determine whether current password is required to change password.
|
14
|
+
// Default: false.
|
15
|
+
$config['password_confirm_current'] = true;
|
16
|
+
|
17
|
+
// Require the new password to be a certain length.
|
18
|
+
// set to blank to allow passwords of any length
|
19
|
+
//$config['password_minimum_length'] = 8;
|
20
|
+
$config['password_minimum_length'] = 12;
|
21
|
+
|
22
|
+
// Require the new password to have at least the specified strength score.
|
23
|
+
// Note: Password strength is scored from 1 (week) to 5 (strong).
|
24
|
+
$config['password_minimum_score'] = 0;
|
25
|
+
|
26
|
+
// Enables logging of password changes into logs/password
|
27
|
+
$config['password_log'] = false;
|
28
|
+
|
29
|
+
// Array of login exceptions for which password change
|
30
|
+
// will be not available (no Password tab in Settings)
|
31
|
+
$config['password_login_exceptions'] = null;
|
32
|
+
|
33
|
+
// Array of hosts that support password changing.
|
34
|
+
// Listed hosts will feature a Password option in Settings; others will not.
|
35
|
+
// Example: ['mail.example.com', 'mail2.example.org'];
|
36
|
+
// Default is NULL (all hosts supported).
|
37
|
+
$config['password_hosts'] = null;
|
38
|
+
|
39
|
+
// Enables saving the new password even if it matches the old password. Useful
|
40
|
+
// for upgrading the stored passwords after the encryption scheme has changed.
|
41
|
+
//$config['password_force_save'] = false;
|
42
|
+
$config['password_force_save'] = true;
|
43
|
+
|
44
|
+
// Enables forcing new users to change their password at their first login.
|
45
|
+
$config['password_force_new_user'] = false;
|
46
|
+
|
47
|
+
// Password hashing/crypting algorithm.
|
48
|
+
// Possible options: des-crypt, ext-des-crypt, md5-crypt, blowfish-crypt,
|
49
|
+
// sha256-crypt, sha512-crypt, md5, sha, smd5, ssha, ssha256, ssha512, samba, ad, dovecot, clear.
|
50
|
+
// Also supported are password_hash() algoriths: hash-bcrypt, hash-argon2i, hash-argon2id.
|
51
|
+
// Default: 'clear' (no hashing)
|
52
|
+
// For details see password::hash_password() method.
|
53
|
+
//$config['password_algorithm'] = 'clear';
|
54
|
+
$config['password_algorithm'] = 'dovecot';
|
55
|
+
|
56
|
+
// Additional options for password hashing function(s).
|
57
|
+
// For password_hash()-based passwords see https://www.php.net/manual/en/function.password-hash.php
|
58
|
+
// It can be used to set the Blowfish algorithm cost, e.g. ['cost' => 12]
|
59
|
+
$config['password_algorithm_options'] = [];
|
60
|
+
|
61
|
+
// Password prefix (e.g. {CRYPT}, {SHA}) for passwords generated
|
62
|
+
// using password_algorithm above. Default: empty.
|
63
|
+
$config['password_algorithm_prefix'] = '';
|
64
|
+
|
65
|
+
// Path for dovecotpw/doveadm-pw (if not in the $PATH).
|
66
|
+
// Used for password_algorithm = 'dovecot'.
|
67
|
+
// $config['password_dovecotpw'] = '/usr/local/sbin/doveadm pw'; // for dovecot-2.x
|
68
|
+
//$config['password_dovecotpw'] = '/usr/local/sbin/dovecotpw'; // for dovecot-1.x
|
69
|
+
$config['password_dovecotpw'] = '/usr/bin/doveadm pw';
|
70
|
+
|
71
|
+
// Dovecot password scheme.
|
72
|
+
// Used for password_algorithm = 'dovecot'.
|
73
|
+
//$config['password_dovecotpw_method'] = 'CRAM-MD5';
|
74
|
+
$config['password_dovecotpw_method'] = 'BLF-CRYPT';
|
75
|
+
|
76
|
+
// Enables use of password with method prefix, e.g. {MD5}$1$LUiMYWqx$fEkg/ggr/L6Mb2X7be4i1/
|
77
|
+
// when using password_algorithm=dovecot
|
78
|
+
//$config['password_dovecotpw_with_method'] = false;
|
79
|
+
$config['password_dovecotpw_with_method'] = true;
|
80
|
+
|
81
|
+
// Number of rounds for the sha256 and sha512 crypt hashing algorithms.
|
82
|
+
// Must be at least 1000. If not set, then the number of rounds is left up
|
83
|
+
// to the crypt() implementation. On glibc this defaults to 5000.
|
84
|
+
// Be aware, the higher the value, the longer it takes to generate the password hashes.
|
85
|
+
//$config['password_crypt_rounds'] = 50000;
|
86
|
+
|
87
|
+
// This option temporarily disables the password change functionality.
|
88
|
+
// Use it when the users database server is in maintenance mode or something like that.
|
89
|
+
// You can set it to TRUE/FALSE or a text describing the reason
|
90
|
+
// which will replace the default.
|
91
|
+
$config['password_disabled'] = false;
|
92
|
+
|
93
|
+
// Various drivers/setups use different format of the username.
|
94
|
+
// This option allows you to force specified format use. Default: '%u'.
|
95
|
+
// Supported variables:
|
96
|
+
// %u - full username,
|
97
|
+
// %l - the local part of the username (in case the username is an email address)
|
98
|
+
// %d - the domain part of the username (in case the username is an email address)
|
99
|
+
// Note: This may no apply to some drivers implementing their own rules, e.g. sql.
|
100
|
+
$config['password_username_format'] = '%u';
|
101
|
+
|
102
|
+
// Options passed when creating Guzzle HTTP client, used to access various external APIs.
|
103
|
+
// This will overwrite global http_client settings. For example:
|
104
|
+
// [
|
105
|
+
// 'timeout' => 10,
|
106
|
+
// 'proxy' => 'tcp://localhost:8125',
|
107
|
+
// ]
|
108
|
+
$config['password_http_client'] = [];
|
109
|
+
|
110
|
+
|
111
|
+
// SQL Driver options
|
112
|
+
// ------------------
|
113
|
+
// PEAR database DSN for performing the query. By default
|
114
|
+
// Roundcube DB settings are used.
|
115
|
+
// Supported replacement variables:
|
116
|
+
// %h - user's IMAP hostname
|
117
|
+
// %n - hostname ($_SERVER['SERVER_NAME'])
|
118
|
+
// %t - hostname without the first part
|
119
|
+
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
|
120
|
+
// %z - IMAP domain (IMAP hostname without the first part)
|
121
|
+
//$config['password_db_dsn'] = '';
|
122
|
+
$config['password_db_dsn'] = '%<roundcubemail_plugins_password_database_type>s://%<roundcubemail_plugins_password_database_user>s:%<roundcubemail_plugins_password_database_pass>s@%<roundcubemail_plugins_password_database_host>s/%<roundcubemail_plugins_password_database_name>s';
|
123
|
+
|
124
|
+
// The SQL query used to change the password.
|
125
|
+
// The query can contain the following macros that will be expanded as follows:
|
126
|
+
// %p is replaced with the plaintext new password
|
127
|
+
// %P is replaced with the crypted/hashed new password
|
128
|
+
// according to configured password_algorithm
|
129
|
+
// %o is replaced with the old (current) password
|
130
|
+
// %O is replaced with the crypted/hashed old (current) password
|
131
|
+
// according to configured password_algorithm
|
132
|
+
// %h is replaced with the imap host (from the session info)
|
133
|
+
// %u is replaced with the username (from the session info)
|
134
|
+
// %l is replaced with the local part of the username
|
135
|
+
// (in case the username is an email address)
|
136
|
+
// %d is replaced with the domain part of the username
|
137
|
+
// (in case the username is an email address)
|
138
|
+
// Escaping of macros is handled by this module.
|
139
|
+
// Default: "SELECT update_passwd(%P, %u)"
|
140
|
+
//$config['password_query'] = 'SELECT update_passwd(%P, %u)';
|
141
|
+
$config['password_query'] = 'UPDATE virtual_users SET password=%P WHERE email=%u';
|
142
|
+
|
143
|
+
// By default domains in variables are using unicode.
|
144
|
+
// Enable this option to use punycoded names
|
145
|
+
$config['password_idn_ascii'] = false;
|
146
|
+
|
147
|
+
|
148
|
+
// Poppassd Driver options
|
149
|
+
// -----------------------
|
150
|
+
// The host which changes the password (default: localhost)
|
151
|
+
// Supported replacement variables:
|
152
|
+
// %n - hostname ($_SERVER['SERVER_NAME'])
|
153
|
+
// %t - hostname without the first part
|
154
|
+
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
|
155
|
+
// %h - IMAP host
|
156
|
+
// %z - IMAP domain without first part
|
157
|
+
// %s - domain name after the '@' from e-mail address provided at login screen
|
158
|
+
$config['password_pop_host'] = 'localhost';
|
159
|
+
|
160
|
+
// TCP port used for poppassd connections (default: 106)
|
161
|
+
$config['password_pop_port'] = 106;
|
162
|
+
|
163
|
+
|
164
|
+
// SASL Driver options
|
165
|
+
// -------------------
|
166
|
+
// Additional arguments for the saslpasswd2 call
|
167
|
+
$config['password_saslpasswd_args'] = '';
|
168
|
+
|
169
|
+
|
170
|
+
// LDAP, LDAP_SIMPLE and LDAP_EXOP Driver options
|
171
|
+
// -----------------------------------
|
172
|
+
// LDAP server name to connect to.
|
173
|
+
// You can provide one or several hosts in an array in which case the hosts are tried from left to right.
|
174
|
+
// Example: ['ldap1.example.com', 'ldap2.example.com'];
|
175
|
+
// Default: 'localhost'
|
176
|
+
$config['password_ldap_host'] = 'localhost';
|
177
|
+
|
178
|
+
// LDAP server port to connect to
|
179
|
+
// Default: '389'
|
180
|
+
$config['password_ldap_port'] = '389';
|
181
|
+
|
182
|
+
// TLS is started after connecting
|
183
|
+
// Using TLS for password modification is recommended.
|
184
|
+
// Default: false
|
185
|
+
$config['password_ldap_starttls'] = false;
|
186
|
+
|
187
|
+
// LDAP version
|
188
|
+
// Default: '3'
|
189
|
+
$config['password_ldap_version'] = '3';
|
190
|
+
|
191
|
+
// LDAP base name (root directory)
|
192
|
+
// Example: 'dc=example,dc=com'
|
193
|
+
$config['password_ldap_basedn'] = 'dc=example,dc=com';
|
194
|
+
|
195
|
+
// LDAP connection method
|
196
|
+
// There are two connection methods for changing a user's LDAP password.
|
197
|
+
// 'user': use user credential (recommended, require password_confirm_current=true)
|
198
|
+
// 'admin': use admin credential (this mode require password_ldap_adminDN and password_ldap_adminPW)
|
199
|
+
// Default: 'user'
|
200
|
+
$config['password_ldap_method'] = 'user';
|
201
|
+
|
202
|
+
// LDAP Admin DN
|
203
|
+
// Used only in admin connection mode
|
204
|
+
// Default: null
|
205
|
+
$config['password_ldap_adminDN'] = null;
|
206
|
+
|
207
|
+
// LDAP Admin Password
|
208
|
+
// Used only in admin connection mode
|
209
|
+
// Default: null
|
210
|
+
$config['password_ldap_adminPW'] = null;
|
211
|
+
|
212
|
+
// LDAP user DN mask
|
213
|
+
// The user's DN is mandatory and as we only have his login,
|
214
|
+
// we need to re-create his DN using a mask
|
215
|
+
// '%login' will be replaced by the current roundcube user's login
|
216
|
+
// '%name' will be replaced by the current roundcube user's name part
|
217
|
+
// '%domain' will be replaced by the current roundcube user's domain part
|
218
|
+
// '%dc' will be replaced by domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
|
219
|
+
// Example: 'uid=%login,ou=people,dc=example,dc=com'
|
220
|
+
$config['password_ldap_userDN_mask'] = 'uid=%login,ou=people,dc=example,dc=com';
|
221
|
+
|
222
|
+
// LDAP search DN
|
223
|
+
// The DN roundcube should bind with to find out user's DN
|
224
|
+
// based on his login. Note that you should comment out the default
|
225
|
+
// password_ldap_userDN_mask setting for this to take effect.
|
226
|
+
// Use this if you cannot specify a general template for user DN with
|
227
|
+
// password_ldap_userDN_mask. You need to perform a search based on
|
228
|
+
// users login to find his DN instead. A common reason might be that
|
229
|
+
// your users are placed under different ou's like engineering or
|
230
|
+
// sales which cannot be derived from their login only.
|
231
|
+
$config['password_ldap_searchDN'] = 'cn=roundcube,ou=services,dc=example,dc=com';
|
232
|
+
|
233
|
+
// LDAP search password
|
234
|
+
// If password_ldap_searchDN is set, the password to use for
|
235
|
+
// binding to search for user's DN. Note that you should comment out the default
|
236
|
+
// password_ldap_userDN_mask setting for this to take effect.
|
237
|
+
// Warning: Be sure to set appropriate permissions on this file so this password
|
238
|
+
// is only accessible to roundcube and don't forget to restrict roundcube's access to
|
239
|
+
// your directory as much as possible using ACLs. Should this password be compromised
|
240
|
+
// you want to minimize the damage.
|
241
|
+
$config['password_ldap_searchPW'] = 'secret';
|
242
|
+
|
243
|
+
// LDAP search base
|
244
|
+
// If password_ldap_searchDN is set, the base to search in using the filter below.
|
245
|
+
// Note that you should comment out the default password_ldap_userDN_mask setting
|
246
|
+
// for this to take effect.
|
247
|
+
$config['password_ldap_search_base'] = 'ou=people,dc=example,dc=com';
|
248
|
+
|
249
|
+
// LDAP search filter
|
250
|
+
// If password_ldap_searchDN is set, the filter to use when
|
251
|
+
// searching for user's DN. Note that you should comment out the default
|
252
|
+
// password_ldap_userDN_mask setting for this to take effect.
|
253
|
+
// '%login' will be replaced by the current roundcube user's login
|
254
|
+
// '%name' will be replaced by the current roundcube user's name part
|
255
|
+
// '%domain' will be replaced by the current roundcube user's domain part
|
256
|
+
// '%dc' will be replaced by domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
|
257
|
+
// Example: '(uid=%login)'
|
258
|
+
// Example: '(&(objectClass=posixAccount)(uid=%login))'
|
259
|
+
$config['password_ldap_search_filter'] = '(uid=%login)';
|
260
|
+
|
261
|
+
// LDAP password hash type
|
262
|
+
// Standard LDAP encryption type which must be one of: crypt,
|
263
|
+
// ext_des, md5crypt, blowfish, md5, sha, smd5, ssha, ad, cram-md5 (dovecot style) or clear.
|
264
|
+
// Set to 'default' if you want to use method specified in password_algorithm option above.
|
265
|
+
// Multiple password Values can be generated by concatenating encodings with a +. E.g. 'cram-md5+crypt'
|
266
|
+
// Default: 'crypt'.
|
267
|
+
$config['password_ldap_encodage'] = 'crypt';
|
268
|
+
|
269
|
+
// LDAP password attribute
|
270
|
+
// Name of the ldap's attribute used for storing user password
|
271
|
+
// Default: 'userPassword'
|
272
|
+
$config['password_ldap_pwattr'] = 'userPassword';
|
273
|
+
|
274
|
+
// LDAP password force replace
|
275
|
+
// Force LDAP replace in cases where ACL allows only replace not read
|
276
|
+
// See http://pear.php.net/package/Net_LDAP2/docs/latest/Net_LDAP2/Net_LDAP2_Entry.html#methodreplace
|
277
|
+
// Default: true
|
278
|
+
$config['password_ldap_force_replace'] = true;
|
279
|
+
|
280
|
+
// LDAP Password Last Change Date
|
281
|
+
// Some places use an attribute to store the date of the last password change
|
282
|
+
// The date is measured in "days since epoch" (an integer value)
|
283
|
+
// Whenever the password is changed, the attribute will be updated if set (e.g. shadowLastChange)
|
284
|
+
$config['password_ldap_lchattr'] = '';
|
285
|
+
|
286
|
+
// LDAP Samba password attribute, e.g. sambaNTPassword
|
287
|
+
// Name of the LDAP's Samba attribute used for storing user password
|
288
|
+
$config['password_ldap_samba_pwattr'] = '';
|
289
|
+
|
290
|
+
// LDAP Samba Password Last Change Date attribute, e.g. sambaPwdLastSet
|
291
|
+
// Some places use an attribute to store the date of the last password change
|
292
|
+
// The date is measured in "seconds since epoch" (an integer value)
|
293
|
+
// Whenever the password is changed, the attribute will be updated if set
|
294
|
+
$config['password_ldap_samba_lchattr'] = '';
|
295
|
+
|
296
|
+
// LDAP PPolicy Driver options
|
297
|
+
// -----------------------------------
|
298
|
+
|
299
|
+
// LDAP Change password command - filename of the perl script
|
300
|
+
// Example: 'change_ldap_pass.pl'
|
301
|
+
$config['password_ldap_ppolicy_cmd'] = 'change_ldap_pass.pl';
|
302
|
+
|
303
|
+
// LDAP URI
|
304
|
+
// Example: 'ldap://ldap.example.com/ ldaps://ldap2.example.com:636/'
|
305
|
+
$config['password_ldap_ppolicy_uri'] = 'ldap://localhost/';
|
306
|
+
|
307
|
+
// LDAP base name (root directory)
|
308
|
+
// Example: 'dc=example,dc=com'
|
309
|
+
$config['password_ldap_ppolicy_basedn'] = 'dc=example,dc=com';
|
310
|
+
|
311
|
+
$config['password_ldap_ppolicy_searchDN'] = 'cn=someuser,dc=example,dc=com';
|
312
|
+
|
313
|
+
$config['password_ldap_ppolicy_searchPW'] = 'secret';
|
314
|
+
|
315
|
+
// LDAP search filter
|
316
|
+
// Example: '(uid=%login)'
|
317
|
+
// Example: '(&(objectClass=posixAccount)(uid=%login))'
|
318
|
+
$config['password_ldap_ppolicy_search_filter'] = '(uid=%login)';
|
319
|
+
|
320
|
+
// CA Certificate file if in URI is LDAPS connection
|
321
|
+
$config['password_ldap_ppolicy_cafile'] = '/etc/ssl/cacert.crt';
|
322
|
+
|
323
|
+
|
324
|
+
|
325
|
+
// DirectAdmin Driver options
|
326
|
+
// --------------------------
|
327
|
+
// The host which changes the password
|
328
|
+
// Use 'ssl://host' instead of 'tcp://host' when running DirectAdmin over SSL.
|
329
|
+
// The host can contain the following macros that will be expanded as follows:
|
330
|
+
// %h is replaced with the imap host (from the session info)
|
331
|
+
// %d is replaced with the domain part of the username (if the username is an email)
|
332
|
+
$config['password_directadmin_host'] = 'tcp://localhost';
|
333
|
+
|
334
|
+
// TCP port used for DirectAdmin connections
|
335
|
+
$config['password_directadmin_port'] = 2222;
|
336
|
+
|
337
|
+
|
338
|
+
// vpopmaild Driver options
|
339
|
+
// -----------------------
|
340
|
+
// The host which changes the password
|
341
|
+
$config['password_vpopmaild_host'] = 'localhost';
|
342
|
+
|
343
|
+
// TCP port used for vpopmaild connections
|
344
|
+
$config['password_vpopmaild_port'] = 89;
|
345
|
+
|
346
|
+
// Timeout used for the connection to vpopmaild (in seconds)
|
347
|
+
$config['password_vpopmaild_timeout'] = 10;
|
348
|
+
|
349
|
+
|
350
|
+
// cPanel Driver options
|
351
|
+
// ---------------------
|
352
|
+
// The cPanel Host name
|
353
|
+
$config['password_cpanel_host'] = 'host.domain.com';
|
354
|
+
|
355
|
+
// The cPanel port to use
|
356
|
+
$config['password_cpanel_port'] = 2096;
|
357
|
+
|
358
|
+
|
359
|
+
// XIMSS (Communigate server) Driver options
|
360
|
+
// -----------------------------------------
|
361
|
+
// Host name of the Communigate server
|
362
|
+
$config['password_ximss_host'] = 'mail.example.com';
|
363
|
+
|
364
|
+
// XIMSS port on Communigate server
|
365
|
+
$config['password_ximss_port'] = 11024;
|
366
|
+
|
367
|
+
|
368
|
+
// chpasswd Driver options
|
369
|
+
// ---------------------
|
370
|
+
// Command to use (see "Sudo setup" in README)
|
371
|
+
$config['password_chpasswd_cmd'] = 'sudo /usr/sbin/chpasswd 2> /dev/null';
|
372
|
+
|
373
|
+
|
374
|
+
// XMail Driver options
|
375
|
+
// ---------------------
|
376
|
+
$config['xmail_host'] = 'localhost';
|
377
|
+
$config['xmail_user'] = 'YourXmailControlUser';
|
378
|
+
$config['xmail_pass'] = 'YourXmailControlPass';
|
379
|
+
$config['xmail_port'] = 6017;
|
380
|
+
|
381
|
+
|
382
|
+
// hMail Driver options
|
383
|
+
// -----------------------
|
384
|
+
// Remote hMailServer configuration
|
385
|
+
// true: HMailserver is on a remote box (php.ini: com.allow_dcom = true)
|
386
|
+
// false: Hmailserver is on same box as PHP
|
387
|
+
$config['hmailserver_remote_dcom'] = false;
|
388
|
+
// Windows credentials
|
389
|
+
$config['hmailserver_server'] = [
|
390
|
+
'Server' => 'localhost', // hostname or ip address
|
391
|
+
'Username' => 'administrator', // windows username
|
392
|
+
'Password' => 'password' // windows user password
|
393
|
+
];
|
394
|
+
|
395
|
+
|
396
|
+
// pw_usermod Driver options
|
397
|
+
// --------------------------
|
398
|
+
// Use comma delimited exlist to disable password change for users.
|
399
|
+
// See "Sudo setup" in README file.
|
400
|
+
$config['password_pw_usermod_cmd'] = 'sudo /usr/sbin/pw usermod -h 0 -n';
|
401
|
+
|
402
|
+
|
403
|
+
// DBMail Driver options
|
404
|
+
// -------------------
|
405
|
+
// Additional arguments for the dbmail-users call
|
406
|
+
$config['password_dbmail_args'] = '-p sha512';
|
407
|
+
|
408
|
+
|
409
|
+
// Expect Driver options
|
410
|
+
// ---------------------
|
411
|
+
// Location of expect binary
|
412
|
+
$config['password_expect_bin'] = '/usr/bin/expect';
|
413
|
+
|
414
|
+
// Location of expect script (see helpers/passwd-expect)
|
415
|
+
$config['password_expect_script'] = '';
|
416
|
+
|
417
|
+
// Arguments for the expect script. See the helpers/passwd-expect file for details.
|
418
|
+
// This is probably a good starting default:
|
419
|
+
// -telnet -host localhost -output /tmp/passwd.log -log /tmp/passwd.log
|
420
|
+
$config['password_expect_params'] = '';
|
421
|
+
|
422
|
+
|
423
|
+
// smb Driver options
|
424
|
+
// ---------------------
|
425
|
+
// Samba host (default: localhost)
|
426
|
+
// Supported replacement variables:
|
427
|
+
// %n - hostname ($_SERVER['SERVER_NAME'])
|
428
|
+
// %t - hostname without the first part
|
429
|
+
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
|
430
|
+
$config['password_smb_host'] = 'localhost';
|
431
|
+
// Location of smbpasswd binary (default: /usr/bin/smbpasswd)
|
432
|
+
$config['password_smb_cmd'] = '/usr/bin/smbpasswd';
|
433
|
+
|
434
|
+
// gearman driver options
|
435
|
+
// ---------------------
|
436
|
+
// Gearman host (default: localhost)
|
437
|
+
$config['password_gearman_host'] = 'localhost';
|
438
|
+
|
439
|
+
|
440
|
+
// Plesk/PPA Driver options
|
441
|
+
// --------------------
|
442
|
+
// You need to allow RCP for IP of roundcube-server in Plesk/PPA Panel
|
443
|
+
|
444
|
+
// Plesk RCP Host
|
445
|
+
$config['password_plesk_host'] = '10.0.0.5';
|
446
|
+
|
447
|
+
// Plesk RPC Username
|
448
|
+
$config['password_plesk_user'] = 'admin';
|
449
|
+
|
450
|
+
// Plesk RPC Password
|
451
|
+
$config['password_plesk_pass'] = 'password';
|
452
|
+
|
453
|
+
// Plesk RPC Port
|
454
|
+
$config['password_plesk_rpc_port'] = '8443';
|
455
|
+
|
456
|
+
// Plesk RPC Path
|
457
|
+
$config['password_plesk_rpc_path'] = 'enterprise/control/agent.php';
|
458
|
+
|
459
|
+
|
460
|
+
// kpasswd Driver options
|
461
|
+
// ---------------------
|
462
|
+
// Command to use
|
463
|
+
$config['password_kpasswd_cmd'] = '/usr/bin/kpasswd';
|
464
|
+
|
465
|
+
|
466
|
+
// Modoboa Driver options
|
467
|
+
// ---------------------
|
468
|
+
// put token number from Modoboa server
|
469
|
+
$config['password_modoboa_api_token'] = '';
|
470
|
+
|
471
|
+
|
472
|
+
// Mail-in-a-Box Driver options
|
473
|
+
// ----------------------------
|
474
|
+
// the url to the control panel of Mail-in-a-Box, e.g. https://box.example.com/admin/
|
475
|
+
$config['password_miab_url'] = '';
|
476
|
+
// name (email) of the admin user used to access api
|
477
|
+
$config['password_miab_user'] = '';
|
478
|
+
// password of the admin user used to access api
|
479
|
+
$config['password_miab_pass'] = '';
|
480
|
+
|
481
|
+
|
482
|
+
// TinyCP
|
483
|
+
// --------------
|
484
|
+
// TinyCP host, port, user and pass.
|
485
|
+
$config['password_tinycp_host'] = '';
|
486
|
+
$config['password_tinycp_port'] = '';
|
487
|
+
$config['password_tinycp_user'] = '';
|
488
|
+
$config['password_tinycp_pass'] = '';
|
489
|
+
|
490
|
+
// HTTP-API Driver options
|
491
|
+
// ---------------------
|
492
|
+
|
493
|
+
// Base URL of password change API. HTTPS recommended.
|
494
|
+
$config['password_httpapi_url'] = 'https://passwordserver.example.org';
|
495
|
+
|
496
|
+
// Method (also affects how vars are sent). Default: POST.
|
497
|
+
// GET is not recommended as passwords will appears in the remote webserver's access log
|
498
|
+
$config['password_httpapi_method'] = 'POST';
|
499
|
+
|
500
|
+
// GET or POST variable in which to put the username
|
501
|
+
$config['password_httpapi_var_user'] = 'user';
|
502
|
+
|
503
|
+
// GET or POST variable in which to put the current password
|
504
|
+
$config['password_httpapi_var_curpass'] = 'curpass';
|
505
|
+
|
506
|
+
// GET or POST variable in which to put the new password
|
507
|
+
$config['password_httpapi_var_newpass'] = 'newpass';
|
508
|
+
|
509
|
+
// HTTP codes other than 2xx are assumed to mean the password changed failed.
|
510
|
+
// Optionally, if set, this variable additionally checks the body of the 2xx response to
|
511
|
+
// confirm the change. It's a preg_match regular expression.
|
512
|
+
$config['password_httpapi_expect'] = '/^ok$/i';
|
513
|
+
|
514
|
+
|
515
|
+
// dovecot_passwdfile
|
516
|
+
// ------------------
|
517
|
+
$config['password_dovecot_passwdfile_path'] = '/etc/mail/imap.passwd';
|
518
|
+
|
519
|
+
|
520
|
+
// Mailcow driver options
|
521
|
+
// ----------------------
|
522
|
+
$config['password_mailcow_api_host'] = 'localhost';
|
523
|
+
$config['password_mailcow_api_token'] = '';
|
@@ -1,6 +1,5 @@
|
|
1
1
|
roundcubeone:
|
2
2
|
fqdn: "yourroundcubeone.yourdomain.com"
|
3
|
-
image: "roundcube/roundcubemail:1.6.8-apache"
|
4
3
|
sysadmin_email: "adminname@yourdomain.com"
|
5
4
|
networks: ["mysqlone-network"]
|
6
5
|
database_type: "mysql"
|
@@ -15,13 +14,17 @@ roundcubeone:
|
|
15
14
|
smtp_port: 587
|
16
15
|
request_path: "/"
|
17
16
|
plugins: ["password", "managesieve", "archive", "zipdownload"]
|
17
|
+
plugins_password_database_type: "mysql"
|
18
|
+
plugins_password_database_host: mysqlone
|
19
|
+
plugins_password_database_user: <%= SmartMachine.credentials.dig(:emailerone, :mysql_user) %>
|
20
|
+
plugins_password_database_pass: <%= SmartMachine.credentials.dig(:emailerone, :mysql_password) %>
|
21
|
+
plugins_password_database_name: <%= SmartMachine.credentials.dig(:emailerone, :mysql_database_name) %>
|
18
22
|
skin: "elastic"
|
19
23
|
upload_max_filesize: "5M"
|
20
24
|
aspell_dictionaries: ["en"]
|
21
25
|
|
22
26
|
# roundcubetwo:
|
23
27
|
# fqdn: "yourroundcubetwo.yourdomain.com"
|
24
|
-
# image: "roundcube/roundcubemail:1.6.8-apache"
|
25
28
|
# sysadmin_email: "adminname@yourdomain.com"
|
26
29
|
# networks: ["mysqlone-network"]
|
27
30
|
# database_type: "mysql"
|
@@ -30,12 +33,17 @@ roundcubeone:
|
|
30
33
|
# database_user: <%= SmartMachine.credentials.dig(:roundcubetwo, :database_user) %>
|
31
34
|
# database_pass: <%= SmartMachine.credentials.dig(:roundcubetwo, :database_pass) %>
|
32
35
|
# database_name: <%= SmartMachine.credentials.dig(:roundcubetwo, :database_name) %>
|
33
|
-
# mail_host: "ssl://
|
36
|
+
# mail_host: "ssl://youremailertwo.yourdomain.com"
|
34
37
|
# mail_port: 993
|
35
|
-
# smtp_host: "tls://
|
38
|
+
# smtp_host: "tls://youremailertwo.yourdomain.com"
|
36
39
|
# smtp_port: 587
|
37
40
|
# request_path: "/"
|
38
41
|
# plugins: ["password", "managesieve", "archive", "zipdownload"]
|
42
|
+
# plugins_password_database_type: "mysql"
|
43
|
+
# plugins_password_database_host: mysqlone
|
44
|
+
# plugins_password_database_user: <%= SmartMachine.credentials.dig(:emailertwo, :mysql_user) %>
|
45
|
+
# plugins_password_database_pass: <%= SmartMachine.credentials.dig(:emailertwo, :mysql_password) %>
|
46
|
+
# plugins_password_database_name: <%= SmartMachine.credentials.dig(:emailertwo, :mysql_database_name) %>
|
39
47
|
# skin: "elastic"
|
40
48
|
# upload_max_filesize: "5M"
|
41
49
|
# aspell_dictionaries: ["en"]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smartmachine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- plainsource
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: net-ssh
|
@@ -31,9 +31,9 @@ dependencies:
|
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.2'
|
34
|
-
- - "
|
34
|
+
- - "<="
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version:
|
36
|
+
version: 1.3.0
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -41,9 +41,9 @@ dependencies:
|
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: '1.2'
|
44
|
-
- - "
|
44
|
+
- - "<="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
46
|
+
version: 1.3.0
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bcrypt_pbkdf
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,6 +84,26 @@ dependencies:
|
|
84
84
|
- - ">="
|
85
85
|
- !ruby/object:Gem::Version
|
86
86
|
version: 3.1.13
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: zeitwerk
|
89
|
+
requirement: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - "~>"
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '2.6'
|
94
|
+
- - "<="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 2.6.18
|
97
|
+
type: :runtime
|
98
|
+
prerelease: false
|
99
|
+
version_requirements: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.6'
|
104
|
+
- - "<="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: 2.6.18
|
87
107
|
- !ruby/object:Gem::Dependency
|
88
108
|
name: activesupport
|
89
109
|
requirement: !ruby/object:Gem::Requirement
|
@@ -91,6 +111,9 @@ dependencies:
|
|
91
111
|
- - "~>"
|
92
112
|
- !ruby/object:Gem::Version
|
93
113
|
version: '6.0'
|
114
|
+
- - "<="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 6.1.7.8
|
94
117
|
type: :runtime
|
95
118
|
prerelease: false
|
96
119
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -98,6 +121,9 @@ dependencies:
|
|
98
121
|
- - "~>"
|
99
122
|
- !ruby/object:Gem::Version
|
100
123
|
version: '6.0'
|
124
|
+
- - "<="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: 6.1.7.8
|
101
127
|
- !ruby/object:Gem::Dependency
|
102
128
|
name: thor
|
103
129
|
requirement: !ruby/object:Gem::Requirement
|
@@ -205,7 +231,7 @@ files:
|
|
205
231
|
- lib/smart_machine/grids/certbot.rb
|
206
232
|
- lib/smart_machine/grids/elasticsearch.rb
|
207
233
|
- lib/smart_machine/grids/emailer.rb
|
208
|
-
- lib/smart_machine/grids/emailer
|
234
|
+
- lib/smart_machine/grids/emailer/imapsync.rb
|
209
235
|
- lib/smart_machine/grids/haproxy.rb
|
210
236
|
- lib/smart_machine/grids/mariadb.rb
|
211
237
|
- lib/smart_machine/grids/minio.rb
|
@@ -221,6 +247,7 @@ files:
|
|
221
247
|
- lib/smart_machine/grids/redis.rb
|
222
248
|
- lib/smart_machine/grids/redmine.rb
|
223
249
|
- lib/smart_machine/grids/roundcube.rb
|
250
|
+
- lib/smart_machine/grids/roundcube/.keep
|
224
251
|
- lib/smart_machine/grids/solr.rb
|
225
252
|
- lib/smart_machine/grids/solr/config/.keep
|
226
253
|
- lib/smart_machine/grids/solr/config/README.txt
|
@@ -448,9 +475,12 @@ files:
|
|
448
475
|
- lib/smart_machine/templates/dotsmartmachine/config/prereceiver.yml
|
449
476
|
- lib/smart_machine/templates/dotsmartmachine/config/redis.yml
|
450
477
|
- lib/smart_machine/templates/dotsmartmachine/config/roundcube.yml
|
478
|
+
- lib/smart_machine/templates/dotsmartmachine/config/roundcube/docker/custom-docker-entrypoint.sh
|
479
|
+
- lib/smart_machine/templates/dotsmartmachine/config/roundcube/docker/entrypoint.rb
|
451
480
|
- lib/smart_machine/templates/dotsmartmachine/config/roundcube/etc/apache2/sites-available/000-default.conf
|
452
481
|
- lib/smart_machine/templates/dotsmartmachine/config/roundcube/usr/local/etc/php/conf.d/zzz_roundcube-custom.ini
|
453
482
|
- lib/smart_machine/templates/dotsmartmachine/config/roundcube/var/roundcube/config/config.custom.inc.php
|
483
|
+
- lib/smart_machine/templates/dotsmartmachine/config/roundcube/var/www/html/plugins/password/config.inc.php
|
454
484
|
- lib/smart_machine/templates/dotsmartmachine/config/terminal.yml
|
455
485
|
- lib/smart_machine/templates/dotsmartmachine/config/users.yml
|
456
486
|
- lib/smart_machine/templates/dotsmartmachine/gitignore-template
|
@@ -468,8 +498,8 @@ licenses:
|
|
468
498
|
metadata:
|
469
499
|
homepage_uri: https://github.com/plainsource/smartmachine
|
470
500
|
bug_tracker_uri: https://github.com/plainsource/smartmachine/issues
|
471
|
-
changelog_uri: https://github.com/plainsource/smartmachine/releases/tag/v1.3.
|
472
|
-
source_code_uri: https://github.com/plainsource/smartmachine/tree/v1.3.
|
501
|
+
changelog_uri: https://github.com/plainsource/smartmachine/releases/tag/v1.3.1
|
502
|
+
source_code_uri: https://github.com/plainsource/smartmachine/tree/v1.3.1
|
473
503
|
post_install_message:
|
474
504
|
rdoc_options: []
|
475
505
|
require_paths:
|
File without changes
|