diff --git a/CHANGES b/CHANGES index eca6de8c8..f9e84d74b 100644 --- a/CHANGES +++ b/CHANGES @@ -2406,6 +2406,6 @@ * Prefix email addon variables with CLOUDRON_EMAIL instead of CLOUDRON_MAIL * remove support for manifest version 1 * Add option to enable/disable mailbox sharing -* base image 3.1.0 +* base image 3.2.0 * Update node to 16.13.1 - +* mongodb: update to 4.4 diff --git a/src/infra_version.js b/src/infra_version.js index 1aeef8a2b..928906711 100644 --- a/src/infra_version.js +++ b/src/infra_version.js @@ -18,7 +18,7 @@ exports = module.exports = { 'turn': { repo: 'cloudron/turn', tag: 'cloudron/turn:1.3.1@sha256:759cafab7625ff538418a1f2ed5558b1d5bff08c576bba577d865d6d02b49091' }, 'mysql': { repo: 'cloudron/mysql', tag: 'cloudron/mysql:3.0.7@sha256:6679c2fb96f8d6d62349b607748570640a90fc46b50aad80ca2c0161655d07f4' }, 'postgresql': { repo: 'cloudron/postgresql', tag: 'cloudron/postgresql:4.1.1@sha256:86e4e2f4fd43809efca7c9cb1def4d7608cf36cb9ea27052f9b64da4481db43a' }, - 'mongodb': { repo: 'cloudron/mongodb', tag: 'cloudron/mongodb:4.0.2@sha256:9df297ccc3370f38c54f8d614e214e082b363777cd1c6c9522e29663cc8f5362' }, + 'mongodb': { repo: 'cloudron/mongodb', tag: 'cloudron/mongodb:4.1.0@sha256:7daaba96d47990ae91db59b81346e916f0e0e3f591190585ed1f3ea1bd9c1744' }, 'redis': { repo: 'cloudron/redis', tag: 'cloudron/redis:3.1.0@sha256:96c494d97a31bca5061b12f3630acaf18f6d6b9ea536109002555df797ec9a27' }, 'mail': { repo: 'cloudron/mail', tag: 'cloudron/mail:3.6.0@sha256:f67c3659d5122153f746f009e3a61a49619f95b838f357fcdf02024276252036' }, 'graphite': { repo: 'cloudron/graphite', tag: 'cloudron/graphite:3.0.1@sha256:bed9f6b5d06fe2c5289e895e806cfa5b74ad62993d705be55d4554a67d128029' }, diff --git a/src/services.js b/src/services.js index 6d7fd52a8..0c80e7de4 100644 --- a/src/services.js +++ b/src/services.js @@ -594,7 +594,7 @@ async function waitForContainer(containerName, tokenEnvName) { await promiseRetry({ times: 10, interval: 15000, debug }, async () => { // temporary workaround till we move all containers to http - const url = containerName.includes('redis') + const url = containerName.includes('redis') || containerName === 'mongodb' ? `http://${result.ip}:3000/healthcheck?access_token=${result.token}` : `https://${result.ip}:3000/healthcheck?access_token=${result.token}`; @@ -1592,8 +1592,7 @@ async function setupMongoDb(app, options) { const result = await getContainerDetails('mongodb', 'CLOUDRON_MONGODB_TOKEN'); - const [networkError, response] = await safe(superagent.post(`https://${result.ip}:3000/databases?access_token=${result.token}`) - .disableTLSCerts() + const [networkError, response] = await safe(superagent.post(`http://${result.ip}:3000/databases?access_token=${result.token}`) .send(data) .ok(() => true)); @@ -1626,8 +1625,7 @@ async function clearMongodb(app, options) { const database = await addonConfigs.getByName(app.id, 'mongodb', '%MONGODB_DATABASE'); if (!database) throw new BoxError(BoxError.NOT_FOUND, 'Error clearing mongodb. No database'); - const [networkError, response] = await safe(superagent.post(`https://${result.ip}:3000/databases/${database}/clear?access_token=${result.token}`) - .disableTLSCerts() + const [networkError, response] = await safe(superagent.post(`http://${result.ip}:3000/databases/${database}/clear?access_token=${result.token}`) .ok(() => true)); if (networkError) throw new BoxError(BoxError.ADDONS_ERROR, `Network error clearing mongodb: ${networkError.message}`); @@ -1643,8 +1641,7 @@ async function teardownMongoDb(app, options) { const database = await addonConfigs.getByName(app.id, 'mongodb', '%MONGODB_DATABASE'); if (!database) return; - const [networkError, response] = await safe(superagent.del(`https://${result.ip}:3000/databases/${database}?access_token=${result.token}`) - .disableTLSCerts() + const [networkError, response] = await safe(superagent.del(`http://${result.ip}:3000/databases/${database}?access_token=${result.token}`) .ok(() => true)); if (networkError) throw new BoxError(BoxError.ADDONS_ERROR, `Error tearing down mongodb: ${networkError.message}`); @@ -1664,8 +1661,7 @@ async function backupMongoDb(app, options) { const database = await addonConfigs.getByName(app.id, 'mongodb', '%MONGODB_DATABASE'); if (!database) throw new BoxError(BoxError.NOT_FOUND, 'Error backing up mongodb. No database'); - const url = `https://${result.ip}:3000/databases/${database}/backup?access_token=${result.token}`; - await pipeRequestToFile(url, dumpPath('mongodb', app.id)); + await pipeRequestToFile2(`http://${result.ip}:3000/databases/${database}/backup?access_token=${result.token}`, dumpPath('mongodb', app.id)); } async function restoreMongoDb(app, options) { @@ -1679,21 +1675,7 @@ async function restoreMongoDb(app, options) { const database = await addonConfigs.getByName(app.id, 'mongodb', '%MONGODB_DATABASE'); if (!database) throw new BoxError(BoxError.NOT_FOUND, 'Error restoring mongodb. No database'); - await new Promise((resolve, reject) => { - reject = once(reject); // protect from multiple returns with streams - - const readStream = fs.createReadStream(dumpPath('mongodb', app.id)); - readStream.on('error', (error) => reject(new BoxError(BoxError.FS_ERROR, `Error reading input stream when restoring mongodb: ${error.message}`))); - - const restoreReq = request.post(`https://${result.ip}:3000/databases/${database}/restore?access_token=${result.token}`, { json: true, rejectUnauthorized: false }, function (error, response) { - if (error) return reject(new BoxError(BoxError.ADDONS_ERROR, `Error restoring mongodb: ${error.message}`)); - if (response.statusCode !== 200) return reject(new BoxError(BoxError.ADDONS_ERROR, `Error restoring mongodb. Status code: ${response.statusCode} message: ${response.body.message}`)); - - resolve(); - }); - - readStream.pipe(restoreReq); - }); + await pipeFileToRequest(dumpPath('mongodb', app.id), `http://${result.ip}:3000/databases/${database}/restore?access_token=${result.token}`); } async function startGraphite(existingInfra) {