vvauth 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +36 -21
- package/package.json +3 -3
package/index.js
CHANGED
|
@@ -9,14 +9,16 @@ const net = require('net');
|
|
|
9
9
|
const {spawn} = require('child_process');
|
|
10
10
|
|
|
11
11
|
const {parse} = require('yaml');
|
|
12
|
-
const {args} = require('nyks/process/parseArgs')();
|
|
12
|
+
const {args, dict} = require('nyks/process/parseArgs')();
|
|
13
13
|
const SSHAgent = require('ssh-agent-js/client');
|
|
14
14
|
const trim = require('mout/string/trim');
|
|
15
15
|
const get = require('mout/object/get');
|
|
16
16
|
const eachLimit = require('nyks/async/eachLimit');
|
|
17
|
+
const walk = require('nyks/object/walk');
|
|
17
18
|
|
|
18
19
|
const request = require('nyks/http/request');
|
|
19
20
|
const drain = require('nyks/stream/drain');
|
|
21
|
+
const replaceEnv = require('nyks/string/replaceEnv');
|
|
20
22
|
|
|
21
23
|
const debug = require('debug');
|
|
22
24
|
|
|
@@ -27,17 +29,19 @@ const logger = {
|
|
|
27
29
|
};
|
|
28
30
|
|
|
29
31
|
|
|
30
|
-
const
|
|
32
|
+
const VAUTH_RC = ".vauthrc";
|
|
33
|
+
const FUNCTION_NAME = "vauth";
|
|
34
|
+
const FUNCTION_DECL = "function vauth() { source <(/usr/bin/env vauth --source $*); }";
|
|
31
35
|
|
|
32
|
-
class
|
|
36
|
+
class vvauth {
|
|
33
37
|
constructor(rc = null) {
|
|
34
38
|
this.rc = {};
|
|
35
39
|
if(rc) {
|
|
36
40
|
this.rc = rc;
|
|
37
41
|
} else {
|
|
38
|
-
if(fs.existsSync(
|
|
39
|
-
let body = fs.readFileSync(
|
|
40
|
-
this.rc = parse(body);
|
|
42
|
+
if(fs.existsSync(VAUTH_RC)) {
|
|
43
|
+
let body = fs.readFileSync(VAUTH_RC, 'utf8');
|
|
44
|
+
this.rc = walk(parse(body), v => replaceEnv(v, { env : process.env}));
|
|
41
45
|
}
|
|
42
46
|
}
|
|
43
47
|
}
|
|
@@ -57,10 +61,20 @@ class vcreds {
|
|
|
57
61
|
}
|
|
58
62
|
|
|
59
63
|
async login(publish = true) {
|
|
64
|
+
if(!dict['source'] && publish) {
|
|
65
|
+
console.error(`echo please use "${FUNCTION_NAME} login"`);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
let {vault_addr} = this.rc;
|
|
70
|
+
console.error("Connecting to %s", vault_addr);
|
|
71
|
+
|
|
72
|
+
|
|
60
73
|
let VAULT_TOKEN = await this._get_token();
|
|
61
74
|
if(publish) {
|
|
62
75
|
let env = {VAULT_TOKEN};
|
|
63
76
|
this._publish_env(env);
|
|
77
|
+
process.exit();
|
|
64
78
|
}
|
|
65
79
|
return VAULT_TOKEN;
|
|
66
80
|
}
|
|
@@ -108,29 +122,26 @@ class vcreds {
|
|
|
108
122
|
|
|
109
123
|
return token;
|
|
110
124
|
}
|
|
111
|
-
async
|
|
112
|
-
let child = spawn('bash', ["-lc", `
|
|
125
|
+
async _function_exists(alias) {
|
|
126
|
+
let child = spawn('bash', ["-lc", `declare -F ${alias}`]);
|
|
113
127
|
return new Promise(resolve => child.on('exit', resolve));
|
|
114
128
|
}
|
|
115
129
|
|
|
116
130
|
async install() {
|
|
117
|
-
const alias_name = "vauth";
|
|
118
|
-
const alias_value = "source <(vcreds login)";
|
|
119
131
|
const bashrc_path = path.resolve(os.homedir(), ".bashrc");
|
|
120
132
|
let bashrc = fs.existsSync(bashrc_path) ? fs.readFileSync(bashrc_path, 'utf-8').trim() : '';
|
|
121
|
-
let exists = await this.
|
|
133
|
+
let exists = await this._function_exists(FUNCTION_NAME);
|
|
122
134
|
if(exists == 0) {
|
|
123
|
-
console.error("
|
|
135
|
+
console.error("Function %s already installed", FUNCTION_NAME);
|
|
124
136
|
return;
|
|
125
137
|
}
|
|
126
|
-
console.error("Alias %s not installed, pushing it to %s",
|
|
138
|
+
console.error("Alias %s not installed, pushing it to %s", FUNCTION_NAME, bashrc_path);
|
|
127
139
|
|
|
128
|
-
fs.writeFileSync(bashrc_path, [bashrc,
|
|
140
|
+
fs.writeFileSync(bashrc_path, [bashrc, FUNCTION_DECL, ""].join("\n"));
|
|
129
141
|
console.error(`Installation ok, please \nsource ${bashrc_path}`);
|
|
130
142
|
}
|
|
131
143
|
|
|
132
144
|
async _login_vault(vault_addr, path, payload) {
|
|
133
|
-
console.error("Connecting to %s", vault_addr);
|
|
134
145
|
let remote_url = `${trim(vault_addr, '/')}/v1/auth/${path}/login`;
|
|
135
146
|
let query = {...url.parse(remote_url), json : true};
|
|
136
147
|
let res = await request(query, payload);
|
|
@@ -145,17 +156,21 @@ class vcreds {
|
|
|
145
156
|
return token;
|
|
146
157
|
}
|
|
147
158
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
159
|
}
|
|
152
160
|
|
|
153
161
|
//ensure module is called directly, i.e. not required
|
|
154
162
|
if(module.parent === null) {
|
|
155
|
-
let cmd = args.shift();
|
|
163
|
+
let cmd = args.shift(), i = process.argv.indexOf(cmd);
|
|
164
|
+
if(cmd && i != -1)
|
|
165
|
+
process.argv.splice(i, 1);
|
|
166
|
+
|
|
167
|
+
if(dict['source'] && !cmd) {
|
|
168
|
+
console.error(`please use "${FUNCTION_NAME} login"`);
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
156
171
|
let run = cmd ? [`--ir://raw`, `--ir://run=${cmd}`] : [];
|
|
157
|
-
require('cnyks/lib/bundle')(
|
|
172
|
+
require('cnyks/lib/bundle')(vvauth, null, run);
|
|
158
173
|
}
|
|
159
174
|
|
|
160
175
|
|
|
161
|
-
module.exports =
|
|
176
|
+
module.exports = vvauth;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vvauth",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Vault
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "Vault Auth helper",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"vvauth": "./index.js"
|
|
@@ -28,6 +28,6 @@
|
|
|
28
28
|
},
|
|
29
29
|
"repository": {
|
|
30
30
|
"type": "git",
|
|
31
|
-
"url": "git@github.com:131/
|
|
31
|
+
"url": "git@github.com:131/vvauth.git"
|
|
32
32
|
}
|
|
33
33
|
}
|