瀏覽代碼

Added redux logic for banning and sending authenticating data

howdoyoucode 8 年之前
父節點
當前提交
ba9ca9bda1

+ 19 - 0
frontend/app/js/actions/app.js

@@ -1,7 +1,26 @@
 export const INCREMENT = "INCREMENT";
 export const INCREMENT = "INCREMENT";
+export const BAN = "BAN";
+export const AUTHENTICATE = "AUTHENTICATE";
 
 
 export function increment() {
 export function increment() {
 	return {
 	return {
 		type: INCREMENT,
 		type: INCREMENT,
 	};
 	};
 }
 }
+
+export function ban(reason) {
+	return {
+		type: BAN,
+		reason,
+	};
+}
+
+export function authenticate(loggedIn, role, username, userId) {
+	return {
+		type: AUTHENTICATE,
+		loggedIn,
+		role,
+		username,
+		userId,
+	};
+}

+ 0 - 1
frontend/app/js/components/Global/Menu.jsx

@@ -2,7 +2,6 @@ import React, { Component } from "react";
 import { IndexLink, Link } from "react-router";
 import { IndexLink, Link } from "react-router";
 
 
 export default class Menu extends Component {
 export default class Menu extends Component {
-
 	render() {
 	render() {
 		return (
 		return (
 			<div className="Menu">
 			<div className="Menu">

+ 0 - 14
frontend/app/js/index.js

@@ -11,10 +11,6 @@ import rootReducer from "reducers";
 import Routes from "routes";
 import Routes from "routes";
 import DevTools from "dev/redux-dev-tools";
 import DevTools from "dev/redux-dev-tools";
 
 
-import io from "io";
-
-import config from "../../config/default";
-
 import "../styles/main.scss";
 import "../styles/main.scss";
 
 
 const isProduction = process.env.NODE_ENV === "production";
 const isProduction = process.env.NODE_ENV === "production";
@@ -38,16 +34,6 @@ if (isProduction) {
 	);
 	);
 }
 }
 
 
-io.init(config.serverDomain);
-io.getSocket(socket => {
-	socket.on("ready", (status, role, username, userId) => {
-		// auth.data(status, role, username, userId);
-	});
-	socket.on("keep.event:banned", ban => {
-		// auth.setBanned(ban);
-	});
-});
-
 ReactDOM.render(
 ReactDOM.render(
 	<Provider store={ store }>
 	<Provider store={ store }>
 		{ isProduction ?
 		{ isProduction ?

+ 1 - 1
frontend/app/js/reducers/app.js

@@ -1,7 +1,7 @@
 import { Map } from "immutable";
 import { Map } from "immutable";
 
 
 import {
 import {
-  INCREMENT,
+	INCREMENT,
 } from "actions/app";
 } from "actions/app";
 
 
 const initialState = Map({
 const initialState = Map({

+ 2 - 0
frontend/app/js/reducers/index.js

@@ -1,6 +1,8 @@
 import { combineReducers } from "redux";
 import { combineReducers } from "redux";
 import app from "reducers/app";
 import app from "reducers/app";
+import user from "reducers/user";
 
 
 export default combineReducers({
 export default combineReducers({
 	app,
 	app,
+	user,
 });
 });

+ 41 - 0
frontend/app/js/reducers/user.js

@@ -0,0 +1,41 @@
+import { Map } from "immutable";
+
+import {
+	BAN,
+	AUTHENTICATE,
+} from "actions/app";
+
+const initialState = Map({
+	loggedIn: false,
+	role: "default",
+	username: "",
+	userId: "",
+	banned: {
+		status: false,
+		reason: "",
+	},
+});
+
+const actionsMap = {
+	[BAN]: (state, action) => {
+		return Object.assign({}, state.toObject(), {
+			banned: {
+				status: true,
+				reason: action.reason,
+			},
+		});
+	},
+	[AUTHENTICATE]: (state, action) => {
+		return state.merge({
+			loggedIn: action.loggedIn,
+			role: action.role,
+			username: action.username,
+			userId: action.userId,
+		});
+	},
+};
+
+export default function reducer(state = initialState, action = {}) {
+	const fn = actionsMap[action.type];
+	return fn ? fn(state, action) : state;
+}

+ 20 - 0
frontend/app/js/views/App/index.jsx

@@ -1,11 +1,31 @@
 import React, { Component } from "react";
 import React, { Component } from "react";
 import PropTypes from "prop-types";
 import PropTypes from "prop-types";
+import { connect } from "react-redux";
 
 
+import { ban, authenticate } from "actions/app";
 import Menu from "components/Global/Menu";
 import Menu from "components/Global/Menu";
 
 
+import io from "../../io";
+import config from "../../../../config/default";
+
+@connect()
+
 export default class App extends Component {
 export default class App extends Component {
 	static propTypes = {
 	static propTypes = {
 		children: PropTypes.object,
 		children: PropTypes.object,
+		dispatch: PropTypes.func,
+	}
+
+	componentDidMount() {
+		const { dispatch } = this.props;
+
+		io.init(config.serverDomain);
+		io.getSocket(socket => {
+			socket.on("ready", (status, role, username, userId) => {
+				dispatch(authenticate(status, role, username, userId));
+			});
+			socket.on("keep.event:banned", reason => dispatch(ban(reason)));
+		});
 	}
 	}
 
 
 	render() {
 	render() {

+ 1 - 1
frontend/app/js/views/Auth/Register.jsx

@@ -74,7 +74,7 @@ export default class Register extends Component {
 				<input type="text" id="username" value={ this.state.username } onChange={ event => this.updateField("username", event) } />
 				<input type="text" id="username" value={ this.state.username } onChange={ event => this.updateField("username", event) } />
 				<label htmlFor="password">Password</label>
 				<label htmlFor="password">Password</label>
 				<input type="password" id="password" value={ this.state.password } onChange={ event => this.updateField("password", event) } />
 				<input type="password" id="password" value={ this.state.password } onChange={ event => this.updateField("password", event) } />
-				<div id="recaptcha"></div>
+				<div id="recaptcha" />
 				<button onClick={ this.register }>Register</button>
 				<button onClick={ this.register }>Register</button>
 			</div>
 			</div>
 		);
 		);

+ 26 - 21
frontend/package-lock.json

@@ -693,7 +693,8 @@
     },
     },
     "balanced-match": {
     "balanced-match": {
       "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
       "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
-      "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+      "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+      "dev": true
     },
     },
     "base16": {
     "base16": {
       "version": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz",
       "version": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz",
@@ -778,7 +779,8 @@
     },
     },
     "brace-expansion": {
     "brace-expansion": {
       "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
       "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
-      "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k="
+      "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=",
+      "dev": true
     },
     },
     "braces": {
     "braces": {
       "version": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
       "version": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
@@ -1054,7 +1056,8 @@
     },
     },
     "concat-map": {
     "concat-map": {
       "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
       "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+      "dev": true
     },
     },
     "concat-stream": {
     "concat-stream": {
       "version": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
       "version": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
@@ -1235,6 +1238,11 @@
       "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
       "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
       "dev": true
       "dev": true
     },
     },
+    "deep-assign": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz",
+      "integrity": "sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI="
+    },
     "deep-diff": {
     "deep-diff": {
       "version": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.4.tgz",
       "version": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.4.tgz",
       "integrity": "sha1-qsXDmVIjar5fA3ojSQYLoBsArkg=",
       "integrity": "sha1-qsXDmVIjar5fA3ojSQYLoBsArkg=",
@@ -2832,6 +2840,11 @@
       "integrity": "sha1-OBLSLL6RJfLCtJFXVaG4q9dFoAE=",
       "integrity": "sha1-OBLSLL6RJfLCtJFXVaG4q9dFoAE=",
       "dev": true
       "dev": true
     },
     },
+    "immutability-helper": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/immutability-helper/-/immutability-helper-2.2.2.tgz",
+      "integrity": "sha1-5+nacos94vrTSiFvQVezJtvMyJI="
+    },
     "immutable": {
     "immutable": {
       "version": "https://registry.npmjs.org/immutable/-/immutable-3.8.1.tgz",
       "version": "https://registry.npmjs.org/immutable/-/immutable-3.8.1.tgz",
       "integrity": "sha1-IAgH8Rqw9ycQ6khVQt4IgHX2jNI="
       "integrity": "sha1-IAgH8Rqw9ycQ6khVQt4IgHX2jNI="
@@ -2970,6 +2983,11 @@
       "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
       "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
       "dev": true
       "dev": true
     },
     },
+    "is-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
+    },
     "is-path-cwd": {
     "is-path-cwd": {
       "version": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
       "version": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
       "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
       "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
@@ -3189,8 +3207,9 @@
       "dev": true
       "dev": true
     },
     },
     "lodash": {
     "lodash": {
-      "version": "https://registry.npmjs.org/lodash/-/lodash-4.16.6.tgz",
-      "integrity": "sha1-0iyaxmAojzhD4Wun0rXQbMon13c="
+      "version": "4.17.4",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+      "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="
     },
     },
     "lodash-es": {
     "lodash-es": {
       "version": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.4.tgz",
       "version": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.4.tgz",
@@ -3231,11 +3250,6 @@
       "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=",
       "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=",
       "dev": true
       "dev": true
     },
     },
-    "lodash.union": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
-      "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg="
-    },
     "longest": {
     "longest": {
       "version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
       "version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
       "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
       "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
@@ -3332,7 +3346,8 @@
     },
     },
     "minimatch": {
     "minimatch": {
       "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
       "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
-      "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q="
+      "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
+      "dev": true
     },
     },
     "minimist": {
     "minimist": {
       "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
       "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
@@ -3995,11 +4010,6 @@
       "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
       "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
       "dev": true
       "dev": true
     },
     },
-    "recursive-readdir-sync": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/recursive-readdir-sync/-/recursive-readdir-sync-1.0.6.tgz",
-      "integrity": "sha1-Hb9tMvPFu4083pemxYjVR6nhPVY="
-    },
     "redbox-react": {
     "redbox-react": {
       "version": "https://registry.npmjs.org/redbox-react/-/redbox-react-1.3.6.tgz",
       "version": "https://registry.npmjs.org/redbox-react/-/redbox-react-1.3.6.tgz",
       "integrity": "sha1-cDFMV8BmJX63Cwok3HlLXO9PHE4=",
       "integrity": "sha1-cDFMV8BmJX63Cwok3HlLXO9PHE4=",
@@ -4926,11 +4936,6 @@
         }
         }
       }
       }
     },
     },
-    "webpack-cleanup-plugin": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/webpack-cleanup-plugin/-/webpack-cleanup-plugin-0.5.1.tgz",
-      "integrity": "sha1-3y1wa9dTZMBuZbBRGGMW1nTrlq8="
-    },
     "webpack-dashboard": {
     "webpack-dashboard": {
       "version": "https://registry.npmjs.org/webpack-dashboard/-/webpack-dashboard-0.2.1.tgz",
       "version": "https://registry.npmjs.org/webpack-dashboard/-/webpack-dashboard-0.2.1.tgz",
       "integrity": "sha1-h+G+UP8FXQVbeWosVDgfMq8vVbk=",
       "integrity": "sha1-h+G+UP8FXQVbeWosVDgfMq8vVbk=",

+ 1 - 0
frontend/package.json

@@ -53,6 +53,7 @@
     "es6-promise": "^3.1.2",
     "es6-promise": "^3.1.2",
     "immutable": "^3.8.1",
     "immutable": "^3.8.1",
     "isomorphic-fetch": "^2.2.1",
     "isomorphic-fetch": "^2.2.1",
+    "lodash": "^4.17.4",
     "prop-types": "^15.5.10",
     "prop-types": "^15.5.10",
     "react": "^15.4.0",
     "react": "^15.4.0",
     "react-dom": "^15.4.0",
     "react-dom": "^15.4.0",