-
Notifications
You must be signed in to change notification settings - Fork 45
/
aws-credentials.js
69 lines (53 loc) · 1.88 KB
/
aws-credentials.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
'use strict';
const ini = require('ini');
const fs = require('fs');
const path = require('path');
const mkdirp = require('mkdirp');
class AwsCredentials {
save(credentials, profile, done) {
this.saveAsIniFile(credentials, profile, done);
}
saveAsIniFile(credentials, profile, done) {
const home = AwsCredentials.resolveHomePath();
const configFile = path.join(home, '.aws', 'credentials');
if (!credentials) {
return done(new Error('Invalid AWS credentials'));
}
if (!profile) {
return done(new Error('Cannot save AWS credentials, profile not set'));
}
if (!home) {
return done(new Error('Cannot save AWS credentials, HOME path not set'));
}
// mkdirp is a no-op if the directory already exists
mkdirp(path.join(home, '.aws'), '0700', (mkDirErr) => {
if (mkDirErr) {
return done(mkDirErr);
}
fs.readFile(configFile, 'utf8', (fsErr, data) => {
if (fsErr && fsErr.code !== 'ENOENT') {
return done(fsErr);
}
let config = Object.create(null);
if (data && data !== '') {
config = ini.parse(data);
}
config[profile] = {};
config[profile].aws_access_key_id = credentials.AccessKeyId;
config[profile].aws_secret_access_key = credentials.SecretAccessKey;
config[profile].aws_session_token = credentials.SessionToken;
// Some libraries e.g. boto v2.38.0, expect an "aws_security_token" entry.
config[profile].aws_security_token = credentials.SessionToken;
config = ini.encode(config, {whitespace: true});
fs.writeFile(configFile, config, 'utf8', done);
});
});
}
static resolveHomePath() {
const env = process.env;
return env.HOME ||
env.USERPROFILE ||
(env.HOMEPATH ? ((env.HOMEDRIVE || 'C:/') + env.HOMEPATH) : null);
}
}
module.exports = AwsCredentials;