This commit is contained in:
Pierre Noël 2021-07-20 12:12:30 +02:00
parent 3c9daba9a1
commit 2381e8c60b
55 changed files with 359 additions and 63 deletions

View File

@ -2,6 +2,9 @@
"collectionName": "strapi_permission",
"info": {
"name": "Permission",
"singularName": "permission",
"pluralName": "permissions",
"displayName": "Permission",
"description": ""
},
"options": {

View File

@ -2,7 +2,10 @@
"collectionName": "strapi_role",
"info": {
"name": "Role",
"description": ""
"description": "",
"singularName": "role",
"pluralName": "roles",
"displayName": "Role"
},
"options": {
"timestamps": true

View File

@ -2,7 +2,10 @@
"collectionName": "strapi_administrator",
"info": {
"name": "User",
"description": ""
"description": "",
"singularName": "user",
"pluralName": "users",
"displayName": "User"
},
"pluginOptions": {
"content-manager": {

View File

@ -0,0 +1,5 @@
'use strict';
const bootstrap = require('../config/functions/bootstrap');
module.exports = bootstrap;

View File

@ -0,0 +1,10 @@
'use strict';
const settings = require('../config/settings');
module.exports = {
default: {
settings,
},
validator: () => {},
};

View File

@ -0,0 +1,17 @@
'use strict';
const permission = require('../../models/Permission.settings');
const role = require('../../models/Role.settings');
const user = require('../../models/User.settings');
module.exports = [
{
schema: permission,
},
{
schema: role,
},
{
schema: user,
},
];

View File

@ -0,0 +1,19 @@
'use strict';
const admin = require('../../controllers/admin');
const authentication = require('../../controllers/authentication');
const permission = require('../../controllers/permission');
const role = require('../../controllers/role');
const user = require('../../controllers/user');
const webhooks = require('../../controllers/Webhooks');
const authenticatedUser = require('../../controllers/authenticated-user');
module.exports = {
admin,
authentication,
permission,
role,
user,
webhooks,
'authenticated-user': authenticatedUser,
};

View File

@ -0,0 +1,9 @@
'use strict';
const hasPermissions = require('../../config/policies/hasPermissions');
const isAuthenticatedAdmin = require('../../config/policies/isAuthenticatedAdmin');
module.exports = {
hasPermissions,
isAuthenticatedAdmin,
};

View File

@ -0,0 +1,5 @@
'use strict';
const register = require('../config/functions/register');
module.exports = register;

View File

@ -0,0 +1,5 @@
'use strict';
const routes = require('../../config/routes');
module.exports = routes.routes;

View File

@ -0,0 +1,25 @@
'use strict';
const action = require('../../services/action');
const auth = require('../../services/auth');
const condition = require('../../services/condition');
const contentType = require('../../services/content-type');
const metrics = require('../../services/metrics');
const passport = require('../../services/passport');
const permission = require('../../services/permission');
const role = require('../../services/role');
const token = require('../../services/token');
const user = require('../../services/user');
module.exports = {
action,
auth,
condition,
'content-type': contentType,
metrics,
passport,
permission,
role,
token,
user,
};

View File

@ -3,9 +3,7 @@
const { getService } = require('../../utils');
module.exports = async () => {
console.log('before');
await getService('components').syncConfigurations();
await getService('content-types').syncConfigurations();
await getService('permission').registerPermissions();
console.log('after');
};

View File

@ -7,6 +7,7 @@ const metrics = require('../../services/metrics');
const permissionChecker = require('../../services/permission-checker');
const permission = require('../../services/permission');
const uid = require('../../services/uid');
const entityManager = require('../../services/entity-manager');
module.exports = {
components,
@ -16,4 +17,5 @@ module.exports = {
'permission-checker': permissionChecker,
permission,
uid,
'entity-manager': entityManager,
};

View File

@ -9,6 +9,7 @@ module.exports = fn => async (...args) => {
}
// these are errors like unique constraints
console.log(error);
strapi.log.error(error);
throw strapi.errors.badRequest('Invalid input data. Please verify unique constraints');
}

View File

@ -5,7 +5,8 @@
"strapi": {
"name": "Content Type Builder",
"icon": "paint-brush",
"description": "content-type-builder.plugin.description"
"description": "content-type-builder.plugin.description",
"kind": "plugin"
},
"dependencies": {
"@buffetjs/core": "3.3.6",

View File

@ -0,0 +1,5 @@
'use strict';
const bootstrap = require('../config/functions/bootstrap');
module.exports = bootstrap;

View File

@ -0,0 +1,6 @@
'use strict';
module.exports = {
default: {},
validator: () => {},
};

View File

@ -0,0 +1,15 @@
'use strict';
const builder = require('../../controllers/Builder');
const componentcategories = require('../../controllers/ComponentCategories');
const components = require('../../controllers/Components');
const connections = require('../../controllers/Connections');
const contenttypes = require('../../controllers/ContentTypes');
module.exports = {
builder,
componentcategories,
components,
connections,
contenttypes,
};

View File

@ -0,0 +1,3 @@
'use strict';
module.exports = {};

View File

@ -0,0 +1,3 @@
'use strict';
module.exports = {};

View File

@ -0,0 +1,5 @@
'use strict';
const routes = require('../../config/routes');
module.exports = routes.routes;

View File

@ -0,0 +1,15 @@
'use strict';
const contenttypes = require('../../services/ContentTypes');
const components = require('../../services/Components');
const componentcategories = require('../../services/ComponentCategories');
const builder = require('../../services/Builder');
const apiHandler = require('../../services/api-handler');
module.exports = {
contenttypes,
components,
componentcategories,
builder,
'api-handler': apiHandler,
};

View File

@ -1,7 +1,7 @@
'use strict';
module.exports = {
module.exports = () => ({
getReservedNames() {
return strapi.db.getReservedNames();
},
};
});

View File

@ -82,7 +82,7 @@ const categoryExists = name => {
return matchingIndex > -1;
};
module.exports = {
module.exports = () => ({
editCategory,
deleteCategory,
};
});

View File

@ -94,10 +94,10 @@ const deleteComponent = async uid => {
return deletedComponent;
};
module.exports = {
module.exports = () => ({
createComponent,
editComponent,
deleteComponent,
formatComponent,
};
});

View File

@ -253,11 +253,11 @@ const deleteContentType = async (uid, defaultBuilder = undefined) => {
return contentType;
};
module.exports = {
module.exports = () => ({
createContentType,
editContentType,
deleteContentType,
formatContentType,
createContentTypes,
deleteContentTypes,
};
});

View File

@ -39,7 +39,7 @@ module.exports = function createBuilder() {
modelName: contentType.modelName,
plugin: contentType.plugin,
uid: contentType.uid,
filename: contentType.__filename__,
filename: `${contentType.info.singularName}.json`,
dir: path.join(strapi.dir, dir),
schema: contentType.__schema__,
};
@ -159,12 +159,13 @@ function createSchemaBuilder({ components, contentTypes }) {
/**
* Write all type to files
*/
writeFiles() {
async writeFiles() {
return Promise.all(
[
...Array.from(tmpComponents.values()),
...Array.from(tmpContentTypes.values()),
].map(schema => schema.flush())
[...Array.from(tmpComponents.values()), ...Array.from(tmpContentTypes.values())].map(
schema => {
return schema.flush();
}
)
)
.catch(error => {
strapi.log.error('Error writing schema files');

View File

@ -0,0 +1,21 @@
'use strict';
const bootstrap = require('./server/bootstrap');
const policies = require('./server/policies');
const services = require('./server/services');
const routes = require('./server/routes');
const controllers = require('./server/controllers');
const middlewares = require('./server/middlewares');
const config = require('./server/config');
module.exports = () => {
return {
bootstrap,
config,
routes,
controllers,
middlewares,
policies,
services,
};
};

View File

@ -16,7 +16,7 @@ const createProvider = emailConfig => {
};
module.exports = async () => {
const emailConfig = _.get(strapi.plugins, 'email.config', {});
const emailConfig = strapi.config.get('plugins.email');
strapi.plugins.email.provider = createProvider(emailConfig);
// Add permissions

View File

@ -6,7 +6,8 @@
"name": "Email",
"icon": "paper-plane",
"description": "email.plugin.description",
"required": true
"required": true,
"kind": "plugin"
},
"scripts": {
"test": "echo \"no tests yet\""

View File

@ -0,0 +1,5 @@
'use strict';
const bootstrap = require('../config/functions/bootstrap');
module.exports = bootstrap;

View File

@ -0,0 +1,8 @@
'use strict';
const settings = require('../config/settings');
module.exports = {
default: { ...settings },
validator: () => {},
};

View File

@ -0,0 +1,7 @@
'use strict';
const email = require('../../controllers/Email');
module.exports = {
email,
};

View File

@ -0,0 +1,3 @@
'use strict';
module.exports = {};

View File

@ -0,0 +1,3 @@
'use strict';
module.exports = {};

View File

@ -0,0 +1,5 @@
'use strict';
const routes = require('../../config/routes');
module.exports = routes.routes;

View File

@ -0,0 +1,7 @@
'use strict';
const email = require('../../services/Email');
module.exports = {
email,
};

View File

@ -0,0 +1,21 @@
'use strict';
const bootstrap = require('./server/bootstrap');
const policies = require('./server/policies');
const services = require('./server/services');
const routes = require('./server/routes');
const controllers = require('./server/controllers');
const middlewares = require('./server/middlewares');
const config = require('./server/config');
module.exports = () => {
return {
bootstrap,
config,
routes,
controllers,
middlewares,
policies,
services,
};
};

View File

@ -335,8 +335,6 @@ class Strapi {
}
});
console.log('this.config.autoReload', this.config.autoReload);
await this.container.load();
const modules = await loadModules(this);
@ -521,7 +519,7 @@ class Strapi {
}
module.exports = options => {
const strapi = new Strapi({ ...options, autoReload: false });
const strapi = new Strapi(options);
global.strapi = strapi;
return strapi;
};

View File

@ -51,7 +51,10 @@ const getEnabledPlugins = async strapi => {
}
const declaredPlugins = {};
const userPluginsConfig = loadConfigFile(join(strapi.dir, 'config', 'plugins.js'));
const userPluginConfigPath = join(strapi.dir, 'config', 'plugins.js');
const userPluginsConfig = existsSync(userPluginConfigPath)
? loadConfigFile(userPluginConfigPath)
: {};
_.forEach(userPluginsConfig, (declaration, pluginName) => {
const cleanPluginName = nameToSlug(pluginName);
declaredPlugins[cleanPluginName] = toDetailedDeclaration(declaration);

View File

@ -1,6 +1,7 @@
'use strict';
const { join } = require('path');
const { existsSync } = require('fs');
const { flatMap, getOr, mapValues, reduce, split } = require('lodash/fp');
const loadConfigFile = require('../app-configuration/load-config-file');
const getEnabledPlugins = require('./get-enabled-plugins');
@ -11,7 +12,10 @@ const parseUID = split('.');
const createPluginProvider = strapi => {
let loaded = false;
const plugins = {};
const userPluginsConfig = loadConfigFile(join(strapi.dir, 'config', 'plugins.js'));
const userPluginConfigPath = join(strapi.dir, 'config', 'plugins.js');
const userPluginsConfig = existsSync(userPluginConfigPath)
? loadConfigFile(userPluginConfigPath)
: {};
const pluginProvider = {};
Object.assign(pluginProvider, {

View File

@ -56,7 +56,7 @@ module.exports = {
types.current = 'morphTo';
}
// We have to find if they are a model linked to this key
// We have to find if there is a model linked to this key
_.forEach(allModels, model => {
_.forIn(model.attributes, attribute => {
if (_.has(attribute, 'via') && attribute.via === attributeName) {
@ -126,7 +126,7 @@ module.exports = {
} else if (_.has(attribute, 'via') && _.has(attribute, 'model')) {
types.current = 'modelD';
// We have to find if they are a model linked to this attributeName
// We have to find if there is a model linked to this attributeName
if (!_.has(models, attribute.model)) {
throw new Error(
`The model \`${_.upperFirst(

View File

@ -16,7 +16,9 @@ module.exports = async (ctx, next) => {
const querystring = ctx.querystring ? `?${ctx.querystring}` : '';
return ctx.redirect(
`${strapi.config.server.url}${strapi.plugins.documentation.config['x-strapi-config'].path}/login${querystring}`
`${strapi.config.server.url}${
strapi.config.get('plugins.documentation.x-strapi-config').path
}/login${querystring}`
);
}
const isValid = await strapi.plugins['users-permissions'].services.user.validatePassword(

View File

@ -25,7 +25,7 @@ module.exports = {
ctx.send({
docVersions,
currentVersion: service.getDocumentationVersion(),
prefix: strapi.plugins.documentation.config['x-strapi-config'].path,
prefix: strapi.config.get('plugins.documentation.x-strapi-config').path,
form,
});
} catch (err) {
@ -106,7 +106,9 @@ module.exports = {
try {
const layout = fs.readFileSync(path.join(__dirname, '..', 'public', 'login.html'));
const filledLayout = _.template(layout)({
actionUrl: `${strapi.config.server.url}${strapi.plugins.documentation.config['x-strapi-config'].path}/login`,
actionUrl: `${strapi.config.server.url}${
strapi.config.get('plugins.documentation.x-strapi-config').path
}/login`,
});
const $ = cheerio.load(filledLayout);
@ -170,7 +172,9 @@ module.exports = {
}
ctx.redirect(
`${strapi.config.server.url}${strapi.plugins.documentation.config['x-strapi-config'].path}${querystring}`
`${strapi.config.server.url}${
strapi.config.get('plugins.documentation.x-strapi-config').path
}${querystring}`
);
},

View File

@ -34,12 +34,11 @@ module.exports = strapi => {
}
// Set prefix to empty to be able to customise it.
if (_.get(strapi.plugins, ['documentation', 'config', 'x-strapi-config', 'path'])) {
if (strapi.config.has('plugins.documentation.x-strapi-config.path')) {
route.config.prefix = '';
route.path = `/${strapi.plugins.documentation.config['x-strapi-config'].path}${route.path}`.replace(
'//',
'/'
);
route.path = `/${strapi.config.get('plugins.documentation.x-strapi-config').path}${
route.path
}`.replace('//', '/');
}
return route;

View File

@ -0,0 +1,5 @@
'use strict';
const bootstrap = require('../config/functions/bootstrap');
module.exports = bootstrap;

View File

@ -0,0 +1,8 @@
'use strict';
const settings = require('../config/settings');
module.exports = {
default: { ...settings },
validator: () => {},
};

View File

@ -0,0 +1,7 @@
'use strict';
const documentation = require('../../controllers/Documentation');
module.exports = {
documentation,
};

View File

@ -0,0 +1,7 @@
'use strict';
const documentation = require('../../middlewares/documentation');
module.exports = {
documentation,
};

View File

@ -0,0 +1,7 @@
'use strict';
const index = require('../../config/policies/index');
module.exports = {
index,
};

View File

@ -0,0 +1,5 @@
'use strict';
const routes = require('../../config/routes');
module.exports = routes.routes;

View File

@ -0,0 +1,7 @@
'use strict';
const documentation = require('../../services/Documentation');
module.exports = {
documentation,
};

View File

@ -30,7 +30,7 @@ const customComparator = (value1, value2) => {
}
};
module.exports = {
module.exports = ({ strapi }) => ({
areObjectsEquals: function(obj1, obj2) {
// stringify to remove nested empty objects
return customIsEqual(this.cleanObject(obj1), this.cleanObject(obj2));
@ -879,7 +879,7 @@ module.exports = {
},
};
const { generateDefaultResponse } = strapi.plugins.documentation.config['x-strapi-config'];
const { generateDefaultResponse } = strapi.config.get('plugins.documentation.x-strapi-config');
if (generateDefaultResponse) {
response.default = {
@ -940,7 +940,7 @@ module.exports = {
},
};
const { generateDefaultResponse } = strapi.plugins.documentation.config['x-strapi-config'];
const { generateDefaultResponse } = strapi.config.get('plugins.documentation.x-strapi-config');
if (generateDefaultResponse) {
response.default = {
@ -1414,7 +1414,7 @@ module.exports = {
* Retrieve the plugin's configuration version
*/
getDocumentationVersion: () => {
const version = strapi.plugins['documentation'].config.info.version;
const version = strapi.config.get('plugins.documentation.info.version');
return version;
},
@ -1637,7 +1637,9 @@ module.exports = {
* @returns {Boolean}
*/
isPluginDocumentationNeeded: function(pluginName) {
const { pluginsForWhichToGenerateDoc } = strapi.plugins.documentation.config['x-strapi-config'];
const { pluginsForWhichToGenerateDoc } = strapi.config.get(
'plugins.documentation.x-strapi-config'
);
if (
Array.isArray(pluginsForWhichToGenerateDoc) &&
!pluginsForWhichToGenerateDoc.includes(pluginName)
@ -1860,4 +1862,4 @@ module.exports = {
return forms;
},
};
});

View File

@ -1,19 +1,21 @@
'use strict';
module.exports = (/* strapi, config */) => {
const bootstrap = require('./server/bootstrap');
const policies = require('./server/policies');
const services = require('./server/services');
const routes = require('./server/routes');
const controllers = require('./server/controllers');
const middlewares = require('./server/middlewares');
const config = require('./server/config');
module.exports = () => {
return {
bootstrap: () => {
console.log('documentation BOOTSTRAP');
},
destroy: () => {
console.log('documentation DESTROY');
},
config: {},
routes: [],
controllers: {},
services: () => {},
policies: {},
middlewares: {},
contentTypes: [],
bootstrap,
config,
routes,
controllers,
middlewares,
policies,
services,
};
};

View File

@ -2,12 +2,8 @@
module.exports = (/* strapi, config */) => {
return {
bootstrap: () => {
console.log('graphQL BOOTSTRAP');
},
destroy: () => {
console.log('graphQL DESTROY');
},
bootstrap: () => {},
destroy: () => {},
config: {},
routes: [],
controllers: {},