2017-07-06 10:02:00 +02:00
|
|
|
'use strict';
|
|
|
|
|
2017-07-19 15:12:27 +02:00
|
|
|
const path = require('path');
|
|
|
|
const fs = require('fs');
|
2017-08-02 13:17:40 +02:00
|
|
|
const _ = require('lodash');
|
2017-07-19 15:12:27 +02:00
|
|
|
|
2017-07-06 10:02:00 +02:00
|
|
|
module.exports = {
|
2017-07-10 11:40:41 +02:00
|
|
|
menu: async ctx => {
|
|
|
|
const Service = strapi.plugins['settings-manager'].services.settingsmanager;
|
2017-07-06 10:02:00 +02:00
|
|
|
|
2017-07-10 11:40:41 +02:00
|
|
|
ctx.send(Service.menu);
|
|
|
|
},
|
2017-07-06 10:02:00 +02:00
|
|
|
|
2017-07-10 11:40:41 +02:00
|
|
|
environments: async ctx => {
|
2017-07-11 14:56:52 +02:00
|
|
|
const Service = strapi.plugins['settings-manager'].services.settingsmanager;
|
|
|
|
|
|
|
|
ctx.send({ environments: Service.getEnvironments() });
|
2017-07-10 11:40:41 +02:00
|
|
|
},
|
|
|
|
|
2017-07-19 15:12:27 +02:00
|
|
|
languages: async ctx => {
|
|
|
|
const Service = strapi.plugins['settings-manager'].services.settingsmanager;
|
|
|
|
|
2017-07-20 15:27:05 +02:00
|
|
|
ctx.send({ languages: Service.getLanguages() });
|
2017-07-19 15:12:27 +02:00
|
|
|
},
|
|
|
|
|
2017-07-25 15:11:11 +02:00
|
|
|
databases: async ctx => {
|
|
|
|
const Service = strapi.plugins['settings-manager'].services.settingsmanager;
|
|
|
|
const { env } = ctx.params;
|
|
|
|
|
2018-03-29 11:40:22 +02:00
|
|
|
if (!env || _.isEmpty(_.find(Service.getEnvironments(), { name: env }))) return ctx.badRequest(null, [{ messages: [{ id: 'request.error.environment.unknow' }] }]);
|
2017-07-25 15:11:11 +02:00
|
|
|
|
|
|
|
ctx.send({ databases: Service.getDatabases(env) });
|
|
|
|
},
|
|
|
|
|
2017-07-25 16:37:50 +02:00
|
|
|
database: async ctx => {
|
2017-07-10 11:40:41 +02:00
|
|
|
const Service = strapi.plugins['settings-manager'].services.settingsmanager;
|
2017-07-26 12:43:46 +02:00
|
|
|
const { name, env } = ctx.params;
|
2017-07-10 11:40:41 +02:00
|
|
|
|
2018-03-29 11:40:22 +02:00
|
|
|
if (!env || _.isEmpty(_.find(Service.getEnvironments(), { name: env }))) return ctx.badRequest(null, [{ messages: [{ id: 'request.error.environment.unknow' }] }]);
|
2017-08-01 18:23:19 +02:00
|
|
|
if (!name || _.isEmpty(_.find(Service.getDatabases(env), { name }))) return ctx.badRequest(null, [{ messages: [{ id: 'request.error.database.unknow' }] }]);
|
2017-07-26 16:15:31 +02:00
|
|
|
|
|
|
|
const model = Service.databases(name, env);
|
|
|
|
|
|
|
|
ctx.send(model);
|
|
|
|
},
|
|
|
|
|
|
|
|
databaseModel: async ctx => {
|
|
|
|
const Service = strapi.plugins['settings-manager'].services.settingsmanager;
|
2017-08-03 14:55:42 +02:00
|
|
|
const env = strapi.config.environment;
|
2017-07-11 14:56:52 +02:00
|
|
|
|
2017-07-26 16:15:31 +02:00
|
|
|
const model = Service.databases('${name}', env);
|
2017-07-11 14:56:52 +02:00
|
|
|
|
|
|
|
ctx.send(model);
|
2017-07-10 11:40:41 +02:00
|
|
|
},
|
2017-07-10 18:00:50 +02:00
|
|
|
|
2017-07-25 16:37:50 +02:00
|
|
|
get: async ctx => {
|
|
|
|
const Service = strapi.plugins['settings-manager'].services.settingsmanager;
|
|
|
|
const { slug, env } = ctx.params;
|
|
|
|
|
2018-03-29 11:40:22 +02:00
|
|
|
if (env && _.isEmpty(_.find(Service.getEnvironments(), { name: env }))) return ctx.badRequest(null, [{ messages: [{ id: 'request.error.environment.unknow' }] }]);
|
2017-07-25 16:37:50 +02:00
|
|
|
|
2018-02-05 14:16:32 +01:00
|
|
|
_.has(Service, slug) ? ctx.send(await Service[slug](env)) : ctx.badRequest(null, [{ messages: [{ id: 'request.error.config' }] }]);
|
2017-07-25 16:37:50 +02:00
|
|
|
},
|
|
|
|
|
2017-07-10 18:00:50 +02:00
|
|
|
update: async ctx => {
|
|
|
|
const Service = strapi.plugins['settings-manager'].services.settingsmanager;
|
|
|
|
const { slug, env } = ctx.params;
|
2017-08-02 17:17:54 +02:00
|
|
|
let params = ctx.request.body;
|
2017-07-10 18:00:50 +02:00
|
|
|
|
2018-03-29 11:40:22 +02:00
|
|
|
if (env && _.isEmpty(_.find(Service.getEnvironments(), { name: env }))) return ctx.badRequest(null, [{ messages: [{ id: 'request.error.environment.unknow' }] }]);
|
2017-07-11 14:56:52 +02:00
|
|
|
|
2017-08-02 12:12:28 +02:00
|
|
|
let model;
|
|
|
|
if (_.has(Service, slug)) {
|
2018-02-05 14:16:32 +01:00
|
|
|
model = await Service[slug](env);
|
2017-08-02 12:12:28 +02:00
|
|
|
} else {
|
|
|
|
return ctx.badRequest(null, [{ messages: [{ id: 'request.error.config' }] }]);
|
|
|
|
}
|
2017-07-11 14:56:52 +02:00
|
|
|
|
2017-07-10 18:00:50 +02:00
|
|
|
const items = Service.getItems(model);
|
|
|
|
|
|
|
|
params = Service.cleanParams(params, items);
|
|
|
|
|
2017-07-26 12:43:46 +02:00
|
|
|
let validationErrors;
|
2017-07-20 15:08:03 +02:00
|
|
|
[params, validationErrors] = Service.paramsValidation(params, items);
|
2017-07-10 18:00:50 +02:00
|
|
|
|
2017-08-01 18:23:19 +02:00
|
|
|
if (!_.isEmpty(validationErrors)) return ctx.badRequest(null, Service.formatErrors(validationErrors));
|
2017-07-11 11:41:00 +02:00
|
|
|
|
2017-07-28 16:14:50 +02:00
|
|
|
strapi.reload.isWatching = false;
|
|
|
|
|
2018-02-05 14:16:32 +01:00
|
|
|
const updateErrors = await Service.updateSettings(params, items, env);
|
2017-07-13 17:09:44 +02:00
|
|
|
|
2017-08-01 18:23:19 +02:00
|
|
|
!_.isEmpty(updateErrors) ? ctx.badRequest(null, Service.formatErrors(updateErrors)) : ctx.send({ ok: true });
|
2017-07-28 16:14:50 +02:00
|
|
|
|
|
|
|
strapi.reload();
|
2017-07-10 18:00:50 +02:00
|
|
|
},
|
2017-07-19 14:31:17 +02:00
|
|
|
|
2017-07-19 15:12:27 +02:00
|
|
|
createLanguage: async ctx => {
|
2017-07-19 14:31:17 +02:00
|
|
|
const Service = strapi.plugins['settings-manager'].services.settingsmanager;
|
2017-07-19 15:12:27 +02:00
|
|
|
const { name } = ctx.request.body;
|
2017-07-19 14:31:17 +02:00
|
|
|
|
2017-07-19 15:12:27 +02:00
|
|
|
const languages = Service.getLanguages();
|
2017-07-20 11:27:33 +02:00
|
|
|
const availableLanguages = strapi.plugins['settings-manager'].services.languages;
|
2017-07-19 15:12:27 +02:00
|
|
|
|
2017-08-03 14:06:59 +02:00
|
|
|
if (_.find(languages, { name: _.lowerCase(name).replace(' ', '_') })) return ctx.badRequest(null, [{ messages: [{ id: 'request.error.languages.exist' }] }]);
|
2017-08-01 18:23:19 +02:00
|
|
|
if (!_.find(availableLanguages, { value: name })) return ctx.badRequest(null, [{ messages: [{ id: 'request.error.languages.incorrect' }] }]);
|
2017-07-19 15:12:27 +02:00
|
|
|
|
2017-08-01 18:23:19 +02:00
|
|
|
const filePath = path.join(strapi.config.appPath, 'config', 'locales', `${name}.json`);
|
2017-07-26 17:55:24 +02:00
|
|
|
|
|
|
|
try {
|
|
|
|
fs.writeFileSync(filePath, '{}');
|
|
|
|
|
|
|
|
ctx.send({ ok: true });
|
2017-08-03 17:13:25 +02:00
|
|
|
|
|
|
|
strapi.reload();
|
2017-07-26 17:55:24 +02:00
|
|
|
} catch (e) {
|
2017-08-01 18:23:19 +02:00
|
|
|
ctx.badRequest(null, Service.formatErrors([{
|
2017-07-26 17:55:24 +02:00
|
|
|
target: 'name',
|
|
|
|
message: 'request.error.config',
|
|
|
|
params: {
|
|
|
|
filePath: filePath
|
|
|
|
}
|
|
|
|
}]));
|
|
|
|
}
|
2017-07-19 15:24:26 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
deleteLanguage: async ctx => {
|
|
|
|
const Service = strapi.plugins['settings-manager'].services.settingsmanager;
|
|
|
|
const { name } = ctx.params;
|
|
|
|
|
|
|
|
const languages = Service.getLanguages();
|
|
|
|
|
2017-08-01 18:23:19 +02:00
|
|
|
if (!_.find(languages, { name })) return ctx.badRequest(null, [{ messages: [{ id: 'request.error.languages.unknow' }] }]);
|
2017-07-19 15:24:26 +02:00
|
|
|
|
2017-08-01 18:23:19 +02:00
|
|
|
const filePath = path.join(strapi.config.appPath, 'config', 'locales', `${name}.json`);
|
2017-07-26 17:55:24 +02:00
|
|
|
|
|
|
|
try {
|
|
|
|
fs.unlinkSync(filePath);
|
|
|
|
|
|
|
|
ctx.send({ ok: true });
|
2018-04-26 14:21:17 +02:00
|
|
|
strapi.reload();
|
2017-07-26 17:55:24 +02:00
|
|
|
} catch (e) {
|
2017-08-01 18:23:19 +02:00
|
|
|
ctx.badRequest(null, Service.formatErrors([{
|
2017-07-26 17:55:24 +02:00
|
|
|
target: 'name',
|
|
|
|
message: 'request.error.config',
|
|
|
|
params: {
|
|
|
|
filePath: filePath
|
|
|
|
}
|
|
|
|
}]));
|
|
|
|
}
|
2017-07-26 12:43:46 +02:00
|
|
|
},
|
|
|
|
|
2017-07-26 16:15:31 +02:00
|
|
|
createDatabase: async ctx => {
|
|
|
|
const Service = strapi.plugins['settings-manager'].services.settingsmanager;
|
|
|
|
const { env } = ctx.params;
|
|
|
|
let params = ctx.request.body;
|
|
|
|
|
2018-03-29 11:40:22 +02:00
|
|
|
if (!env || _.isEmpty(_.find(Service.getEnvironments(), { name: env }))) return ctx.badRequest(null, [{ messages: [{ id: 'request.error.environment.unknow' }] }]);
|
2017-08-18 18:18:21 +02:00
|
|
|
|
2017-08-02 17:17:54 +02:00
|
|
|
const [name] = _.keys(params.database.connections);
|
2017-07-26 16:15:31 +02:00
|
|
|
|
2017-08-01 18:23:19 +02:00
|
|
|
if (!name || _.find(Service.getDatabases(env), { name })) return ctx.badRequest(null, [{ messages: [{ id: 'request.error.database.exist' }] }]);
|
2017-07-26 16:15:31 +02:00
|
|
|
|
|
|
|
const model = Service.databases(name, env);
|
|
|
|
const items = Service.getItems(model);
|
|
|
|
|
|
|
|
params = Service.cleanParams(params, items);
|
|
|
|
|
|
|
|
let validationErrors;
|
|
|
|
[params, validationErrors] = Service.paramsValidation(params, items);
|
|
|
|
|
2017-08-02 17:17:54 +02:00
|
|
|
params.database.connections[name].connector = Service.getClientConnector(params.database.connections[name].settings.client);
|
|
|
|
|
2017-08-01 18:23:19 +02:00
|
|
|
if (!_.isEmpty(validationErrors)) return ctx.badRequest(null, Service.formatErrors(validationErrors));
|
2017-07-26 16:15:31 +02:00
|
|
|
|
2017-08-11 11:36:33 +02:00
|
|
|
if (_.isEmpty(_.keys(strapi.config.environments[env].database.connections)) || _.isEmpty(strapi.config.environments[env].database.defaultConnection)) {
|
|
|
|
params.database.defaultConnection = name;
|
|
|
|
items.push({
|
|
|
|
target: 'database.defaultConnection'
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2017-07-28 16:14:50 +02:00
|
|
|
Service.installDependency(params, name);
|
|
|
|
|
|
|
|
strapi.reload.isWatching = false;
|
|
|
|
|
2017-07-26 16:15:31 +02:00
|
|
|
const updateErrors = Service.updateSettings(params, items, env);
|
|
|
|
|
2017-08-01 18:23:19 +02:00
|
|
|
if (!_.isEmpty(updateErrors)) return ctx.badRequest(null, Service.formatErrors(updateErrors));
|
2017-07-26 16:15:31 +02:00
|
|
|
|
|
|
|
ctx.send({ ok: true });
|
2017-07-28 16:14:50 +02:00
|
|
|
|
|
|
|
strapi.reload();
|
2017-07-26 16:15:31 +02:00
|
|
|
},
|
|
|
|
|
2017-07-26 12:43:46 +02:00
|
|
|
updateDatabase: async ctx => {
|
|
|
|
const Service = strapi.plugins['settings-manager'].services.settingsmanager;
|
|
|
|
const { name, env } = ctx.params;
|
|
|
|
let params = ctx.request.body;
|
|
|
|
|
2018-03-29 11:40:22 +02:00
|
|
|
if (!env || _.isEmpty(_.find(Service.getEnvironments(), { name: env }))) return ctx.badRequest(null, [{ messages: [{ id: 'request.error.environment.unknow' }] }]);
|
2017-08-01 18:23:19 +02:00
|
|
|
if (!name || _.isEmpty(_.find(Service.getDatabases(env), { name }))) return ctx.badRequest(null, [{ messages: [{ id: 'request.error.database.unknow' }] }]);
|
2017-07-26 12:43:46 +02:00
|
|
|
|
2017-07-26 16:15:31 +02:00
|
|
|
const model = Service.databases(name, env);
|
2017-07-26 12:43:46 +02:00
|
|
|
let items = Service.getItems(model);
|
|
|
|
|
|
|
|
params = Service.cleanParams(params, items);
|
|
|
|
|
|
|
|
let validationErrors;
|
|
|
|
[params, validationErrors] = Service.paramsValidation(params, items);
|
|
|
|
|
2017-08-01 18:23:19 +02:00
|
|
|
if (!_.isEmpty(validationErrors)) return ctx.badRequest(null, Service.formatErrors(validationErrors));
|
2017-07-26 12:43:46 +02:00
|
|
|
|
2017-08-02 17:17:54 +02:00
|
|
|
const newName = _.get(params, `database.connections.${name}.name`);
|
2017-08-21 14:11:53 +02:00
|
|
|
const defaultConnection = params.database.defaultConnection;
|
2017-07-26 12:43:46 +02:00
|
|
|
|
2017-08-21 14:11:53 +02:00
|
|
|
if (params.database.connections) {
|
|
|
|
const settings = _.assign(_.clone(strapi.config.environments[env].database.connections[name].settings), params.database.connections[name].settings);
|
2018-05-01 12:56:51 +02:00
|
|
|
const options = _.assign(_.clone(strapi.config.environments[env].database.connections[name].options), params.database.connections[name].options);
|
2017-08-21 14:11:53 +02:00
|
|
|
params = _.assign(_.clone(strapi.config.environments[env].database.connections[name]), params.database.connections[name]);
|
|
|
|
params.settings = settings;
|
2018-05-01 12:56:51 +02:00
|
|
|
params.options = options;
|
2017-08-21 14:11:53 +02:00
|
|
|
}
|
2017-08-09 17:39:54 +02:00
|
|
|
|
|
|
|
delete params.name;
|
2017-08-04 12:03:22 +02:00
|
|
|
|
2017-08-09 17:39:54 +02:00
|
|
|
const connections = _.clone(strapi.config.environments[env].database.connections);
|
2017-07-26 12:43:46 +02:00
|
|
|
|
2017-08-22 15:41:25 +02:00
|
|
|
|
2017-08-09 17:39:54 +02:00
|
|
|
if (newName && newName !== name) {
|
2017-07-26 12:43:46 +02:00
|
|
|
connections[newName] = params;
|
|
|
|
connections[name] = undefined;
|
|
|
|
|
2017-08-11 11:36:33 +02:00
|
|
|
_.forEach(strapi.models, (model, modelName) => {
|
|
|
|
if (name === model.connection) {
|
|
|
|
const [searchFilePath, getModelPathErrors] = Service.getModelPath(modelName);
|
|
|
|
|
|
|
|
if (!_.isEmpty(getModelPathErrors)) {
|
|
|
|
return ctx.badRequest(null, Service.formatErrors(getModelPathErrors));
|
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
|
|
const modelJSON = require(searchFilePath);
|
|
|
|
modelJSON.connection = newName;
|
|
|
|
|
|
|
|
try {
|
|
|
|
fs.writeFileSync(searchFilePath, JSON.stringify(modelJSON, null, 2), 'utf8');
|
|
|
|
} catch (e) {
|
|
|
|
return ctx.badRequest(null, Service.formatErrors([{
|
|
|
|
id: 'request.error.mode.write',
|
|
|
|
params: {
|
|
|
|
filePath: searchFilePath
|
|
|
|
}
|
|
|
|
}]));
|
|
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
return ctx.badRequest(null, Service.formatErrors([{
|
|
|
|
id: 'request.error.mode.read',
|
|
|
|
params: {
|
|
|
|
filePath: searchFilePath
|
|
|
|
}
|
|
|
|
}]));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
2017-08-22 15:41:25 +02:00
|
|
|
} else if (params.settings) {
|
2017-08-09 17:39:54 +02:00
|
|
|
connections[name] = params;
|
2017-07-26 12:43:46 +02:00
|
|
|
}
|
|
|
|
|
2017-08-09 17:39:54 +02:00
|
|
|
params = { database: { connections }};
|
|
|
|
|
|
|
|
items = [{ target: 'database.connections' }];
|
|
|
|
|
2017-08-11 11:36:33 +02:00
|
|
|
if (newName && newName !== name && strapi.config.environments[env].database.defaultConnection === name) {
|
|
|
|
params.database.defaultConnection = newName;
|
|
|
|
items.push({
|
|
|
|
target: 'database.defaultConnection'
|
|
|
|
});
|
2017-08-21 14:11:53 +02:00
|
|
|
} else if (defaultConnection) {
|
|
|
|
params.database.defaultConnection = defaultConnection;
|
|
|
|
items.push({
|
|
|
|
target: 'database.defaultConnection'
|
|
|
|
});
|
2017-08-11 11:36:33 +02:00
|
|
|
}
|
|
|
|
|
2017-08-03 10:59:37 +02:00
|
|
|
const newClient = _.get(params, `database.connections.${name}.settings.client`);
|
|
|
|
|
|
|
|
if (newClient) params.database.connections[name].connector = Service.getClientConnector(newClient);
|
|
|
|
|
2017-07-28 16:14:50 +02:00
|
|
|
strapi.reload.isWatching = false;
|
|
|
|
|
2017-08-09 17:39:54 +02:00
|
|
|
const cleanErrors = Service.cleanDependency(env, params);
|
|
|
|
|
|
|
|
if (!_.isEmpty(cleanErrors)) {
|
|
|
|
return ctx.badRequest(null, Service.formatErrors(cleanErrors));
|
|
|
|
}
|
|
|
|
|
2017-08-03 10:59:37 +02:00
|
|
|
Service.installDependency(params, name);
|
2017-07-28 16:56:17 +02:00
|
|
|
|
2017-07-26 12:43:46 +02:00
|
|
|
const updateErrors = Service.updateSettings(params, items, env);
|
|
|
|
|
2017-08-01 18:23:19 +02:00
|
|
|
!_.isEmpty(updateErrors) ? ctx.badRequest(null, Service.formatErrors(updateErrors)) : ctx.send({ ok: true });
|
2017-07-28 16:14:50 +02:00
|
|
|
|
|
|
|
strapi.reload();
|
2017-07-26 17:10:19 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
deleteDatabase: async ctx => {
|
|
|
|
const Service = strapi.plugins['settings-manager'].services.settingsmanager;
|
|
|
|
const { name, env } = ctx.params;
|
|
|
|
|
2018-03-29 11:40:22 +02:00
|
|
|
if (!env || _.isEmpty(_.find(Service.getEnvironments(), { name: env }))) return ctx.badRequest(null, [{ messages: [{ id: 'request.error.environment.unknow' }] }]);
|
2017-08-01 18:23:19 +02:00
|
|
|
if (!name || _.isEmpty(_.find(Service.getDatabases(env), { name }))) return ctx.badRequest(null, [{ messages: [{ id: 'request.error.database.unknow' }] }]);
|
2017-07-26 17:10:19 +02:00
|
|
|
|
2017-08-03 17:31:13 +02:00
|
|
|
const connections = _.clone(strapi.config.environments[env].database.connections);
|
2017-07-26 17:10:19 +02:00
|
|
|
connections[name] = undefined;
|
|
|
|
|
2017-08-03 17:31:13 +02:00
|
|
|
const params = { database: { connections }};
|
|
|
|
const items = [{ target: 'database.connections' }];
|
2017-07-26 17:10:19 +02:00
|
|
|
|
2017-08-11 11:36:33 +02:00
|
|
|
if (strapi.config.environments[env].database.defaultConnection === name) {
|
|
|
|
params.database.defaultConnection = '';
|
|
|
|
items.push({
|
|
|
|
target: 'database.defaultConnection'
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2017-08-01 18:23:19 +02:00
|
|
|
strapi.reload.isWatching = false;
|
|
|
|
|
2017-07-26 17:10:19 +02:00
|
|
|
const updateErrors = Service.updateSettings(params, items, env);
|
|
|
|
|
2017-08-01 18:23:19 +02:00
|
|
|
!_.isEmpty(updateErrors) ? ctx.badRequest(null, Service.formatErrors(updateErrors)) : ctx.send({ ok: true });
|
|
|
|
|
|
|
|
strapi.reload();
|
2017-08-23 13:21:54 +02:00
|
|
|
},
|
|
|
|
|
2017-09-27 17:54:18 +02:00
|
|
|
autoReload: async ctx => {
|
|
|
|
ctx.send({
|
|
|
|
autoReload: _.get(strapi.config.environments, 'development.server.autoReload', false),
|
2017-09-28 11:41:58 +02:00
|
|
|
environment: strapi.config.environment,
|
2017-09-27 17:54:18 +02:00
|
|
|
});
|
2017-07-19 14:31:17 +02:00
|
|
|
}
|
2017-07-06 10:02:00 +02:00
|
|
|
};
|