diff --git a/CHANGES b/CHANGES index 608236b2b..183a050c0 100644 --- a/CHANGES +++ b/CHANGES @@ -2276,4 +2276,5 @@ * postgresql: set max conn limit per db * ubuntu 16: add alert about EOL * clone: save and restore app config +* app import: restore icon, tag, label, proxy configs etc diff --git a/src/apps.js b/src/apps.js index ef97710a5..54b7b3984 100644 --- a/src/apps.js +++ b/src/apps.js @@ -71,6 +71,7 @@ exports = module.exports = { uploadFile, backupConfig, + restoreConfig, PORT_TYPE_TCP: 'tcp', PORT_TYPE_UDP: 'udp', @@ -1695,7 +1696,7 @@ function clone(app, data, user, auditSource, callback) { label: app.label ? `${app.label}-clone` : '', tags: app.tags, enableAutomaticUpdate: app.enableAutomaticUpdate, - icons: icons.icon + icon: icons.icon }; appdb.add(newAppId, appStoreId, manifest, location, domain, translatePortBindings(portBindings, manifest), data, function (error) { @@ -2217,3 +2218,19 @@ function backupConfig(app, callback) { callback(null); }); } + +function restoreConfig(app, callback) { + assert.strictEqual(typeof app, 'object'); + assert.strictEqual(typeof callback, 'function'); + + const appConfig = safe.JSON.parse(safe.fs.readFileSync(path.join(paths.APPS_DATA_DIR, app.id + '/config.json'))); + let data = {}; + if (appConfig) { + data = _.pick(appConfig, 'memoryLimit', 'cpuShares', 'enableBackup', 'reverseProxyConfig', 'env', 'servicesConfig', 'label', 'tags', 'enableAutomaticUpdate'); + } + + const icon = safe.fs.readFileSync(path.join(paths.APPS_DATA_DIR, app.id + '/icon.png')); + if (icon) data.icon = icon; + + appdb.update(app.id, data, callback); +} diff --git a/src/apptask.js b/src/apptask.js index 62dd7836f..2bbf38d6f 100644 --- a/src/apptask.js +++ b/src/apptask.js @@ -461,6 +461,7 @@ function install(app, args, progressCallback, callback) { progressCallback.bind(null, { percent: 60, message: 'Importing addons in-place' }), services.setupAddons.bind(null, app, app.manifest.addons), services.clearAddons.bind(null, app, _.omit(app.manifest.addons, 'localstorage')), + apps.restoreConfig.bind(null, app), services.restoreAddons.bind(null, app, app.manifest.addons), ], next); } else { @@ -471,6 +472,7 @@ function install(app, args, progressCallback, callback) { backups.downloadApp.bind(null, app, restoreConfig, (progress) => { progressCallback({ percent: 65, message: progress.message }); }), + (done) => { if (app.installationState === apps.ISTATE_PENDING_IMPORT) apps.restoreConfig(app, done); else done(); }, progressCallback.bind(null, { percent: 70, message: 'Restoring addons' }), services.restoreAddons.bind(null, app, app.manifest.addons) ], next);