-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
90 lines (79 loc) · 2.2 KB
/
index.js
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
78
79
80
81
82
83
84
85
86
87
88
89
90
import { got } from 'got';
import setPath from 'object-path-set';
import { writeFile, open } from 'node:fs/promises';
const VAULT_ADDR = process.env.VAULT_ADDR;
const VAULT_TOKEN = process.env.VAULT_TOKEN;
var pathArray = [];
const BASE_PATH = '/'
await listPath(BASE_PATH);
for (const element of pathArray) {
await listKeys(element);
}
console.log(pathArray.length);
let baseObject = {};
const filehandle = await open('./paths.txt', 'w+');
for (const element of pathArray.sort()) {
console.log(element);
await writeFile(filehandle, element + '\n', 'utf8');
let oPath = element.replaceAll('/', '.').slice(1);
baseObject = setPath(baseObject, oPath, null);
}
await filehandle.close();
async function listPath(path) {
return new Promise(async (resolve, reject) => {
if(path.startsWith('/users/')){ //ignore path because of personal vault space
resolve();
return;
}
let keys;
const data = await got(VAULT_ADDR + '/v1/secret' + path, {
method: 'LIST',
headers: {
'X-Vault-Token': VAULT_TOKEN
},
https: {
rejectUnauthorized: false
},
throwHttpErrors: false
});
if (data.statusCode != 200) {
// No permissions
resolve();
return;
}
console.log('DATA from', path);
keys = JSON.parse(data.body).data.keys;
for (let index = 0; index < keys.length; index++) {
const element = keys[index];
pathArray.push(path + element);
await listPath(path + element);
}
resolve();
});
}
async function listKeys(path) {
return new Promise(async (resolve, reject) => {
const data = await got(VAULT_ADDR + '/v1/secret' + path, {
method: 'GET',
headers: {
'X-Vault-Token': VAULT_TOKEN
},
https: {
rejectUnauthorized: false
},
throwHttpErrors: false
});
if (data.statusCode != 200) {
// No permissions
resolve();
return;
}
console.log('DATA from', path);
let object = JSON.parse(data.body).data;
for (const [key, value] of Object.entries(object)) {
let keyWithNoSpaces = key.replaceAll(' ', '').replaceAll('"', '');
pathArray.push(path + '/' + keyWithNoSpaces + '');
}
resolve();
});
}