From fa190b4b3e2dde9413d14810e2ffd5b7ff00e7d0 Mon Sep 17 00:00:00 2001 From: Bel Date: Mon, 21 Nov 2016 18:30:12 -0300 Subject: [PATCH 1/7] CoralLogo added to Coral-UI as SVG. and Admin session --- .gitignore | 1 + .idea/vcs.xml | 6 +++ client/coral-admin/src/actions/auth.js | 16 +++++++ .../coral-admin/src/components/ui/Header.css | 4 ++ .../coral-admin/src/components/ui/Header.js | 4 +- client/coral-admin/src/components/ui/Logo.css | 18 ++++++++ client/coral-admin/src/components/ui/Logo.js | 12 ++++++ client/coral-admin/src/constants/auth.js | 7 ++++ .../src/containers/LayoutContainer.js | 18 ++++++-- client/coral-admin/src/reducers/auth.js | 26 ++++++++++++ client/coral-admin/src/reducers/index.js | 4 +- client/coral-framework/actions/auth.js | 17 +++++++- client/coral-framework/constants/auth.js | 4 ++ client/coral-framework/reducers/auth.js | 11 ++++- .../containers/SignInContainer.js | 8 +++- client/coral-ui/components/CoralLogo.js | 42 +++++++++++++++++++ client/coral-ui/index.js | 1 + 17 files changed, 189 insertions(+), 10 deletions(-) create mode 100644 .idea/vcs.xml create mode 100644 client/coral-admin/src/actions/auth.js create mode 100644 client/coral-admin/src/components/ui/Logo.css create mode 100644 client/coral-admin/src/components/ui/Logo.js create mode 100644 client/coral-admin/src/constants/auth.js create mode 100644 client/coral-admin/src/reducers/auth.js create mode 100644 client/coral-ui/components/CoralLogo.js diff --git a/.gitignore b/.gitignore index eff774450..3b59ff2f5 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ dist/coral-admin/bundle.js *.iml .env gaba.cfg +.idea/ diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..94a25f7f4 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/client/coral-admin/src/actions/auth.js b/client/coral-admin/src/actions/auth.js new file mode 100644 index 000000000..c7643cc08 --- /dev/null +++ b/client/coral-admin/src/actions/auth.js @@ -0,0 +1,16 @@ +import * as actions from '../constants/auth'; +import {base, handleResp, getInit} from '../helpers/response'; + +// Check Login + +const checkLoginRequest = () => ({type: actions.CHECK_LOGIN_REQUEST}); +const checkLoginSuccess = user => ({type: actions.CHECK_LOGIN_SUCCESS, user}); +const checkLoginFailure = error => ({type: actions.CHECK_LOGIN_FAILURE, error}); + +export const checkLogin = () => dispatch => { + dispatch(checkLoginRequest()); + fetch(`${base}/auth`, getInit('GET')) + .then(handleResp) + .then(user => dispatch(checkLoginSuccess(user))) + .catch(error => dispatch(checkLoginFailure(error))); +}; diff --git a/client/coral-admin/src/components/ui/Header.css b/client/coral-admin/src/components/ui/Header.css index e69de29bb..b80dca496 100644 --- a/client/coral-admin/src/components/ui/Header.css +++ b/client/coral-admin/src/components/ui/Header.css @@ -0,0 +1,4 @@ +.header { + background: #505050; + overflow: hidden; +} diff --git a/client/coral-admin/src/components/ui/Header.js b/client/coral-admin/src/components/ui/Header.js index 2e0f77b6e..4a9c09de5 100644 --- a/client/coral-admin/src/components/ui/Header.js +++ b/client/coral-admin/src/components/ui/Header.js @@ -4,9 +4,11 @@ import {Link} from 'react-router'; import styles from './Header.css'; import I18n from 'coral-framework/modules/i18n/i18n'; import translations from '../../translations.json'; +import {Logo} from './Logo'; export default () => ( -
+
+ {lang.t('configure.moderate')} {lang.t('configure.community')} diff --git a/client/coral-admin/src/components/ui/Logo.css b/client/coral-admin/src/components/ui/Logo.css new file mode 100644 index 000000000..e764af627 --- /dev/null +++ b/client/coral-admin/src/components/ui/Logo.css @@ -0,0 +1,18 @@ +.logo h1 { + color: #272727; + font-size: 20px; + padding: 0 30px; +} + +.logo span { + display: inline-block; + margin-left: 10px; + font-size: 18px; + vertical-align: middle; +} + +.logo { + background: #E5E5E5; +} + + diff --git a/client/coral-admin/src/components/ui/Logo.js b/client/coral-admin/src/components/ui/Logo.js new file mode 100644 index 000000000..df6c42f26 --- /dev/null +++ b/client/coral-admin/src/components/ui/Logo.js @@ -0,0 +1,12 @@ +import React from 'react'; +import styles from './Logo.css'; +import {CoralLogo} from 'coral-ui'; + +export const Logo = () => ( +
+

+ + Talk +

+
+); diff --git a/client/coral-admin/src/constants/auth.js b/client/coral-admin/src/constants/auth.js new file mode 100644 index 000000000..c6cb6c944 --- /dev/null +++ b/client/coral-admin/src/constants/auth.js @@ -0,0 +1,7 @@ +export const CHECK_LOGIN_REQUEST = 'CHECK_LOGIN_REQUEST'; +export const CHECK_LOGIN_SUCCESS = 'CHECK_LOGIN_SUCCESS'; +export const CHECK_LOGIN_FAILURE = 'CHECK_LOGIN_FAILURE'; + +export const LOGOUT_REQUEST = 'LOGOUT_REQUEST'; +export const LOGOUT_SUCCESS = 'LOGOUT_SUCCESS'; +export const LOGOUT_FAILURE = 'LOGOUT_FAILURE'; diff --git a/client/coral-admin/src/containers/LayoutContainer.js b/client/coral-admin/src/containers/LayoutContainer.js index 921af251d..429f2cc4d 100644 --- a/client/coral-admin/src/containers/LayoutContainer.js +++ b/client/coral-admin/src/containers/LayoutContainer.js @@ -1,9 +1,12 @@ import React, {Component} from 'react'; import {connect} from 'react-redux'; - import {Layout} from '../components/ui/Layout'; +import {checkLogin} from 'coral-framework/actions/auth'; class LayoutContainer extends Component { + componentWillMount () { + this.props.checkLogin(); + } render () { return ; } @@ -11,9 +14,16 @@ class LayoutContainer extends Component { LayoutContainer.propTypes = {}; -const mapStateToProps = () => ({}); +const mapStateToProps = state => ({ + auth: state.auth.toJS() +}); -const mapDispatchToProps = (dispatch) => ({dispatch}); +const mapDispatchToProps = dispatch => ({ + checkLogin: () => dispatch(checkLogin()), +}); -export default connect(mapStateToProps, mapDispatchToProps)(LayoutContainer); +export default connect( + mapStateToProps, + mapDispatchToProps +)(LayoutContainer); diff --git a/client/coral-admin/src/reducers/auth.js b/client/coral-admin/src/reducers/auth.js new file mode 100644 index 000000000..bdb2bb074 --- /dev/null +++ b/client/coral-admin/src/reducers/auth.js @@ -0,0 +1,26 @@ +import {Map} from 'immutable'; +import * as actions from '../constants/auth'; + +const initialState = Map({ + loggedIn: false, + user: null +}); + +export default function auth (state = initialState, action) { + switch (action.type) { + case actions.CHECK_LOGIN_FAILURE: + return state + .set('loggedIn', false) + .set('user', null); + case actions.CHECK_LOGIN_SUCCESS: + return state + .set('loggedIn', true) + .set('user', action.user); + case actions.LOGOUT_SUCCESS: + return state + .set('loggedIn', false) + .set('user', null); + default : + return state; + } +} diff --git a/client/coral-admin/src/reducers/index.js b/client/coral-admin/src/reducers/index.js index 1b29ced69..61029539a 100644 --- a/client/coral-admin/src/reducers/index.js +++ b/client/coral-admin/src/reducers/index.js @@ -2,11 +2,13 @@ import {combineReducers} from 'redux'; import comments from 'reducers/comments'; import settings from 'reducers/settings'; import community from 'reducers/community'; +import auth from 'reducers/auth'; // Combine all reducers into a main one export default combineReducers({ settings, comments, - community + community, + auth }); diff --git a/client/coral-framework/actions/auth.js b/client/coral-framework/actions/auth.js index a1a44611f..360517a32 100644 --- a/client/coral-framework/actions/auth.js +++ b/client/coral-framework/actions/auth.js @@ -19,8 +19,8 @@ export const cleanState = () => ({type: actions.CLEAN_STATE}); // Sign In Actions const signInRequest = () => ({type: actions.FETCH_SIGNIN_REQUEST}); -const signInSuccess = (user) => ({type: actions.FETCH_SIGNIN_SUCCESS, user}); -const signInFailure = (error) => ({type: actions.FETCH_SIGNIN_FAILURE, error}); +const signInSuccess = user => ({type: actions.FETCH_SIGNIN_SUCCESS, user}); +const signInFailure = error => ({type: actions.FETCH_SIGNIN_FAILURE, error}); export const fetchSignIn = (formData) => dispatch => { dispatch(signInRequest()); @@ -114,3 +114,16 @@ export const logout = () => dispatch => { export const validForm = () => ({type: actions.VALID_FORM}); export const invalidForm = error => ({type: actions.INVALID_FORM, error}); +// Check Login + +const checkLoginRequest = () => ({type: actions.CHECK_LOGIN_REQUEST}); +const checkLoginSuccess = user => ({type: actions.CHECK_LOGIN_SUCCESS, user}); +const checkLoginFailure = error => ({type: actions.CHECK_LOGIN_FAILURE, error}); + +export const checkLogin = () => dispatch => { + dispatch(checkLoginRequest()); + fetch(`${base}/auth`, getInit('GET')) + .then(handleResp) + .then(user => dispatch(checkLoginSuccess(user))) + .catch(error => dispatch(checkLoginFailure(error))); +}; diff --git a/client/coral-framework/constants/auth.js b/client/coral-framework/constants/auth.js index a6a2c44f8..07ca2e661 100644 --- a/client/coral-framework/constants/auth.js +++ b/client/coral-framework/constants/auth.js @@ -27,3 +27,7 @@ export const LOGOUT_FAILURE = 'LOGOUT_FAILURE'; export const INVALID_FORM = 'INVALID_FORM'; export const VALID_FORM = 'VALID_FORM'; +export const CHECK_LOGIN_REQUEST = 'CHECK_LOGIN_REQUEST'; +export const CHECK_LOGIN_SUCCESS = 'CHECK_LOGIN_SUCCESS'; +export const CHECK_LOGIN_FAILURE = 'CHECK_LOGIN_FAILURE'; + diff --git a/client/coral-framework/reducers/auth.js b/client/coral-framework/reducers/auth.js index 3e454892f..d0cc698a2 100644 --- a/client/coral-framework/reducers/auth.js +++ b/client/coral-framework/reducers/auth.js @@ -33,6 +33,14 @@ export default function auth (state = initialState, action) { case actions.FETCH_SIGNIN_REQUEST: return state .set('isLoading', true); + case actions.CHECK_LOGIN_FAILURE: + return state + .set('loggedIn', false) + .set('user', null); + case actions.CHECK_LOGIN_SUCCESS: + return state + .set('loggedIn', true) + .set('user', action.user); case actions.FETCH_SIGNIN_SUCCESS: return state .set('loggedIn', true) @@ -40,7 +48,8 @@ export default function auth (state = initialState, action) { case actions.FETCH_SIGNIN_FAILURE: return state .set('isLoading', false) - .set('error', action.error); + .set('error', action.error) + .set('user', null); case actions.FETCH_SIGNIN_FACEBOOK_SUCCESS: return state .set('user', action.user) diff --git a/client/coral-sign-in/containers/SignInContainer.js b/client/coral-sign-in/containers/SignInContainer.js index fc85fd3c4..3e666948a 100644 --- a/client/coral-sign-in/containers/SignInContainer.js +++ b/client/coral-sign-in/containers/SignInContainer.js @@ -18,7 +18,8 @@ import { fetchForgotPassword, facebookCallback, invalidForm, - validForm + validForm, + checkLogin } from '../../coral-framework/actions/auth'; class SignInContainer extends Component { @@ -43,6 +44,10 @@ class SignInContainer extends Component { this.addError = this.addError.bind(this); } + componentWillMount () { + this.props.checkLogin(); + } + componentDidMount() { window.authCallback = this.props.facebookCallback; const {formData} = this.state; @@ -147,6 +152,7 @@ const mapStateToProps = state => ({ }); const mapDispatchToProps = dispatch => ({ + checkLogin: () => dispatch(checkLogin()), facebookCallback: (err, data) => dispatch(facebookCallback(err, data)), fetchSignUp: formData => dispatch(fetchSignUp(formData)), fetchSignIn: formData => dispatch(fetchSignIn(formData)), diff --git a/client/coral-ui/components/CoralLogo.js b/client/coral-ui/components/CoralLogo.js new file mode 100644 index 000000000..f85fd6f2d --- /dev/null +++ b/client/coral-ui/components/CoralLogo.js @@ -0,0 +1,42 @@ +import React, {PropTypes} from 'react'; + +const CoralLogo = ({height = '30px', width = '30px', stroke = '#FFFFFF'}) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +); + +CoralLogo.propTypes = { + height: PropTypes.string, + width: PropTypes.string, + stroke: PropTypes.string +}; + +export default CoralLogo; + diff --git a/client/coral-ui/index.js b/client/coral-ui/index.js index 5116a16dd..8efb5dc7f 100644 --- a/client/coral-ui/index.js +++ b/client/coral-ui/index.js @@ -1 +1,2 @@ export {default as Dialog} from './components/Dialog'; +export {default as CoralLogo} from './components/CoralLogo'; From b74a1bece3f3083f2036622241e3c8cd008d012d Mon Sep 17 00:00:00 2001 From: Bel Date: Tue, 22 Nov 2016 08:10:46 -0300 Subject: [PATCH 2/7] Link Routes --- client/coral-admin/src/components/Header.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/coral-admin/src/components/Header.js b/client/coral-admin/src/components/Header.js index aa3ba6708..311100074 100644 --- a/client/coral-admin/src/components/Header.js +++ b/client/coral-admin/src/components/Header.js @@ -10,14 +10,14 @@ export default (props) => (
- {lang.t('configure.moderate')} - {lang.t('Configure')} + {lang.t('configure.moderate')} + {lang.t('Configure')}
- {lang.t('configure.moderate')} - {lang.t('configure.Configure')} + {lang.t('configure.moderate')} + {lang.t('configure.Configure')} {props.children} From f7daa35c41c792c37c8b5c01024a76b3e16d50ee Mon Sep 17 00:00:00 2001 From: Belen Curcio Date: Tue, 22 Nov 2016 08:32:26 -0300 Subject: [PATCH 3/7] Active Routes --- client/coral-admin/src/AppRouter.js | 2 +- client/coral-admin/src/components/Header.js | 27 ------------------- .../coral-admin/src/components/ui/Header.js | 8 +++--- 3 files changed, 5 insertions(+), 32 deletions(-) delete mode 100644 client/coral-admin/src/components/Header.js diff --git a/client/coral-admin/src/AppRouter.js b/client/coral-admin/src/AppRouter.js index 5d21fc819..a0b43361d 100644 --- a/client/coral-admin/src/AppRouter.js +++ b/client/coral-admin/src/AppRouter.js @@ -8,7 +8,7 @@ import CommunityContainer from 'containers/Community/CommunityContainer'; import LayoutContainer from 'containers/LayoutContainer'; const routes = ( - + diff --git a/client/coral-admin/src/components/Header.js b/client/coral-admin/src/components/Header.js deleted file mode 100644 index 311100074..000000000 --- a/client/coral-admin/src/components/Header.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import {Layout, Navigation, Drawer, Header} from 'react-mdl'; -import {Link} from 'react-router'; -import styles from './Header.css'; -import I18n from 'coral-framework/modules/i18n/i18n'; -import translations from '../translations.json'; - -// App header. If we add a navbar it should be here -export default (props) => ( - -
- - {lang.t('configure.moderate')} - {lang.t('Configure')} - -
- - - {lang.t('configure.moderate')} - {lang.t('configure.Configure')} - - - {props.children} -
-); - -const lang = new I18n(translations); diff --git a/client/coral-admin/src/components/ui/Header.js b/client/coral-admin/src/components/ui/Header.js index 4a9c09de5..af08eb024 100644 --- a/client/coral-admin/src/components/ui/Header.js +++ b/client/coral-admin/src/components/ui/Header.js @@ -1,6 +1,6 @@ import React from 'react'; import {Navigation, Header} from 'react-mdl'; -import {Link} from 'react-router'; +import {Link, IndexLink} from 'react-router'; import styles from './Header.css'; import I18n from 'coral-framework/modules/i18n/i18n'; import translations from '../../translations.json'; @@ -10,9 +10,9 @@ export default () => (
- {lang.t('configure.moderate')} - {lang.t('configure.community')} - {lang.t('configure.configure')} + {lang.t('configure.moderate')} + {lang.t('configure.community')} + {lang.t('configure.configure')} {`v${process.env.VERSION}`} From 6e6681a5532f6e75829fc566b7f7627ed3435271 Mon Sep 17 00:00:00 2001 From: Belen Curcio Date: Tue, 22 Nov 2016 09:08:08 -0300 Subject: [PATCH 4/7] Styles and refactor errors --- client/coral-admin/src/components/Comment.js | 13 +++++++------ .../coral-admin/src/components/CommentList.js | 6 +++--- client/coral-admin/src/components/ui/Header.css | 17 +++++++++++++++++ client/coral-admin/src/components/ui/Header.js | 12 ++++++------ 4 files changed, 33 insertions(+), 15 deletions(-) diff --git a/client/coral-admin/src/components/Comment.js b/client/coral-admin/src/components/Comment.js index 154d68134..1106435b0 100644 --- a/client/coral-admin/src/components/Comment.js +++ b/client/coral-admin/src/components/Comment.js @@ -1,6 +1,6 @@ import React from 'react'; -import {Button, Icon} from 'react-mdl'; +import {FABButton, Icon} from 'react-mdl'; import timeago from 'timeago.js'; import styles from './CommentList.css'; import I18n from 'coral-framework/modules/i18n/i18n'; @@ -14,7 +14,7 @@ export default props => { const links = linkify.getMatches(props.comment.get('body')); return ( -
  • +
  • person @@ -26,12 +26,13 @@ export default props => { {links ? Contains Link : null}
    - {props.actions.map(action => canShowAction(action, props.comment) ? ( - + ) : null)}
    diff --git a/client/coral-admin/src/components/CommentList.js b/client/coral-admin/src/components/CommentList.js index 819de62b0..e4682252d 100644 --- a/client/coral-admin/src/components/CommentList.js +++ b/client/coral-admin/src/components/CommentList.js @@ -112,15 +112,15 @@ export default class CommentList extends React.Component { } render () { - const {singleView, commentIds, comments, hideActive} = this.props; + const {singleView, commentIds, comments, hideActive, key} = this.props; const {active} = this.state; return ( -
      +
        {commentIds.map((commentId, index) => ( { if (el && commentId === active) { this._active = el; } }} - key={`${index }comment`} + key={index} index={index} onClickAction={this.onClickAction} actions={this.props.actions} diff --git a/client/coral-admin/src/components/ui/Header.css b/client/coral-admin/src/components/ui/Header.css index b80dca496..3d4e7dc77 100644 --- a/client/coral-admin/src/components/ui/Header.css +++ b/client/coral-admin/src/components/ui/Header.css @@ -2,3 +2,20 @@ background: #505050; overflow: hidden; } + +.header > div { + position: relative; + padding: 0; + width: 1170px; + margin: 0 auto; +} + +.active { + background: #232323; +} + +.version { + position: absolute; + right: 0; + width: 50px; +} diff --git a/client/coral-admin/src/components/ui/Header.js b/client/coral-admin/src/components/ui/Header.js index af08eb024..7ba88d25a 100644 --- a/client/coral-admin/src/components/ui/Header.js +++ b/client/coral-admin/src/components/ui/Header.js @@ -10,13 +10,13 @@ export default () => (
        - {lang.t('configure.moderate')} - {lang.t('configure.community')} - {lang.t('configure.configure')} - - {`v${process.env.VERSION}`} - + {lang.t('configure.moderate')} + {lang.t('configure.community')} + {lang.t('configure.configure')} +
        + {`v${process.env.VERSION}`} +
        ); From c8d7585e908ba14b51e5225d50f125d579006ba1 Mon Sep 17 00:00:00 2001 From: Belen Curcio Date: Tue, 22 Nov 2016 09:34:46 -0300 Subject: [PATCH 5/7] Added FabButton to CoralUI --- client/coral-admin/src/components/Comment.js | 9 ++++----- client/coral-ui/components/FabButton.css | 9 +++++++++ client/coral-ui/components/FabButton.js | 11 +++++++++++ client/coral-ui/index.js | 1 + 4 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 client/coral-ui/components/FabButton.css create mode 100644 client/coral-ui/components/FabButton.js diff --git a/client/coral-admin/src/components/Comment.js b/client/coral-admin/src/components/Comment.js index 1106435b0..80c67aebd 100644 --- a/client/coral-admin/src/components/Comment.js +++ b/client/coral-admin/src/components/Comment.js @@ -1,11 +1,11 @@ import React from 'react'; -import {FABButton, Icon} from 'react-mdl'; import timeago from 'timeago.js'; import styles from './CommentList.css'; import I18n from 'coral-framework/modules/i18n/i18n'; import translations from '../translations.json'; import Linkify from 'react-linkify'; +import {FabButton} from 'coral-ui'; const linkify = new Linkify(); @@ -27,12 +27,11 @@ export default props => { Contains Link : null}
        {props.actions.map((action, i) => canShowAction(action, props.comment) ? ( - props.onClickAction(props.actionsMap[action].status, props.comment.get('id'))} - colored ripple> - - + /> ) : null)}
    diff --git a/client/coral-ui/components/FabButton.css b/client/coral-ui/components/FabButton.css new file mode 100644 index 000000000..688190407 --- /dev/null +++ b/client/coral-ui/components/FabButton.css @@ -0,0 +1,9 @@ +.type--approve { + background: #00796b; + color: rgba(255, 255, 255, 0.901961); +} + +.type--reject { + background: #d32f2f ; + color: rgba(255, 255, 255, 0.901961); +} diff --git a/client/coral-ui/components/FabButton.js b/client/coral-ui/components/FabButton.js new file mode 100644 index 000000000..df48af55d --- /dev/null +++ b/client/coral-ui/components/FabButton.js @@ -0,0 +1,11 @@ +import React from 'react'; +import styles from './FabButton.css'; +import {FABButton, Icon} from 'react-mdl'; + +const FabButton = ({cStyle = 'local', icon, className, ...props}) => ( + + + +); + +export default FabButton; diff --git a/client/coral-ui/index.js b/client/coral-ui/index.js index 8efb5dc7f..416f89671 100644 --- a/client/coral-ui/index.js +++ b/client/coral-ui/index.js @@ -1,2 +1,3 @@ export {default as Dialog} from './components/Dialog'; export {default as CoralLogo} from './components/CoralLogo'; +export {default as FabButton} from './components/FabButton'; From 8108ca09efece918a83a5714f17e74aad10e043e Mon Sep 17 00:00:00 2001 From: Belen Curcio Date: Tue, 22 Nov 2016 11:04:56 -0300 Subject: [PATCH 6/7] Permissions, views and somestyling --- client/coral-admin/src/actions/auth.js | 7 +++++-- client/coral-admin/src/components/NotFound.css | 12 ++++++++++++ client/coral-admin/src/components/NotFound.js | 13 +++++++++++++ .../src/components/PermissionRequired.js | 13 +++++++++++++ .../coral-admin/src/containers/LayoutContainer.js | 14 +++++++++++++- .../coral-admin/src/containers/ModerationQueue.css | 6 +++++- .../coral-admin/src/containers/ModerationQueue.js | 4 ++-- client/coral-admin/src/helpers/response.js | 13 ++++++++----- client/coral-admin/src/reducers/auth.js | 4 +++- routes/api/auth/index.js | 2 +- 10 files changed, 75 insertions(+), 13 deletions(-) create mode 100644 client/coral-admin/src/components/NotFound.css create mode 100644 client/coral-admin/src/components/NotFound.js create mode 100644 client/coral-admin/src/components/PermissionRequired.js diff --git a/client/coral-admin/src/actions/auth.js b/client/coral-admin/src/actions/auth.js index c7643cc08..c5a03132f 100644 --- a/client/coral-admin/src/actions/auth.js +++ b/client/coral-admin/src/actions/auth.js @@ -4,13 +4,16 @@ import {base, handleResp, getInit} from '../helpers/response'; // Check Login const checkLoginRequest = () => ({type: actions.CHECK_LOGIN_REQUEST}); -const checkLoginSuccess = user => ({type: actions.CHECK_LOGIN_SUCCESS, user}); +const checkLoginSuccess = (user, isAdmin) => ({type: actions.CHECK_LOGIN_SUCCESS, user, isAdmin}); const checkLoginFailure = error => ({type: actions.CHECK_LOGIN_FAILURE, error}); export const checkLogin = () => dispatch => { dispatch(checkLoginRequest()); fetch(`${base}/auth`, getInit('GET')) .then(handleResp) - .then(user => dispatch(checkLoginSuccess(user))) + .then(user => { + const isAdmin = !!user.roles.filter(i => i === 'admin').length; + dispatch(checkLoginSuccess(user, isAdmin)); + }) .catch(error => dispatch(checkLoginFailure(error))); }; diff --git a/client/coral-admin/src/components/NotFound.css b/client/coral-admin/src/components/NotFound.css new file mode 100644 index 000000000..fc9aedc6b --- /dev/null +++ b/client/coral-admin/src/components/NotFound.css @@ -0,0 +1,12 @@ +.layout { + max-width: 800px; + margin: 0 auto; +} + +.layout h1 { + font-size: 40px; +} + +.layout img { + width: 100%; +} diff --git a/client/coral-admin/src/components/NotFound.js b/client/coral-admin/src/components/NotFound.js new file mode 100644 index 000000000..fc9089ba3 --- /dev/null +++ b/client/coral-admin/src/components/NotFound.js @@ -0,0 +1,13 @@ +import React from 'react'; +import {Layout} from 'react-mdl'; +import styles from './NotFound.css'; + +export const NotFound = () => ( + +
    +

    Page Not Found

    +

    The communicorn feels your pain.

    + Communicorn +
    +
    +); diff --git a/client/coral-admin/src/components/PermissionRequired.js b/client/coral-admin/src/components/PermissionRequired.js new file mode 100644 index 000000000..c61ab1cef --- /dev/null +++ b/client/coral-admin/src/components/PermissionRequired.js @@ -0,0 +1,13 @@ +import React from 'react'; +import {Layout} from 'react-mdl'; +import styles from './NotFound.css'; + +export const PermissionRequired = () => ( + +
    +

    Permission Required

    +

    We’re sorry, but you don’t have access to that page.

    + Communicorn +
    +
    +); diff --git a/client/coral-admin/src/containers/LayoutContainer.js b/client/coral-admin/src/containers/LayoutContainer.js index 429f2cc4d..5f3cb0cff 100644 --- a/client/coral-admin/src/containers/LayoutContainer.js +++ b/client/coral-admin/src/containers/LayoutContainer.js @@ -1,13 +1,25 @@ import React, {Component} from 'react'; import {connect} from 'react-redux'; import {Layout} from '../components/ui/Layout'; -import {checkLogin} from 'coral-framework/actions/auth'; +import {checkLogin} from '../actions/auth'; +import {NotFound} from '../components/NotFound'; +import {PermissionRequired} from '../components/PermissionRequired'; class LayoutContainer extends Component { componentWillMount () { this.props.checkLogin(); } render () { + const {isAdmin, loggedIn} = this.props.auth; + + if (!loggedIn) { + return ; + } + + if (!isAdmin && loggedIn) { + return ; + } + return ; } } diff --git a/client/coral-admin/src/containers/ModerationQueue.css b/client/coral-admin/src/containers/ModerationQueue.css index 02f9eb9e9..6d40b5935 100644 --- a/client/coral-admin/src/containers/ModerationQueue.css +++ b/client/coral-admin/src/containers/ModerationQueue.css @@ -1,4 +1,3 @@ - @custom-media --big-viewport (min-width: 780px); .listContainer { @@ -6,8 +5,13 @@ margin: 0 auto; } +.tabBar { + background: #9E9E9E; +} + .tab { flex: 1; + color: white; } @media (--big-viewport) { diff --git a/client/coral-admin/src/containers/ModerationQueue.js b/client/coral-admin/src/containers/ModerationQueue.js index 7a30b8487..88150012a 100644 --- a/client/coral-admin/src/containers/ModerationQueue.js +++ b/client/coral-admin/src/containers/ModerationQueue.js @@ -61,9 +61,9 @@ class ModerationQueue extends React.Component { return (
    -
    +
    this.onTabClick('pending')} - className={`mdl-tabs__tab is-active ${styles.tab}`}>{lang.t('modqueue.pending')} + className={`mdl-tabs__tab ${styles.tab}`}>{lang.t('modqueue.pending')} this.onTabClick('rejected')} className={`mdl-tabs__tab ${styles.tab}`}>{lang.t('modqueue.rejected')} this.onTabClick('flagged')} diff --git a/client/coral-admin/src/helpers/response.js b/client/coral-admin/src/helpers/response.js index 439ba5a8a..bccfc5a04 100644 --- a/client/coral-admin/src/helpers/response.js +++ b/client/coral-admin/src/helpers/response.js @@ -1,12 +1,15 @@ export const base = '/api/v1'; export const getInit = (method, body) => { - const headers = new Headers({ - 'Content-Type': 'application/json', - 'Accept': 'application/json' - }); + let init = { + method, + headers: new Headers({ + 'Content-Type': 'application/json', + 'Accept': 'application/json' + }), + credentials: 'same-origin' + }; - const init = {method, headers}; if (method.toLowerCase() !== 'get') { init.body = JSON.stringify(body); } diff --git a/client/coral-admin/src/reducers/auth.js b/client/coral-admin/src/reducers/auth.js index bdb2bb074..59dccac5e 100644 --- a/client/coral-admin/src/reducers/auth.js +++ b/client/coral-admin/src/reducers/auth.js @@ -3,7 +3,8 @@ import * as actions from '../constants/auth'; const initialState = Map({ loggedIn: false, - user: null + user: null, + isAdmin: false }); export default function auth (state = initialState, action) { @@ -15,6 +16,7 @@ export default function auth (state = initialState, action) { case actions.CHECK_LOGIN_SUCCESS: return state .set('loggedIn', true) + .set('isAdmin', action.isAdmin) .set('user', action.user); case actions.LOGOUT_SUCCESS: return state diff --git a/routes/api/auth/index.js b/routes/api/auth/index.js index 87ffb62c8..ae6fba01c 100644 --- a/routes/api/auth/index.js +++ b/routes/api/auth/index.js @@ -8,7 +8,7 @@ const router = express.Router(); * This returns the user if they are logged in. */ router.get('/', authorization.needed(), (req, res) => { - res.json(req.user); + res.json(req.user.toObject()); }); /** From 5b4b9c544ef86b58fb590889ed523a3a6d7f8366 Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Tue, 22 Nov 2016 08:15:38 -0700 Subject: [PATCH 7/7] Removed .idea folder --- .idea/vcs.xml | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 .idea/vcs.xml diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7f4..000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file