diff --git a/packages/strapi-generate-new/lib/after.js b/packages/strapi-generate-new/lib/after.js index fd67d70c13..ac39ac30a1 100755 --- a/packages/strapi-generate-new/lib/after.js +++ b/packages/strapi-generate-new/lib/after.js @@ -83,7 +83,7 @@ module.exports = (scope, cb) => { // Install default plugins and link dependencies. function pluginsInstallation() { // Define the list of default plugins. - const defaultPlugins = ['settings-manager', 'content-type-builder', 'content-manager']; + const defaultPlugins = ['settings-manager', 'content-type-builder', 'content-manager', 'users-permissions']; // Install each plugin. defaultPlugins.forEach(defaultPlugin => { diff --git a/packages/strapi-helper-plugin/package.json b/packages/strapi-helper-plugin/package.json index ec1a6d6a78..7a5c07b5d8 100755 --- a/packages/strapi-helper-plugin/package.json +++ b/packages/strapi-helper-plugin/package.json @@ -115,4 +115,4 @@ "webpack-hot-middleware": "^2.18.2", "whatwg-fetch": "^2.0.3" } -} \ No newline at end of file +} diff --git a/packages/strapi-plugin-users-permissions/.editorconfig b/packages/strapi-plugin-users-permissions/.editorconfig new file mode 100755 index 0000000000..d4eed8406b --- /dev/null +++ b/packages/strapi-plugin-users-permissions/.editorconfig @@ -0,0 +1,7 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = false +indent_style = space +indent_size = 2 diff --git a/packages/strapi-plugin-users-permissions/.gitattributes b/packages/strapi-plugin-users-permissions/.gitattributes new file mode 100755 index 0000000000..065a11c71d --- /dev/null +++ b/packages/strapi-plugin-users-permissions/.gitattributes @@ -0,0 +1,103 @@ +# From https://github.com/Danimoth/gitattributes/blob/master/Web.gitattributes + +# Handle line endings automatically for files detected as text +# and leave all files detected as binary untouched. +* text=auto + +# +# The above will handle all files NOT found below +# + +# +## These files are text and should be normalized (Convert crlf => lf) +# + +# source code +*.php text +*.css text +*.sass text +*.scss text +*.less text +*.styl text +*.js text eol=lf +*.coffee text +*.json text +*.htm text +*.html text +*.xml text +*.svg text +*.txt text +*.ini text +*.inc text +*.pl text +*.rb text +*.py text +*.scm text +*.sql text +*.sh text +*.bat text + +# templates +*.ejs text +*.hbt text +*.jade text +*.haml text +*.hbs text +*.dot text +*.tmpl text +*.phtml text + +# git config +.gitattributes text +.gitignore text +.gitconfig text + +# code analysis config +.jshintrc text +.jscsrc text +.jshintignore text +.csslintrc text + +# misc config +*.yaml text +*.yml text +.editorconfig text + +# build config +*.npmignore text +*.bowerrc text + +# Heroku +Procfile text +.slugignore text + +# Documentation +*.md text +LICENSE text +AUTHORS text + + +# +## These files are binary and should be left untouched +# + +# (binary is a macro for -text -diff) +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.ico binary +*.mov binary +*.mp4 binary +*.mp3 binary +*.flv binary +*.fla binary +*.swf binary +*.gz binary +*.zip binary +*.7z binary +*.ttf binary +*.eot binary +*.woff binary +*.pyc binary +*.pdf binary diff --git a/packages/strapi-plugin-users-permissions/.gitignore b/packages/strapi-plugin-users-permissions/.gitignore new file mode 100755 index 0000000000..5d06c054ed --- /dev/null +++ b/packages/strapi-plugin-users-permissions/.gitignore @@ -0,0 +1,10 @@ +# Don't check auto-generated stuff into git +coverage +build +node_modules +stats.json + +# Cruft +.DS_Store +npm-debug.log +.idea diff --git a/packages/strapi-plugin-users-permissions/README.md b/packages/strapi-plugin-users-permissions/README.md new file mode 100755 index 0000000000..6f2fd987e1 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/README.md @@ -0,0 +1 @@ +# Strapi plugin \ No newline at end of file diff --git a/packages/strapi-plugin-users-permissions/admin/src/components/Button/index.js b/packages/strapi-plugin-users-permissions/admin/src/components/Button/index.js new file mode 100755 index 0000000000..7388afdae2 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/components/Button/index.js @@ -0,0 +1,27 @@ +/** + * + * Button + * + */ + +import React from 'react'; +import PropTypes from 'prop-types'; + +import styles from './styles.scss'; + +class Button extends React.Component { + // eslint-disable-line react/prefer-stateless-function + render() { + return ( + + ); + } +} + +Button.propTypes = { + label: PropTypes.string.isRequired, +}; + +export default Button; diff --git a/packages/strapi-plugin-users-permissions/admin/src/components/Button/styles.scss b/packages/strapi-plugin-users-permissions/admin/src/components/Button/styles.scss new file mode 100755 index 0000000000..db859bffea --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/components/Button/styles.scss @@ -0,0 +1,3 @@ +.button { + +} diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/actions.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/actions.js new file mode 100755 index 0000000000..a5002ad023 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/App/actions.js @@ -0,0 +1,5 @@ +/* + * + * App actions + * + */ diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/constants.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/constants.js new file mode 100755 index 0000000000..f62c609507 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/App/constants.js @@ -0,0 +1,5 @@ +/* + * + * App constants + * + */ diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/index.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/index.js new file mode 100755 index 0000000000..ce6e346282 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/App/index.js @@ -0,0 +1,59 @@ +/** + * + * This component is the skeleton around the actual pages, and should only + * contain code that should be seen on all pages. (e.g. navigation bar) + * + */ + +import React from 'react'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; +import { createStructuredSelector } from 'reselect'; +import { Switch, Route } from 'react-router-dom'; +import { bindActionCreators, compose } from 'redux'; + +// Utils +import { pluginId } from 'app'; + +// Containers +import HomePage from 'containers/HomePage'; +import NotFoundPage from 'containers/NotFoundPage'; + +class App extends React.Component { + render() { + return ( +
+ + + + +
+ ); + } +} + +App.contextTypes = { + plugins: PropTypes.object, + router: PropTypes.object.isRequired, + updatePlugin: PropTypes.func, +}; + +App.propTypes = { + history: PropTypes.object.isRequired, +}; + +export function mapDispatchToProps(dispatch) { + return bindActionCreators( + {}, + dispatch, + ); +} + +const mapStateToProps = createStructuredSelector({}); + +// Wrap the component to inject dispatch and state into it +const withConnect = connect(mapStateToProps, mapDispatchToProps); + +export default compose( + withConnect, +)(App); diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/reducer.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/reducer.js new file mode 100755 index 0000000000..38026c39cd --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/App/reducer.js @@ -0,0 +1,18 @@ +/* + * + * App reducer + * + */ + +import { fromJS } from 'immutable'; + +const initialState = fromJS({}); + +function appReducer(state = initialState, action) { + switch (action.type) { + default: + return state; + } +} + +export default appReducer; diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/App/selectors.js b/packages/strapi-plugin-users-permissions/admin/src/containers/App/selectors.js new file mode 100755 index 0000000000..2393a073cd --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/App/selectors.js @@ -0,0 +1,9 @@ +// import { createSelector } from 'reselect'; + +/** + * Direct selector to the list state domain + */ + +// const selectGlobalDomain = () => state => state.get('global'); + +export {}; diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/actions.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/actions.js new file mode 100755 index 0000000000..233d030606 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/actions.js @@ -0,0 +1,13 @@ +/* + * + * HomePage actions + * + */ + +import { DEFAULT_ACTION } from './constants'; + +export function defaultAction() { + return { + type: DEFAULT_ACTION, + }; +} diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/constants.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/constants.js new file mode 100755 index 0000000000..3686db5138 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/constants.js @@ -0,0 +1,7 @@ +/* + * + * HomePage constants + * + */ + +export const DEFAULT_ACTION = 'HomePage/DEFAULT_ACTION'; diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/index.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/index.js new file mode 100755 index 0000000000..e55bfef860 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/index.js @@ -0,0 +1,65 @@ +/* + * + * HomePage + * + */ + +import React from 'react'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; +import { createStructuredSelector } from 'reselect'; +import { injectIntl } from 'react-intl'; +import { bindActionCreators, compose } from 'redux'; + +import injectReducer from 'utils/injectReducer'; +import injectSaga from 'utils/injectSaga'; + +// Selectors +import selectHomePage from './selectors'; + +// Styles +import styles from './styles.scss'; + +import reducer from './reducer'; +import saga from './saga'; + +export class HomePage extends React.Component { + render() { + return ( +
+
+ ); + } +} + +HomePage.contextTypes = { + router: PropTypes.object, +}; + +HomePage.propTypes = { + // homePage: PropTypes.object, +}; + +function mapDispatchToProps(dispatch) { + return bindActionCreators( + { + // Your actions here + }, + dispatch, + ); +} + +const mapStateToProps = createStructuredSelector({ + homePage: selectHomePage(), +}); + +const withConnect = connect(mapStateToProps, mapDispatchToProps); + +const withReducer = injectReducer({ key: 'homePage', reducer }); +const withSaga = injectSaga({ key: 'homePage', saga }); + +export default compose( + withReducer, + withSaga, + withConnect, +)(injectIntl(HomePage)); diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/reducer.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/reducer.js new file mode 100755 index 0000000000..554a71e0e4 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/reducer.js @@ -0,0 +1,22 @@ +/* + * + * HomePage reducer + * + */ + +import { fromJS } from 'immutable'; + +import { DEFAULT_ACTION } from './constants'; + +const initialState = fromJS({}); + +function homePageReducer(state = initialState, action) { + switch (action.type) { + case DEFAULT_ACTION: + return state; + default: + return state; + } +} + +export default homePageReducer; diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/saga.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/saga.js new file mode 100755 index 0000000000..b7e6203def --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/saga.js @@ -0,0 +1,9 @@ +// import { LOCATION_CHANGE } from 'react-router-redux'; +// import { takeLatest, put, fork, take, cancel } from 'redux-saga/effects'; + +// Individual exports for testing +export function* defaultSaga() { +} + +// All sagas to be loaded +export default defaultSaga; diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/selectors.js b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/selectors.js new file mode 100755 index 0000000000..cf3f854ff7 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/selectors.js @@ -0,0 +1,17 @@ +import { createSelector } from 'reselect'; + +/** + * Direct selector to the homePage state domain + */ +const selectHomePageDomain = () => state => state.get('homePage'); + +/** + * Default selector used by HomePage + */ + +const selectHomePage = () => createSelector( + selectHomePageDomain(), + (substate) => substate.toJS(), +); + +export default selectHomePage; diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/styles.scss b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/styles.scss new file mode 100755 index 0000000000..abd13152b4 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/HomePage/styles.scss @@ -0,0 +1,3 @@ +.homePage { + +} diff --git a/packages/strapi-plugin-users-permissions/admin/src/containers/NotFoundPage/index.js b/packages/strapi-plugin-users-permissions/admin/src/containers/NotFoundPage/index.js new file mode 100755 index 0000000000..8ca6fd2190 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/containers/NotFoundPage/index.js @@ -0,0 +1,20 @@ +/** + * NotFoundPage + * + * This is the page we show when the user visits a url that doesn't have a route + * + * NOTE: while this component should technically be a stateless functional + * component (SFC), hot reloading does not currently support SFCs. If hot + * reloading is not a neccessity for you then you can refactor it and remove + * the linting exception. + */ + +import React from 'react'; + +import NotFound from 'components/NotFound'; + +export default class NotFoundPage extends React.Component { + render() { + return ; + } +} diff --git a/packages/strapi-plugin-users-permissions/admin/src/translations/en.json b/packages/strapi-plugin-users-permissions/admin/src/translations/en.json new file mode 100755 index 0000000000..50c563b3fd --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/translations/en.json @@ -0,0 +1,3 @@ +{ + "plugin.description": "Protect your API with a full-authentication process" +} diff --git a/packages/strapi-plugin-users-permissions/admin/src/translations/fr.json b/packages/strapi-plugin-users-permissions/admin/src/translations/fr.json new file mode 100755 index 0000000000..4d4724f699 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/admin/src/translations/fr.json @@ -0,0 +1,3 @@ +{ + "plugin.description": "Protegez votre API avec un système d'authentification complet" +} diff --git a/packages/strapi-plugin-users-permissions/config/routes.json b/packages/strapi-plugin-users-permissions/config/routes.json new file mode 100644 index 0000000000..4d376a246e --- /dev/null +++ b/packages/strapi-plugin-users-permissions/config/routes.json @@ -0,0 +1,12 @@ +{ + "routes": [ + { + "method": "GET", + "path": "/", + "handler": "UsersPermissions.index", + "config": { + "policies": [] + } + } + ] +} diff --git a/packages/strapi-plugin-users-permissions/controllers/UsersPermissions.js b/packages/strapi-plugin-users-permissions/controllers/UsersPermissions.js new file mode 100644 index 0000000000..bd42a32f65 --- /dev/null +++ b/packages/strapi-plugin-users-permissions/controllers/UsersPermissions.js @@ -0,0 +1,25 @@ +'use strict'; + +/** + * UsersPermissions.js controller + * + * @description: A set of functions called "actions" of the `users-permissions` plugin. + */ + +module.exports = { + + /** + * Default action. + * + * @return {Object} + */ + + index: async (ctx) => { + // Add your own logic here. + + // Send 200 `ok` + ctx.send({ + message: 'ok' + }); + } +}; diff --git a/packages/strapi-plugin-users-permissions/package.json b/packages/strapi-plugin-users-permissions/package.json new file mode 100644 index 0000000000..1836d375fe --- /dev/null +++ b/packages/strapi-plugin-users-permissions/package.json @@ -0,0 +1,62 @@ +{ + "name": "strapi-plugin-users-permissions", + "version": "0.0.0", + "description": "This is the description of the plugin.", + "strapi": { + "name": "Auth & Permissions", + "icon": "users", + "description": "users-permissions.plugin.description" + }, + "scripts": { + "analyze:clean": "rimraf stats.json", + "preanalyze": "npm run analyze:clean", + "analyze": "node node_modules/strapi-helper-plugin/lib/internals/scripts/analyze.js", + "prebuild": "npm run build:clean && npm run test", + "build": "cross-env NODE_ENV=production webpack --config node_modules/strapi-helper-plugin/lib/internals/webpack/webpack.prod.babel.js --color -p --progress", + "build:clean": "rimraf admin/build", + "start": "cross-env NODE_ENV=development node node_modules/strapi-helper-plugin/lib/server", + "generate": "plop --plopfile node_modules/strapi-helper-plugin/lib/internals/generators/index.js", + "lint": "eslint --ignore-path .gitignore --config node_modules/strapi-helper-plugin/lib/internals/eslint/.eslintrc.json admin", + "pretest": "npm run lint", + "prettier": "prettier --single-quote --trailing-comma es5 --write \"{admin,__{tests,mocks}__}/**/*.js\"", + "test": "echo Tests are not implemented.", + "prepublish": "npm run build", + "postinstall": "node node_modules/strapi-helper-plugin/lib/internals/scripts/postinstall.js" + }, + "dependencies": {}, + "devDependencies": { + "cross-env": "^5.1.1", + "eslint": "^4.10.0", + "eslint-config-airbnb": "^15.1.0", + "eslint-config-airbnb-base": "^11.3.2", + "eslint-config-prettier": "^2.7.0", + "eslint-import-resolver-webpack": "^0.8.3", + "eslint-plugin-babel": "^4.1.2", + "eslint-plugin-import": "^2.8.0", + "eslint-plugin-jsx-a11y": "^6.0.2", + "eslint-plugin-react": "^7.4.0", + "eslint-plugin-redux-saga": "^0.4.0", + "plop": "^1.9.0", + "prettier": "^1.7.4", + "rimraf": "^2.6.2", + "strapi-helper-plugin": "3.0.0-alpha.6.4", + "webpack": "^3.8.1" + }, + "author": { + "name": "A Strapi developer", + "email": "", + "url": "" + }, + "maintainers": [ + { + "name": "A Strapi developer", + "email": "", + "url": "" + } + ], + "engines": { + "node": ">= 7.0.0", + "npm": ">= 3.0.0" + }, + "license": "MIT" +} diff --git a/packages/strapi-plugin-users-permissions/services/UsersPermissions.js b/packages/strapi-plugin-users-permissions/services/UsersPermissions.js new file mode 100644 index 0000000000..9162354fba --- /dev/null +++ b/packages/strapi-plugin-users-permissions/services/UsersPermissions.js @@ -0,0 +1,11 @@ +'use strict'; + +/** + * UsersPermissions.js service + * + * @description: A set of functions similar to controller's actions to avoid code duplication. + */ + +module.exports = { + +};