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.
Files changed (2) hide show
  1. package/index.js +36 -21
  2. 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 VCREDS_RC = ".vcredsrc";
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 vcreds {
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(VCREDS_RC)) {
39
- let body = fs.readFileSync(VCREDS_RC, 'utf8');
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 _alias_exists(alias) {
112
- let child = spawn('bash', ["-lc", `alias ${alias}`]);
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._alias_exists(alias_name);
133
+ let exists = await this._function_exists(FUNCTION_NAME);
122
134
  if(exists == 0) {
123
- console.error("Alias %s already installed", alias_name);
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", alias_name, bashrc_path);
138
+ console.error("Alias %s not installed, pushing it to %s", FUNCTION_NAME, bashrc_path);
127
139
 
128
- fs.writeFileSync(bashrc_path, [bashrc, `alias ${alias_name}="${alias_value}"`].join("\n"));
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')(vcreds, null, run);
172
+ require('cnyks/lib/bundle')(vvauth, null, run);
158
173
  }
159
174
 
160
175
 
161
- module.exports = vcreds;
176
+ module.exports = vvauth;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vvauth",
3
- "version": "0.1.0",
4
- "description": "Vault Creds manager",
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/vcreds.git"
31
+ "url": "git@github.com:131/vvauth.git"
32
32
  }
33
33
  }