diff --git a/src/infra_version.js b/src/infra_version.js index 184b05547..8c10ae6fd 100644 --- a/src/infra_version.js +++ b/src/infra_version.js @@ -20,7 +20,7 @@ exports = module.exports = { 'postgresql': { repo: 'cloudron/postgresql', tag: 'cloudron/postgresql:3.3.0@sha256:0daf1be5320c095077392bf21d247b93ceaddca46c866c17259a335c80d2f357' }, 'mongodb': { repo: 'cloudron/mongodb', tag: 'cloudron/mongodb:3.0.0@sha256:59e50b1f55e433ffdf6d678f8c658812b4119f631db8325572a52ee40d3bc562' }, 'redis': { repo: 'cloudron/redis', tag: 'cloudron/redis:2.3.0@sha256:0e31ec817e235b1814c04af97b1e7cf0053384aca2569570ce92bef0d95e94d2' }, - 'mail': { repo: 'cloudron/mail', tag: 'cloudron/mail:3.0.0@sha256:38bc91c8769110ce823690392915a80751e6a80ee37f526b25f4955fd12c34e4' }, + 'mail': { repo: 'cloudron/mail', tag: 'cloudron/mail:3.0.0@sha256:8f808e4328ca303c876e38a32e14a407daf1750d8782fd99bc439d88e2a14229' }, 'graphite': { repo: 'cloudron/graphite', tag: 'cloudron/graphite:2.3.0@sha256:b7bc1ca4f4d0603a01369a689129aa273a938ce195fe43d00d42f4f2d5212f50' }, 'sftp': { repo: 'cloudron/sftp', tag: 'cloudron/sftp:3.0.0@sha256:7e0165f17789192fd4f92efb34aa373450fa859e3b502684b2b121a5582965bf' } } diff --git a/src/mail.js b/src/mail.js index 095fadfe6..92bb9026c 100644 --- a/src/mail.js +++ b/src/mail.js @@ -59,7 +59,8 @@ exports = module.exports = { _readDkimPublicKeySync: readDkimPublicKeySync }; -var assert = require('assert'), +var addons = require('./addons.js'), + assert = require('assert'), async = require('async'), BoxError = require('./boxerror.js'), cloudron = require('./cloudron.js'), @@ -78,6 +79,7 @@ var assert = require('assert'), nodemailer = require('nodemailer'), path = require('path'), paths = require('./paths.js'), + request = require('request'), reverseProxy = require('./reverseproxy.js'), safe = require('safetydance'), settings = require('./settings.js'), @@ -1214,6 +1216,23 @@ function updateMailboxOwner(name, domain, ownerId, ownerType, auditSource, callb }); } +function removeSolrIndex(mailbox, callback) { + assert.strictEqual(typeof mailbox, 'string'); + assert.strictEqual(typeof callback, 'function'); + + addons.getContainerDetails('mail', 'CLOUDRON_MAIL_TOKEN', function (error, addonDetails) { + if (error) return callback(error); + + request.post(`https://${addonDetails.ip}:3000/solr_delete_index?access_token=${addonDetails.token}`, { timeout: 2000, rejectUnauthorized: false, json: { mailbox } }, function (error, response) { + if (error) return callback(error); + + if (response.statusCode !== 200) return callback(new Error(`Error removing solr index - ${response.statusCode} ${JSON.stringify(response.body)}`)); + + callback(null); + }); + }); +} + function removeMailbox(name, domain, options, auditSource, callback) { assert.strictEqual(typeof domain, 'string'); assert.strictEqual(typeof name, 'string'); @@ -1221,7 +1240,8 @@ function removeMailbox(name, domain, options, auditSource, callback) { assert.strictEqual(typeof auditSource, 'object'); assert.strictEqual(typeof callback, 'function'); - const deleteMailFunc = options.deleteMails ? shell.sudo.bind(null, 'removeMailbox', [ REMOVE_MAILBOX, `${name}@${domain}` ], {}) : (next) => next(); + const mailbox =`${name}@${domain}`; + const deleteMailFunc = options.deleteMails ? shell.sudo.bind(null, 'removeMailbox', [ REMOVE_MAILBOX, mailbox ], {}) : (next) => next(); deleteMailFunc(function (error) { if (error) return callback(new BoxError(BoxError.FS_ERROR, `Error removing mailbox: ${error.message}`)); @@ -1229,6 +1249,7 @@ function removeMailbox(name, domain, options, auditSource, callback) { mailboxdb.del(name, domain, function (error) { if (error) return callback(error); + removeSolrIndex(mailbox, NOOP_CALLBACK); eventlog.add(eventlog.ACTION_MAIL_MAILBOX_REMOVE, auditSource, { name, domain }); callback();