summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/console.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/console.js b/src/console.js
new file mode 100644
index 0000000..c7f4089
--- /dev/null
+++ b/src/console.js
@@ -0,0 +1,81 @@
+const express = require('express')
+const router = express.Router()
+const sleep = ms => new Promise(r => setTimeout(r, ms));
+
+const connections = []
+
+router.get('/', async (req, res) => {
+ res.write(`
+ <!DOCTYPE html>
+ <html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <link rel="stylesheet" href="css/console.css">
+ <title>XSSBook - Console</title>
+ </head>
+ <body>
+ `)
+ res.write(new Array(2048).join(" "))
+ await sleep(500)
+ connections.push(res)
+ while (true) {
+ res.write(" ")
+ await sleep(100)
+ }
+})
+
+function color(method) {
+ switch(method) {
+ case 'GET':
+ return '4ae04a'
+ case 'POST':
+ return 'b946db'
+ case 'PUT':
+ return 'ff9705'
+ case 'PATCH':
+ return `42caff`
+ case 'DELETE':
+ return `ff4a4a`
+ case 'HEAD':
+ return '424cff'
+ case 'OPTIONS':
+ return 'ff9757'
+ }
+}
+
+function highlight(json) {
+ if (typeof json != 'string') {
+ json = JSON.stringify(json, undefined, 2);
+ }
+ json = json.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
+ return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {
+ var cls = 'number';
+ if (/^"/.test(match)) {
+ if (/:$/.test(match)) {
+ cls = 'key';
+ } else {
+ cls = 'string';
+ }
+ } else if (/true|false/.test(match)) {
+ cls = 'boolean';
+ } else if (/null/.test(match)) {
+ cls = 'null';
+ }
+ return '<span class="' + cls + '">' + match + '</span>';
+ });
+}
+
+async function update(ip, method, path, json) {
+ connections.forEach(con => {
+ con.write(`
+ <div>
+ <span class="ip">${ip}</span>
+ <span class="method" style="color: #${color(method)}">${method}</span>
+ <span class="path">${path}</span>
+ <span class="json">${highlight(json)}</span>
+ </div>
+ `)
+ })
+}
+
+module.exports = { router, update }; \ No newline at end of file