Merge branch 'master' into fix/input-checkbox-behavior

This commit is contained in:
Christos Malliaridis 2020-06-17 10:53:33 +02:00 committed by GitHub
commit 00b1c7571a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
68 changed files with 304 additions and 194 deletions

View File

@ -52,7 +52,7 @@ The core team will review your pull request and will either merge it, request ch
## Contribution Prerequisites
- You have [Node](https://nodejs.org/en/) at v10.x.x only and [Yarn](https://yarnpkg.com/en/) at v1.2.0+.
- You have [Node](https://nodejs.org/en/) at v10.10.0+ only and [Yarn](https://yarnpkg.com/en/) at v1.2.0+.
- You are familiar with Git.
## Development Workflow

View File

@ -100,7 +100,7 @@ Complete installation requirements can be found in the documentation under <a hr
**Node:**
- NodeJS >= 10.x
- NodeJS >= 10.10
- NPM >= 6.x
**Database:**

View File

@ -341,7 +341,7 @@ xhr.send(
::: tab "One-to-Many" id="one-to-many"
One-to-Many relationships are useful when an entry can be liked to multiple entries of another Content Type. And an entry of the other Content Type can be linked to only one entry.
One-to-Many relationships are useful when an entry can be linked to multiple entries of another Content Type. And an entry of the other Content Type can be linked to only one entry.
#### Example
@ -400,7 +400,7 @@ xhr.send(
::: tab "Many-to-Many" id="many-to-many"
Many-to-Many relationships are useful when an entry can be liked to multiple entries of another Content Type. And an entry of the other Content Type can be linked to many entries.
Many-to-Many relationships are useful when an entry can be linked to multiple entries of another Content Type. And an entry of the other Content Type can be linked to many entries.
#### Example

View File

@ -20,7 +20,7 @@ module.exports = {
enabled: false,
},
admin: {
path: '/dashboard',
url: '/dashboard',
},
};
```

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 103 103" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;fill:fff">
<g transform="matrix(1,0,0,1,-469.827,-182.266)">
<g id="Icon" transform="matrix(0.672861,0,0,0.672861,438.989,27.7667)">
<circle cx="122.367" cy="306.152" r="73.563" style="fill:#3498DB;"/>
<clipPath id="_clip1">
<circle cx="122.367" cy="306.152" r="73.563"/>
</clipPath>
<g clip-path="url(#_clip1)">
<g transform="matrix(1.55283,0,0,1.55283,-66.5904,101.019)">
<g transform="matrix(0.146503,0,0,0.15211,81.614,98.6353)">
<path d="M85.551,183.291C85.551,128.882 102.812,88.234 135.453,61.494C166.928,35.708 212.88,22.79 270.112,23.514C328.331,24.245 374.014,37.487 405.1,63.019C437.585,89.699 454.581,130.12 454.581,185.182L454.385,299.127L465.87,287.662L393.91,287.662L405.395,299.147L405.395,214.64L405.37,214.262C405.253,212.503 405.182,210.523 405.084,206.73C404.776,194.814 404.565,190.027 403.813,182.495C402.737,171.714 400.852,161.708 397.84,152.132C391.076,130.625 379.053,112.815 360.448,99.724C338.827,84.512 309.329,76.514 271.083,76.514C232.573,76.514 202.721,84.545 180.754,99.789C161.792,112.947 149.442,130.896 142.568,152.426C139.23,162.883 137.286,173.837 136.402,185.436C135.768,193.755 135.712,200.667 135.953,211.011C135.957,211.188 136.001,213.041 136.013,213.552C136.033,214.451 136.047,215.151 136.058,215.785L136.056,215.6L136.056,299.147L147.541,287.662L74.066,287.662L85.551,299.147L85.551,183.291ZM62.581,183.291L62.581,310.632L159.026,310.632L159.026,215.6L159.025,215.414C159.013,214.721 158.998,213.974 158.977,213.029C158.965,212.506 158.921,210.643 158.917,210.476C158.692,200.834 158.743,194.564 159.306,187.182C160.062,177.255 161.699,168.028 164.45,159.412C169.858,142.472 179.291,128.762 193.849,118.66C211.673,106.291 236.977,99.484 271.083,99.484C304.881,99.484 329.785,106.236 347.23,118.51C361.438,128.508 370.598,142.076 375.928,159.023C378.426,166.966 380.026,175.461 380.956,184.777C381.633,191.558 381.828,195.975 382.122,207.324C382.228,211.423 382.307,213.611 382.45,215.778L382.425,215.02L382.425,310.632L477.335,310.632L477.355,299.167L477.551,185.201C477.551,123.576 457.784,76.564 419.679,45.268C384.065,16.018 333.419,1.337 270.402,0.546C140.797,-1.094 62.581,62.983 62.581,183.291Z" style="fill-rule:nonzero;" fill="#fff"/>
</g>
<g transform="matrix(0.224865,0,0,0.22949,50.577,55.9129)">
<path d="M492.019,420.805C492.019,392.917 468.912,370.275 440.45,370.275L184.447,370.275C155.985,370.275 132.878,392.917 132.878,420.805L132.878,572.108C132.878,599.996 155.985,622.637 184.447,622.637L440.45,622.637C468.912,622.637 492.019,599.996 492.019,572.108L492.019,420.805Z" fill="#fff"/>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -153,6 +153,7 @@ The session doesn't work with `mongo` as a client. The package that we should us
- [`csp`](https://en.wikipedia.org/wiki/Content_Security_Policy)
- `enabled` (boolean): Enable or disable CSP to avoid Cross Site Scripting (XSS) and data injection attacks.
- `policy` (string): Configures the `Content-Security-Policy` header. If not specified uses default value. Default value: `undefined`.
- [`p3p`](https://en.wikipedia.org/wiki/P3P)
- `enabled` (boolean): Enable or disable p3p.
- [`hsts`](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security)

View File

@ -1168,5 +1168,5 @@ module.exports = {
```
::: tip
When calling a lifecycle function directly, you will need to make sur you call it with the expected parameters.
When calling a lifecycle function directly, you will need to make sure you call it with the expected parameters.
:::

View File

@ -2,8 +2,7 @@
## What is a webhook
A webhook is a way for an application to notify other applications that an event occurred.
Using a webhook is a good way to tell third party providers to start some processing (CI, build, deployment ...).
Webhook is a construct used by an application to notify other applications that an event occurred. More precisely, webhook is a user-defined HTTP callback. Using a webhook is a good way to tell third party providers to start some processing (CI, build, deployment ...).
The way a webhook works is by delivering information to a receiving application through HTTP requests (typically POST requests).

View File

@ -176,7 +176,7 @@ module.exports = ({ env }) => ({
settings: {
client: 'postgres',
host: env('DATABASE_HOST', '127.0.0.1'),
port: env.int('DATABASE_PORT', 27017),
port: env.int('DATABASE_PORT', 5432),
database: env('DATABASE_NAME', 'strapi'),
username: env('DATABASE_USERNAME', ''),
password: env('DATABASE_PASSWORD', ''),

View File

@ -77,7 +77,7 @@ Additional guides for optional software additions that compliment or improve the
<div>
<InstallLink link="../deployment/caddy-proxy">
<template #icon>
<svg width="100%" height="100%" viewBox="0 0 103 103" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;fill:fff"><g transform="matrix(1,0,0,1,-469.827,-182.266)"><g id="Icon" transform="matrix(0.672861,0,0,0.672861,438.989,27.7667)"><circle cx="122.367" cy="306.152" r="73.563" style="fill:3498DB"/><clipPath id="_clip1"><circle cx="122.367" cy="306.152" r="73.563"/></clipPath><g clip-path="url(#_clip1)"><g transform="matrix(1.55283,0,0,1.55283,-66.5904,101.019)"><g transform="matrix(0.146503,0,0,0.15211,81.614,98.6353)"><path d="M85.551,183.291C85.551,128.882 102.812,88.234 135.453,61.494C166.928,35.708 212.88,22.79 270.112,23.514C328.331,24.245 374.014,37.487 405.1,63.019C437.585,89.699 454.581,130.12 454.581,185.182L454.385,299.127L465.87,287.662L393.91,287.662L405.395,299.147L405.395,214.64L405.37,214.262C405.253,212.503 405.182,210.523 405.084,206.73C404.776,194.814 404.565,190.027 403.813,182.495C402.737,171.714 400.852,161.708 397.84,152.132C391.076,130.625 379.053,112.815 360.448,99.724C338.827,84.512 309.329,76.514 271.083,76.514C232.573,76.514 202.721,84.545 180.754,99.789C161.792,112.947 149.442,130.896 142.568,152.426C139.23,162.883 137.286,173.837 136.402,185.436C135.768,193.755 135.712,200.667 135.953,211.011C135.957,211.188 136.001,213.041 136.013,213.552C136.033,214.451 136.047,215.151 136.058,215.785L136.056,215.6L136.056,299.147L147.541,287.662L74.066,287.662L85.551,299.147L85.551,183.291ZM62.581,183.291L62.581,310.632L159.026,310.632L159.026,215.6L159.025,215.414C159.013,214.721 158.998,213.974 158.977,213.029C158.965,212.506 158.921,210.643 158.917,210.476C158.692,200.834 158.743,194.564 159.306,187.182C160.062,177.255 161.699,168.028 164.45,159.412C169.858,142.472 179.291,128.762 193.849,118.66C211.673,106.291 236.977,99.484 271.083,99.484C304.881,99.484 329.785,106.236 347.23,118.51C361.438,128.508 370.598,142.076 375.928,159.023C378.426,166.966 380.026,175.461 380.956,184.777C381.633,191.558 381.828,195.975 382.122,207.324C382.228,211.423 382.307,213.611 382.45,215.778L382.425,215.02L382.425,310.632L477.335,310.632L477.355,299.167L477.551,185.201C477.551,123.576 457.784,76.564 419.679,45.268C384.065,16.018 333.419,1.337 270.402,0.546C140.797,-1.094 62.581,62.983 62.581,183.291Z" style="fill-rule:nonzero;"/></g><g transform="matrix(0.224865,0,0,0.22949,50.577,55.9129)"><path d="M492.019,420.805C492.019,392.917 468.912,370.275 440.45,370.275L184.447,370.275C155.985,370.275 132.878,392.917 132.878,420.805L132.878,572.108C132.878,599.996 155.985,622.637 184.447,622.637L440.45,622.637C468.912,622.637 492.019,599.996 492.019,572.108L492.019,420.805Z"/></g></g></g></g></g></svg>
<img src="../assets/deployment/caddy-monotone.svg"/>
</template>
<template #title>Caddy</template>
<template #description>

View File

@ -8,7 +8,7 @@ This guide could also be used to setup an Axios client instance.
## Installation
First you will have to install the client package in your application by running one of the following command.
First you will have to install the client package in your application by running one of the following commands:
:::: tabs
@ -26,7 +26,7 @@ First you will have to install the client package in your application by running
To init the client, we will use the [hooks system](../concepts/hooks.md). Hooks let you add new features in your Strapi application.
Hooks are loaded one time, at the server start.
Hooks are loaded once at server start.
Lets create our GitHub hook.
@ -107,7 +107,7 @@ And here it is.
You can now use `strapi.services.github` everywhere in your code to use the GitHub client.
To simply test if it works, lets update the `bootstrap.js` function to log your GitHub profile.
To simply test if it works, let's update the `bootstrap.js` function to log your GitHub profile.
**Path —** `./config/functions/bootstrap.js`

View File

@ -21,7 +21,7 @@ Let's consider you don't want to expose the chef's email for privacy reasons.
To enforce this rule we will customize the action that fetches all restaurants and remove the email from the returned data.
To follow the example your will have to create a content type `restaurant` and add the following field definition:
To follow the example you will have to create a content type `restaurant` and add the following field definition:
- `string` attribute named `name`
- `text` attribute named `description`

View File

@ -84,12 +84,20 @@ module.exports = {
const slugify = require('slugify');
module.exports = {
beforeSave: async (model, attrs, options) => {
if (options.method === 'insert' && attrs.title) {
model.set('slug', slugify(attrs.title));
} else if (options.method === 'update' && attrs.title) {
attrs.slug = slugify(attrs.title);
}
/**
* Triggered before user creation.
*/
lifecycles: {
async beforeCreate(data) {
if (data.title) {
data.slug = slugify(data.title, {lower: true});
}
},
async beforeUpdate(params, data) {
if (data.title) {
data.slug = slugify(data.title, {lower: true});
}
},
},
};
```

View File

@ -1,7 +1,7 @@
{
"name": "getstarted",
"private": true,
"version": "3.0.1",
"version": "3.0.2",
"description": "A Strapi application.",
"scripts": {
"develop": "strapi develop",
@ -15,28 +15,28 @@
"mysql": "^2.17.1",
"pg": "^7.10.0",
"sqlite3": "^4.0.6",
"strapi": "3.0.1",
"strapi-admin": "3.0.1",
"strapi-connector-bookshelf": "3.0.1",
"strapi-connector-mongoose": "3.0.1",
"strapi-middleware-views": "3.0.0",
"strapi-plugin-content-manager": "3.0.1",
"strapi-plugin-content-type-builder": "3.0.1",
"strapi-plugin-documentation": "3.0.1",
"strapi-plugin-email": "3.0.1",
"strapi-plugin-graphql": "3.0.1",
"strapi-plugin-upload": "3.0.1",
"strapi-plugin-users-permissions": "3.0.1",
"strapi-provider-email-mailgun": "3.0.1",
"strapi-provider-upload-aws-s3": "3.0.0",
"strapi-provider-upload-cloudinary": "3.0.0",
"strapi-utils": "3.0.1"
"strapi": "3.0.2",
"strapi-admin": "3.0.2",
"strapi-connector-bookshelf": "3.0.2",
"strapi-connector-mongoose": "3.0.2",
"strapi-middleware-views": "3.0.2",
"strapi-plugin-content-manager": "3.0.2",
"strapi-plugin-content-type-builder": "3.0.2",
"strapi-plugin-documentation": "3.0.2",
"strapi-plugin-email": "3.0.2",
"strapi-plugin-graphql": "3.0.2",
"strapi-plugin-upload": "3.0.2",
"strapi-plugin-users-permissions": "3.0.2",
"strapi-provider-email-mailgun": "3.0.2",
"strapi-provider-upload-aws-s3": "3.0.2",
"strapi-provider-upload-cloudinary": "3.0.2",
"strapi-utils": "3.0.2"
},
"strapi": {
"uuid": "getstarted"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT"

View File

@ -1,5 +1,5 @@
{
"version": "3.0.1",
"version": "3.0.2",
"packages": [
"packages/*",
"examples/*"

View File

@ -90,7 +90,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "create-strapi-app",
"version": "3.0.1",
"version": "3.0.2",
"description": "Generate a new Strapi application.",
"license": "MIT",
"homepage": "http://strapi.io",
@ -21,7 +21,7 @@
],
"dependencies": {
"commander": "^2.20.0",
"strapi-generate-new": "3.0.1"
"strapi-generate-new": "3.0.2"
},
"scripts": {
"test": "echo \"no tests yet\""
@ -39,7 +39,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
}
}

View File

@ -1,6 +1,6 @@
{
"name": "strapi-admin",
"version": "3.0.1",
"version": "3.0.2",
"description": "Strapi Admin",
"repository": {
"type": "git",
@ -84,8 +84,8 @@
"reselect": "^4.0.0",
"sanitize.css": "^4.1.0",
"shelljs": "^0.7.8",
"strapi-helper-plugin": "3.0.0",
"strapi-utils": "3.0.1",
"strapi-helper-plugin": "3.0.2",
"strapi-utils": "3.0.2",
"style-loader": "^0.23.1",
"styled-components": "^5.0.0",
"terser-webpack-plugin": "^1.2.3",
@ -110,7 +110,7 @@
}
],
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-connector-bookshelf",
"version": "3.0.1",
"version": "3.0.2",
"description": "Bookshelf hook for the Strapi framework",
"homepage": "http://strapi.io",
"keywords": [
@ -22,7 +22,7 @@
"lodash": "^4.17.11",
"pluralize": "^7.0.0",
"rimraf": "3.0.0",
"strapi-utils": "3.0.1"
"strapi-utils": "3.0.2"
},
"peerDependencies": {
"knex": "^0.20.0"
@ -55,7 +55,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-connector-mongoose",
"version": "3.0.1",
"version": "3.0.2",
"description": "Mongoose hook for the Strapi framework",
"homepage": "http://strapi.io",
"keywords": [
@ -21,7 +21,7 @@
"mongoose-long": "^0.2.1",
"pluralize": "^7.0.0",
"semver": "^7.3.2",
"strapi-utils": "3.0.1"
"strapi-utils": "3.0.2"
},
"author": {
"email": "hi@strapi.io",
@ -43,7 +43,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-database",
"version": "3.0.0",
"version": "3.0.2",
"description": "Strapi's database layer",
"homepage": "http://strapi.io",
"main": "./lib/index.js",
@ -23,7 +23,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-generate-api",
"version": "3.0.1",
"version": "3.0.2",
"description": "Generate an API for a Strapi application.",
"homepage": "http://strapi.io",
"keywords": [
@ -15,7 +15,7 @@
"dependencies": {
"lodash": "^4.17.11",
"pluralize": "^7.0.0",
"strapi-utils": "3.0.1"
"strapi-utils": "3.0.2"
},
"scripts": {
"test": "echo \"no tests yet\""
@ -40,7 +40,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-generate-controller",
"version": "3.0.1",
"version": "3.0.2",
"description": "Generate a controller for a Strapi API.",
"homepage": "http://strapi.io",
"keywords": [
@ -15,7 +15,7 @@
},
"dependencies": {
"lodash": "^4.17.11",
"strapi-utils": "3.0.1"
"strapi-utils": "3.0.2"
},
"scripts": {
"test": "echo \"no tests yet\""
@ -40,7 +40,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-generate-model",
"version": "3.0.1",
"version": "3.0.2",
"description": "Generate a model for a Strapi API.",
"homepage": "http://strapi.io",
"keywords": [
@ -16,7 +16,7 @@
"dependencies": {
"lodash": "^4.17.11",
"pluralize": "^7.0.0",
"strapi-utils": "3.0.1"
"strapi-utils": "3.0.2"
},
"scripts": {
"test": "echo \"no tests yet\""
@ -41,7 +41,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-generate-new",
"version": "3.0.1",
"version": "3.0.2",
"description": "Generate a new Strapi application.",
"homepage": "http://strapi.io",
"keywords": [
@ -47,7 +47,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-generate-plugin",
"version": "3.0.1",
"version": "3.0.2",
"description": "Generate an plugin for a Strapi application.",
"homepage": "http://strapi.io",
"keywords": [
@ -15,7 +15,7 @@
"dependencies": {
"fs-extra": "^8.0.1",
"lodash": "^4.17.11",
"strapi-utils": "3.0.1"
"strapi-utils": "3.0.2"
},
"scripts": {
"test": "echo \"no tests yet\""
@ -40,7 +40,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-generate-policy",
"version": "3.0.1",
"version": "3.0.2",
"description": "Generate a policy for a Strapi API.",
"homepage": "http://strapi.io",
"keywords": [
@ -15,7 +15,7 @@
},
"dependencies": {
"lodash": "^4.17.11",
"strapi-utils": "3.0.1"
"strapi-utils": "3.0.2"
},
"scripts": {
"test": "echo \"no tests yet\""
@ -40,7 +40,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-generate-service",
"version": "3.0.1",
"version": "3.0.2",
"description": "Generate a service for a Strapi API.",
"homepage": "http://strapi.io",
"keywords": [
@ -15,7 +15,7 @@
},
"dependencies": {
"lodash": "^4.17.11",
"strapi-utils": "3.0.1"
"strapi-utils": "3.0.2"
},
"scripts": {
"test": "echo \"no tests yet\""
@ -40,7 +40,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-generate",
"version": "3.0.1",
"version": "3.0.2",
"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.1"
"strapi-utils": "3.0.2"
},
"author": {
"name": "Strapi team",
@ -42,7 +42,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,12 +1,12 @@
{
"name": "strapi-helper-plugin",
"version": "3.0.0",
"version": "3.0.2",
"description": "Helper for Strapi plugins development",
"files": [
"dist"
],
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"author": {

View File

@ -1,6 +1,6 @@
{
"name": "strapi-hook-ejs",
"version": "3.0.0",
"version": "3.0.2",
"description": "EJS hook for the Strapi framework",
"homepage": "http://strapi.io",
"keywords": [
@ -39,7 +39,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-hook-redis",
"version": "3.0.1",
"version": "3.0.2",
"description": "Redis hook for the Strapi framework",
"homepage": "http://strapi.io",
"keywords": [
@ -19,7 +19,7 @@
"lodash": "^4.17.11",
"rimraf": "3.0.0",
"stack-trace": "0.0.10",
"strapi-utils": "3.0.1"
"strapi-utils": "3.0.2"
},
"author": {
"email": "hi@strapi.io",
@ -41,7 +41,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-middleware-views",
"version": "3.0.0",
"version": "3.0.2",
"description": "Views middleware to enable server-side rendering for the Strapi framework",
"homepage": "http://strapi.io",
"keywords": [
@ -39,7 +39,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -142,7 +142,9 @@ const DynamicZone = ({ max, min, name }) => {
}}
/>
{hasRequiredError && !isOpen && !hasMaxError && (
<div className="error-label">Component is required</div>
<div className="error-label">
<FormattedMessage id={`${pluginId}.components.DynamicZone.required`} />
</div>
)}
{hasMaxError && !isOpen && (
<div className="error-label">

View File

@ -10,6 +10,7 @@
"components.DraggableAttr.edit": "Click to edit",
"components.DynamicZone.add-compo": "Add to {componentName}",
"components.DynamicZone.pick-compo": "Pick one component",
"components.DynamicZone.required": "Component is required",
"components.DynamicZone.missing.singular": "There is {count} missing component",
"components.DynamicZone.missing.plural": "There is {count} missing components",
"components.EmptyAttributesBlock.button": "Go to settings page",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-plugin-content-manager",
"version": "3.0.1",
"version": "3.0.2",
"description": "A powerful UI to easily manage your data.",
"strapi": {
"name": "Content Manager",
@ -27,8 +27,8 @@
"redux-immutable": "^4.0.0",
"reselect": "^4.0.0",
"showdown": "^1.9.0",
"strapi-helper-plugin": "3.0.0",
"strapi-utils": "3.0.1",
"strapi-helper-plugin": "3.0.2",
"strapi-utils": "3.0.2",
"yup": "^0.27.0"
},
"author": {
@ -48,7 +48,7 @@
"url": "git://github.com/strapi/strapi.git"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -211,6 +211,7 @@ const forms = {
return yup.object().shape({
name: yup
.string()
.isAllowed(getTrad('error.attributeName.reserved-name'), reservedNames.attributes)
.unique(errorsTrads.unique, alreadyTakenAttributes)
.matches(ENUM_REGEX, errorsTrads.regex)
.required(errorsTrads.required),
@ -291,11 +292,14 @@ const forms = {
return yup.object().shape({
name: yup
.string()
.isAllowed(getTrad('error.attributeName.reserved-name'), reservedNames.attributes)
.matches(NAME_REGEX, errorsTrads.regex)
.unique(errorsTrads.unique, alreadyTakenAttributes)
.required(errorsTrads.required),
targetAttribute: yup.lazy(() => {
let schema = yup.string();
let schema = yup
.string()
.isAllowed(getTrad('error.attributeName.reserved-name'), reservedNames.attributes);
if (!['oneWay', 'manyWay'].includes(dataToValidate.nature)) {
schema = schema.matches(NAME_REGEX, errorsTrads.regex);

View File

@ -1,6 +1,6 @@
{
"name": "strapi-plugin-content-type-builder",
"version": "3.0.1",
"version": "3.0.2",
"description": "Strapi plugin to create content type (API).",
"strapi": {
"name": "Content Type Builder",
@ -23,10 +23,10 @@
"redux": "^4.0.1",
"redux-immutable": "^4.0.0",
"reselect": "^4.0.0",
"strapi-generate": "3.0.1",
"strapi-generate-api": "3.0.1",
"strapi-helper-plugin": "3.0.0",
"strapi-utils": "3.0.1",
"strapi-generate": "3.0.2",
"strapi-generate-api": "3.0.2",
"strapi-helper-plugin": "3.0.2",
"strapi-utils": "3.0.2",
"yup": "^0.27.0"
},
"author": {
@ -46,7 +46,7 @@
"url": "git://github.com/strapi/strapi.git"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-plugin-documentation",
"version": "3.0.1",
"version": "3.0.2",
"description": "This is the description of the plugin.",
"strapi": {
"name": "Documentation",
@ -29,7 +29,7 @@
"redux": "^4.0.1",
"redux-immutable": "^4.0.0",
"reselect": "^4.0.0",
"strapi-helper-plugin": "3.0.0",
"strapi-helper-plugin": "3.0.2",
"swagger-ui-dist": "3.24.3"
},
"author": {
@ -66,7 +66,7 @@
}
],
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-plugin-email",
"version": "3.0.1",
"version": "3.0.2",
"description": "This is the description of the plugin.",
"strapi": {
"name": "Email",
@ -13,12 +13,12 @@
},
"dependencies": {
"lodash": "^4.17.11",
"strapi-provider-email-sendmail": "3.0.1",
"strapi-utils": "3.0.1"
"strapi-provider-email-sendmail": "3.0.2",
"strapi-utils": "3.0.2"
},
"devDependencies": {
"rimraf": "3.0.0",
"strapi-helper-plugin": "3.0.0"
"strapi-helper-plugin": "3.0.2"
},
"author": {
"name": "Strapi team",
@ -37,7 +37,7 @@
"url": "git://github.com/strapi/strapi.git"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -97,6 +97,11 @@ module.exports = strapi => {
context: ctx,
};
},
formatError: err => {
const formatError = _.get(strapi.plugins.graphql, 'config.formatError', null);
return typeof formatError === 'function' ? formatError(err) : err;
},
validationRules: [depthLimit(strapi.plugins.graphql.config.depthLimit)],
tracing: _.get(strapi.plugins.graphql, 'config.tracing', false),
playground: false,

View File

@ -1,6 +1,6 @@
{
"name": "strapi-plugin-graphql",
"version": "3.0.1",
"version": "3.0.2",
"description": "This is the description of the plugin.",
"strapi": {
"name": "graphql",
@ -24,7 +24,7 @@
"koa-compose": "^4.1.0",
"lodash": "4.17.12",
"pluralize": "^7.0.0",
"strapi-utils": "3.0.1"
"strapi-utils": "3.0.2"
},
"devDependencies": {
"cross-env": "^5.2.0",
@ -44,7 +44,7 @@
}
],
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -30,13 +30,13 @@ const buildMutation = (mutationName, config) => {
// custom resolvers
if (_.isFunction(resolver)) {
return async (root, options = {}, graphqlContext) => {
return async (root, options = {}, graphqlContext, info) => {
const ctx = buildMutationContext({ options, graphqlContext });
await policiesMiddleware(ctx);
graphqlContext.context = ctx;
return resolver(root, options, graphqlContext);
return resolver(root, options, graphqlContext, info);
};
}
@ -91,13 +91,13 @@ const buildQuery = (queryName, config) => {
// custom resolvers
if (_.isFunction(resolver)) {
return async (root, options = {}, graphqlContext) => {
return async (root, options = {}, graphqlContext, info) => {
const { ctx, opts } = buildQueryContext({ options, graphqlContext });
await policiesMiddleware(ctx);
graphqlContext.context = ctx;
return resolver(root, opts, graphqlContext);
return resolver(root, opts, graphqlContext, info);
};
}

View File

@ -385,7 +385,7 @@ const InputModalStepper = ({ isOpen, onToggle, noNavigation, onInputMediaChange
onClick={handleReplaceMedia}
style={{ marginRight: 10 }}
>
Replace media
{formatMessage({ id: getTrad('control-card.replace-media') })}
</Button>
<Button

View File

@ -554,7 +554,7 @@ const ModalStepper = ({
onClick={handleReplaceMedia}
style={{ marginRight: 10 }}
>
Replace media
{formatMessage({ id: getTrad('control-card.replace-media') })}
</Button>
<Button

View File

@ -8,6 +8,7 @@
"control-card.crop": "Crop",
"control-card.delete": "Delete",
"control-card.download": "Download",
"control-card.replace-media": "Replace Media",
"control-card.edit": "Edit",
"control-card.save": "Save",
"form.input.label.file-alt": "Alternative text",
@ -71,4 +72,4 @@
"sort.updated_at_desc": "Most recent updates",
"window.confirm.close-modal.files": "Are you sure? You have some files that have not been uploaded yet.",
"window.confirm.close-modal.file": "Are you sure? Your changes will be lost."
}
}

View File

@ -1,6 +1,6 @@
{
"name": "strapi-plugin-upload",
"version": "3.0.1",
"version": "3.0.2",
"description": "This is the description of the plugin.",
"strapi": {
"name": "Media Library",
@ -30,9 +30,9 @@
"react-router-dom": "^5.0.0",
"reactstrap": "8.4.1",
"sharp": "0.24.1",
"strapi-helper-plugin": "3.0.0",
"strapi-provider-upload-local": "3.0.1",
"strapi-utils": "3.0.1",
"strapi-helper-plugin": "3.0.2",
"strapi-provider-upload-local": "3.0.2",
"strapi-utils": "3.0.2",
"stream-to-array": "^2.3.0",
"uuid": "^3.2.1"
},
@ -49,7 +49,7 @@
}
],
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -10,7 +10,7 @@ import { FormattedMessage } from 'react-intl';
import { capitalize, get, includes } from 'lodash';
import { IconLinks } from '@buffetjs/core';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import getTrad from '../../utils/getTrad';
import { PopUpWarning } from 'strapi-helper-plugin';
import en from '../../translations/en.json';
import { HomePageContext } from '../../contexts/HomePage';
@ -93,9 +93,13 @@ class ListRow extends React.Component {
</div>
<div className="col-md-6" style={{ fontWeight: '500' }}>
{get(this.props.values, [get(this.props.item, 'name'), 'enabled']) ? (
<span style={{ color: '#5A9E06' }}>Enabled</span>
<span style={{ color: '#5A9E06' }}>
<FormattedMessage id={getTrad('ListRow.enabled')} />
</span>
) : (
<span style={{ color: '#F64D0A' }}>Disabled</span>
<span style={{ color: '#F64D0A' }}>
<FormattedMessage id={getTrad('ListRow.disabled')} />
</span>
)}
</div>
<div className="col-md-2">

View File

@ -53,6 +53,8 @@
"List.title.providers.enabled.singular": "{number} provider is enabled and",
"List.title.roles.plural": "{number} roles are available",
"List.title.roles.singular": "{number} role is available",
"ListRow.enabled": "Enabled",
"ListRow.disabled": "Disabled",
"Plugin.permissions.application.description": "Define all your project's allowed actions.",
"Plugin.permissions.plugins.description": "Define all allowed actions for the {name} plugin.",
"Plugins.header.description": "Only actions bound by a route are listed below.",

View File

@ -122,7 +122,6 @@ module.exports = async () => {
message: `<p>We heard that you lost your password. Sorry about that!</p>
<p>But dont worry! You can use the following link to reset your password:</p>
<p><%= URL %>?code=<%= TOKEN %></p>
<p>Thanks.</p>`,

View File

@ -22,7 +22,7 @@ module.exports = async (ctx, next) => {
{
interval: 1 * 60 * 1000,
max: 5,
prefixKey: `${ctx.request.url}:${ctx.request.ip}`,
prefixKey: `${ctx.request.path}:${ctx.request.ip}`,
message,
},
strapi.plugins['users-permissions'].config.ratelimit

View File

@ -249,8 +249,7 @@ module.exports = {
.get();
const [requestPath] = ctx.request.url.split('?');
const provider =
process.platform === 'win32' ? requestPath.split('\\')[2] : requestPath.split('/')[2];
const provider = requestPath.split('/')[2];
if (!_.get(grantConfig[provider], 'enabled')) {
return ctx.badRequest(null, 'This provider is disabled.');
@ -315,16 +314,13 @@ module.exports = {
key: 'advanced',
});
const userInfo = _.omit(user, ['password', 'resetPasswordToken', 'role', 'provider']);
settings.message = await strapi.plugins['users-permissions'].services.userspermissions.template(
settings.message,
{
URL: advanced.email_reset_password,
USER: _.omit(user.toJSON ? user.toJSON() : user, [
'password',
'resetPasswordToken',
'role',
'provider',
]),
USER: userInfo,
TOKEN: resetPasswordToken,
}
);
@ -332,12 +328,7 @@ module.exports = {
settings.object = await strapi.plugins['users-permissions'].services.userspermissions.template(
settings.object,
{
USER: _.omit(user.toJSON ? user.toJSON() : user, [
'password',
'resetPasswordToken',
'role',
'provider',
]),
USER: userInfo,
}
);
@ -647,16 +638,13 @@ module.exports = {
}
});
const userInfo = _.omit(user, ['password', 'resetPasswordToken', 'role', 'provider']);
settings.message = await strapi.plugins['users-permissions'].services.userspermissions.template(
settings.message,
{
URL: `${strapi.config.server.url}/auth/email-confirmation`,
USER: _.omit(user.toJSON ? user.toJSON() : user, [
'password',
'resetPasswordToken',
'role',
'provider',
]),
USER: userInfo,
CODE: jwt,
}
);
@ -664,12 +652,7 @@ module.exports = {
settings.object = await strapi.plugins['users-permissions'].services.userspermissions.template(
settings.object,
{
USER: _.omit(user.toJSON ? user.toJSON() : user, [
'password',
'resetPasswordToken',
'role',
'provider',
]),
USER: userInfo,
}
);

View File

@ -7,6 +7,7 @@
*/
const _ = require('lodash');
const { isValidEmailTemplate } = require('./validation/email-template');
module.exports = {
/**
@ -196,6 +197,16 @@ module.exports = {
return ctx.badRequest(null, [{ messages: [{ id: 'Cannot be empty' }] }]);
}
const emailTemplates = ctx.request.body['email-templates'];
for (let key in emailTemplates) {
const template = emailTemplates[key].options.message;
if (!isValidEmailTemplate(template)) {
return ctx.badRequest(null, [{ messages: [{ id: 'Invalid template' }] }]);
}
}
await strapi
.store({
environment: '',
@ -203,7 +214,7 @@ module.exports = {
name: 'users-permissions',
key: 'email',
})
.set({ value: ctx.request.body['email-templates'] });
.set({ value: emailTemplates });
ctx.send({ ok: true });
},

View File

@ -0,0 +1,28 @@
'use strict';
const { isValidEmailTemplate } = require('../email-template');
describe('isValidEmailTemplate', () => {
test('Accepts one valid pattern', () => {
expect(isValidEmailTemplate('<%= CODE %>')).toBe(true);
expect(isValidEmailTemplate('<%=CODE%>')).toBe(true);
});
test('Refuses invalid patterns', () => {
expect(isValidEmailTemplate('<%- CODE %>')).toBe(false);
expect(isValidEmailTemplate('<% CODE %>')).toBe(false);
expect(isValidEmailTemplate('<%= <% CODE %> %>')).toBe(false);
expect(isValidEmailTemplate('<%- <% CODE %> %>')).toBe(false);
expect(isValidEmailTemplate('${ <% CODE %> }')).toBe(false);
expect(isValidEmailTemplate('<%CODE%>')).toBe(false);
expect(isValidEmailTemplate('${CODE}')).toBe(false);
expect(isValidEmailTemplate('${ CODE }')).toBe(false);
});
test('Fails on non authorized keys', () => {
expect(isValidEmailTemplate('<% random expression %>')).toBe(false);
expect(isValidEmailTemplate('<% random expression }%>')).toBe(false);
expect(isValidEmailTemplate('<% some.var.azdazd %>')).toBe(false);
expect(isValidEmailTemplate('<% function() %>')).toBe(false);
});
});

View File

@ -0,0 +1,40 @@
'use strict';
const _ = require('lodash');
const invalidPatternsRegexes = [/<%[^=]([^<>%]*)%>/m, /\${([^{}]*)}/m];
const authorizedKeys = ['URL', 'CODE', 'USER', 'USER.email', 'USER.username', 'TOKEN'];
const matchAll = (pattern, src) => {
const matches = [];
let match;
const regexPatternWithGlobal = RegExp(pattern, 'g');
while ((match = regexPatternWithGlobal.exec(src))) {
const [, group] = match;
matches.push(_.trim(group));
}
return matches;
};
const isValidEmailTemplate = template => {
for (let reg of invalidPatternsRegexes) {
if (reg.test(template)) {
return false;
}
}
const matches = matchAll(/<%=([^<>%=]*)%>/, template);
for (const match of matches) {
if (!authorizedKeys.includes(match)) {
return false;
}
}
return true;
};
module.exports = {
isValidEmailTemplate,
};

View File

@ -1,6 +1,6 @@
{
"name": "strapi-plugin-users-permissions",
"version": "3.0.1",
"version": "3.0.2",
"description": "Protect your API with a full-authentication process based on JWT",
"strapi": {
"name": "Roles & Permissions",
@ -29,8 +29,8 @@
"reactstrap": "8.4.1",
"redux-saga": "^0.16.0",
"request": "^2.83.0",
"strapi-helper-plugin": "3.0.0",
"strapi-utils": "3.0.1",
"strapi-helper-plugin": "3.0.2",
"strapi-utils": "3.0.2",
"uuid": "^3.1.0"
},
"devDependencies": {
@ -53,7 +53,7 @@
"url": "git://github.com/strapi/strapi.git"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -22,7 +22,7 @@ const DEFAULT_PERMISSIONS = [
type: 'users-permissions',
roleType: 'public',
},
{ action: 'changepassword', controller: 'auth', type: 'users-permissions', roleType: 'public' },
{ action: 'resetPassword', controller: 'auth', type: 'users-permissions', roleType: 'public' },
{ action: 'init', controller: 'userspermissions', type: null, roleType: null },
{ action: 'me', controller: 'user', type: 'users-permissions', roleType: null },
{ action: 'autoreload', controller: null, type: null, roleType: null },

View File

@ -1,6 +1,6 @@
{
"name": "strapi-provider-email-amazon-ses",
"version": "3.0.1",
"version": "3.0.2",
"description": "Amazon SES provider for strapi email",
"homepage": "http://strapi.io",
"keywords": [
@ -15,7 +15,7 @@
"main": "./lib",
"dependencies": {
"node-ses": "^3.0.0",
"strapi-utils": "3.0.1"
"strapi-utils": "3.0.2"
},
"author": {
"email": "nikolay@tsenkov.net",
@ -36,7 +36,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-provider-email-mailgun",
"version": "3.0.1",
"version": "3.0.2",
"description": "Mailgun provider for strapi email plugin",
"homepage": "http://strapi.io",
"keywords": [
@ -14,7 +14,7 @@
"main": "./lib",
"dependencies": {
"mailgun-js": "0.22.0",
"strapi-utils": "3.0.1"
"strapi-utils": "3.0.2"
},
"strapi": {
"isProvider": true
@ -39,7 +39,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-provider-email-sendgrid",
"version": "3.0.1",
"version": "3.0.2",
"description": "Sendgrid provider for strapi email",
"homepage": "http://strapi.io",
"keywords": [
@ -14,7 +14,7 @@
"main": "./lib",
"dependencies": {
"@sendgrid/mail": "6.4.0",
"strapi-utils": "3.0.1"
"strapi-utils": "3.0.2"
},
"strapi": {
"isProvider": true
@ -39,7 +39,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-provider-email-sendmail",
"version": "3.0.1",
"version": "3.0.2",
"description": "Sendmail provider for strapi email",
"homepage": "http://strapi.io",
"keywords": [
@ -13,7 +13,7 @@
"main": "./lib",
"dependencies": {
"sendmail": "^1.6.1",
"strapi-utils": "3.0.1"
"strapi-utils": "3.0.2"
},
"strapi": {
"isProvider": true
@ -38,7 +38,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-provider-upload-aws-s3",
"version": "3.0.0",
"version": "3.0.2",
"description": "AWS S3 provider for strapi upload",
"homepage": "http://strapi.io",
"keywords": [
@ -40,7 +40,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-provider-upload-cloudinary",
"version": "3.0.0",
"version": "3.0.2",
"description": "Cloudinary provider for strapi upload",
"homepage": "http://strapi.io",
"keywords": [
@ -39,7 +39,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-provider-upload-local",
"version": "3.0.1",
"version": "3.0.2",
"description": "Local provider for strapi upload",
"homepage": "http://strapi.io",
"keywords": [
@ -34,7 +34,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi-provider-upload-rackspace",
"version": "3.0.0",
"version": "3.0.2",
"description": "Rackspace provider for strapi upload",
"main": "./lib",
"keywords": [],
@ -14,7 +14,7 @@
"streamifier": "^0.1.1"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"gitHead": "c85658a19b8fef0f3164c19693a45db305dc07a9"

View File

@ -1,6 +1,6 @@
{
"name": "strapi-utils",
"version": "3.0.1",
"version": "3.0.2",
"description": "Shared utilities for the Strapi packages",
"homepage": "http://strapi.io",
"keywords": [
@ -42,7 +42,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -1,6 +1,6 @@
{
"name": "strapi",
"version": "3.0.1",
"version": "3.0.2",
"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": {
@ -52,16 +52,16 @@
"resolve-cwd": "^3.0.0",
"rimraf": "^2.6.2",
"shelljs": "^0.8.3",
"strapi-database": "3.0.0",
"strapi-generate": "3.0.1",
"strapi-generate-api": "3.0.1",
"strapi-generate-controller": "3.0.1",
"strapi-generate-model": "3.0.1",
"strapi-generate-new": "3.0.1",
"strapi-generate-plugin": "3.0.1",
"strapi-generate-policy": "3.0.1",
"strapi-generate-service": "3.0.1",
"strapi-utils": "3.0.1"
"strapi-database": "3.0.2",
"strapi-generate": "3.0.2",
"strapi-generate-api": "3.0.2",
"strapi-generate-controller": "3.0.2",
"strapi-generate-model": "3.0.2",
"strapi-generate-new": "3.0.2",
"strapi-generate-plugin": "3.0.2",
"strapi-generate-policy": "3.0.2",
"strapi-generate-service": "3.0.2",
"strapi-utils": "3.0.2"
},
"scripts": {
"postinstall": "node lib/utils/success.js"
@ -86,7 +86,7 @@
"url": "https://github.com/strapi/strapi/issues"
},
"engines": {
"node": ">=10.0.0",
"node": ">=10.10.0",
"npm": ">=6.0.0"
},
"license": "MIT",

View File

@ -11,7 +11,7 @@ echo "Please enter the version you want to publish"
read -r version
# publish packages
./node_modules/.bin/lerna publish --no-push --dist-tag latest --exact "$version"
./node_modules/.bin/lerna publish --no-push --force-publish --dist-tag latest --exact "$version"
# push master branch
git push origin master