906 lines
26 KiB
JavaScript
Raw Normal View History

2017-07-06 10:02:00 +02:00
'use strict';
2017-07-11 11:41:00 +02:00
const fs = require('fs');
const path = require('path');
2017-08-02 13:17:40 +02:00
const _ = require('lodash');
const exec = require('child_process').execSync;
2017-07-11 11:41:00 +02:00
2017-07-06 10:02:00 +02:00
module.exports = {
menu: {
sections: [
{
2017-07-10 12:19:06 +02:00
name: 'menu.section.global-settings',
items: [
{
slug: 'application',
name: 'menu.item.application',
icon: 'globe'
},
{
slug: 'languages',
2017-07-10 12:19:06 +02:00
name: 'menu.item.languages',
icon: 'language'
}
]
},
{
2017-07-10 12:19:06 +02:00
name: 'menu.section.environments',
items: [
{
slug: 'databases',
2017-08-02 13:17:40 +02:00
name: 'menu.item.database',
2017-07-18 12:39:03 +02:00
icon: 'database'
},
2017-08-02 13:17:40 +02:00
{
slug: 'request',
name: 'menu.item.request',
icon: 'compress'
},
{
slug: 'response',
name: 'menu.item.response',
icon: 'upload'
},
{
slug: 'security',
2017-07-10 12:19:06 +02:00
name: 'menu.item.security',
icon: 'shield'
},
{
slug: 'server',
2017-07-10 12:19:06 +02:00
name: 'menu.item.server',
icon: 'server'
}
]
}
]
},
application: () => ({
name: 'form.application.name',
description: 'form.application.description',
sections: [
{
2017-07-10 12:19:06 +02:00
name: '',
items: [
{
name: 'form.application.item.name',
2017-08-02 13:17:40 +02:00
target: 'application.name',
type: 'string',
value: _.get(strapi.config, 'name', null),
validations : {
maxLength: 255,
required: true
}
},
{
name: 'form.application.item.description',
2017-08-02 13:17:40 +02:00
target: 'application.description',
type: 'string',
value: _.get(strapi.config, 'description', null),
validations : {
maxLength: 255,
required: true
}
},
{
name: 'form.application.item.version',
2017-07-10 18:00:50 +02:00
target: 'package.version',
type: 'string',
2017-08-04 12:03:22 +02:00
value: _.get(strapi.config, 'info.version', null),
validations : {
regex: '^(\\d+\\.)?(\\d+\\.)?(\\*|\\d+)$',
required: true
}
}
]
}
]
}),
2017-08-10 16:00:01 +02:00
request: env => ({
name: 'form.request.name',
description: 'form.request.description',
2017-07-13 11:59:56 +02:00
sections: [
{
name: '',
items: [
{
2017-08-10 16:00:01 +02:00
name: 'form.request.item.logger.level',
target: 'request.logger.level',
2017-07-13 11:59:56 +02:00
type: 'string',
2017-08-10 16:00:01 +02:00
value: _.get(strapi.config, `environments.${env}.request.logger.level`, null),
validations: {
2017-07-13 11:59:56 +02:00
required: true
}
2017-08-10 16:00:01 +02:00
},
2017-07-26 15:33:41 +02:00
{
2017-08-10 16:00:01 +02:00
name: 'form.request.item.logger.exposeInContext',
target: 'request.logger.exposeInContext',
2017-08-02 13:17:40 +02:00
type: 'boolean',
2017-08-10 16:00:01 +02:00
value: _.get(strapi.config, `environments.${env}.request.logger.exposeInContext`, null),
validations: {
required: true
}
},
2017-07-26 15:33:41 +02:00
{
2017-08-10 16:00:01 +02:00
name: 'form.request.item.logger.requests',
target: 'request.logger.requests',
2017-08-02 13:17:40 +02:00
type: 'boolean',
2017-08-10 16:00:01 +02:00
value: _.get(strapi.config, `environments.${env}.request.logger.requests`, null),
2017-08-02 13:17:40 +02:00
validations: {
required: true
}
2017-08-08 10:15:38 +02:00
}
]
},
{
name: 'form.request.item.parser',
items: [
2017-08-02 13:17:40 +02:00
{
name: 'form.request.item.parser.enabled',
target: 'request.parser.enabled',
2017-07-26 15:33:41 +02:00
type: 'boolean',
2017-08-02 13:17:40 +02:00
value: _.get(strapi.config, `environments.${env}.request.parser.enabled`, null),
items: [
{
2017-08-02 13:17:40 +02:00
name: 'form.request.item.parser.multipart',
target: 'request.parser.multipart',
type: 'boolean',
value: _.get(strapi.config, `environments.${env}.request.parser.multipart`, null),
validations : {
required: true
}
2017-08-02 13:17:40 +02:00
}
]
2017-08-08 10:15:38 +02:00
}
]
},
{
2017-08-10 16:00:01 +02:00
name: 'form.request.item.router',
2017-08-08 10:15:38 +02:00
items: [
2017-08-02 13:17:40 +02:00
{
2017-08-10 16:00:01 +02:00
name: 'form.request.item.router.prefix',
target: 'request.router.prefix',
2017-08-02 13:17:40 +02:00
type: 'boolean',
2017-08-10 16:00:01 +02:00
value: _.get(strapi.config, `environments.${env}.request.router.prefix`, null),
validations : {
required: true
}
2017-08-02 13:17:40 +02:00
}
]
}
]
}),
response: env => ({
name: 'form.response.name',
description: 'form.response.description',
sections: [
{
name: '',
items: [
{
name: 'form.response.item.gzip.enabled',
target: 'response.gzip.enabled',
type: 'boolean',
value: _.get(strapi.config, `environments.${env}.response.gzip.enabled`, null),
validations: {
required: true
}
},
{
name: 'form.response.item.responseTime.enabled',
target: 'response.responseTime.enabled',
type: 'boolean',
value: _.get(strapi.config, `environments.${env}.response.responseTime.enabled`, null),
2017-07-26 15:33:41 +02:00
validations: {
required: true
}
}
]
2017-08-02 13:17:40 +02:00
}
]
}),
security: env => ({
name: 'form.security.name',
description: 'form.security.description',
sections: [
{
name: 'form.security.item.csrf',
items: [
{
name: 'form.security.item.csrf.enabled',
target: 'security.csrf.enabled',
type: 'boolean',
value: _.get(strapi.config, `environments.${env}.security.csrf.enabled`, null),
items: [
{
2017-07-31 16:51:21 +02:00
name: 'form.security.item.csrf.key',
target: 'security.csrf.key',
type: 'string',
value: _.get(strapi.config, `environments.${env}.security.csrf.key`, null),
validations: {}
},
{
name: 'form.security.item.csrf.secret',
target: 'security.csrf.secret',
type: 'string',
value: _.get(strapi.config, `environments.${env}.security.csrf.secret`, null),
validations: {}
},
{
name: 'form.security.item.csrf.cookie',
target: 'security.csrf.cookie',
type: 'string',
value: _.get(strapi.config, `environments.${env}.security.csrf.cookie`, null),
validations: {}
},
{
name: 'form.security.item.csrf.angular',
target: 'security.csrf.angular',
type: 'boolean',
value: _.get(strapi.config, `environments.${env}.security.csrf.angular`, null),
validations: {}
}
],
validations: {
required: true
}
}
]
},
{
name: 'form.security.item.p3p',
items: [
{
name: 'form.security.item.p3p.enabled',
target: 'security.p3p.enabled',
type: 'boolean',
value: _.get(strapi.config, `environments.${env}.security.p3p.enabled`, null),
items: [
{
name: 'form.security.item.p3p.value',
target: 'security.p3p.value',
type: 'string',
value: _.get(strapi.config, `environments.${env}.security.p3p.value`, null),
validations: {
required: true
}
}
],
2017-07-20 15:08:03 +02:00
validations: {
required: true
}
}
]
},
{
name: 'form.security.item.hsts',
items: [
{
name: 'form.security.item.hsts.enabled',
2017-08-01 11:26:38 +02:00
target: 'security.hsts.enabled',
type: 'boolean',
value: _.get(strapi.config, `environments.${env}.security.hsts.enabled`, null),
items: [
{
2017-08-01 11:26:38 +02:00
name: 'form.security.item.hsts.maxAge',
target: 'security.hsts.maxAge',
type: 'number',
value: _.get(strapi.config, `environments.${env}.security.hsts.maxAge`, null),
validations: {
required: true
}
},
{
2017-08-01 11:26:38 +02:00
name: 'form.security.item.hsts.includeSubDomains',
target: 'security.hsts.includeSubDomains',
type: 'boolean',
value: _.get(strapi.config, `environments.${env}.security.hsts.includeSubDomains`, null),
validations: {}
},
{
2017-08-01 11:26:38 +02:00
name: 'form.security.item.hsts.preload',
target: 'security.hsts.preload',
type: 'boolean',
value: _.get(strapi.config, `environments.${env}.security.hsts.preload`, null),
validations: {}
}
],
validations: {
required: true
}
}
]
},
{
name: 'form.security.item.xframe',
items: [
{
name: 'form.security.item.xframe.enabled',
target: 'security.xframe.enabled',
type: 'boolean',
value: _.get(strapi.config, `environments.${env}.security.xframe.enabled`, null),
items: [
{
name: 'form.security.item.xframe.value',
2017-08-04 17:47:38 +02:00
target: 'security.xframe.value',
type: 'enum',
value: _.get(strapi.config, `environments.${env}.security.xframe.value`, null),
items: [
{
name: 'form.security.item.xframe.deny',
value: 'DENY',
},
{
name: 'form.security.item.xframe.sameorigin',
value: 'SAMEORIGIN',
},
{
name: 'form.security.item.xframe.allow-from',
value: 'ALLOW-FROM',
items: [{
name: '',
2017-08-04 17:47:38 +02:00
target: 'security.xframe.value.nested',
type: 'string',
value: '',
validations: {
required: true
}
}]
2017-07-20 15:08:03 +02:00
}
],
validations: {
required: true
}
2017-07-19 13:35:43 +02:00
}
],
validations: {
required: true
}
}
]
},
{
name: 'form.security.item.xssProtection',
items: [
{
name: 'form.security.item.xssProtection.enabled',
target: 'security.xssProtection.enabled',
type: 'boolean',
value: _.get(strapi.config, `environments.${env}.security.xssProtection.enabled`, null),
items: [
{
name: 'form.security.item.xssProtection.mode',
target: 'security.xssProtection.mode',
type: 'string',
value: _.get(strapi.config, `environments.${env}.security.xssProtection.mode`, null),
validations: {}
}
],
2017-07-19 13:35:43 +02:00
validations: {
required: true
}
}
]
},
{
name: 'form.security.item.cors',
items: [
2017-07-26 15:33:41 +02:00
{
name: 'form.security.item.cors.enabled',
target: 'security.cors.enabled',
type: 'boolean',
value: _.get(strapi.config, `environments.${env}.security.cors.enabled`, null),
items: [
{
name: 'form.security.item.cors.origin',
target: 'security.cors.origin',
type: 'string',
value: _.get(strapi.config, `environments.${env}.security.cors.origin`, null),
validations: {
required: true
}
}
],
2017-07-20 15:08:03 +02:00
validations: {
required: true
}
}
]
}
]
}),
2017-07-06 10:02:00 +02:00
server: env => ({
name: 'form.server.name',
description: 'form.server.description',
sections: [
{
name: '',
items: [
{
name: 'form.server.item.host',
target: 'server.host',
type: 'string',
2017-07-19 15:12:27 +02:00
value: _.get(strapi.config, `environments.${env}.server.host`, null),
validations: {}
},
{
name: 'form.server.item.port',
target: 'server.port',
type: 'number',
2017-07-19 15:12:27 +02:00
value: _.get(strapi.config, `environments.${env}.server.port`, null),
validations: {}
2017-08-02 13:17:40 +02:00
},
{
name: 'form.server.item.cron',
target: 'server.cron.enabled',
type: 'boolean',
value: _.get(strapi.config, `environments.${env}.server.cron.enabled`, null)
}
]
}
]
}),
2017-07-10 18:00:50 +02:00
i18n: env => ({
2017-08-02 13:17:40 +02:00
name: 'form.language.name',
description: 'form.language.description',
2017-07-19 14:42:45 +02:00
sections: [
{
name: '',
items: [
{
2017-08-02 13:17:40 +02:00
name: 'form.language.choose',
target: 'language.defaultLocale',
type: 'select',
items: strapi.plugins['settings-manager'].services.languages
2017-07-19 14:42:45 +02:00
}
]
}
]
}),
2017-07-19 14:42:45 +02:00
2017-07-26 16:15:31 +02:00
databases: (name, env) => ({
2017-08-02 13:17:40 +02:00
name: 'form.database.name',
description: 'form.database.description',
sections: [
{
name: '',
items: [
2017-07-26 12:43:46 +02:00
{
2017-08-02 13:17:40 +02:00
name: 'form.database.item.name',
target: `database.connections.${name}.name`,
2017-07-26 12:43:46 +02:00
type: 'string',
value: name,
validations: {
required: true
}
},
{
2017-08-02 17:17:54 +02:00
name: 'form.database.item.connector',
target: `database.connections.${name}.connector`,
2017-08-02 17:17:54 +02:00
type: 'string',
2017-08-02 13:17:40 +02:00
value: _.get(strapi.config, `environments.${env}.database.connections.${name}.connector`, null),
2017-08-02 17:17:54 +02:00
validations: {
required: true
}
},
{
name: 'form.database.item.client',
target: `database.connections.${name}.settings.client`,
type: 'select',
value: _.get(strapi.config, `environments.${env}.database.connections.${name}.settings.client`, null),
items: [
{
2017-08-02 13:17:40 +02:00
name: 'form.database.item.provider.mongo',
2017-08-02 17:17:54 +02:00
value: 'mongo',
},
{
2017-08-02 13:17:40 +02:00
name: 'form.database.item.provider.postgres',
2017-08-02 17:17:54 +02:00
value: 'postgres',
},
{
2017-08-02 13:17:40 +02:00
name: 'form.database.item.provider.mysql',
2017-08-02 17:17:54 +02:00
value: 'mysql',
},
{
2017-08-02 13:17:40 +02:00
name: 'form.database.item.provider.sqlite3',
2017-08-02 17:17:54 +02:00
value: 'sqlite3',
},
{
name: 'form.database.item.provider.redis',
value: 'redis',
}
],
validations: {
required: true
}
},
{
2017-08-02 13:17:40 +02:00
name: 'form.database.item.host',
2017-08-02 17:17:54 +02:00
target: `database.connections.${name}.settings.host`,
type: 'string',
2017-08-02 13:17:40 +02:00
value: _.get(strapi.config, `environments.${env}.database.connections.${name}.settings.host`, null),
validations: {
required: true
}
},
2017-08-04 12:03:22 +02:00
{
name: 'form.database.item.port',
target: `database.connections.${name}.settings.port`,
type: 'number',
value: _.get(strapi.config, `environments.${env}.database.connections.${name}.settings.port`, null),
validations: {
required: true
}
},
2017-08-09 19:47:39 +02:00
{
name: 'form.database.item.database',
target: `database.connections.${name}.settings.database`,
type: 'string',
value: _.get(strapi.config, `environments.${env}.database.connections.${name}.settings.database`, null),
validations: {
required: true
}
},
{
2017-08-02 13:17:40 +02:00
name: 'form.database.item.username',
2017-08-02 17:17:54 +02:00
target: `database.connections.${name}.settings.username`,
type: 'string',
2017-08-02 13:17:40 +02:00
value: _.get(strapi.config, `environments.${env}.database.connections.${name}.settings.username`, null),
validations: {}
},
{
2017-08-02 13:17:40 +02:00
name: 'form.database.item.password',
2017-08-02 17:17:54 +02:00
target: `database.connections.${name}.settings.password`,
2017-08-03 14:16:58 +02:00
type: 'password',
2017-08-02 13:17:40 +02:00
value: _.get(strapi.config, `environments.${env}.database.connections.${name}.settings.password`, null),
validations: {}
}
]
},
{
name: '',
items: [
{
2017-08-02 13:17:40 +02:00
name: 'form.database.item.default',
2017-08-02 17:17:54 +02:00
target: `database.defaultConnection`,
type: 'string',
2017-08-02 13:17:40 +02:00
value: _.get(strapi.config, `environments.${env}.database.defaultConnection`, null),
validations: {
required: true
}
}
]
}
]
}),
2017-07-11 14:56:52 +02:00
getEnvironments: () => {
return _.map(_.keys(strapi.config.environments), environment => {
return {
name: environment,
active: (strapi.config.environment === environment)
2017-07-26 17:39:41 +02:00
};
2017-07-11 14:56:52 +02:00
});
},
2017-07-19 14:31:17 +02:00
getLanguages: () => {
2017-08-02 13:17:40 +02:00
return _.map(strapi.config.language.locales, language => {
2017-07-19 14:31:17 +02:00
return {
name: language,
2017-08-02 13:17:40 +02:00
active: (strapi.config.language.defaultLocale === language)
2017-07-26 17:39:41 +02:00
};
2017-07-19 14:31:17 +02:00
});
},
2017-07-25 15:11:11 +02:00
getDatabases: env => {
const databases = [];
2017-08-02 13:17:40 +02:00
_.forEach(strapi.config.environments[env].database.connections, (connection, name) => databases.push({
2017-08-02 17:17:54 +02:00
connector: _.get(connection, 'connector'),
letter: strapi.plugins['settings-manager'].services.settingsmanager.getClientLetter(_.get(connection, 'settings.client')),
color: strapi.plugins['settings-manager'].services.settingsmanager.getClientColor(_.get(connection, 'settings.client')),
2017-07-26 17:39:41 +02:00
name,
host: _.get(connection, 'settings.host'),
database: _.get(connection, 'settings.database'),
2017-08-02 13:17:40 +02:00
active: (_.get(strapi.config, `environments.${env}.database.defaultConnection`) === name)
2017-07-26 17:39:41 +02:00
}));
2017-07-25 15:11:11 +02:00
return databases;
},
2017-08-02 17:17:54 +02:00
getClientConnector: client => {
const bookshelfClients = ['postgres', 'mysql', 'sqlite3'];
const mongooseClients = ['mongo'];
const redisClients = ['redis'];
let connector;
if (_.indexOf(bookshelfClients, client) !== -1) connector = 'strapi-bookshelf';
if (_.indexOf(mongooseClients, client) !== -1) connector = 'strapi-mongoose';
if (_.indexOf(redisClients, client) !== -1) connector = 'strapi-redis';
return connector;
},
getClientColor: client => {
switch (client) {
case 'postgres':
return '#ffb500';
break;
case 'mysql':
return '#4479a1';
break;
case 'redis':
return '#ff5d00';
break;
case 'mongo':
return '#43b121';
break;
case 'sqlite3':
return '#006fff';
break;
default:
return '#000000';
}
},
getClientLetter: client => {
switch (client) {
case 'postgres':
return 'PG';
break;
case 'mysql':
return 'MY';
break;
default:
return _.upperCase(_.head(client));
}
},
getItems: model => {
return _.flatten(_.map(model.sections, section => {
let items = section.items;
_.forEach(items, item => { if (item.type === 'boolean' && _.has(item, 'items')) items = _.concat(items, item.items) });
return items
}));
},
2017-07-10 18:00:50 +02:00
cleanParams: (params, items) => {
const cleanParams = {};
_.forEach(items, ({ target }) => _.has(params, target) ? _.set(cleanParams, target, _.get(params, target)) : '');
return cleanParams;
},
formatErrors: errors => _.map(_.groupBy(errors, 'target'), (errs, target) => {
return {
target,
messages: _.map(errs, err => {
return {
id: err.message,
params: _.get(err, 'params', undefined)
2017-07-19 09:52:29 +02:00
};
})
2017-07-19 09:52:29 +02:00
};
}),
2017-07-10 18:00:50 +02:00
paramsValidation: (params, items) => {
let errors = [];
2017-07-20 15:08:03 +02:00
const reformat = (value, format) => {
if (format === 'number') try { return parseFloat(number) } catch (e) { return null };
if (format === 'boolean') return value === 'true';
return value;
};
2017-07-19 18:41:33 +02:00
const checkType = (input, { type, target, items }) => {
2017-08-03 14:16:58 +02:00
if ((type === 'string' || type === 'text' || type === 'password') && !_.isString(input)) return errors.push({
2017-07-10 18:00:50 +02:00
target: target,
2017-07-13 12:32:17 +02:00
message: 'request.error.type.string'
2017-07-10 18:00:50 +02:00
});
2017-07-20 15:08:03 +02:00
if (type === 'number' && !_.isNumber(input)) return errors.push({
2017-07-10 18:00:50 +02:00
target: target,
2017-07-13 12:32:17 +02:00
message: 'request.error.type.number'
2017-07-10 18:00:50 +02:00
});
2017-07-20 15:08:03 +02:00
if (type === 'boolean' && !_.isBoolean(input)) return errors.push({
2017-07-10 18:00:50 +02:00
target: target,
2017-07-13 12:32:17 +02:00
message: 'request.error.type.boolean'
2017-07-10 18:00:50 +02:00
});
2017-07-19 18:41:33 +02:00
2017-07-20 15:08:03 +02:00
if (type === 'select' && !_.find(items, { value: input })) return errors.push({
2017-07-19 18:41:33 +02:00
target: target,
message: 'request.error.type.select'
});
2017-07-20 15:08:03 +02:00
2017-07-26 17:39:41 +02:00
if (type === 'enum' && !_.find(items, { value: input })) {
const key = input.split('.')[0];
input = _.drop(input.split('.')).join('.');
2017-07-20 15:08:03 +02:00
2017-07-26 17:39:41 +02:00
const item = _.find(items, { value: key });
2017-07-20 15:08:03 +02:00
2017-07-26 17:39:41 +02:00
if (!item) return errors.push({
target: target,
message: 'request.error.type.enum'
});
2017-07-20 15:08:03 +02:00
2017-07-26 17:39:41 +02:00
input = reformat(input, item.type);
params[target] = input;
2017-07-20 15:08:03 +02:00
2017-07-26 17:39:41 +02:00
_.forEach(item.items, subItem => {
subItem.target = target;
if (_.has(params, subItem.target)) {
const input = _.get(params, subItem.target, null);
2017-07-20 15:08:03 +02:00
2017-07-26 17:39:41 +02:00
checkType(input, subItem);
checkValidations(input, subItem);
}
});
2017-07-20 15:08:03 +02:00
}
2017-07-10 18:00:50 +02:00
};
const checkValidations = (input, item) => {
_.forEach(item.validations, (value, key) => {
2017-07-24 11:41:44 +02:00
if (key === 'required' && (_.isNull(input) || (_.isString(input) && _.isEmpty(input)) || _.isUndefined(input))) errors.push({
2017-07-10 18:00:50 +02:00
target: item.target,
2017-07-13 12:32:17 +02:00
message: 'request.error.validation.required'
2017-07-10 18:00:50 +02:00
});
if (key === 'regex' && !new RegExp(value).test(input)) errors.push({
target: item.target,
2017-07-13 12:32:17 +02:00
message: 'request.error.validation.regex'
});
2017-07-10 18:00:50 +02:00
if (key === 'max' && parseInt(input) > value) errors.push({
target: item.target,
2017-07-13 12:32:17 +02:00
message: 'request.error.validation.max'
2017-07-10 18:00:50 +02:00
});
if (key === 'min' && parseInt(input) < value) errors.push({
target: item.target,
2017-07-13 12:32:17 +02:00
message: 'request.error.validation.min'
2017-07-10 18:00:50 +02:00
});
if (key === 'maxLength' && input.length > value) errors.push({
target: item.target,
2017-07-13 12:32:17 +02:00
message: 'request.error.validation.maxLength'
2017-07-10 18:00:50 +02:00
});
if (key === 'minLength' && input.length < value) errors.push({
target: item.target,
2017-07-13 12:32:17 +02:00
message: 'request.error.validation.minLength'
2017-07-10 18:00:50 +02:00
});
});
};
_.forEach(items, item => {
if (_.has(params, item.target)) {
const input = _.get(params, item.target, null);
2017-07-19 09:52:29 +02:00
checkType(input, item);
checkValidations(input, item);
2017-07-10 18:00:50 +02:00
}
});
2017-07-20 15:08:03 +02:00
return [params, errors];
2017-07-11 11:41:00 +02:00
},
updateSettings: (params, items, env = '') => {
const appPath = strapi.config.appPath;
const errors = [];
2017-07-11 11:41:00 +02:00
_.forEach(items, ({ target }) => {
if (_.has(params, target)) {
let input = _.get(params, target, null);
2017-07-11 11:41:00 +02:00
const [file, ...objPath] = target.split('.');
if (target === 'language.defaultLocale') input = _.lowerCase(input).replace(/ /g, '_');
const filePath = (file === 'package') ? path.join(appPath, 'package.json') : path.join(appPath, 'config', `${env ? `environments/${env}` : ''}`, `${_.replace(file, '.', '/')}.json`);
2017-07-11 11:41:00 +02:00
try {
2017-07-17 14:09:38 +02:00
const fileContent = require(filePath);
2017-07-11 11:41:00 +02:00
_.set(fileContent, objPath, input);
2017-07-11 11:41:00 +02:00
2017-07-26 17:55:24 +02:00
try {
fs.writeFileSync(filePath, JSON.stringify(fileContent, null, 2), 'utf8');
} catch (e) {
errors.push({
target,
message: 'request.error.config',
params: {
filePath: filePath
}
});
}
} catch (e) {
errors.push({
target,
2017-07-17 14:09:38 +02:00
message: 'request.error.config',
params: {
filePath: filePath
}
});
}
2017-07-11 11:41:00 +02:00
}
});
return errors;
},
installDependency: (params, name) => {
const connector = _.get(params, `database.connections.${name}.connector`);
2017-08-03 12:15:18 +02:00
const installed = _.indexOf(_.keys(strapi.config.info.dependencies), connector) !== -1;
2017-08-04 12:03:22 +02:00
if (connector && !installed) exec(`npm install ${connector}@alpha`);
},
cleanDependency: (env, config) => {
const availableConnectors = ['strapi-mongoose', 'strapi-bookshelf', 'strapi-redis'];
let usedConnectors = [];
const errors = [];
_.forEach(_.keys(strapi.config.environments), environment => {
let connections = strapi.config.environments[environment].database.connections;
if (environment === env) {
connections = config.database.connections;
}
_.forEach(connections, connection => {
usedConnectors.push(connection.connector);
});
});
usedConnectors = _.uniq(usedConnectors);
_.forEach(availableConnectors, connector => {
const installed = _.indexOf(_.keys(strapi.config.info.dependencies), connector) !== -1;
const used = _.indexOf(usedConnectors, connector) !== -1;
if (installed && !used) {
const filePath = path.join(strapi.config.appPath, 'package.json');
try {
const fileContent = require(filePath);
_.set(fileContent, `dependencies.${connector}`, undefined);
try {
fs.writeFileSync(filePath, JSON.stringify(fileContent, null, 2), 'utf8');
} catch (e) {
errors.push({
target,
message: 'request.error.config',
params: {
filePath: filePath
}
});
}
} catch (e) {
errors.push({
target,
message: 'request.error.config',
params: {
filePath: filePath
}
});
}
}
});
return errors;
}
2017-07-06 10:02:00 +02:00
};