diff options
| author | Tyler Murphy <tylermurphy534@gmail.com> | 2023-01-22 16:00:31 -0500 |
|---|---|---|
| committer | Tyler Murphy <tylermurphy534@gmail.com> | 2023-01-22 16:00:31 -0500 |
| commit | 23eb8b16b69f3eb0d731f774064fe393f70f8514 (patch) | |
| tree | 48136dead867dee23a51f4ca9566de343e524d54 /src | |
| parent | finish (diff) | |
| download | xssbook-23eb8b16b69f3eb0d731f774064fe393f70f8514.tar.gz xssbook-23eb8b16b69f3eb0d731f774064fe393f70f8514.tar.bz2 xssbook-23eb8b16b69f3eb0d731f774064fe393f70f8514.zip | |
console
Diffstat (limited to 'src')
| -rw-r--r-- | src/console.js | 81 |
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, '&').replace(/</g, '<').replace(/>/g, '>'); + 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 |