diff --git a/lib/models/lists.js b/lib/models/lists.js index 02e7a4cd..def0f713 100644 --- a/lib/models/lists.js +++ b/lib/models/lists.js @@ -6,7 +6,7 @@ let shortid = require('shortid'); let segments = require('./segments'); let _ = require('../translate')._; -let allowedKeys = ['description', 'default_form']; +let allowedKeys = ['description', 'default_form', 'public_subscribe']; module.exports.list = (start, limit, callback) => { db.getConnection((err, connection) => { @@ -111,6 +111,8 @@ module.exports.get = (id, callback) => { module.exports.create = (list, callback) => { let data = tools.convertKeys(list); + data.publicSubscribe = data.publicSubscribe ? 1 : 0; + let name = (data.name || '').toString().trim(); if (!data) { @@ -120,8 +122,8 @@ module.exports.create = (list, callback) => { let keys = ['name']; let values = [name]; - Object.keys(list).forEach(key => { - let value = list[key].trim(); + Object.keys(data).forEach(key => { + let value = data[key].toString().trim(); key = tools.toDbKey(key); if (key === 'description') { value = tools.purifyHTML(value); @@ -169,6 +171,7 @@ module.exports.update = (id, updates, callback) => { id = Number(id) || 0; let data = tools.convertKeys(updates); + data.publicSubscribe = data.publicSubscribe ? 1 : 0; let name = (data.name || '').toString().trim(); let keys = ['name']; @@ -182,8 +185,8 @@ module.exports.update = (id, updates, callback) => { return callback(new Error(_('List Name must be set'))); } - Object.keys(updates).forEach(key => { - let value = updates[key].trim(); + Object.keys(data).forEach(key => { + let value = data[key].toString().trim(); key = tools.toDbKey(key); if (key === 'description') { value = tools.purifyHTML(value); diff --git a/meta.json b/meta.json index 1302fec6..8e5bc365 100644 --- a/meta.json +++ b/meta.json @@ -1,3 +1,3 @@ { - "schemaVersion": 25 + "schemaVersion": 26 } diff --git a/routes/lists.js b/routes/lists.js index c82b7c2b..198fb7df 100644 --- a/routes/lists.js +++ b/routes/lists.js @@ -82,6 +82,10 @@ router.get('/create', passport.csrfProtection, (req, res) => { data.csrfToken = req.csrfToken(); + if (!('publicSubscribe' in data)) { + data.publicSubscribe = true; + } + res.render('lists/create', data); }); diff --git a/routes/subscription.js b/routes/subscription.js index 70581457..0e91eb98 100644 --- a/routes/subscription.js +++ b/routes/subscription.js @@ -176,9 +176,14 @@ router.get('/subscribe/:cid', (req, res, next) => { router.get('/:cid', passport.csrfProtection, (req, res, next) => { lists.getByCid(req.params.cid, (err, list) => { - if (!err && !list) { - err = new Error(_('Selected list not found')); - err.status = 404; + if (!err) { + if (!list) { + err = new Error(_('Selected list not found')); + err.status = 404; + } else if (!list.publicSubscribe) { + err = new Error(_('The list does not allow public subscriptions.')); + err.status = 403; + } } if (err) { @@ -501,9 +506,14 @@ router.post('/:cid/subscribe', passport.parseForm, corsOrCsrfProtection, (req, r let testsPass = subTimeTest && addressTest; lists.getByCid(req.params.cid, (err, list) => { - if (!err && !list) { - err = new Error(_('Selected list not found')); - err.status = 404; + if (!err) { + if (!list) { + err = new Error(_('Selected list not found')); + err.status = 404; + } else if (!list.publicSubscribe) { + err = new Error(_('The list does not allow public subscriptions.')); + err.status = 403; + } } if (err) { diff --git a/setup/sql/upgrade-00026.sql b/setup/sql/upgrade-00026.sql new file mode 100644 index 00000000..3fac9282 --- /dev/null +++ b/setup/sql/upgrade-00026.sql @@ -0,0 +1,11 @@ +# Header section +# Define incrementing schema version number +SET @schema_version = '26'; + +# Add field +ALTER TABLE `lists` ADD COLUMN `public_subscribe` tinyint(1) unsigned DEFAULT 1 NOT NULL AFTER `created`; + +# Footer section +LOCK TABLES `settings` WRITE; +INSERT INTO `settings` (`key`, `value`) VALUES('db_schema_version', @schema_version) ON DUPLICATE KEY UPDATE `value`=@schema_version; +UNLOCK TABLES; diff --git a/views/lists/create.hbs b/views/lists/create.hbs index 1ec01821..6cfaa7b8 100644 --- a/views/lists/create.hbs +++ b/views/lists/create.hbs @@ -26,6 +26,16 @@
+
+
+ +
+
+ +
+
diff --git a/views/lists/edit.hbs b/views/lists/edit.hbs index 62d01f7f..5d206b50 100644 --- a/views/lists/edit.hbs +++ b/views/lists/edit.hbs @@ -56,6 +56,16 @@
+
+
+ +
+
+ +
+