node-http-proxy/index.js

79 lines
1.8 KiB
JavaScript
Raw Normal View History

2019-01-25 00:54:48 +00:00
var net = require('net');
2019-01-25 03:07:42 +00:00
var http = require('http');
var fs = require('fs');
2019-01-25 03:07:42 +00:00
class HttpRequest {
2019-01-25 03:13:48 +00:00
constructor({attrs}) {
2019-01-25 03:20:17 +00:00
this.attrs = attrs;
this.logSomething = this.logSomething.bind(this);
}
// TODO - not working yet. will come back to this.
logSomething() {
fs.appendFile("proxy.log", this.attrs, (err) => {
console.log("Got an error.");
})
2019-01-25 03:07:42 +00:00
}
}
/**
* Parse an HTTP request.
* @param {String} bytes
*/
function parseHttpRequest(bytes) {
2019-01-25 03:20:17 +00:00
let httpRequestAttrs = {headers: ""};
2019-01-25 03:07:42 +00:00
bytes.split("\r\n").map((row) => {
// Match against HTTP verbs from the first row.
if (row.match('GET|POST|PUT|PATCH|UPDATE|DELETE')) {
console.log("FIRST ROW");
console.log(row);
let typeInfo = row.split(" ");
if (typeInfo.length !== 3) {
console.log("Bad HTTP request");
return null;
}
httpRequestAttrs["type"] = typeInfo[0];
httpRequestAttrs["path"] = typeInfo[1];
httpRequestAttrs["httpVersion"] = typeInfo[2];
} else {
2019-01-25 03:20:17 +00:00
httpRequestAttrs.headers = httpRequestAttrs.headers.concat(row + "\r\n");
2019-01-25 03:07:42 +00:00
}
2019-01-25 03:20:17 +00:00
});
return new HttpRequest(httpRequestAttrs);
2019-01-25 03:07:42 +00:00
}
2019-01-25 00:54:48 +00:00
2019-01-25 01:43:49 +00:00
/**
* Log the request and forward it.
* @param {String} bytes
*/
2019-01-25 00:54:48 +00:00
async function logAndSend(bytes) {
2019-01-25 01:43:49 +00:00
console.log(bytes)
2019-01-25 00:54:48 +00:00
}
var server = net.createServer((socket) => {
socket.on('end', (c) => {
console.log("Client disconnected");
});
2019-01-25 01:43:49 +00:00
socket.on("data", (c) => {
parseHttpRequest(c.toString()).log();
2019-01-25 01:43:49 +00:00
});
2019-01-25 00:54:48 +00:00
})
2019-01-25 01:43:49 +00:00
server.on('connection', (c) => {
console.log("Client connected!" + c.read(10));
2019-01-25 00:54:48 +00:00
});
2019-01-25 01:43:49 +00:00
server.on("listening", (c) => {
console.log("LISTENING");
})
2019-01-25 00:54:48 +00:00
server.listen(8124, () => {
console.log("Server bound.");
2019-01-25 03:13:48 +00:00
})
module.exports = [parseHttpRequest];