diff --git a/setup/start/custom.yml b/setup/start/custom.yml index 461020363..6d0871975 100644 --- a/setup/start/custom.yml +++ b/setup/start/custom.yml @@ -5,5 +5,11 @@ features: configureBackup: true dynamicDns: true subscription: true - support: - remote: true + remoteSupport: true + +support: + email: support@cloudron.io + +alerts: + email: support@cloudron.io + notifyCloudronAdmins: false diff --git a/src/custom.js b/src/custom.js index a4a22aa7c..321428cbe 100644 --- a/src/custom.js +++ b/src/custom.js @@ -7,6 +7,9 @@ let debug = require('debug')('box:features'), exports = module.exports = { features: features, + supportEmail: supportEmail, + alertsEmail: alertsEmail, + sendAlertsToCloudronAdmins: sendAlertsToCloudronAdmins }; const gCustom = (function () { @@ -22,8 +25,20 @@ const gCustom = (function () { function features() { return { dynamicDns: safe.query(gCustom, 'features.dynamicDns', true), - remoteSupport: safe.query(gCustom, 'features.support.remote', true), + remoteSupport: safe.query(gCustom, 'features.remoteSupport', true), subscription: safe.query(gCustom, 'features.subscription', true), configureBackup: safe.query(gCustom, 'features.configureBackup', true) }; } + +function supportEmail() { + return safe.query(gCustom, 'support.email', 'support@cloudron.io'); +} + +function alertsEmail() { + return safe.query(gCustom, 'alerts.email', 'support@cloudron.io'); +} + +function sendAlertsToCloudronAdmins() { + return safe.query(gCustom, 'alerts.notifyCloudronAdmins', true); +} diff --git a/src/mail_templates/app_down.ejs b/src/mail_templates/app_down.ejs index 2b5c3b339..19d0189fe 100644 --- a/src/mail_templates/app_down.ejs +++ b/src/mail_templates/app_down.ejs @@ -9,7 +9,7 @@ This is most likely a problem in the application. To resolve this, you can try the following: * Restart the app by opening the app's web terminal - https://cloudron.io/documentation/apps/#web-terminal * Restore the app to the latest backup - https://cloudron.io/documentation/backups/#restoring-an-app -* Contact us via support@cloudron.io or https://forum.cloudron.io +* Contact us via <%= supportEmail %> or https://forum.cloudron.io Powered by https://cloudron.io diff --git a/src/mailer.js b/src/mailer.js index 737c0373b..7150b9b0c 100644 --- a/src/mailer.js +++ b/src/mailer.js @@ -26,6 +26,7 @@ exports = module.exports = { var assert = require('assert'), config = require('./config.js'), + custom = require('./custom.js'), debug = require('debug')('box:mailer'), docker = require('./docker.js').connection, ejs = require('ejs'), @@ -289,7 +290,7 @@ function appDied(mailTo, app) { from: mailConfig.notificationFrom, to: mailTo, subject: util.format('[%s] App %s is down', mailConfig.cloudronName, app.fqdn), - text: render('app_down.ejs', { title: app.manifest.title, appFqdn: app.fqdn, format: 'text' }) + text: render('app_down.ejs', { title: app.manifest.title, appFqdn: app.fqdn, supportEmail: custom.supportEmail(), format: 'text' }) }; sendMail(mailOptions); diff --git a/src/notifications.js b/src/notifications.js index d792b58ac..0c7e4a93d 100644 --- a/src/notifications.js +++ b/src/notifications.js @@ -25,6 +25,7 @@ exports = module.exports = { let assert = require('assert'), async = require('async'), config = require('./config.js'), + custom = require('./custom.js'), DatabaseError = require('./databaseerror.js'), debug = require('debug')('box:notifications'), eventlog = require('./eventlog.js'), @@ -192,8 +193,8 @@ function oomEvent(eventId, app, addon, containerId, event, callback) { message = 'The container has been restarted automatically. Consider increasing the [memory limit](https://docs.docker.com/v17.09/edge/engine/reference/commandline/update/#update-a-containers-kernel-memory-constraints)'; } - // also send us a notification mail - if (config.provider() === 'caas') mailer.oomEvent('support@cloudron.io', program, event); + if (custom.alertsEmail()) mailer.oomEvent(custom.alertsEmail(), program, event); + if (!custom.sendAlertsToCloudronAdmins()) return callback(); actionForAllAdmins([], function (admin, done) { mailer.oomEvent(admin.email, program, event); @@ -207,8 +208,8 @@ function appUp(eventId, app, callback) { assert.strictEqual(typeof app, 'object'); assert.strictEqual(typeof callback, 'function'); - // also send us a notification mail - if (config.provider() === 'caas') mailer.appUp('support@cloudron.io', app); + if (custom.alertsEmail()) mailer.appUp(custom.alertsEmail(), app); + if (!custom.sendAlertsToCloudronAdmins()) return callback(); actionForAllAdmins([], function (admin, done) { mailer.appUp(admin.email, app); @@ -221,8 +222,8 @@ function appDied(eventId, app, callback) { assert.strictEqual(typeof app, 'object'); assert.strictEqual(typeof callback, 'function'); - // also send us a notification mail - if (config.provider() === 'caas') mailer.appDied('support@cloudron.io', app); + if (custom.alertsEmail()) mailer.appDied(custom.alertsEmail(), app); + if (!custom.sendAlertsToCloudronAdmins()) return callback(); actionForAllAdmins([], function (admin, callback) { mailer.appDied(admin.email, app); @@ -253,8 +254,8 @@ function certificateRenewalError(eventId, vhost, errorMessage, callback) { assert.strictEqual(typeof errorMessage, 'string'); assert.strictEqual(typeof callback, 'function'); - // also send us a notification mail - if (config.provider() === 'caas') mailer.certificateRenewalError('support@cloudron.io', vhost, errorMessage); + if (custom.alertsEmail()) mailer.certificateRenewalError(custom.alertsEmail(), vhost, errorMessage); + if (!custom.sendAlertsToCloudronAdmins()) return callback(); actionForAllAdmins([], function (admin, callback) { mailer.certificateRenewalError(admin.email, vhost, errorMessage); @@ -268,8 +269,8 @@ function backupFailed(eventId, taskId, errorMessage, callback) { assert.strictEqual(typeof errorMessage, 'string'); assert.strictEqual(typeof callback, 'function'); - // also send us a notification mail - if (config.provider() === 'caas') mailer.backupFailed('support@cloudron.io', errorMessage, `${config.adminOrigin()}/logs.html?taskId=${taskId}`); + if (custom.alertsEmail()) mailer.backupFailed(custom.alertsEmail(), errorMessage, `${config.adminOrigin()}/logs.html?taskId=${taskId}`); + if (!custom.sendAlertsToCloudronAdmins()) return callback(); actionForAllAdmins([], function (admin, callback) { mailer.backupFailed(admin.email, errorMessage, `${config.adminOrigin()}/logs.html?taskId=${taskId}`); diff --git a/src/routes/support.js b/src/routes/support.js index 7e548d2d5..38d1ce03d 100644 --- a/src/routes/support.js +++ b/src/routes/support.js @@ -27,7 +27,7 @@ function feedback(req, res, next) { if (req.body.appId && typeof req.body.appId !== 'string') return next(new HttpError(400, 'appId must be string')); appstore.sendFeedback(_.extend({ }, req.body, { email: req.user.email, displayName: req.user.displayName }), function (error) { - if (error) return next(new HttpError(503, `Error contacting cloudron.io: ${error.message}. Please email support@cloudron.io`)); + if (error) return next(new HttpError(503, `Error contacting cloudron.io: ${error.message}. Please email ${custom.supportEmail()}`)); next(new HttpSuccess(201, {})); }); diff --git a/src/test/apptask-test.js b/src/test/apptask-test.js index 1cf63bf06..650e69cf1 100644 --- a/src/test/apptask-test.js +++ b/src/test/apptask-test.js @@ -28,7 +28,7 @@ var MANIFEST = { 'description': 'test description', 'tagline': 'test rocks', 'website': 'http://test.cloudron.io', - 'contactEmail': 'support@cloudron.io', + 'contactEmail': 'test@cloudron.io', 'version': '0.1.0', 'manifestVersion': 1, 'dockerImage': 'cloudron/test:25.2.0',