-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclient.js
More file actions
66 lines (60 loc) · 2.42 KB
/
client.js
File metadata and controls
66 lines (60 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
require('./constants');
const Util = require('./util');
const Request = require('./request');
const net = require('net');
const fs = require('fs');
let v = false, saveToFile = false, file;
let redirect_args = {}, redirect_count = 0;
connectClient = (request) => {
let client = new net.Socket();
const defaultPort = request.args.hostname.includes('localhost') ? LOCALHOST_PORT : DEFAULT_PORT;
client.connect({host: request.args.hostname, port: request.args.port || defaultPort}, () => {
const http_request = Request.createHTTPRequest(request);
client.write(http_request);
client.on('data', (data) => {
let response = data.toString().split('\r\n\r\n');
if (data.toString().includes(REDIRECT_STATUS_CODE) && data.toString().includes('Location')
&& redirect_count <= 5) {
const redirect_array = data.toString().split('\r\n');
redirect_array.forEach(value => {
if (value.includes('Location')) {
let redirect_url = value.split(': ')[1];
if (redirect_url.startsWith('/')) {
const url_args = Util.getURLProperties(redirect_args.url);
redirect_url = url_args.origin + redirect_url;
}
const request = Request.getRequestObject(redirect_url, redirect_args);
redirect_count++;
console.log(`Redirecting to ${redirect_url}`);
connectClient(request);
}
})
} else {
if (saveToFile) {
fs.writeFile(file, (v ? data.toString() : response[1]), (err) => {
if (err) console.log(`Error saving to ${file}`);
});
} else {
console.log((v ? data.toString() : response[1]));
}
client.end();
}
});
client.on('end', () => {
client.end();
});
});
};
assignOptionalArguments = (args) => {
redirect_args = Object.assign({}, args);
v = args.v;
if (args.hasOwnProperty('o')) {
saveToFile = true;
file = args.o;
}
};
exports.initRequest = (args) => {
assignOptionalArguments(args);
const request = Request.getRequestObject(args.url, args);
connectClient(request);
};