diff --git a/migrations/20201204081504-settings-sftp-requireAdmin.js b/migrations/20201204081504-settings-sftp-requireAdmin.js new file mode 100644 index 000000000..282c7d6ed --- /dev/null +++ b/migrations/20201204081504-settings-sftp-requireAdmin.js @@ -0,0 +1,20 @@ +'use strict'; + +exports.up = function(db, callback) { + db.all('SELECT * FROM settings WHERE name=?', ['platform_config'], function (error, results) { + let value; + if (error || results.length === 0) { + value = { sftp: { requireAdmin: true } }; // new installations + } else { + value = JSON.parse(results[0].value); + if (!value.sftp) value.sftp = {}; + value.sftp.requireAdmin = false; // existing installation, backward compat + } + + db.runSql('UPDATE settings SET value=? WHERE name=?', [ JSON.stringify(value), 'platform_config' ], callback); + }); +}; + +exports.down = function(db, callback) { + callback(); +}; diff --git a/src/ldap.js b/src/ldap.js index 360eaaddc..10b66c6fd 100644 --- a/src/ldap.js +++ b/src/ldap.js @@ -579,8 +579,7 @@ function loadSftpConfig(req, res, next) { addons.getServicesConfig('sftp', function (error, service, servicesConfig) { if (error) return next(new ldap.OperationsError(error.toString())); - const serviceConfig = servicesConfig['sftp']; - req.requireAdmin = serviceConfig && 'requireAdmin' in serviceConfig ? serviceConfig.requireAdmin : true; + req.requireAdmin = servicesConfig['sftp'].requireAdmin; next(); }); diff --git a/src/routes/services.js b/src/routes/services.js index 22217af6e..b9acdb007 100644 --- a/src/routes/services.js +++ b/src/routes/services.js @@ -46,7 +46,7 @@ function configure(req, res, next) { memorySwap: req.body.memorySwap }; - if (req.params.service === 'sftp' && 'requireAdmin' in req.body) { + if (req.params.service === 'sftp') { if (typeof req.body.requireAdmin !== 'boolean') return next(new HttpError(400, 'requireAdmin must be a boolean')); data.requireAdmin = req.body.requireAdmin; }