Merge branch 'master' into patch-1

This commit is contained in:
Alexandre BODIN 2019-06-21 14:14:47 +02:00 committed by GitHub
commit 78cb7fe496
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
65 changed files with 2513 additions and 1999 deletions

6
.gitignore vendored
View File

@ -125,3 +125,9 @@ packages/strapi-generate-new/files/public/
############################
# *.cache
############################
# Visual Studio Code
############################
front-workspace.code-workspace

10
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,10 @@
trigger_deploy:
stage: deploy
script:
- curl -X POST
--form "token=$TRIGGER_TOKEN"
--form "ref=master"
--form "variables[UPSTREAM_COMMIT_SHA]=$CI_COMMIT_SHA"
https://gitlab.com/api/v4/projects/12825884/trigger/pipeline
only:
- develop

View File

@ -8,7 +8,7 @@
<br />
<p align="center">
<a href="https://www.npmjs.org/package/strapi">
<img src="https://img.shields.io/npm/v/strapi/alpha.svg" alt="NPM Version" />
<img src="https://img.shields.io/npm/v/strapi/beta.svg" alt="NPM Version" />
</a>
<a href="https://www.npmjs.org/package/strapi">
<img src="https://img.shields.io/npm/dm/strapi.svg" alt="Monthly download on NPM" />

View File

@ -0,0 +1,48 @@
const sqlite = {
connector: 'strapi-hook-bookshelf',
settings: {
client: 'sqlite',
filename: '.tmp/data.db',
},
options: {
useNullAsDefault: true,
},
};
const postgres = {
connector: 'strapi-hook-bookshelf',
settings: {
client: 'postgres',
database: 'strapi',
username: 'strapi',
password: 'strapi',
port: 5432,
host: 'localhost',
},
options: {},
};
const mongo = {
connector: 'strapi-hook-mongoose',
settings: {
database: 'strapi',
username: 'root',
password: 'strapi',
port: 27017,
host: 'localhost',
},
options: {},
};
const db = {
sqlite,
postgres,
mongo,
};
module.exports = {
defaultConnection: 'default',
connections: {
default: process.env.DB ? db[process.env.DB] || db.sqlite : db.sqlite,
},
};

View File

@ -1,15 +0,0 @@
{
"defaultConnection": "default",
"connections": {
"default": {
"connector": "strapi-hook-bookshelf",
"settings": {
"client": "sqlite",
"filename": ".tmp/data.db"
},
"options": {
"useNullAsDefault": true
}
}
}
}

View File

@ -14,7 +14,7 @@
"name": "Apache 2.0",
"url": "https://www.apache.org/licenses/LICENSE-2.0.html"
},
"x-generation-date": "05/22/2019 6:18:29 PM"
"x-generation-date": "06/18/2019 5:15:23 PM"
},
"x-strapi-config": {
"path": "/documentation",
@ -2917,7 +2917,7 @@
"parameters": []
}
},
"/users/{_id}": {
"/users/{id}": {
"get": {
"deprecated": false,
"description": "Retrieve a single user depending on his id",
@ -2969,7 +2969,7 @@
],
"parameters": [
{
"name": "_id",
"name": "id",
"in": "path",
"description": "",
"deprecated": false,
@ -3031,7 +3031,7 @@
],
"parameters": [
{
"name": "_id",
"name": "id",
"in": "path",
"description": "",
"deprecated": false,
@ -3108,7 +3108,7 @@
],
"parameters": [
{
"name": "_id",
"name": "id",
"in": "path",
"description": "",
"deprecated": false,

View File

@ -895,7 +895,7 @@
"parameters": []
}
},
"/users/{_id}": {
"/users/{id}": {
"get": {
"deprecated": false,
"description": "Retrieve a single user depending on his id",
@ -947,7 +947,7 @@
],
"parameters": [
{
"name": "_id",
"name": "id",
"in": "path",
"description": "",
"deprecated": false,
@ -1009,7 +1009,7 @@
],
"parameters": [
{
"name": "_id",
"name": "id",
"in": "path",
"description": "",
"deprecated": false,
@ -1086,7 +1086,7 @@
],
"parameters": [
{
"name": "_id",
"name": "id",
"in": "path",
"description": "",
"deprecated": false,

View File

@ -1,7 +1,7 @@
{
"name": "getstarted",
"private": true,
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "A Strapi application.",
"scripts": {
"develop": "strapi develop",
@ -14,22 +14,23 @@
"lodash": "^4.17.5",
"pg": "^7.10.0",
"sqlite3": "^4.0.6",
"strapi": "3.0.0-beta.5",
"strapi-admin": "3.0.0-beta.5",
"strapi-hook-bookshelf": "3.0.0-beta.5",
"strapi-hook-knex": "3.0.0-beta.5",
"strapi-middleware-views": "3.0.0-beta.5",
"strapi-plugin-content-manager": "3.0.0-beta.5",
"strapi-plugin-content-type-builder": "3.0.0-beta.5",
"strapi-plugin-documentation": "3.0.0-beta.5",
"strapi-plugin-email": "3.0.0-beta.5",
"strapi-plugin-graphql": "3.0.0-beta.5",
"strapi-plugin-settings-manager": "3.0.0-beta.5",
"strapi-plugin-upload": "3.0.0-beta.5",
"strapi-plugin-users-permissions": "3.0.0-beta.5",
"strapi-provider-email-mailgun": "3.0.0-beta.5",
"strapi-provider-upload-aws-s3": "3.0.0-beta.5",
"strapi-utils": "3.0.0-beta.5"
"strapi": "3.0.0-beta.6",
"strapi-admin": "3.0.0-beta.6",
"strapi-hook-bookshelf": "3.0.0-beta.6",
"strapi-hook-knex": "3.0.0-beta.6",
"strapi-hook-mongoose": "3.0.0-beta.6",
"strapi-middleware-views": "3.0.0-beta.6",
"strapi-plugin-content-manager": "3.0.0-beta.6",
"strapi-plugin-content-type-builder": "3.0.0-beta.6",
"strapi-plugin-documentation": "3.0.0-beta.6",
"strapi-plugin-email": "3.0.0-beta.6",
"strapi-plugin-graphql": "3.0.0-beta.6",
"strapi-plugin-settings-manager": "3.0.0-beta.6",
"strapi-plugin-upload": "3.0.0-beta.6",
"strapi-plugin-users-permissions": "3.0.0-beta.6",
"strapi-provider-email-mailgun": "3.0.0-beta.6",
"strapi-provider-upload-aws-s3": "3.0.0-beta.6",
"strapi-utils": "3.0.0-beta.6"
},
"strapi": {
"uuid": "getstarted"

View File

@ -1,5 +1,5 @@
{
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"packages": [
"packages/*",
"examples/*"

View File

@ -41,7 +41,7 @@
"app.components.HomePage.support.link": "GET YOUR T-SHIRT NOW",
"app.components.HomePage.welcome": "Welcome on board!",
"app.components.HomePage.welcome.again": "Welcome ",
"app.components.HomePage.welcomeBlock.content": "We are happy to have you as one of community member. We are constantly looking for feedback so feel free to send us DM on ",
"app.components.HomePage.welcomeBlock.content": "We are happy to have you as part of the community. We are constantly looking for feedback so feel free to send us DM on ",
"app.components.HomePage.welcomeBlock.content.again": "We hope you are making progress on your project... Feel free to read the latest new about Strapi. We are giving our best to improve the product based on your feedback.",
"app.components.HomePage.welcomeBlock.content.issues": "issues.",
"app.components.HomePage.welcomeBlock.content.raise": " or raise ",

View File

@ -75,8 +75,9 @@
"app.components.ListPluginsPage.description": "Lijst van alle plugins voor dit project",
"app.components.ListPluginsPage.helmet.title": "Alle extensies",
"app.components.ListPluginsPage.title": "Extensies",
"app.components.Logout.profile": "Profil",
"app.components.Logout.logout": "Log ud",
"app.components.Logout.admin": "Manage beheerders",
"app.components.Logout.profile": "Profiel",
"app.components.Logout.logout": "Uitloggen",
"app.components.NotFoundPage.back": "Terug naar home pagina",
"app.components.NotFoundPage.description": "Niets gevonden",
"app.components.Official": "Officieel",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-admin",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Strapi Admin",
"repository": {
"type": "git",
@ -73,8 +73,8 @@
"sanitize.css": "^4.1.0",
"sass-loader": "^7.1.0",
"shelljs": "^0.7.8",
"strapi-helper-plugin": "3.0.0-beta.5",
"strapi-utils": "3.0.0-beta.5",
"strapi-helper-plugin": "3.0.0-beta.6",
"strapi-utils": "3.0.0-beta.6",
"style-loader": "^0.23.1",
"styled-components": "^4.2.0",
"terser-webpack-plugin": "^1.2.3",
@ -102,6 +102,7 @@
"license": "MIT",
"gitHead": "c85658a19b8fef0f3164c19693a45db305dc07a9",
"devDependencies": {
"webpack": "^4.29.6",
"webpack-cli": "^3.3.2",
"webpack-dev-server": "^3.4.1"
}

View File

@ -1,6 +1,6 @@
{
"name": "strapi-generate-api",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Generate an API for a Strapi application.",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-generate-controller",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Generate a controller for a Strapi API.",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-generate-model",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Generate a model for a Strapi API.",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-generate-new",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Generate a new Strapi application.",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-generate-plugin",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Generate an plugin for a Strapi application.",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-generate-policy",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Generate a policy for a Strapi API.",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-generate-service",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Generate a service for a Strapi API.",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-generate",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Master of ceremonies for the Strapi generators.",
"homepage": "http://strapi.io",
"keywords": [
@ -20,7 +20,7 @@
"fs-extra": "^8.0.1",
"lodash": "^4.17.11",
"reportback": "^2.0.2",
"strapi-utils": "3.0.0-beta.5"
"strapi-utils": "3.0.0-beta.6"
},
"author": {
"name": "Strapi team",

View File

@ -41,7 +41,7 @@
"app.components.HomePage.support.link": "GET YOUR T-SHIRT NOW",
"app.components.HomePage.welcome": "Welcome on board!",
"app.components.HomePage.welcome.again": "Welcome ",
"app.components.HomePage.welcomeBlock.content": "We are happy to have you as one of community member. We are constantly looking for feedback so feel free to send us DM on ",
"app.components.HomePage.welcomeBlock.content": "We are happy to have you as part of the community. We are constantly looking for feedback so feel free to send us DM on ",
"app.components.HomePage.welcomeBlock.content.again": "We hope you are making progress on your project... Feel free to read the latest new about Strapi. We are giving our best to improve the product based on your feedback.",
"app.components.HomePage.welcomeBlock.content.issues": "issues.",
"app.components.HomePage.welcomeBlock.content.raise": " or raise ",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-helper-plugin",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Helper for Strapi plugins development",
"files": [
"dist"

View File

@ -1,6 +1,6 @@
{
"name": "strapi-hook-bookshelf",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Bookshelf hook for the Strapi framework",
"homepage": "http://strapi.io",
"keywords": [
@ -21,8 +21,8 @@
"lodash": "^4.17.11",
"pluralize": "^7.0.0",
"rimraf": "^2.6.3",
"strapi-hook-knex": "3.0.0-beta.5",
"strapi-utils": "3.0.0-beta.5"
"strapi-hook-knex": "3.0.0-beta.6",
"strapi-utils": "3.0.0-beta.6"
},
"strapi": {
"dependencies": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-hook-ejs",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "EJS hook for the Strapi framework",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-hook-knex",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Knex hook for the Strapi framework",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-hook-mongoose",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Mongoose hook for the Strapi framework",
"homepage": "http://strapi.io",
"keywords": [
@ -20,7 +20,7 @@
"mongoose-float": "^1.0.4",
"pluralize": "^7.0.0",
"rimraf": "^2.6.3",
"strapi-utils": "3.0.0-beta.5"
"strapi-utils": "3.0.0-beta.6"
},
"author": {
"email": "hi@strapi.io",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-hook-redis",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Redis hook for the Strapi framework",
"homepage": "http://strapi.io",
"keywords": [
@ -19,7 +19,7 @@
"lodash": "^4.17.11",
"rimraf": "^2.6.3",
"stack-trace": "0.0.10",
"strapi-utils": "3.0.0-beta.5"
"strapi-utils": "3.0.0-beta.6"
},
"author": {
"email": "hi@strapi.io",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-middleware-views",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Views middleware to enable server-side rendering for the Strapi framework",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-plugin-content-manager",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "A powerful UI to easily manage your data.",
"strapi": {
"name": "Content Manager",
@ -32,8 +32,8 @@
"redux-immutable": "^4.0.0",
"reselect": "^3.0.1",
"showdown": "^1.9.0",
"strapi-helper-plugin": "3.0.0-beta.5",
"strapi-utils": "3.0.0-beta.5",
"strapi-helper-plugin": "3.0.0-beta.6",
"strapi-utils": "3.0.0-beta.6",
"styled-components": "^4.2.0"
},
"author": {

View File

@ -1,6 +1,6 @@
{
"name": "strapi-plugin-content-type-builder",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Strapi plugin to create content type (API).",
"strapi": {
"name": "Content Type Builder",
@ -28,9 +28,9 @@
"redux": "^4.0.1",
"redux-immutable": "^4.0.0",
"reselect": "^3.0.1",
"strapi-generate": "3.0.0-beta.5",
"strapi-generate-api": "3.0.0-beta.5",
"strapi-helper-plugin": "3.0.0-beta.5"
"strapi-generate": "3.0.0-beta.6",
"strapi-generate-api": "3.0.0-beta.6",
"strapi-helper-plugin": "3.0.0-beta.6"
},
"author": {
"name": "Strapi team",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-plugin-documentation",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "This is the description of the plugin.",
"strapi": {
"name": "Documentation",
@ -33,7 +33,7 @@
"redux": "^4.0.1",
"redux-immutable": "^4.0.0",
"reselect": "^4.0.0",
"strapi-helper-plugin": "3.0.0-beta.5",
"strapi-helper-plugin": "3.0.0-beta.6",
"swagger-ui-dist": "3.22.1"
},
"author": {

View File

@ -1,6 +1,6 @@
{
"name": "strapi-plugin-email",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "This is the description of the plugin.",
"strapi": {
"name": "Email",
@ -12,13 +12,13 @@
"test": "echo \"no tests yet\""
},
"dependencies": {
"strapi-provider-email-sendmail": "3.0.0-beta.5",
"strapi-utils": "3.0.0-beta.5"
"strapi-provider-email-sendmail": "3.0.0-beta.6",
"strapi-utils": "3.0.0-beta.6"
},
"devDependencies": {
"react-copy-to-clipboard": "5.0.1",
"rimraf": "^2.6.3",
"strapi-helper-plugin": "3.0.0-beta.5"
"strapi-helper-plugin": "3.0.0-beta.6"
},
"author": {
"name": "Strapi team",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-plugin-graphql",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "This is the description of the plugin.",
"strapi": {
"name": "graphql",
@ -23,9 +23,10 @@
"graphql-type-long": "^0.1.1",
"koa-compose": "^4.0.0",
"pluralize": "^7.0.0",
"strapi-utils": "3.0.0-beta.5"
"strapi-utils": "3.0.0-beta.6"
},
"devDependencies": {
"koa": "^2.1.0",
"cross-env": "^5.2.0",
"rimraf": "^2.6.3"
},

View File

@ -1,6 +1,6 @@
{
"name": "strapi-plugin-settings-manager",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Strapi plugin to manage settings.",
"strapi": {
"name": "Settings Manager",
@ -27,7 +27,7 @@
"redux": "^4.0.1",
"reselect": "^3.0.1",
"shelljs": "^0.7.8",
"strapi-helper-plugin": "3.0.0-beta.5"
"strapi-helper-plugin": "3.0.0-beta.6"
},
"author": {
"name": "Strapi team",

View File

@ -201,9 +201,7 @@ module.exports = {
`environments.${env}.request.router.prefix`,
null
),
validations: {
required: true,
},
validations: {},
},
],
},

View File

@ -1,6 +1,6 @@
{
"name": "strapi-plugin-upload",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "This is the description of the plugin.",
"strapi": {
"name": "Files Upload",
@ -23,9 +23,9 @@
"react-router-dom": "^5.0.0",
"react-transition-group": "^2.5.0",
"reactstrap": "^5.0.0",
"strapi-helper-plugin": "3.0.0-beta.5",
"strapi-provider-upload-local": "3.0.0-beta.5",
"strapi-utils": "3.0.0-beta.5",
"strapi-helper-plugin": "3.0.0-beta.6",
"strapi-provider-upload-local": "3.0.0-beta.6",
"strapi-utils": "3.0.0-beta.6",
"stream-to-array": "^2.3.0",
"uuid": "^3.2.1"
},

View File

@ -1,64 +1,95 @@
/**
*
* Controller
*
*/
*
* Controller
*
*/
import React from 'react';
import PropTypes from 'prop-types';
import { get, map, some } from 'lodash';
import cn from 'classnames';
import { FormattedMessage } from 'react-intl';
import pluginId from '../../pluginId';
import InputCheckbox from '../InputCheckboxPlugin';
import styles from './styles.scss';
class Controller extends React.Component {
state = { inputSelected: '', checked: false };
state = { inputSelected: '' };
setNewInputSelected = (name) => {
this.setState({ inputSelected: name, checked: false });
}
setNewInputSelected = name => {
this.setState({ inputSelected: name });
};
handleChange = () => {
this.setState({ checked: !this.state.checked });
this.context.selectAllActions(`${this.props.inputNamePath}.controllers.${this.props.name}`, !this.isAllActionsSelected());
}
this.context.selectAllActions(
`${this.props.inputNamePath}.controllers.${this.props.name}`,
!this.areAllActionsSelected()
);
};
isAllActionsSelected = () => !some(this.props.actions, ['enabled', false]);
hasSomeActionsSelected = () => {
const { actions } = this.props;
return Object.keys(actions).some(
action => actions[action].enabled === true
);
};
areAllActionsSelected = () => {
const { actions } = this.props;
return Object.keys(actions).every(
action => actions[action].enabled === true
);
};
render() {
const labelId = this.areAllActionsSelected() ? 'unselectAll' : 'selectAll';
return (
<div className={styles.controller}>
<div className={styles.controllerHeader}>
<div>{this.props.name}</div>
<div className={styles.separator}></div>
<div className={styles.separator} />
<div>
<div className={cn(styles.inputCheckbox)}>
<div className="form-check">
<label className={cn('form-check-label', styles.label, this.state.checked ? styles.checked : '')} htmlFor={this.props.name}>
<label
className={cn(
'form-check-label',
styles.label,
this.areAllActionsSelected() && styles.checked,
!this.areAllActionsSelected() &&
this.hasSomeActionsSelected() &&
styles.someChecked
)}
htmlFor={this.props.name}
>
<input
className="form-check-input"
checked={this.state.checked}
checked={this.areAllActionsSelected()}
id={this.props.name}
name={this.props.name}
onChange={this.handleChange}
type="checkbox"
/>
<FormattedMessage id="users-permissions.Controller.selectAll" />
<FormattedMessage id={`${pluginId}.Controller.${labelId}`} />
</label>
</div>
</div>
</div>
</div>
<div className="row">
{map(Object.keys(this.props.actions).sort(), (actionKey) => (
{map(Object.keys(this.props.actions).sort(), actionKey => (
<InputCheckbox
inputSelected={this.state.inputSelected}
isOpen={this.props.isOpen}
key={actionKey}
label={actionKey}
name={`${this.props.inputNamePath}.controllers.${this.props.name}.${actionKey}.enabled`}
name={`${this.props.inputNamePath}.controllers.${
this.props.name
}.${actionKey}.enabled`}
setNewInputSelected={this.setNewInputSelected}
value={get(this.props.actions[actionKey], 'enabled')}
/>

View File

@ -11,6 +11,17 @@
}
}
.someChecked {
&:after {
content: '\f068';
position: absolute;
top: 0px; left: 3px;
font-size: 10px;
font-family: 'FontAwesome';
font-weight: 100;
color: #1C5DE7;
}
}
.controller {
padding: 1px 43px 0 28px;
@ -67,3 +78,4 @@
margin-left: 15px;
background-color: #F6F6F6;
}

View File

@ -1,8 +1,8 @@
/**
*
* Plugins
*
*/
*
* Plugins
*
*/
import React from 'react';
import { FormattedMessage } from 'react-intl';
@ -17,7 +17,7 @@ import styles from './styles.scss';
class Plugins extends React.Component {
state = { pluginSelected: '' };
changePluginSelected = (name) => this.setState({ pluginSelected: name });
changePluginSelected = name => this.setState({ pluginSelected: name });
render() {
return (
@ -31,8 +31,13 @@ class Plugins extends React.Component {
<FormattedMessage id="users-permissions.Plugins.header.description" />
</div>
</div>
<div className={cn(styles.pluginsContainer, !has(this.props.plugins, 'application') && styles.pluginsGradient)}>
{map(Object.keys(this.props.plugins).sort(), (plugin) => (
<div
className={cn(
styles.pluginsContainer,
!has(this.props.plugins, 'application') && styles.pluginsGradient
)}
>
{map(Object.keys(this.props.plugins).sort(), plugin => (
<Plugin
changePluginSelected={this.changePluginSelected}
key={plugin}

View File

@ -48,6 +48,7 @@
"BoundRoute.title": "Bound route to",
"Controller.input.label": "{label} ",
"Controller.selectAll": "Select all",
"Controller.unselectAll": "Unselect all",
"EditForm.inputSelect.description.role": "It will attach the new authenticated user to the selected role.",
"EditForm.inputSelect.durations.description": "Number of hours during which the user can't subscribe.",
"EditForm.inputSelect.durations.label": "Duration",
@ -151,4 +152,4 @@
"notification.success.submit": "Settings have been updated",
"plugin.description.long": "Protect your API with a full authentication process based on JWT. This plugin comes also with an ACL strategy that allows you to manage the permissions between the groups of users.",
"plugin.description.short": "Protect your API with a full authentication process based on JWT"
}
}

View File

@ -48,6 +48,7 @@
"BoundRoute.title": "Route associée à",
"Controller.input.label": "{label} ",
"Controller.selectAll": "Tout cocher",
"Controller.unselectAll": "Tout décocher",
"EditForm.inputSelect.description.role": "Choisissez le rôle qui sera lié aux utilisateurs lors de leur enregistrement.",
"EditForm.inputSelect.durations.description": "Nombre d'heure pendant lesquelles un utilisateur ne peut pas s'inscrire.",
"EditForm.inputSelect.durations.label": "Durée",

View File

@ -317,7 +317,7 @@
},
{
"method": "GET",
"path": "/users/:_id",
"path": "/users/:id",
"handler": "User.findOne",
"config": {
"policies": [],
@ -341,7 +341,7 @@
},
{
"method": "PUT",
"path": "/users/:_id",
"path": "/users/:id",
"handler": "User.update",
"config": {
"policies": [],
@ -356,7 +356,7 @@
},
{
"method": "DELETE",
"path": "/users/:_id",
"path": "/users/:id",
"handler": "User.destroy",
"config": {
"policies": [],

View File

@ -1,6 +1,6 @@
{
"name": "strapi-plugin-users-permissions",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Protect your API with a full-authentication process based on JWT",
"strapi": {
"name": "Roles & Permissions",
@ -32,10 +32,13 @@
"reactstrap": "^5.0.0",
"redux-saga": "^0.16.0",
"request": "^2.83.0",
"strapi-helper-plugin": "3.0.0-beta.5",
"strapi-utils": "3.0.0-beta.5",
"strapi-helper-plugin": "3.0.0-beta.6",
"strapi-utils": "3.0.0-beta.6",
"uuid": "^3.1.0"
},
"devDependencies": {
"koa": "^2.1.0"
},
"author": {
"name": "Strapi team",
"email": "hi@strapi.io",

View File

@ -130,7 +130,7 @@ module.exports = {
},
},
(err, response, body) => {
if (response.statusCode !== 200 || err) {
if (err || response.statusCode !== 200) {
return resolve([]);
}

View File

@ -1,6 +1,6 @@
{
"name": "strapi-provider-email-amazon-ses",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Amazon SES provider for strapi email",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-provider-email-mailgun",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Mailgun provider for strapi email plugin",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-provider-email-sendgrid",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Sendgrid provider for strapi email",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-provider-email-sendmail",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Sendmail provider for strapi email",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-provider-upload-aws-s3",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "AWS S3 provider for strapi upload",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-provider-upload-cloudinary",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Cloudinary provider for strapi upload",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-provider-upload-local",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Local provider for strapi upload",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -1,6 +1,6 @@
{
"name": "strapi-provider-upload-rackspace",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Rackspace provider for strapi upload",
"main": "./lib",
"keywords": [],

View File

@ -1,6 +1,6 @@
{
"name": "strapi-utils",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "Shared utilities for the Strapi packages",
"homepage": "http://strapi.io",
"keywords": [

View File

@ -101,6 +101,7 @@ class Strapi extends EventEmitter {
};
this.fs = createStrapiFs(this);
this.requireProjectBootstrap();
}
requireProjectBootstrap() {
@ -266,8 +267,9 @@ class Strapi extends EventEmitter {
* Handle plugin extensions
*/
// merge extensions config folders
_.mergeWith(this.plugins, extensions.merges, (objValue, srcValue) => {
if (_.isArray(srcValue) && _.isArray(objValue)) {
_.mergeWith(this.plugins, extensions.merges, (objValue, srcValue, key) => {
// concat routes
if (_.isArray(srcValue) && _.isArray(objValue) && key === 'routes') {
return srcValue.concat(objValue);
}
});

View File

@ -4,7 +4,7 @@ const _ = require('lodash');
const { createController, createService } = require('../core-api');
const getURLFromSegments = require('../utils/url-from-segments');
const routerJoi = require('koa-router-joi');
const routerJoi = require('koa-joi-router');
module.exports = function(strapi) {
// Retrieve Strapi version.

View File

@ -0,0 +1,27 @@
const checkReservedFilename = require('../check-reserved-filename');
describe('check-reserved-filename', () => {
const table = [
// matches
['config/functions.json', true],
['config/functions/bootstrapi.js', true],
['config/layout.json', true],
['config/hook.json', true],
['config/middleware.json', true],
['config/environments/test/database.json', true],
['config/environments/development/request.json', true],
['config/environments/production/server.json', true],
['config/environments/staging/response.json', true],
['config/environments/qa/security.json', true],
// dont match
['config/application.json', false],
['config/custom.json', false],
['config/environments/qa/custom.json', false],
['config/environments/qa/other.json', false],
];
test.each(table)('Path %s should return %s', (path, expected) => {
expect(checkReservedFilename(path)).toBe(expected);
});
});

View File

@ -0,0 +1,27 @@
'use strict';
const _ = require('lodash');
const minimatch = require('minimatch');
const envMatcher = new minimatch.Minimatch(
'config/environments/*/+(request|database|server|security|response).+(json|js)'
);
// files to load with filename key
const prefixedPaths = [
'functions',
'policies',
'locales',
'hook',
'middleware',
'language',
'queries',
'layout',
];
module.exports = function checkReservedFilenames(file) {
if (envMatcher.match(file)) return true;
return _.some(prefixedPaths, e => file.indexOf(`config/${e}`) >= 0)
? true
: false;
};

View File

@ -1,6 +1,8 @@
const _ = require('lodash');
'use strict';
const loadFiles = require('./load-files');
const requireFileAndParse = require('./require-file-parse');
const checkReservedFilename = require('./check-reserved-filename');
/**
* @param {string} dir - directory from which to load configs
@ -9,38 +11,11 @@ const requireFileAndParse = require('./require-file-parse');
const laodConfigFiles = (dir, pattern = 'config/**/*.+(js|json)') =>
loadFiles(dir, pattern, {
requireFn: requireFileAndParse,
shouldUseFileNameAsKey,
shouldUseFileNameAsKey: checkReservedFilename,
globArgs: {
// used to load .init.json at first startup
dot: true
dot: true,
},
});
const shouldUseFileNameAsKey = file => {
return _.some(prefixedPaths, e => file.indexOf(`config/${e}`) >= 0)
? true
: false;
};
// files to load with filename key
const prefixedPaths = [
...['staging', 'production', 'development'].reduce((acc, env) => {
return acc.concat(
`environments/${env}/database`,
`environments/${env}/security`,
`environments/${env}/request`,
`environments/${env}/response`,
`environments/${env}/server`
);
}, []),
'functions',
'policies',
'locales',
'hook',
'middleware',
'language',
'queries',
'layout',
];
module.exports = laodConfigFiles;

View File

@ -1,3 +1,5 @@
'use strict';
const path = require('path');
const glob = require('./glob');
const _ = require('lodash');

View File

@ -6,7 +6,7 @@
// Public node modules.
const _ = require('lodash');
const routerJoi = require('koa-router-joi');
const routerJoi = require('koa-joi-router');
/**
* Router hook

View File

@ -12,7 +12,7 @@ const finder = require('strapi-utils').finder;
const regex = require('strapi-utils').regex;
const joijson = require('strapi-utils').joijson;
const policyUtils = require('strapi-utils').policy;
const { Joi } = require('koa-router-joi');
const { Joi } = require('koa-joi-router');
module.exports = strapi =>
function routerChecker(value, endpoint, plugin) {
@ -20,13 +20,20 @@ module.exports = strapi =>
const route = regex.detectRoute(endpoint);
// Define controller and action names.
const handler = _.trim(value.handler).split('.');
const controller = plugin
? strapi.plugins[plugin].controllers[handler[0].toLowerCase()]
: strapi.controllers[handler[0].toLowerCase()] ||
strapi.admin.controllers[handler[0].toLowerCase()];
const [controllerName, actionName] = _.trim(value.handler).split('.');
const controllerKey = _.toLower(controllerName);
const action = controller[handler[1]];
let controller;
if (plugin) {
controller = strapi.plugins[plugin].controllers[controllerKey];
} else {
controller =
strapi.controllers[controllerKey] ||
strapi.admin.controllers[controllerKey];
}
const action = controller[actionName];
// Retrieve the API's name where the controller is located
// to access to the right validators

View File

@ -1,6 +1,6 @@
{
"name": "strapi",
"version": "3.0.0-beta.5",
"version": "3.0.0-beta.6",
"description": "An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MongoDB, MySQL, MariaDB, PostgreSQL, SQLite",
"homepage": "http://strapi.io",
"directories": {
@ -31,13 +31,14 @@
"koa-favicon": "^2.0.0",
"koa-i18n": "^2.1.0",
"koa-ip": "^1.0.0",
"koa-joi-router": "^6.0.0",
"koa-locale": "~1.3.0",
"koa-lusca": "~2.2.0",
"koa-qs": "^2.0.0",
"koa-router-joi": "^1.0.1",
"koa-session": "^5.5.1",
"koa-static": "^4.0.1",
"lodash": "^4.17.5",
"minimatch": "^3.0.4",
"node-fetch": "^1.7.3",
"node-machine-id": "^1.1.10",
"node-schedule": "^1.2.0",
@ -46,15 +47,15 @@
"resolve-cwd": "^3.0.0",
"rimraf": "^2.6.2",
"shelljs": "^0.8.3",
"strapi-generate": "3.0.0-beta.5",
"strapi-generate-api": "3.0.0-beta.5",
"strapi-generate-controller": "3.0.0-beta.5",
"strapi-generate-model": "3.0.0-beta.5",
"strapi-generate-new": "3.0.0-beta.5",
"strapi-generate-plugin": "3.0.0-beta.5",
"strapi-generate-policy": "3.0.0-beta.5",
"strapi-generate-service": "3.0.0-beta.5",
"strapi-utils": "3.0.0-beta.5"
"strapi-generate": "3.0.0-beta.6",
"strapi-generate-api": "3.0.0-beta.6",
"strapi-generate-controller": "3.0.0-beta.6",
"strapi-generate-model": "3.0.0-beta.6",
"strapi-generate-new": "3.0.0-beta.6",
"strapi-generate-plugin": "3.0.0-beta.6",
"strapi-generate-policy": "3.0.0-beta.6",
"strapi-generate-service": "3.0.0-beta.6",
"strapi-utils": "3.0.0-beta.6"
},
"scripts": {
"test": "jest --verbose",

View File

@ -41,7 +41,7 @@
"app.components.HomePage.support.link": "GET YOUR T-SHIRT NOW",
"app.components.HomePage.welcome": "Welcome on board!",
"app.components.HomePage.welcome.again": "Welcome ",
"app.components.HomePage.welcomeBlock.content": "We are happy to have you as one of community member. We are constantly looking for feedback so feel free to send us DM on ",
"app.components.HomePage.welcomeBlock.content": "We are happy to have you as part of the community. We are constantly looking for feedback so feel free to send us DM on ",
"app.components.HomePage.welcomeBlock.content.again": "We hope you are making progress on your project... Feel free to read the latest new about Strapi. We are giving our best to improve the product based on your feedback.",
"app.components.HomePage.welcomeBlock.content.issues": "issues.",
"app.components.HomePage.welcomeBlock.content.raise": " or raise ",

3445
yarn.lock

File diff suppressed because it is too large Load Diff