diff --git a/setup/start.sh b/setup/start.sh index 669633891..3b04b847c 100755 --- a/setup/start.sh +++ b/setup/start.sh @@ -39,7 +39,7 @@ set_progress "10" "Ensuring directories" [[ "${is_update}" == "false" ]] && btrfs subvolume create "${DATA_DIR}/box" mkdir -p "${DATA_DIR}/box/appicons" mkdir -p "${DATA_DIR}/box/certs" -mkdir -p "${DATA_DIR}/box/mail" +mkdir -p "${DATA_DIR}/box/mail/dkim/${arg_fqdn}" mkdir -p "${DATA_DIR}/box/acme" # acme keys mkdir -p "${DATA_DIR}/graphite" diff --git a/src/cloudron.js b/src/cloudron.js index fc31a730c..f4cafbb45 100644 --- a/src/cloudron.js +++ b/src/cloudron.js @@ -102,6 +102,8 @@ CloudronError.NOT_FOUND = 'Not found'; function initialize(callback) { assert.strictEqual(typeof callback, 'function'); + ensureDkimKeySync(); + exports.events.on(exports.EVENT_CONFIGURED, addDnsRecords); exports.events.on(exports.EVENT_FIRST_RUN, installAppBundle); @@ -362,6 +364,21 @@ function sendHeartbeat() { }); } +function ensureDkimKeySync() { + var dkimPrivateKeyFile = path.join(paths.MAIL_DATA_DIR, 'dkim/' + config.fqdn() + '/private'); + var dkimPublicKeyFile = path.join(paths.MAIL_DATA_DIR, 'dkim/' + config.fqdn() + '/public'); + + if (fs.existsSync(dkimPrivateKeyFile) && fs.existsSync(dkimPublicKeyFile)) { + debug('DKIM keys already present'); + return; + } + + debug('Generating new DKIM keys'); + + safe.child_process.execSync('openssl genrsa ' + dkimPrivateKeyFile + ' 1024'); + safe.child_process.execSync('openssl rsa -in ' + dkimPrivateKeyFile + ' -out ' + dkimPublicKeyFile + ' -pubout -outform PEM'); +} + function readDkimPublicKeySync() { var dkimPublicKeyFile = path.join(paths.MAIL_DATA_DIR, 'dkim/' + config.fqdn() + '/public'); var publicKey = safe.fs.readFileSync(dkimPublicKeyFile, 'utf8'); diff --git a/src/server.js b/src/server.js index 85b86be48..b5ad5ab3e 100644 --- a/src/server.js +++ b/src/server.js @@ -259,7 +259,7 @@ function start(callback) { database.initialize, cloudron.initialize, // keep this here because it reads activation state that others depend on certificates.installAdminCertificate, // keep this before cron to block heartbeats until cert is ready - addons.initialize, + addons.initialize, // starts the addons taskmanager.initialize, mailer.initialize, cron.initialize, diff --git a/src/test/setupTest b/src/test/setupTest index a636f3051..2102ecf96 100755 --- a/src/test/setupTest +++ b/src/test/setupTest @@ -11,7 +11,7 @@ readonly source_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")"/../.. && pwd)" rm -rf $HOME/.cloudron_test mkdir -p $HOME/.cloudron_test cd $HOME/.cloudron_test -mkdir -p data/appdata data/box/appicons data/mail data/nginx/cert data/nginx/applications data/collectd/collectd.conf.d data/addons configs data/box/certs +mkdir -p data/appdata data/box/appicons data/mail data/nginx/cert data/nginx/applications data/collectd/collectd.conf.d data/addons configs data/box/certs data/box/mail/dkim/localhost webadmin_scopes="root,profile,users,apps,settings" webadmin_origin="https://${ADMIN_LOCATION}-localhost"