aboutsummaryrefslogtreecommitdiff
path: root/services/docker
diff options
context:
space:
mode:
Diffstat (limited to 'services/docker')
-rwxr-xr-xservices/docker/auto-backup/daemon.bash4
-rw-r--r--services/docker/mail-server/Dockerfile2
-rw-r--r--services/docker/mail-server/aws-sendmail/deno.json8
-rw-r--r--services/docker/mail-server/aws-sendmail/deno.lock795
-rw-r--r--services/docker/mail-server/aws-sendmail/main.ts8
-rw-r--r--services/docker/mail-server/dovecot.conf243
-rw-r--r--services/docker/nginx/configs/templates/mail.conf.template5
7 files changed, 1057 insertions, 8 deletions
diff --git a/services/docker/auto-backup/daemon.bash b/services/docker/auto-backup/daemon.bash
index da9f853..c82e2d0 100755
--- a/services/docker/auto-backup/daemon.bash
+++ b/services/docker/auto-backup/daemon.bash
@@ -15,9 +15,7 @@ success() {
echo -e "\033[32mSuccess: " "$@" "\033[0m"
}
-if [[ -z "$CRUPEST_AUTO_BACKUP_INTERVAL" ]]; then
- die "Backup interval not set, please set it!"
-fi
+[[ -n "$CRUPEST_AUTO_BACKUP_INTERVAL" ]] || die "Backup interval not set, please set it!"
note "Checking secrets..."
[[ -n "$RCLONE_S3_PROVIDER" ]] || die "S3 provider not set!"
diff --git a/services/docker/mail-server/Dockerfile b/services/docker/mail-server/Dockerfile
new file mode 100644
index 0000000..47b2c4b
--- /dev/null
+++ b/services/docker/mail-server/Dockerfile
@@ -0,0 +1,2 @@
+FROM dovecot/dovecot:latest-root
+ADD dovecot.conf /etc/dovecot/dovecot.conf
diff --git a/services/docker/mail-server/aws-sendmail/deno.json b/services/docker/mail-server/aws-sendmail/deno.json
new file mode 100644
index 0000000..d24cb16
--- /dev/null
+++ b/services/docker/mail-server/aws-sendmail/deno.json
@@ -0,0 +1,8 @@
+{
+ "tasks": {
+ "dev": "deno run --watch main.ts"
+ },
+ "imports": {
+ "@aws-sdk/client-sesv2": "npm:@aws-sdk/client-sesv2@^3.782.0"
+ }
+}
diff --git a/services/docker/mail-server/aws-sendmail/deno.lock b/services/docker/mail-server/aws-sendmail/deno.lock
new file mode 100644
index 0000000..e91dd71
--- /dev/null
+++ b/services/docker/mail-server/aws-sendmail/deno.lock
@@ -0,0 +1,795 @@
+{
+ "version": "4",
+ "specifiers": {
+ "npm:@aws-sdk/client-sesv2@^3.782.0": "3.782.0"
+ },
+ "npm": {
+ "@aws-crypto/sha256-browser@5.2.0": {
+ "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==",
+ "dependencies": [
+ "@aws-crypto/sha256-js",
+ "@aws-crypto/supports-web-crypto",
+ "@aws-crypto/util",
+ "@aws-sdk/types",
+ "@aws-sdk/util-locate-window",
+ "@smithy/util-utf8@2.3.0",
+ "tslib"
+ ]
+ },
+ "@aws-crypto/sha256-js@5.2.0": {
+ "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==",
+ "dependencies": [
+ "@aws-crypto/util",
+ "@aws-sdk/types",
+ "tslib"
+ ]
+ },
+ "@aws-crypto/supports-web-crypto@5.2.0": {
+ "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==",
+ "dependencies": [
+ "tslib"
+ ]
+ },
+ "@aws-crypto/util@5.2.0": {
+ "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==",
+ "dependencies": [
+ "@aws-sdk/types",
+ "@smithy/util-utf8@2.3.0",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/client-sesv2@3.782.0": {
+ "integrity": "sha512-h7Uhh+9BZ9UCE+SM5vld5d10M3VpF9gYbqmzW4+gWtBq9lmsLWjB9Dsk74Xrh4i7s9op7TEfVYm/o+ZB180BtQ==",
+ "dependencies": [
+ "@aws-crypto/sha256-browser",
+ "@aws-crypto/sha256-js",
+ "@aws-sdk/core",
+ "@aws-sdk/credential-provider-node",
+ "@aws-sdk/middleware-host-header",
+ "@aws-sdk/middleware-logger",
+ "@aws-sdk/middleware-recursion-detection",
+ "@aws-sdk/middleware-user-agent",
+ "@aws-sdk/region-config-resolver",
+ "@aws-sdk/signature-v4-multi-region",
+ "@aws-sdk/types",
+ "@aws-sdk/util-endpoints",
+ "@aws-sdk/util-user-agent-browser",
+ "@aws-sdk/util-user-agent-node",
+ "@smithy/config-resolver",
+ "@smithy/core",
+ "@smithy/fetch-http-handler",
+ "@smithy/hash-node",
+ "@smithy/invalid-dependency",
+ "@smithy/middleware-content-length",
+ "@smithy/middleware-endpoint",
+ "@smithy/middleware-retry",
+ "@smithy/middleware-serde",
+ "@smithy/middleware-stack",
+ "@smithy/node-config-provider",
+ "@smithy/node-http-handler",
+ "@smithy/protocol-http",
+ "@smithy/smithy-client",
+ "@smithy/types",
+ "@smithy/url-parser",
+ "@smithy/util-base64",
+ "@smithy/util-body-length-browser",
+ "@smithy/util-body-length-node",
+ "@smithy/util-defaults-mode-browser",
+ "@smithy/util-defaults-mode-node",
+ "@smithy/util-endpoints",
+ "@smithy/util-middleware",
+ "@smithy/util-retry",
+ "@smithy/util-utf8@4.0.0",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/client-sso@3.782.0": {
+ "integrity": "sha512-5GlJBejo8wqMpSSEKb45WE82YxI2k73YuebjLH/eWDNQeE6VI5Bh9lA1YQ7xNkLLH8hIsb0pSfKVuwh0VEzVrg==",
+ "dependencies": [
+ "@aws-crypto/sha256-browser",
+ "@aws-crypto/sha256-js",
+ "@aws-sdk/core",
+ "@aws-sdk/middleware-host-header",
+ "@aws-sdk/middleware-logger",
+ "@aws-sdk/middleware-recursion-detection",
+ "@aws-sdk/middleware-user-agent",
+ "@aws-sdk/region-config-resolver",
+ "@aws-sdk/types",
+ "@aws-sdk/util-endpoints",
+ "@aws-sdk/util-user-agent-browser",
+ "@aws-sdk/util-user-agent-node",
+ "@smithy/config-resolver",
+ "@smithy/core",
+ "@smithy/fetch-http-handler",
+ "@smithy/hash-node",
+ "@smithy/invalid-dependency",
+ "@smithy/middleware-content-length",
+ "@smithy/middleware-endpoint",
+ "@smithy/middleware-retry",
+ "@smithy/middleware-serde",
+ "@smithy/middleware-stack",
+ "@smithy/node-config-provider",
+ "@smithy/node-http-handler",
+ "@smithy/protocol-http",
+ "@smithy/smithy-client",
+ "@smithy/types",
+ "@smithy/url-parser",
+ "@smithy/util-base64",
+ "@smithy/util-body-length-browser",
+ "@smithy/util-body-length-node",
+ "@smithy/util-defaults-mode-browser",
+ "@smithy/util-defaults-mode-node",
+ "@smithy/util-endpoints",
+ "@smithy/util-middleware",
+ "@smithy/util-retry",
+ "@smithy/util-utf8@4.0.0",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/core@3.775.0": {
+ "integrity": "sha512-8vpW4WihVfz0DX+7WnnLGm3GuQER++b0IwQG35JlQMlgqnc44M//KbJPsIHA0aJUJVwJAEShgfr5dUbY8WUzaA==",
+ "dependencies": [
+ "@aws-sdk/types",
+ "@smithy/core",
+ "@smithy/node-config-provider",
+ "@smithy/property-provider",
+ "@smithy/protocol-http",
+ "@smithy/signature-v4",
+ "@smithy/smithy-client",
+ "@smithy/types",
+ "@smithy/util-middleware",
+ "fast-xml-parser",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/credential-provider-env@3.775.0": {
+ "integrity": "sha512-6ESVxwCbGm7WZ17kY1fjmxQud43vzJFoLd4bmlR+idQSWdqlzGDYdcfzpjDKTcivdtNrVYmFvcH1JBUwCRAZhw==",
+ "dependencies": [
+ "@aws-sdk/core",
+ "@aws-sdk/types",
+ "@smithy/property-provider",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/credential-provider-http@3.775.0": {
+ "integrity": "sha512-PjDQeDH/J1S0yWV32wCj2k5liRo0ssXMseCBEkCsD3SqsU8o5cU82b0hMX4sAib/RkglCSZqGO0xMiN0/7ndww==",
+ "dependencies": [
+ "@aws-sdk/core",
+ "@aws-sdk/types",
+ "@smithy/fetch-http-handler",
+ "@smithy/node-http-handler",
+ "@smithy/property-provider",
+ "@smithy/protocol-http",
+ "@smithy/smithy-client",
+ "@smithy/types",
+ "@smithy/util-stream",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/credential-provider-ini@3.782.0": {
+ "integrity": "sha512-wd4KdRy2YjLsE4Y7pz00470Iip06GlRHkG4dyLW7/hFMzEO2o7ixswCWp6J2VGZVAX64acknlv2Q0z02ebjmhw==",
+ "dependencies": [
+ "@aws-sdk/core",
+ "@aws-sdk/credential-provider-env",
+ "@aws-sdk/credential-provider-http",
+ "@aws-sdk/credential-provider-process",
+ "@aws-sdk/credential-provider-sso",
+ "@aws-sdk/credential-provider-web-identity",
+ "@aws-sdk/nested-clients",
+ "@aws-sdk/types",
+ "@smithy/credential-provider-imds",
+ "@smithy/property-provider",
+ "@smithy/shared-ini-file-loader",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/credential-provider-node@3.782.0": {
+ "integrity": "sha512-HZiAF+TCEyKjju9dgysjiPIWgt/+VerGaeEp18mvKLNfgKz1d+/82A2USEpNKTze7v3cMFASx3CvL8yYyF7mJw==",
+ "dependencies": [
+ "@aws-sdk/credential-provider-env",
+ "@aws-sdk/credential-provider-http",
+ "@aws-sdk/credential-provider-ini",
+ "@aws-sdk/credential-provider-process",
+ "@aws-sdk/credential-provider-sso",
+ "@aws-sdk/credential-provider-web-identity",
+ "@aws-sdk/types",
+ "@smithy/credential-provider-imds",
+ "@smithy/property-provider",
+ "@smithy/shared-ini-file-loader",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/credential-provider-process@3.775.0": {
+ "integrity": "sha512-A6k68H9rQp+2+7P7SGO90Csw6nrUEm0Qfjpn9Etc4EboZhhCLs9b66umUsTsSBHus4FDIe5JQxfCUyt1wgNogg==",
+ "dependencies": [
+ "@aws-sdk/core",
+ "@aws-sdk/types",
+ "@smithy/property-provider",
+ "@smithy/shared-ini-file-loader",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/credential-provider-sso@3.782.0": {
+ "integrity": "sha512-1y1ucxTtTIGDSNSNxriQY8msinilhe9gGvQpUDYW9gboyC7WQJPDw66imy258V6osdtdi+xoHzVCbCz3WhosMQ==",
+ "dependencies": [
+ "@aws-sdk/client-sso",
+ "@aws-sdk/core",
+ "@aws-sdk/token-providers",
+ "@aws-sdk/types",
+ "@smithy/property-provider",
+ "@smithy/shared-ini-file-loader",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/credential-provider-web-identity@3.782.0": {
+ "integrity": "sha512-xCna0opVPaueEbJoclj5C6OpDNi0Gynj+4d7tnuXGgQhTHPyAz8ZyClkVqpi5qvHTgxROdUEDxWqEO5jqRHZHQ==",
+ "dependencies": [
+ "@aws-sdk/core",
+ "@aws-sdk/nested-clients",
+ "@aws-sdk/types",
+ "@smithy/property-provider",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/middleware-host-header@3.775.0": {
+ "integrity": "sha512-tkSegM0Z6WMXpLB8oPys/d+umYIocvO298mGvcMCncpRl77L9XkvSLJIFzaHes+o7djAgIduYw8wKIMStFss2w==",
+ "dependencies": [
+ "@aws-sdk/types",
+ "@smithy/protocol-http",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/middleware-logger@3.775.0": {
+ "integrity": "sha512-FaxO1xom4MAoUJsldmR92nT1G6uZxTdNYOFYtdHfd6N2wcNaTuxgjIvqzg5y7QIH9kn58XX/dzf1iTjgqUStZw==",
+ "dependencies": [
+ "@aws-sdk/types",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/middleware-recursion-detection@3.775.0": {
+ "integrity": "sha512-GLCzC8D0A0YDG5u3F5U03Vb9j5tcOEFhr8oc6PDk0k0vm5VwtZOE6LvK7hcCSoAB4HXyOUM0sQuXrbaAh9OwXA==",
+ "dependencies": [
+ "@aws-sdk/types",
+ "@smithy/protocol-http",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/middleware-sdk-s3@3.775.0": {
+ "integrity": "sha512-zsvcu7cWB28JJ60gVvjxPCI7ZU7jWGcpNACPiZGyVtjYXwcxyhXbYEVDSWKsSA6ERpz9XrpLYod8INQWfW3ECg==",
+ "dependencies": [
+ "@aws-sdk/core",
+ "@aws-sdk/types",
+ "@aws-sdk/util-arn-parser",
+ "@smithy/core",
+ "@smithy/node-config-provider",
+ "@smithy/protocol-http",
+ "@smithy/signature-v4",
+ "@smithy/smithy-client",
+ "@smithy/types",
+ "@smithy/util-config-provider",
+ "@smithy/util-middleware",
+ "@smithy/util-stream",
+ "@smithy/util-utf8@4.0.0",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/middleware-user-agent@3.782.0": {
+ "integrity": "sha512-i32H2R6IItX+bQ2p4+v2gGO2jA80jQoJO2m1xjU9rYWQW3+ErWy4I5YIuQHTBfb6hSdAHbaRfqPDgbv9J2rjEg==",
+ "dependencies": [
+ "@aws-sdk/core",
+ "@aws-sdk/types",
+ "@aws-sdk/util-endpoints",
+ "@smithy/core",
+ "@smithy/protocol-http",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/nested-clients@3.782.0": {
+ "integrity": "sha512-QOYC8q7luzHFXrP0xYAqBctoPkynjfV0r9dqntFu4/IWMTyC1vlo1UTxFAjIPyclYw92XJyEkVCVg9v/nQnsUA==",
+ "dependencies": [
+ "@aws-crypto/sha256-browser",
+ "@aws-crypto/sha256-js",
+ "@aws-sdk/core",
+ "@aws-sdk/middleware-host-header",
+ "@aws-sdk/middleware-logger",
+ "@aws-sdk/middleware-recursion-detection",
+ "@aws-sdk/middleware-user-agent",
+ "@aws-sdk/region-config-resolver",
+ "@aws-sdk/types",
+ "@aws-sdk/util-endpoints",
+ "@aws-sdk/util-user-agent-browser",
+ "@aws-sdk/util-user-agent-node",
+ "@smithy/config-resolver",
+ "@smithy/core",
+ "@smithy/fetch-http-handler",
+ "@smithy/hash-node",
+ "@smithy/invalid-dependency",
+ "@smithy/middleware-content-length",
+ "@smithy/middleware-endpoint",
+ "@smithy/middleware-retry",
+ "@smithy/middleware-serde",
+ "@smithy/middleware-stack",
+ "@smithy/node-config-provider",
+ "@smithy/node-http-handler",
+ "@smithy/protocol-http",
+ "@smithy/smithy-client",
+ "@smithy/types",
+ "@smithy/url-parser",
+ "@smithy/util-base64",
+ "@smithy/util-body-length-browser",
+ "@smithy/util-body-length-node",
+ "@smithy/util-defaults-mode-browser",
+ "@smithy/util-defaults-mode-node",
+ "@smithy/util-endpoints",
+ "@smithy/util-middleware",
+ "@smithy/util-retry",
+ "@smithy/util-utf8@4.0.0",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/region-config-resolver@3.775.0": {
+ "integrity": "sha512-40iH3LJjrQS3LKUJAl7Wj0bln7RFPEvUYKFxtP8a+oKFDO0F65F52xZxIJbPn6sHkxWDAnZlGgdjZXM3p2g5wQ==",
+ "dependencies": [
+ "@aws-sdk/types",
+ "@smithy/node-config-provider",
+ "@smithy/types",
+ "@smithy/util-config-provider",
+ "@smithy/util-middleware",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/signature-v4-multi-region@3.775.0": {
+ "integrity": "sha512-cnGk8GDfTMJ8p7+qSk92QlIk2bmTmFJqhYxcXZ9PysjZtx0xmfCMxnG3Hjy1oU2mt5boPCVSOptqtWixayM17g==",
+ "dependencies": [
+ "@aws-sdk/middleware-sdk-s3",
+ "@aws-sdk/types",
+ "@smithy/protocol-http",
+ "@smithy/signature-v4",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/token-providers@3.782.0": {
+ "integrity": "sha512-4tPuk/3+THPrzKaXW4jE2R67UyGwHLFizZ47pcjJWbhb78IIJAy94vbeqEQ+veS84KF5TXcU7g5jGTXC0D70Wg==",
+ "dependencies": [
+ "@aws-sdk/nested-clients",
+ "@aws-sdk/types",
+ "@smithy/property-provider",
+ "@smithy/shared-ini-file-loader",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/types@3.775.0": {
+ "integrity": "sha512-ZoGKwa4C9fC9Av6bdfqcW6Ix5ot05F/S4VxWR2nHuMv7hzfmAjTOcUiWT7UR4hM/U0whf84VhDtXN/DWAk52KA==",
+ "dependencies": [
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/util-arn-parser@3.723.0": {
+ "integrity": "sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w==",
+ "dependencies": [
+ "tslib"
+ ]
+ },
+ "@aws-sdk/util-endpoints@3.782.0": {
+ "integrity": "sha512-/RJOAO7o7HI6lEa4ASbFFLHGU9iPK876BhsVfnl54MvApPVYWQ9sHO0anOUim2S5lQTwd/6ghuH3rFYSq/+rdw==",
+ "dependencies": [
+ "@aws-sdk/types",
+ "@smithy/types",
+ "@smithy/util-endpoints",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/util-locate-window@3.723.0": {
+ "integrity": "sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==",
+ "dependencies": [
+ "tslib"
+ ]
+ },
+ "@aws-sdk/util-user-agent-browser@3.775.0": {
+ "integrity": "sha512-txw2wkiJmZKVdDbscK7VBK+u+TJnRtlUjRTLei+elZg2ADhpQxfVAQl436FUeIv6AhB/oRHW6/K/EAGXUSWi0A==",
+ "dependencies": [
+ "@aws-sdk/types",
+ "@smithy/types",
+ "bowser",
+ "tslib"
+ ]
+ },
+ "@aws-sdk/util-user-agent-node@3.782.0": {
+ "integrity": "sha512-dMFkUBgh2Bxuw8fYZQoH/u3H4afQ12VSkzEi//qFiDTwbKYq+u+RYjc8GLDM6JSK1BShMu5AVR7HD4ap1TYUnA==",
+ "dependencies": [
+ "@aws-sdk/middleware-user-agent",
+ "@aws-sdk/types",
+ "@smithy/node-config-provider",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/abort-controller@4.0.2": {
+ "integrity": "sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==",
+ "dependencies": [
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/config-resolver@4.1.0": {
+ "integrity": "sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A==",
+ "dependencies": [
+ "@smithy/node-config-provider",
+ "@smithy/types",
+ "@smithy/util-config-provider",
+ "@smithy/util-middleware",
+ "tslib"
+ ]
+ },
+ "@smithy/core@3.2.0": {
+ "integrity": "sha512-k17bgQhVZ7YmUvA8at4af1TDpl0NDMBuBKJl8Yg0nrefwmValU+CnA5l/AriVdQNthU/33H3nK71HrLgqOPr1Q==",
+ "dependencies": [
+ "@smithy/middleware-serde",
+ "@smithy/protocol-http",
+ "@smithy/types",
+ "@smithy/util-body-length-browser",
+ "@smithy/util-middleware",
+ "@smithy/util-stream",
+ "@smithy/util-utf8@4.0.0",
+ "tslib"
+ ]
+ },
+ "@smithy/credential-provider-imds@4.0.2": {
+ "integrity": "sha512-32lVig6jCaWBHnY+OEQ6e6Vnt5vDHaLiydGrwYMW9tPqO688hPGTYRamYJ1EptxEC2rAwJrHWmPoKRBl4iTa8w==",
+ "dependencies": [
+ "@smithy/node-config-provider",
+ "@smithy/property-provider",
+ "@smithy/types",
+ "@smithy/url-parser",
+ "tslib"
+ ]
+ },
+ "@smithy/fetch-http-handler@5.0.2": {
+ "integrity": "sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==",
+ "dependencies": [
+ "@smithy/protocol-http",
+ "@smithy/querystring-builder",
+ "@smithy/types",
+ "@smithy/util-base64",
+ "tslib"
+ ]
+ },
+ "@smithy/hash-node@4.0.2": {
+ "integrity": "sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg==",
+ "dependencies": [
+ "@smithy/types",
+ "@smithy/util-buffer-from@4.0.0",
+ "@smithy/util-utf8@4.0.0",
+ "tslib"
+ ]
+ },
+ "@smithy/invalid-dependency@4.0.2": {
+ "integrity": "sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ==",
+ "dependencies": [
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/is-array-buffer@2.2.0": {
+ "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==",
+ "dependencies": [
+ "tslib"
+ ]
+ },
+ "@smithy/is-array-buffer@4.0.0": {
+ "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==",
+ "dependencies": [
+ "tslib"
+ ]
+ },
+ "@smithy/middleware-content-length@4.0.2": {
+ "integrity": "sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==",
+ "dependencies": [
+ "@smithy/protocol-http",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/middleware-endpoint@4.1.0": {
+ "integrity": "sha512-xhLimgNCbCzsUppRTGXWkZywksuTThxaIB0HwbpsVLY5sceac4e1TZ/WKYqufQLaUy+gUSJGNdwD2jo3cXL0iA==",
+ "dependencies": [
+ "@smithy/core",
+ "@smithy/middleware-serde",
+ "@smithy/node-config-provider",
+ "@smithy/shared-ini-file-loader",
+ "@smithy/types",
+ "@smithy/url-parser",
+ "@smithy/util-middleware",
+ "tslib"
+ ]
+ },
+ "@smithy/middleware-retry@4.1.0": {
+ "integrity": "sha512-2zAagd1s6hAaI/ap6SXi5T3dDwBOczOMCSkkYzktqN1+tzbk1GAsHNAdo/1uzxz3Ky02jvZQwbi/vmDA6z4Oyg==",
+ "dependencies": [
+ "@smithy/node-config-provider",
+ "@smithy/protocol-http",
+ "@smithy/service-error-classification",
+ "@smithy/smithy-client",
+ "@smithy/types",
+ "@smithy/util-middleware",
+ "@smithy/util-retry",
+ "tslib",
+ "uuid"
+ ]
+ },
+ "@smithy/middleware-serde@4.0.3": {
+ "integrity": "sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A==",
+ "dependencies": [
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/middleware-stack@4.0.2": {
+ "integrity": "sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==",
+ "dependencies": [
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/node-config-provider@4.0.2": {
+ "integrity": "sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw==",
+ "dependencies": [
+ "@smithy/property-provider",
+ "@smithy/shared-ini-file-loader",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/node-http-handler@4.0.4": {
+ "integrity": "sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==",
+ "dependencies": [
+ "@smithy/abort-controller",
+ "@smithy/protocol-http",
+ "@smithy/querystring-builder",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/property-provider@4.0.2": {
+ "integrity": "sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==",
+ "dependencies": [
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/protocol-http@5.1.0": {
+ "integrity": "sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==",
+ "dependencies": [
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/querystring-builder@4.0.2": {
+ "integrity": "sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==",
+ "dependencies": [
+ "@smithy/types",
+ "@smithy/util-uri-escape",
+ "tslib"
+ ]
+ },
+ "@smithy/querystring-parser@4.0.2": {
+ "integrity": "sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==",
+ "dependencies": [
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/service-error-classification@4.0.2": {
+ "integrity": "sha512-LA86xeFpTKn270Hbkixqs5n73S+LVM0/VZco8dqd+JT75Dyx3Lcw/MraL7ybjmz786+160K8rPOmhsq0SocoJQ==",
+ "dependencies": [
+ "@smithy/types"
+ ]
+ },
+ "@smithy/shared-ini-file-loader@4.0.2": {
+ "integrity": "sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==",
+ "dependencies": [
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/signature-v4@5.0.2": {
+ "integrity": "sha512-Mz+mc7okA73Lyz8zQKJNyr7lIcHLiPYp0+oiqiMNc/t7/Kf2BENs5d63pEj7oPqdjaum6g0Fc8wC78dY1TgtXw==",
+ "dependencies": [
+ "@smithy/is-array-buffer@4.0.0",
+ "@smithy/protocol-http",
+ "@smithy/types",
+ "@smithy/util-hex-encoding",
+ "@smithy/util-middleware",
+ "@smithy/util-uri-escape",
+ "@smithy/util-utf8@4.0.0",
+ "tslib"
+ ]
+ },
+ "@smithy/smithy-client@4.2.0": {
+ "integrity": "sha512-Qs65/w30pWV7LSFAez9DKy0Koaoh3iHhpcpCCJ4waj/iqwsuSzJna2+vYwq46yBaqO5ZbP9TjUsATUNxrKeBdw==",
+ "dependencies": [
+ "@smithy/core",
+ "@smithy/middleware-endpoint",
+ "@smithy/middleware-stack",
+ "@smithy/protocol-http",
+ "@smithy/types",
+ "@smithy/util-stream",
+ "tslib"
+ ]
+ },
+ "@smithy/types@4.2.0": {
+ "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==",
+ "dependencies": [
+ "tslib"
+ ]
+ },
+ "@smithy/url-parser@4.0.2": {
+ "integrity": "sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==",
+ "dependencies": [
+ "@smithy/querystring-parser",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/util-base64@4.0.0": {
+ "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==",
+ "dependencies": [
+ "@smithy/util-buffer-from@4.0.0",
+ "@smithy/util-utf8@4.0.0",
+ "tslib"
+ ]
+ },
+ "@smithy/util-body-length-browser@4.0.0": {
+ "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==",
+ "dependencies": [
+ "tslib"
+ ]
+ },
+ "@smithy/util-body-length-node@4.0.0": {
+ "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==",
+ "dependencies": [
+ "tslib"
+ ]
+ },
+ "@smithy/util-buffer-from@2.2.0": {
+ "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==",
+ "dependencies": [
+ "@smithy/is-array-buffer@2.2.0",
+ "tslib"
+ ]
+ },
+ "@smithy/util-buffer-from@4.0.0": {
+ "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==",
+ "dependencies": [
+ "@smithy/is-array-buffer@4.0.0",
+ "tslib"
+ ]
+ },
+ "@smithy/util-config-provider@4.0.0": {
+ "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==",
+ "dependencies": [
+ "tslib"
+ ]
+ },
+ "@smithy/util-defaults-mode-browser@4.0.8": {
+ "integrity": "sha512-ZTypzBra+lI/LfTYZeop9UjoJhhGRTg3pxrNpfSTQLd3AJ37r2z4AXTKpq1rFXiiUIJsYyFgNJdjWRGP/cbBaQ==",
+ "dependencies": [
+ "@smithy/property-provider",
+ "@smithy/smithy-client",
+ "@smithy/types",
+ "bowser",
+ "tslib"
+ ]
+ },
+ "@smithy/util-defaults-mode-node@4.0.8": {
+ "integrity": "sha512-Rgk0Jc/UDfRTzVthye/k2dDsz5Xxs9LZaKCNPgJTRyoyBoeiNCnHsYGOyu1PKN+sDyPnJzMOz22JbwxzBp9NNA==",
+ "dependencies": [
+ "@smithy/config-resolver",
+ "@smithy/credential-provider-imds",
+ "@smithy/node-config-provider",
+ "@smithy/property-provider",
+ "@smithy/smithy-client",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/util-endpoints@3.0.2": {
+ "integrity": "sha512-6QSutU5ZyrpNbnd51zRTL7goojlcnuOB55+F9VBD+j8JpRY50IGamsjlycrmpn8PQkmJucFW8A0LSfXj7jjtLQ==",
+ "dependencies": [
+ "@smithy/node-config-provider",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/util-hex-encoding@4.0.0": {
+ "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==",
+ "dependencies": [
+ "tslib"
+ ]
+ },
+ "@smithy/util-middleware@4.0.2": {
+ "integrity": "sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==",
+ "dependencies": [
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/util-retry@4.0.2": {
+ "integrity": "sha512-Qryc+QG+7BCpvjloFLQrmlSd0RsVRHejRXd78jNO3+oREueCjwG1CCEH1vduw/ZkM1U9TztwIKVIi3+8MJScGg==",
+ "dependencies": [
+ "@smithy/service-error-classification",
+ "@smithy/types",
+ "tslib"
+ ]
+ },
+ "@smithy/util-stream@4.2.0": {
+ "integrity": "sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==",
+ "dependencies": [
+ "@smithy/fetch-http-handler",
+ "@smithy/node-http-handler",
+ "@smithy/types",
+ "@smithy/util-base64",
+ "@smithy/util-buffer-from@4.0.0",
+ "@smithy/util-hex-encoding",
+ "@smithy/util-utf8@4.0.0",
+ "tslib"
+ ]
+ },
+ "@smithy/util-uri-escape@4.0.0": {
+ "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==",
+ "dependencies": [
+ "tslib"
+ ]
+ },
+ "@smithy/util-utf8@2.3.0": {
+ "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
+ "dependencies": [
+ "@smithy/util-buffer-from@2.2.0",
+ "tslib"
+ ]
+ },
+ "@smithy/util-utf8@4.0.0": {
+ "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==",
+ "dependencies": [
+ "@smithy/util-buffer-from@4.0.0",
+ "tslib"
+ ]
+ },
+ "bowser@2.11.0": {
+ "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA=="
+ },
+ "fast-xml-parser@4.4.1": {
+ "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==",
+ "dependencies": [
+ "strnum"
+ ]
+ },
+ "strnum@1.1.2": {
+ "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA=="
+ },
+ "tslib@2.8.1": {
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+ },
+ "uuid@9.0.1": {
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="
+ }
+ },
+ "workspace": {
+ "dependencies": [
+ "npm:@aws-sdk/client-sesv2@^3.782.0"
+ ]
+ }
+}
diff --git a/services/docker/mail-server/aws-sendmail/main.ts b/services/docker/mail-server/aws-sendmail/main.ts
new file mode 100644
index 0000000..292ce5f
--- /dev/null
+++ b/services/docker/mail-server/aws-sendmail/main.ts
@@ -0,0 +1,8 @@
+export function add(a: number, b: number): number {
+ return a + b;
+}
+
+// Learn more at https://docs.deno.com/runtime/manual/examples/module_metadata#concepts
+if (import.meta.main) {
+ console.log("Add 2 + 3 =", add(2, 3));
+}
diff --git a/services/docker/mail-server/dovecot.conf b/services/docker/mail-server/dovecot.conf
new file mode 100644
index 0000000..6cebe9b
--- /dev/null
+++ b/services/docker/mail-server/dovecot.conf
@@ -0,0 +1,243 @@
+dovecot_config_version = 2.4.1
+dovecot_storage_version = 2.4.0
+
+base_dir = /run/dovecot
+state_dir = /run/dovecot
+
+protocols = imap submission lmtp lda sieve
+
+mail_driver=maildir
+mailbox_list_layout=index
+mailbox_list_utf8=yes
+mail_path=~/mail
+mail_home=/data/vmail/%{user | domain}/%{user | username}
+mail_utf8_extensions = yes
+
+mail_uid = vmail
+mail_gid = vmail
+
+# Setup default mailboxes for inbox namespace
+@mailbox_defaults = english
+
+namespace inbox {
+ separator = /
+
+ mailbox Drafts {
+ auto = subscribe
+ special_use = \Drafts
+ }
+ mailbox Junk {
+ auto = subscribe
+ special_use = \Junk
+ }
+ mailbox Trash {
+ auto = subscribe
+ special_use = \Trash
+ }
+
+ mailbox Sent {
+ auto = subscribe
+ special_use = \Sent
+ }
+
+ mailbox Archive {
+ auto = subscribe
+ special_use = \Archive
+ }
+}
+
+ssl = yes
+ssl_server {
+ cert_file = /etc/dovecot/ssl/tls.crt
+ key_file = /etc/dovecot/ssl/tls.key
+}
+
+mail_attribute {
+ dict file {
+ path = %{home}/dovecot-attributes
+ }
+}
+
+log_path = /dev/stdout
+
+imap_hibernate_timeout = 5s
+
+mail_plugins {
+ fts = yes
+ fts_flatcurve = yes
+ mail_log = yes
+ notify = yes
+}
+
+mail_log_events = delete undelete expunge save copy mailbox_create mailbox_delete mailbox_rename flag_change
+
+fts_autoindex = yes
+fts_autoindex_max_recent_msgs = 999
+fts_search_add_missing = yes
+language_filters = normalizer-icu snowball stopwords
+
+language_tokenizers = generic email-address
+language_tokenizer_generic_algorithm = simple
+
+language en {
+ default = yes
+ filters = lowercase snowball english-possessive stopwords
+}
+
+fts flatcurve {
+ substring_search = yes
+}
+
+auth_mechanisms = plain login
+auth_username_format = %{user | username}
+
+passdb passwd-file {
+ passwd_file_path = /data/userdb
+ default_password_scheme = SHA512-CRYPT
+}
+
+userdb passwd-file {
+ passwd_file_path = /data/userdb
+ fields {
+ uid:default = vmail
+ gid:default = vmail
+ home:default = /data/vmail/%{user | domain}/%{user | username}
+ }
+}
+
+protocol imap {
+ mail_plugins {
+ imap_sieve = yes
+ imap_filter_sieve = yes
+ }
+}
+
+protocol lmtp {
+ mail_plugins {
+ sieve = yes
+ }
+}
+
+service imap-login {
+ process_min_avail = 1
+ client_limit = 100
+}
+
+service pop3-login {
+ process_min_avail = 1
+ client_limit = 100
+}
+
+service submission-login {
+ process_min_avail = 1
+ client_limit = 100
+
+ inet_listener submissions {
+ port = 465
+ ssl = yes
+ }
+}
+
+protocol lda {
+ mail_plugins {
+ sieve = yes
+ }
+}
+
+service managesieve-login {
+ process_min_avail = 1
+ client_limit = 100
+}
+
+plugin {
+ sieve = ~/.dovecot.sieve
+ sieve_dir = ~/sieve
+
+ # Directory for :global include scripts for the include extension.
+ #sieve_global_dir =
+
+ sieve_before = /data/sieve/global/before/
+ sieve_after = /data/sieve/global/after/
+
+ sieve_extensions = +notify +imapflags +special-use +vnd.dovecot.pipe +vnd.dovecot.filter
+ sieve_plugins = sieve_imapsieve sieve_extprograms
+}
+
+event_exporter log {
+ format = json
+ time_format = rfc3339
+}
+
+# Add default backend metrics
+@metric_defaults = backend
+
+# Log auth failures
+metric auth_failures {
+ filter = event=auth_request_finished AND NOT success=yes
+ exporter = log
+}
+
+metric imap_command {
+ filter = event=imap_command_finished
+ group_by cmd_name {
+ method discrete {
+ }
+ }
+ group_by tagged_reply_state {
+ method discrete {
+ }
+ }
+}
+
+metric smtp_command {
+ filter = event=smtp_server_command_finished and protocol=submission
+ group_by cmd_name {
+ method discrete {
+ }
+ }
+ group_by status_code {
+ method discrete {
+ }
+ }
+ group_by duration {
+ method exponential {
+ base = 10
+ min_magnitude = 1
+ max_magnitude = 5
+ }
+ }
+}
+
+metric lmtp_command {
+ filter = event=smtp_server_command_finished and protocol=lmtp
+ group_by cmd_name {
+ method discrete {
+ }
+ }
+ group_by status_code {
+ method discrete {
+ }
+ }
+ group_by duration {
+ method exponential {
+ base = 10
+ min_magnitude = 1
+ max_magnitude = 5
+ }
+ }
+}
+
+# Add duration metrics for deliveries
+metric mail_deliveries {
+ filter = event=mail_delivery_finished
+ group_by duration {
+ method exponential {
+ base = 10
+ min_magnitude = 1
+ max_magnitude = 5
+ }
+ }
+}
+
+!include_try vendor.d/*.conf
+!include_try conf.d/*.conf
diff --git a/services/docker/nginx/configs/templates/mail.conf.template b/services/docker/nginx/configs/templates/mail.conf.template
index 7f5f215..430033c 100644
--- a/services/docker/nginx/configs/templates/mail.conf.template
+++ b/services/docker/nginx/configs/templates/mail.conf.template
@@ -11,11 +11,6 @@ server {
proxy_pass http://roundcubemail:80/;
}
- location /rspamd/ {
- include common/proxy-common;
- proxy_pass http://mailserver:11334/;
- }
-
client_max_body_size 5G;
}