public
nobgit
read
NobMail
Based on mailcow: dockerized
Languages
Repository composition by tracked source files.
PHP
49%
JavaScript
35%
HTML
9%
CSS
4%
Shell
2%
Python
1%
Lua
0%
Perl
0%
Ruby
0%
SCSS
0%
Create file
Wiki Documentation
Clone
https://nobgit.com/orgs/nobgit/nobmail.git
ssh://[email protected]:2222/orgs/nobgit/nobmail.git
Trace
_modules/scripts/new_options.sh
Trace helps you understand code history line by line. See who changed each line, when it changed, and which commit introduced it.
Author
Date
Commit
Line
Code
1
#!/usr/bin/env bash
2
# _modules/scripts/new_options.sh
3
# THIS SCRIPT IS DESIGNED TO BE RUNNING BY MAILCOW SCRIPTS ONLY!
4
# DO NOT, AGAIN, NOT TRY TO RUN THIS SCRIPT STANDALONE!!!!!!
6
adapt_new_options() {
8
CONFIG_ARRAY=(
9
"AUTODISCOVER_SAN"
10
"SKIP_LETS_ENCRYPT"
11
"SKIP_SOGO"
12
"USE_WATCHDOG"
13
"WATCHDOG_NOTIFY_EMAIL"
14
"WATCHDOG_NOTIFY_WEBHOOK"
15
"WATCHDOG_NOTIFY_WEBHOOK_BODY"
16
"WATCHDOG_NOTIFY_BAN"
17
"WATCHDOG_NOTIFY_START"
18
"WATCHDOG_EXTERNAL_CHECKS"
19
"WATCHDOG_SUBJECT"
20
"SKIP_CLAMD"
21
"SKIP_OLEFY"
22
"SKIP_IP_CHECK"
23
"ADDITIONAL_SAN"
24
"DOVEADM_PORT"
25
"IPV4_NETWORK"
26
"IPV6_NETWORK"
27
"LOG_LINES"
28
"SNAT_TO_SOURCE"
29
"SNAT6_TO_SOURCE"
30
"COMPOSE_PROJECT_NAME"
31
"DOCKER_COMPOSE_VERSION"
32
"SQL_PORT"
33
"API_KEY"
34
"API_KEY_READ_ONLY"
35
"API_ALLOW_FROM"
36
"MAILDIR_GC_TIME"
37
"MAILDIR_SUB"
38
"ACL_ANYONE"
39
"FTS_HEAP"
40
"FTS_PROCS"
41
"SKIP_FTS"
42
"ENABLE_SSL_SNI"
43
"ALLOW_ADMIN_EMAIL_LOGIN"
44
"SKIP_HTTP_VERIFICATION"
45
"SOGO_EXPIRE_SESSION"
46
"SOGO_URL_ENCRYPTION_KEY"
47
"REDIS_PORT"
48
"REDISPASS"
49
"DOVECOT_MASTER_USER"
50
"DOVECOT_MASTER_PASS"
51
"MAILCOW_PASS_SCHEME"
52
"ADDITIONAL_SERVER_NAMES"
53
"WATCHDOG_VERBOSE"
54
"WEBAUTHN_ONLY_TRUSTED_VENDORS"
55
"SPAMHAUS_DQS_KEY"
56
"SKIP_UNBOUND_HEALTHCHECK"
57
"DISABLE_NETFILTER_ISOLATION_RULE"
58
"HTTP_REDIRECT"
59
"ENABLE_IPV6"
60
"ACME_DNS_CHALLENGE"
61
"ACME_DNS_PROVIDER"
62
"ACME_ACCOUNT_EMAIL"
63
)
65
sed -i --follow-symlinks '$a\' mailcow.conf
66
for option in ${CONFIG_ARRAY[@]}; do
67
if grep -q "^#\?${option}=" mailcow.conf; then
68
continue
69
fi
71
echo "Adding new option \"${option}\" to mailcow.conf"
73
case "${option}" in
74
AUTODISCOVER_SAN)
75
echo '# Obtain certificates for autodiscover.* and autoconfig.* domains.' >> mailcow.conf
76
echo '# This can be useful to switch off in case you are in a scenario where a reverse proxy already handles those.' >> mailcow.conf
77
echo '# There are mixed scenarios where ports 80,443 are occupied and you do not want to share certs' >> mailcow.conf
78
echo '# between services. So acme-mailcow obtains for maildomains and all web-things get handled' >> mailcow.conf
79
echo '# in the reverse proxy.' >> mailcow.conf
80
echo 'AUTODISCOVER_SAN=y' >> mailcow.conf
81
;;
83
DOCKER_COMPOSE_VERSION)
84
echo "# Used Docker Compose version" >> mailcow.conf
85
echo "# Switch here between native (compose plugin) and standalone" >> mailcow.conf
86
echo "# For more informations take a look at the mailcow docs regarding the configuration options." >> mailcow.conf
87
echo "# Normally this should be untouched but if you decided to use either of those you can switch it manually here." >> mailcow.conf
88
echo "# Please be aware that at least one of those variants should be installed on your machine or mailcow will fail." >> mailcow.conf
89
echo "" >> mailcow.conf
90
echo "DOCKER_COMPOSE_VERSION=${DOCKER_COMPOSE_VERSION}" >> mailcow.conf
91
;;
93
DOVEADM_PORT)
94
echo "DOVEADM_PORT=127.0.0.1:19991" >> mailcow.conf
95
;;
97
LOG_LINES)
98
echo '# Max log lines per service to keep in Redis logs' >> mailcow.conf
99
echo "LOG_LINES=9999" >> mailcow.conf
100
;;
101
IPV4_NETWORK)
102
echo '# Internal IPv4 /24 subnet, format n.n.n. (expands to n.n.n.0/24)' >> mailcow.conf
103
echo "IPV4_NETWORK=172.22.1" >> mailcow.conf
104
;;
105
IPV6_NETWORK)
106
echo '# Internal IPv6 subnet in fc00::/7' >> mailcow.conf
107
echo "IPV6_NETWORK=fd4d:6169:6c63:6f77::/64" >> mailcow.conf
108
;;
109
SQL_PORT)
110
echo '# Bind SQL to 127.0.0.1 on port 13306' >> mailcow.conf
111
echo "SQL_PORT=127.0.0.1:13306" >> mailcow.conf
112
;;
113
API_KEY)
114
echo '# Create or override API key for web UI' >> mailcow.conf
115
echo "#API_KEY=" >> mailcow.conf
116
;;
117
API_KEY_READ_ONLY)
118
echo '# Create or override read-only API key for web UI' >> mailcow.conf
119
echo "#API_KEY_READ_ONLY=" >> mailcow.conf
120
;;
121
API_ALLOW_FROM)
122
echo '# Must be set for API_KEY to be active' >> mailcow.conf
123
echo '# IPs only, no networks (networks can be set via UI)' >> mailcow.conf
124
echo "#API_ALLOW_FROM=" >> mailcow.conf
125
;;
126
SNAT_TO_SOURCE)
127
echo '# Use this IPv4 for outgoing connections (SNAT)' >> mailcow.conf
128
echo "#SNAT_TO_SOURCE=" >> mailcow.conf
129
;;
130
SNAT6_TO_SOURCE)
131
echo '# Use this IPv6 for outgoing connections (SNAT)' >> mailcow.conf
132
echo "#SNAT6_TO_SOURCE=" >> mailcow.conf
133
;;
134
MAILDIR_GC_TIME)
135
echo '# Garbage collector cleanup' >> mailcow.conf
136
echo '# Deleted domains and mailboxes are moved to /var/vmail/_garbage/timestamp_sanitizedstring' >> mailcow.conf
137
echo '# How long should objects remain in the garbage until they are being deleted? (value in minutes)' >> mailcow.conf
138
echo '# Check interval is hourly' >> mailcow.conf
139
echo 'MAILDIR_GC_TIME=1440' >> mailcow.conf
140
;;
141
ACL_ANYONE)
142
echo '# Set this to "allow" to enable the anyone pseudo user. Disabled by default.' >> mailcow.conf
143
echo '# When enabled, ACL can be created, that apply to "All authenticated users"' >> mailcow.conf
144
echo '# This should probably only be activated on mail hosts, that are used exclusively by one organisation.' >> mailcow.conf
145
echo '# Otherwise a user might share data with too many other users.' >> mailcow.conf
146
echo 'ACL_ANYONE=disallow' >> mailcow.conf
147
;;
148
FTS_HEAP)
149
echo '# Dovecot Indexing (FTS) Process maximum heap size in MB, there is no recommendation, please see Dovecot docs.' >> mailcow.conf
150
echo '# Flatcurve is used as FTS Engine. It is supposed to be pretty efficient in CPU and RAM consumption.' >> mailcow.conf
151
echo '# Please always monitor your Resource consumption!' >> mailcow.conf
152
echo "FTS_HEAP=128" >> mailcow.conf
153
;;
154
SKIP_FTS)
155
echo '# Skip FTS (Fulltext Search) for Dovecot on low-memory, low-threaded systems or if you simply want to disable it.' >> mailcow.conf
156
echo "# Dovecot inside mailcow use Flatcurve as FTS Backend." >> mailcow.conf
157
echo "SKIP_FTS=y" >> mailcow.conf
158
;;
159
FTS_PROCS)
160
echo '# Controls how many processes the Dovecot indexing process can spawn at max.' >> mailcow.conf
161
echo '# Too many indexing processes can use a lot of CPU and Disk I/O' >> mailcow.conf
162
echo '# Please visit: https://doc.dovecot.org/configuration_manual/service_configuration/#indexer-worker for more informations' >> mailcow.conf
163
echo "FTS_PROCS=1" >> mailcow.conf
164
;;
165
ENABLE_SSL_SNI)
166
echo '# Create seperate certificates for all domains - y/n' >> mailcow.conf
167
echo '# this will allow adding more than 100 domains, but some email clients will not be able to connect with alternative hostnames' >> mailcow.conf
168
echo '# see https://wiki.dovecot.org/SSL/SNIClientSupport' >> mailcow.conf
169
echo "ENABLE_SSL_SNI=n" >> mailcow.conf
170
;;
171
SKIP_SOGO)
172
echo '# Skip SOGo: Will disable SOGo integration and therefore webmail, DAV protocols and ActiveSync support (experimental, unsupported, not fully implemented) - y/n' >> mailcow.conf
173
echo "SKIP_SOGO=n" >> mailcow.conf
174
;;
175
MAILDIR_SUB)
176
echo '# MAILDIR_SUB defines a path in a users virtual home to keep the maildir in. Leave empty for updated setups.' >> mailcow.conf
177
echo "#MAILDIR_SUB=Maildir" >> mailcow.conf
178
echo "MAILDIR_SUB=" >> mailcow.conf
179
;;
180
WATCHDOG_NOTIFY_WEBHOOK)
181
echo '# Send notifications to a webhook URL that receives a POST request with the content type "application/json".' >> mailcow.conf
182
echo '# You can use this to send notifications to services like Discord, Slack and others.' >> mailcow.conf
183
echo '#WATCHDOG_NOTIFY_WEBHOOK=https://discord.com/api/webhooks/XXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' >> mailcow.conf
184
;;
185
WATCHDOG_NOTIFY_WEBHOOK_BODY)
186
echo '# JSON body included in the webhook POST request. Needs to be in single quotes.' >> mailcow.conf
187
echo '# Following variables are available: SUBJECT, BODY' >> mailcow.conf
188
WEBHOOK_BODY='{"username": "mailcow Watchdog", "content": "**${SUBJECT}**\n${BODY}"}'
189
echo "#WATCHDOG_NOTIFY_WEBHOOK_BODY='${WEBHOOK_BODY}'" >> mailcow.conf
190
;;
191
WATCHDOG_NOTIFY_BAN)
192
echo '# Notify about banned IP. Includes whois lookup.' >> mailcow.conf
193
echo "WATCHDOG_NOTIFY_BAN=y" >> mailcow.conf
194
;;
195
WATCHDOG_NOTIFY_START)
196
echo '# Send a notification when the watchdog is started.' >> mailcow.conf
197
echo "WATCHDOG_NOTIFY_START=y" >> mailcow.conf
198
;;
199
WATCHDOG_SUBJECT)
200
echo '# Subject for watchdog mails. Defaults to "Watchdog ALERT" followed by the error message.' >> mailcow.conf
201
echo "#WATCHDOG_SUBJECT=" >> mailcow.conf
202
;;
203
WATCHDOG_EXTERNAL_CHECKS)
204
echo '# Checks if mailcow is an open relay. Requires a SAL. More checks will follow.' >> mailcow.conf
205
echo '# No data is collected. Opt-in and anonymous.' >> mailcow.conf
206
echo '# Will only work with unmodified mailcow setups.' >> mailcow.conf
207
echo "WATCHDOG_EXTERNAL_CHECKS=n" >> mailcow.conf
208
;;
209
SOGO_EXPIRE_SESSION)
210
echo '# SOGo session timeout in minutes' >> mailcow.conf
211
echo "SOGO_EXPIRE_SESSION=480" >> mailcow.conf
212
;;
213
REDIS_PORT)
214
echo "REDIS_PORT=127.0.0.1:7654" >> mailcow.conf
215
;;
216
DOVECOT_MASTER_USER)
217
echo '# DOVECOT_MASTER_USER and _PASS must _both_ be provided. No special chars.' >> mailcow.conf
218
echo '# Empty by default to auto-generate master user and password on start.' >> mailcow.conf
219
echo '# User expands to [email protected]' >> mailcow.conf
220
echo '# LEAVE EMPTY IF UNSURE' >> mailcow.conf
221
echo "DOVECOT_MASTER_USER=" >> mailcow.conf
222
;;
223
DOVECOT_MASTER_PASS)
224
echo '# LEAVE EMPTY IF UNSURE' >> mailcow.conf
225
echo "DOVECOT_MASTER_PASS=" >> mailcow.conf
226
;;
227
MAILCOW_PASS_SCHEME)
228
echo '# Password hash algorithm' >> mailcow.conf
229
echo '# Only certain password hash algorithm are supported. For a fully list of supported schemes,' >> mailcow.conf
230
echo '# see https://docs.mailcow.email/models/model-passwd/' >> mailcow.conf
231
echo "MAILCOW_PASS_SCHEME=BLF-CRYPT" >> mailcow.conf
232
;;
233
ADDITIONAL_SERVER_NAMES)
234
echo '# Additional server names for mailcow UI' >> mailcow.conf
235
echo '#' >> mailcow.conf
236
echo '# Specify alternative addresses for the mailcow UI to respond to' >> mailcow.conf
237
echo '# This is useful when you set mail.* as ADDITIONAL_SAN and want to make sure mail.maildomain.com will always point to the mailcow UI.' >> mailcow.conf
238
echo '# If the server name does not match a known site, Nginx decides by best-guess and may redirect users to the wrong web root.' >> mailcow.conf
239
echo '# You can understand this as server_name directive in Nginx.' >> mailcow.conf
240
echo '# Comma separated list without spaces! Example: ADDITIONAL_SERVER_NAMES=a.b.c,d.e.f' >> mailcow.conf
241
echo 'ADDITIONAL_SERVER_NAMES=' >> mailcow.conf
242
;;
243
WEBAUTHN_ONLY_TRUSTED_VENDORS)
244
echo "# WebAuthn device manufacturer verification" >> mailcow.conf
245
echo '# After setting WEBAUTHN_ONLY_TRUSTED_VENDORS=y only devices from trusted manufacturers are allowed' >> mailcow.conf
246
echo '# root certificates can be placed for validation under mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates' >> mailcow.conf
247
echo 'WEBAUTHN_ONLY_TRUSTED_VENDORS=n' >> mailcow.conf
248
;;
249
SPAMHAUS_DQS_KEY)
250
echo "# Spamhaus Data Query Service Key" >> mailcow.conf
251
echo '# Optional: Leave empty for none' >> mailcow.conf
252
echo '# Enter your key here if you are using a blocked ASN (OVH, AWS, Cloudflare e.g) for the unregistered Spamhaus Blocklist.' >> mailcow.conf
253
echo '# If empty, it will completely disable Spamhaus blocklists if it detects that you are running on a server using a blocked AS.' >> mailcow.conf
254
echo '# Otherwise it will work as usual.' >> mailcow.conf
255
echo 'SPAMHAUS_DQS_KEY=' >> mailcow.conf
256
;;
257
WATCHDOG_VERBOSE)
258
echo '# Enable watchdog verbose logging' >> mailcow.conf
259
echo 'WATCHDOG_VERBOSE=n' >> mailcow.conf
260
;;
261
SKIP_UNBOUND_HEALTHCHECK)
262
echo '# Skip Unbound (DNS Resolver) Healthchecks (NOT Recommended!) - y/n' >> mailcow.conf
263
echo 'SKIP_UNBOUND_HEALTHCHECK=n' >> mailcow.conf
264
;;
265
DISABLE_NETFILTER_ISOLATION_RULE)
266
echo '# Prevent netfilter from setting an iptables/nftables rule to isolate the mailcow docker network - y/n' >> mailcow.conf
267
echo '# CAUTION: Disabling this may expose container ports to other neighbors on the same subnet, even if the ports are bound to localhost' >> mailcow.conf
268
echo 'DISABLE_NETFILTER_ISOLATION_RULE=n' >> mailcow.conf
269
;;
270
HTTP_REDIRECT)
271
echo '# Redirect HTTP connections to HTTPS - y/n' >> mailcow.conf
272
echo 'HTTP_REDIRECT=n' >> mailcow.conf
273
;;
274
ENABLE_IPV6)
275
echo '# IPv6 Controller Section' >> mailcow.conf
276
echo '# This variable controls the usage of IPv6 within mailcow.' >> mailcow.conf
277
echo '# Can either be true or false | Defaults to true' >> mailcow.conf
278
echo '# WARNING: MAKE SURE TO PROPERLY CONFIGURE IPv6 ON YOUR HOST FIRST BEFORE ENABLING THIS AS FAULTY CONFIGURATIONS CAN LEAD TO OPEN RELAYS!' >> mailcow.conf
279
echo '# A COMPLETE DOCKER STACK REBUILD (compose down && compose up -d) IS NEEDED TO APPLY THIS.' >> mailcow.conf
280
echo ENABLE_IPV6=${IPV6_BOOL} >> mailcow.conf
281
;;
282
SKIP_CLAMD)
283
echo '# Skip ClamAV (clamd-mailcow) anti-virus (Rspamd will auto-detect a missing ClamAV container) - y/n' >> mailcow.conf
284
echo 'SKIP_CLAMD=n' >> mailcow.conf
285
;;
286
SKIP_OLEFY)
287
echo '# Skip Olefy (olefy-mailcow) anti-virus for Office documents (Rspamd will auto-detect a missing Olefy container) - y/n' >> mailcow.conf
288
echo 'SKIP_OLEFY=n' >> mailcow.conf
289
;;
290
REDISPASS)
291
echo "REDISPASS=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 2>/dev/null | head -c 28)" >> mailcow.conf
292
;;
293
SOGO_URL_ENCRYPTION_KEY)
294
echo '# SOGo URL encryption key (exactly 16 characters, limited to A–Z, a–z, 0–9)' >> mailcow.conf
295
echo '# This key is used to encrypt email addresses within SOGo URLs' >> mailcow.conf
296
echo "SOGO_URL_ENCRYPTION_KEY=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 2>/dev/null | head -c 16)" >> mailcow.conf
297
;;
298
ACME_DNS_CHALLENGE)
299
echo '# Enable DNS-01 challenge for ACME (acme-mailcow) - y/n' >> mailcow.conf
300
echo '# This requires you to set ACME_DNS_PROVIDER and ACME_ACCOUNT_EMAIL below' >> mailcow.conf
301
echo 'ACME_DNS_CHALLENGE=n' >> mailcow.conf
302
;;
303
ACME_DNS_PROVIDER)
304
echo '# DNS provider for DNS-01 challenge (e.g. dns_cf, dns_azure, dns_gd, etc.)' >> mailcow.conf
305
echo '# See the dns-01 provider documentation for more information.' >> mailcow.conf
306
echo 'ACME_DNS_PROVIDER=dns_xxx' >> mailcow.conf
307
;;
308
ACME_ACCOUNT_EMAIL)
309
echo '# Account email for ACME DNS-01 challenge registration' >> mailcow.conf
310
echo '[email protected]' >> mailcow.conf
311
;;
312
*)
313
echo "${option}=" >> mailcow.conf
314
;;
315
esac
316
done
317
}