This repository was archived by the owner on Nov 15, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 36
Expand file tree
/
Copy pathdev_secrets.js
More file actions
72 lines (61 loc) · 1.92 KB
/
dev_secrets.js
File metadata and controls
72 lines (61 loc) · 1.92 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
const fs = require('fs/promises');
const Fs = require('fs');
const existsSync = require('fs').existsSync;
const path = require('path');
const os = require('os');
const vault = require('node-vault');
const asyncPool = require('tiny-async-pool');
async function readVaultDevSecrets () {
try {
const tokenFile = path.join(os.homedir(), '.vault_tokens');
if (!existsSync(tokenFile)) {
throw new Error(`Vault token file not found: ${tokenFile}`);
}
const tokenData = await fs.readFile(tokenFile, 'utf8');
const tokens = JSON.parse(tokenData);
const token = tokens[process.env.US_VAULT_HOST];
const options = {
apiVersion: 'v1', // default
endpoint: process.env.US_VAULT_HOST,
token,
};
const vaultClient = vault(options);
const env = {};
async function read (secret) {
const vaultPath = `${process.env.BASE_VAULT_PATH}${secret}`;
// console.log('Reading', vaultPath);
const data = await vaultClient.read(vaultPath);
// console.debug(JSON.stringify(data, null, 2));
if (!data) {
console.warn(`No data found for ${vaultPath}`);
return;
}
const value = data.data.value;
if (!value) {
console.warn(`No value found for ${vaultPath}`);
return;
}
env[secret] = value;
}
// list of secrets to be read from vault
const secretsFile = `${process.env.CSSVC_BACKEND_ROOT}/${[process.env.DEV_SECRETS_FILE]}`;
const secrets = JSON.parse(Fs.readFileSync(secretsFile, 'UTF-8'));
// Read in parallel from vault to speed things up
await asyncPool(8, secrets, read);
return env;
} catch (e) {
if (e.message === 'permission denied') {
console.error('Permission denied reading vault secrets. Are you logged into vault??');
process.exit(1);
}
if (e.message === 'Status 404') {
console.error('Vault path not found. Is a secret missing?');
process.exit(1);
}
console.error("Error reading vault secrets", e);
throw e;
}
}
module.exports = {
readVaultDevSecrets
};