diff --git a/src/mail.js b/src/mail.js index d473383fc..20896f826 100644 --- a/src/mail.js +++ b/src/mail.js @@ -11,6 +11,7 @@ exports = module.exports = { updateDomain: updateDomain, addDnsRecords: addDnsRecords, + setDnsRecords: setDnsRecords, // TODO: merge with above validateName: validateName, @@ -838,7 +839,19 @@ function setMailEnabled(domain, enabled, callback) { restartMail(NOOP_CALLBACK); - if (!enabled || process.env.BOX_ENV === 'test') return callback(null); + callback(null); + }); +} + +function setDnsRecords(domain, callback) { + assert.strictEqual(typeof domain, 'string'); + assert.strictEqual(typeof callback, 'function'); + + maildb.get(domain, function (error, result) { + if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new MailError(MailError.NOT_FOUND)); + if (error) return callback(new MailError(MailError.INTERNAL_ERROR, error)); + + if (!result.enabled) return callback(null); // Add MX and DMARC record. Note that DMARC policy depends on DKIM signing and thus works // only if we use our internal mail server. diff --git a/src/routes/mail.js b/src/routes/mail.js index a44031321..563de9c0a 100644 --- a/src/routes/mail.js +++ b/src/routes/mail.js @@ -7,6 +7,8 @@ exports = module.exports = { updateDomain: updateDomain, removeDomain: removeDomain, + setDnsRecords: setDnsRecords, + getStatus: getStatus, setMailFromValidation: setMailFromValidation, @@ -93,6 +95,18 @@ function updateDomain(req, res, next) { }); } +function setDnsRecords(req, res, next) { + assert.strictEqual(typeof req.body, 'object'); + assert.strictEqual(typeof req.params.domain, 'string'); + + mail.setDnsRecords(req.params.domain, function (error) { + if (error && error.reason === MailError.NOT_FOUND) return next(new HttpError(404, error.message)); + if (error) return next(new HttpError(500, error)); + + next(new HttpSuccess(201)); + }); +} + function removeDomain(req, res, next) { assert.strictEqual(typeof req.params.domain, 'string'); diff --git a/src/server.js b/src/server.js index da44f0d48..a838bcd10 100644 --- a/src/server.js +++ b/src/server.js @@ -241,6 +241,7 @@ function initializeExpressSync() { router.post('/api/v1/mail/:domain/catch_all', mailScope, routes.mail.setCatchAllAddress); router.post('/api/v1/mail/:domain/relay', mailScope, routes.mail.setMailRelay); router.post('/api/v1/mail/:domain/enable', mailScope, routes.mail.setMailEnabled); + router.post('/api/v1/mail/:domain/dns', mailScope, routes.mail.setDnsRecords); router.post('/api/v1/mail/:domain/send_test_mail', mailScope, routes.mail.sendTestMail); router.get ('/api/v1/mail/:domain/mailboxes', mailScope, routes.mail.getMailboxes); router.get ('/api/v1/mail/:domain/mailboxes/:name', mailScope, routes.mail.getMailbox);