Added user disconnect

This commit is contained in:
Chris Blanchard 2015-11-15 16:26:32 +00:00
parent 08e1e8c980
commit 684bbac501
3 changed files with 45 additions and 6 deletions

View file

@ -22,8 +22,10 @@ var App = React.createClass({
users: [], users: [],
messages: [], messages: [],
maps: [], maps: [],
user: null,
servers: [], servers: [],
archive: [], archive: [],
socket: null,
soundController: null soundController: null
}; };
}, },
@ -168,7 +170,7 @@ var App = React.createClass({
<div className="row"> <div className="row">
<div className="col-md-2 hidden-xs"> <div className="col-md-2 hidden-xs">
<ul className="nav" id="side-menu"> <ul className="nav" id="side-menu">
<UserMenu users={this.props.users} /> <UserMenu users={this.props.users} user={this.props.user} />
</ul> </ul>
</div> </div>
<div className="col-md-4" id="chatroom"> <div className="col-md-4" id="chatroom">

View file

@ -38,9 +38,31 @@ var UserLogin = React.createClass({
} }
}); });
var DisconnectUserButton = React.createClass({
getDefaultProps() {
return {
id: null
};
},
disconnectUser() {
socket.emit("users:disconnect", {
id: this.props.id
});
},
render() {
return <button
className="btn btn-danger"
onClick={this.disconnectUser}>
Disconnect User</button>
}
});
var UserModal = React.createClass({ var UserModal = React.createClass({
render() { render() {
let user = this.props.user; const currentUser = this.props.currentUser;
const user = this.props.user;
let hiveStats; let hiveStats;
if (user.hive.id) { if (user.hive.id) {
hiveStats = [ hiveStats = [
@ -75,6 +97,10 @@ var UserModal = React.createClass({
</tr> </tr>
] ]
} }
let adminOptions;
if (currentUser.admin) {
adminOptions = <DisconnectUserButton id={user.id} />;
}
return ( return (
<div className="modal fade" id={modalId(user)}> <div className="modal fade" id={modalId(user)}>
<div className="modal-dialog"> <div className="modal-dialog">
@ -120,6 +146,7 @@ var UserModal = React.createClass({
</table> </table>
</div> </div>
<div className="modal-footer"> <div className="modal-footer">
{adminOptions}
<button type="button" <button type="button"
className="btn btn-default" className="btn btn-default"
data-dismiss="modal">Close</button> data-dismiss="modal">Close</button>
@ -133,12 +160,13 @@ var UserModal = React.createClass({
var UserItem = React.createClass({ var UserItem = React.createClass({
render() { render() {
let user = this.props.user; const user = this.props.user;
const currentUser = this.props.currentUser;
return ( return (
<li className="list-group-item"> <li className="list-group-item">
<a href="#" data-toggle="modal" <a href="#" data-toggle="modal"
data-target={`#${modalId(user)}`}>{user.username}</a> data-target={`#${modalId(user)}`}>{user.username}</a>
<UserModal user={user} /> <UserModal user={user} currentUser={currentUser} />
</li> </li>
); );
} }
@ -146,10 +174,11 @@ var UserItem = React.createClass({
var UserMenu = React.createClass({ var UserMenu = React.createClass({
render() { render() {
let users = this.props.users const users = this.props.users
.sort((a, b) => (a.username.toLowerCase() > b.username.toLowerCase()) ? 1 : -1) .sort((a, b) => (a.username.toLowerCase() > b.username.toLowerCase()) ? 1 : -1)
.map(user => { .map(user => {
return <UserItem user={user} key={user.id} /> return <UserItem user={user} key={user.id}
currentUser={this.props.user} />
}); });
return ( return (
<div> <div>

View file

@ -66,6 +66,14 @@ module.exports = namespace => {
}); });
}); });
socket.on('users:disconnect', data => {
const id = data.id;
if (typeof id !== 'number') return;
namespace.sockets
.filter(socket => socket._user.id === id)
.forEach(socket => socket.disconnect());
});
socket.on("users:authorize", data => { socket.on("users:authorize", data => {
if (!socket._user.isUserAdmin()) return; if (!socket._user.isUserAdmin()) return;
var id = parseInt(data.id, 10); var id = parseInt(data.id, 10);