Skip to content

Commit 9a54b73

Browse files
committed
Create AJAX computers
1 parent 1746dad commit 9a54b73

File tree

2 files changed

+100
-0
lines changed

2 files changed

+100
-0
lines changed

computers/computers.js

+88
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
'use strict';
2+
3+
// https://reactjs.org/docs/react-without-jsx.html
4+
// https://reactjs.org/docs/faq-ajax.html
5+
6+
const e = React.createElement;
7+
8+
class ComputersList extends React.Component {
9+
constructor(props) {
10+
super(props);
11+
this.state = {
12+
computers: [],
13+
users: [],
14+
isLoaded: false,
15+
error: null
16+
};
17+
}
18+
19+
componentDidMount() {
20+
fetch("/api/computers.json")
21+
.then(res => res.json())
22+
.then(
23+
(result) => {
24+
this.setState({
25+
isLoaded: true,
26+
computers: result.computers,
27+
users: result.users
28+
});
29+
},
30+
(error) => {
31+
this.setState({
32+
isLoaded: true,
33+
error
34+
});
35+
}
36+
)
37+
}
38+
39+
render() {
40+
const { computers, users, isLoaded, error } = this.state;
41+
if (error) {
42+
console.log(error);
43+
return e('div', null, "Error fetching data.");
44+
} else if (!isLoaded) {
45+
return e('div', null, "Loading...");
46+
} else {
47+
return e('div', null, [
48+
e(Computers, { computers: this.state.computers }, null),
49+
e(Users, { users: this.state.users }, null)
50+
])
51+
}
52+
}
53+
}
54+
55+
class Computers extends React.Component {
56+
render() {
57+
const computers = this.props.computers;
58+
return (
59+
e('table', null, computers.map(computer => (
60+
e('tr', null, [
61+
e('td', null, computer.hostname),
62+
e('td', null, computer.user_id),
63+
e('td', null, moment(computer.local_timestamp).fromNow())
64+
])
65+
)))
66+
)
67+
}
68+
}
69+
70+
class Users extends React.Component {
71+
render() {
72+
const users = this.props.users;
73+
return (
74+
e('table', null, users.map(user => (
75+
e('tr', null, [
76+
e('td', null, user.username),
77+
e('td', null, moment(user.last_ping).fromNow()),
78+
// only works if user's time spent is less than 24 hours
79+
e('td', null, moment().startOf('day').add(user.time_spent, 'seconds').format('HH:mm:ss'))
80+
])
81+
)))
82+
)
83+
}
84+
}
85+
86+
const domContainer = document.querySelector('#computers-list');
87+
ReactDOM.render(e(ComputersList), domContainer);
88+
// vim: et sw=2

computers/computers.md

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
title: NSA Backdoor
3+
permalink: /computers/
4+
---
5+
6+
<div id="computers-list"></div>
7+
8+
<script src="https://momentjs.com/downloads/moment.min.js" crossorigin></script>
9+
<script src="https://unpkg.com/axios/dist/axios.min.js" crossorigin></script>
10+
<script src="https://unpkg.com/react@16/umd/react.production.min.js" crossorigin></script>
11+
<script src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js" crossorigin></script>
12+
<script src="{% link computers/computers.js %}"></script>

0 commit comments

Comments
 (0)