mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-03 23:00:14 -05:00
Change type for private blog settings
refs #5614 and #5503 - update private blog type, including update to settings.edit - switch order of populate settings & update fixtures + populate all settings Private blog settings should not be returned by public endpoints therefore they need a type which is not `blog` or `theme`. `core` doesn't suit either, as those settings don't usually have UI To resolve this, I created a new type `private` which can be used for any setting which has a UI but should not be public data
This commit is contained in:
parent
d215983d53
commit
114696f7e2
6 changed files with 51 additions and 18 deletions
|
@ -15,7 +15,7 @@ export default AuthenticatedRoute.extend(styleBody, CurrentUserSettings, {
|
||||||
},
|
},
|
||||||
|
|
||||||
model: function () {
|
model: function () {
|
||||||
return this.store.find('setting', {type: 'blog,theme'}).then(function (records) {
|
return this.store.find('setting', {type: 'blog,theme,private'}).then(function (records) {
|
||||||
return records.get('firstObject');
|
return records.get('firstObject');
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -66,12 +66,6 @@
|
||||||
},
|
},
|
||||||
"navigation": {
|
"navigation": {
|
||||||
"defaultValue": "[{\"label\":\"Home\", \"url\":\"/\"}]"
|
"defaultValue": "[{\"label\":\"Home\", \"url\":\"/\"}]"
|
||||||
},
|
|
||||||
"isPrivate": {
|
|
||||||
"defaultValue": "false"
|
|
||||||
},
|
|
||||||
"password": {
|
|
||||||
"defaultValue": ""
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"theme": {
|
"theme": {
|
||||||
|
@ -86,5 +80,13 @@
|
||||||
"installedApps": {
|
"installedApps": {
|
||||||
"defaultValue": "[]"
|
"defaultValue": "[]"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"private": {
|
||||||
|
"isPrivate": {
|
||||||
|
"defaultValue": "false"
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"defaultValue": ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ logInfo = function logInfo(message) {
|
||||||
* Changes an admin user to have the owner role
|
* Changes an admin user to have the owner role
|
||||||
* @returns {Promise|*}
|
* @returns {Promise|*}
|
||||||
*/
|
*/
|
||||||
convertAdminToOwner = function () {
|
convertAdminToOwner = function convertAdminToOwner() {
|
||||||
var adminUser;
|
var adminUser;
|
||||||
|
|
||||||
return models.User.findOne({role: 'Administrator'}).then(function (user) {
|
return models.User.findOne({role: 'Administrator'}).then(function (user) {
|
||||||
|
@ -56,7 +56,7 @@ convertAdminToOwner = function () {
|
||||||
* Creates the user fixture and gives it the owner role
|
* Creates the user fixture and gives it the owner role
|
||||||
* @returns {Promise|*}
|
* @returns {Promise|*}
|
||||||
*/
|
*/
|
||||||
createOwner = function () {
|
createOwner = function createOwner() {
|
||||||
var user = fixtures.users[0];
|
var user = fixtures.users[0];
|
||||||
|
|
||||||
return models.Role.findOne({name: 'Owner'}).then(function (ownerRole) {
|
return models.Role.findOne({name: 'Owner'}).then(function (ownerRole) {
|
||||||
|
@ -68,7 +68,7 @@ createOwner = function () {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
populate = function () {
|
populate = function populate() {
|
||||||
var ops = [],
|
var ops = [],
|
||||||
relations = [],
|
relations = [],
|
||||||
Post = models.Post,
|
Post = models.Post,
|
||||||
|
@ -122,7 +122,7 @@ populate = function () {
|
||||||
* Note: At the moment this is pretty adhoc & untestable, in future it would be better to have a config based system.
|
* Note: At the moment this is pretty adhoc & untestable, in future it would be better to have a config based system.
|
||||||
* @returns {Promise|*}
|
* @returns {Promise|*}
|
||||||
*/
|
*/
|
||||||
to003 = function () {
|
to003 = function to003() {
|
||||||
var ops = [],
|
var ops = [],
|
||||||
upgradeOp,
|
upgradeOp,
|
||||||
Role = models.Role,
|
Role = models.Role,
|
||||||
|
@ -161,7 +161,7 @@ to003 = function () {
|
||||||
* Update ghost_foot to include a CDN of jquery if the DB is migrating from
|
* Update ghost_foot to include a CDN of jquery if the DB is migrating from
|
||||||
* @return {Promise}
|
* @return {Promise}
|
||||||
*/
|
*/
|
||||||
to004 = function () {
|
to004 = function to004() {
|
||||||
var value,
|
var value,
|
||||||
ops = [],
|
ops = [],
|
||||||
upgradeOp,
|
upgradeOp,
|
||||||
|
@ -199,6 +199,26 @@ to004 = function () {
|
||||||
});
|
});
|
||||||
ops.push(upgradeOp);
|
ops.push(upgradeOp);
|
||||||
|
|
||||||
|
// change `type` for protected blog `isPrivate` setting
|
||||||
|
upgradeOp = models.Settings.findOne('isPrivate').then(function (setting) {
|
||||||
|
if (setting) {
|
||||||
|
logInfo('Update isPrivate setting');
|
||||||
|
return models.Settings.edit({key: 'isPrivate', type: 'private'}, options);
|
||||||
|
}
|
||||||
|
return Promise.resolve();
|
||||||
|
});
|
||||||
|
ops.push(upgradeOp);
|
||||||
|
|
||||||
|
// change `type` for protected blog `password` setting
|
||||||
|
upgradeOp = models.Settings.findOne('password').then(function (setting) {
|
||||||
|
if (setting) {
|
||||||
|
logInfo('Update password setting');
|
||||||
|
return models.Settings.edit({key: 'password', type: 'private'}, options);
|
||||||
|
}
|
||||||
|
return Promise.resolve();
|
||||||
|
});
|
||||||
|
ops.push(upgradeOp);
|
||||||
|
|
||||||
// Update ghost-admin client fixture
|
// Update ghost-admin client fixture
|
||||||
// ghost-admin should exist from 003 version
|
// ghost-admin should exist from 003 version
|
||||||
upgradeOp = models.Client.findOne({slug: fixtures.clients[0].slug}).then(function (client) {
|
upgradeOp = models.Client.findOne({slug: fixtures.clients[0].slug}).then(function (client) {
|
||||||
|
@ -222,7 +242,7 @@ to004 = function () {
|
||||||
return Promise.all(ops);
|
return Promise.all(ops);
|
||||||
};
|
};
|
||||||
|
|
||||||
update = function (fromVersion, toVersion) {
|
update = function update(fromVersion, toVersion) {
|
||||||
var ops = [];
|
var ops = [];
|
||||||
|
|
||||||
logInfo('Updating fixtures');
|
logInfo('Updating fixtures');
|
||||||
|
|
|
@ -33,7 +33,7 @@ logInfo = function logInfo(message) {
|
||||||
populateDefaultSettings = function populateDefaultSettings() {
|
populateDefaultSettings = function populateDefaultSettings() {
|
||||||
// Initialise the default settings
|
// Initialise the default settings
|
||||||
logInfo('Populating default settings');
|
logInfo('Populating default settings');
|
||||||
return models.Settings.populateDefault('databaseVersion').then(function () {
|
return models.Settings.populateDefaults().then(function () {
|
||||||
logInfo('Complete');
|
logInfo('Complete');
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -178,9 +178,11 @@ migrateUp = function (fromVersion, toVersion) {
|
||||||
return sequence(migrateOps);
|
return sequence(migrateOps);
|
||||||
}
|
}
|
||||||
}).then(function () {
|
}).then(function () {
|
||||||
return fixtures.update(fromVersion, toVersion);
|
// Ensure all of the current default settings are created (these are fixtures, so should be inserted first)
|
||||||
}).then(function () {
|
|
||||||
return populateDefaultSettings();
|
return populateDefaultSettings();
|
||||||
|
}).then(function () {
|
||||||
|
// Finally, run any updates to the fixtures, including default settings
|
||||||
|
return fixtures.update(fromVersion, toVersion);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,7 @@ var db = {
|
||||||
uuid: {type: 'string', maxlength: 36, nullable: false, validations: {isUUID: true}},
|
uuid: {type: 'string', maxlength: 36, nullable: false, validations: {isUUID: true}},
|
||||||
key: {type: 'string', maxlength: 150, nullable: false, unique: true},
|
key: {type: 'string', maxlength: 150, nullable: false, unique: true},
|
||||||
value: {type: 'text', maxlength: 65535, nullable: true},
|
value: {type: 'text', maxlength: 65535, nullable: true},
|
||||||
type: {type: 'string', maxlength: 150, nullable: false, defaultTo: 'core', validations: {isIn: [['core', 'blog', 'theme', 'app', 'plugin']]}},
|
type: {type: 'string', maxlength: 150, nullable: false, defaultTo: 'core', validations: {isIn: [['core', 'blog', 'theme', 'app', 'plugin', 'private']]}},
|
||||||
created_at: {type: 'dateTime', nullable: false},
|
created_at: {type: 'dateTime', nullable: false},
|
||||||
created_by: {type: 'integer', nullable: false},
|
created_by: {type: 'integer', nullable: false},
|
||||||
updated_at: {type: 'dateTime', nullable: true},
|
updated_at: {type: 'dateTime', nullable: true},
|
||||||
|
|
|
@ -125,8 +125,17 @@ Settings = ghostBookshelf.Model.extend({
|
||||||
item = self.filterData(item);
|
item = self.filterData(item);
|
||||||
|
|
||||||
return Settings.forge({key: item.key}).fetch(options).then(function then(setting) {
|
return Settings.forge({key: item.key}).fetch(options).then(function then(setting) {
|
||||||
|
var saveData = {};
|
||||||
|
|
||||||
if (setting) {
|
if (setting) {
|
||||||
return setting.save({value: item.value}, options);
|
if (item.hasOwnProperty('value')) {
|
||||||
|
saveData.value = item.value;
|
||||||
|
}
|
||||||
|
// Internal context can overwrite type (for fixture migrations)
|
||||||
|
if (options.context.internal && item.hasOwnProperty('type')) {
|
||||||
|
saveData.type = item.type;
|
||||||
|
}
|
||||||
|
return setting.save(saveData, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Promise.reject(new errors.NotFoundError('Unable to find setting to update: ' + item.key));
|
return Promise.reject(new errors.NotFoundError('Unable to find setting to update: ' + item.key));
|
||||||
|
|
Loading…
Add table
Reference in a new issue