-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.js
More file actions
77 lines (67 loc) · 1.65 KB
/
utils.js
File metadata and controls
77 lines (67 loc) · 1.65 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
67
68
69
70
71
72
73
74
75
76
77
const { promisify } = require("util");
const crypto = require("crypto");
const fs = require("fs");
const https = require("https");
const http = require("http");
const pbkdf2 = promisify(crypto.pbkdf2);
const readFile = promisify(fs.readFile);
async function log(fn, message = fn.name) {
const start = Date.now();
const result = (await fn()) || "";
console.log(`${message} (${Date.now() - start}ms): ${result}`);
}
function block(duration = 1000) {
const start = Date.now();
while (Date.now() - start < duration);
return "blocked";
}
function loop() {
let c = 0;
while (c < 1e9) {
c++;
}
return c;
}
async function hash(iterations = 125000) {
await pbkdf2("a", "b", iterations, 512, "sha512");
return "hashed";
}
async function read(fileName = "./package.json") {
const content = await readFile(fileName, "utf8");
return content.replace(/[\s\r\n]+/g, " ").substr(0, 100);
}
function request(url) {
return new Promise((resolve, reject) =>
(url[4] === "s" ? https : http)
.request(url, res => {
res.on("data", () => null);
res.on("end", () => resolve(url));
})
.on("error", reject)
.end()
);
}
const requestDns = () => request("https://www.google.com/");
const requestIP = () => request("http://172.217.23.206/");
function getConfig(alternatives) {
const variant = process.argv[2];
const config = alternatives[variant];
if (!config) {
console.error(
"You need to specify one of variants:",
Object.keys(alternatives).join(", ")
);
process.exit(1);
}
return config;
}
module.exports = {
getConfig,
log,
block,
loop,
hash,
read,
requestDns,
requestIP
};