Skip to content

Commit 8893bd9

Browse files
authored
Merge pull request #69 from serverless/add-automatic-tilde-expansion
Add automatic tilde expansion
2 parents b719c0b + 8108055 commit 8893bd9

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

provider/googleProvider.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
'use strict';
22

3+
const path = require('path');
34
const fs = require('fs');
5+
const os = require('os');
46

57
const BbPromise = require('bluebird');
68
const _ = require('lodash');
@@ -72,7 +74,15 @@ class GoogleProvider {
7274
}
7375

7476
getAuthClient() {
75-
const keyFileContent = fs.readFileSync(this.serverless.service.provider.credentials).toString();
77+
let credentials = this.serverless.service.provider.credentials;
78+
const credParts = credentials.split(path.sep);
79+
80+
if (credParts[0] === '~') {
81+
credParts[0] = os.homedir();
82+
credentials = credParts.reduce((memo, part) => path.join(memo, part), '');
83+
}
84+
85+
const keyFileContent = fs.readFileSync(credentials).toString();
7686
const key = JSON.parse(keyFileContent);
7787

7888
return new google.auth

provider/googleProvider.test.js

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22

33
const fs = require('fs');
4+
const os = require('os');
45

56
const sinon = require('sinon');
67
const google = require('googleapis');
@@ -13,24 +14,28 @@ describe('GoogleProvider', () => {
1314
let googleProvider;
1415
let serverless;
1516
let setProviderStub;
17+
let homedirStub;
1618

1719
beforeEach(() => {
1820
serverless = new Serverless();
1921
serverless.service = {
2022
provider: {
2123
project: 'example-project',
22-
credentials: '12345678-abcdefgh',
24+
credentials: '/root/.gcloud/project-1234.json',
2325
},
2426
};
2527
setProviderStub = sinon.stub(serverless, 'setProvider').returns();
2628
readFileSyncStub = sinon.stub(fs, 'readFileSync')
2729
.returns('{"client_email": "[email protected]","private_key": "wasdqwerty"}');
30+
homedirStub = sinon.stub(os, 'homedir')
31+
.returns('/root');
2832
googleProvider = new GoogleProvider(serverless);
2933
});
3034

3135
afterEach(() => {
3236
serverless.setProvider.restore();
3337
fs.readFileSync.restore();
38+
os.homedir.restore();
3439
});
3540

3641
describe('#getProviderName()', () => {
@@ -65,7 +70,19 @@ describe('GoogleProvider', () => {
6570
it('should return a new authClient', () => {
6671
const authClient = googleProvider.getAuthClient();
6772

68-
expect(readFileSyncStub.calledOnce).toEqual(true);
73+
expect(readFileSyncStub.calledWithExactly('/root/.gcloud/project-1234.json'))
74+
.toEqual(true);
75+
expect(authClient).toBeInstanceOf(google.auth.JWT);
76+
});
77+
78+
it('should expand tilde characters in credentials file paths', () => {
79+
googleProvider.serverless.service.provider.credentials = '~/.gcloud/project-1234.json';
80+
81+
const authClient = googleProvider.getAuthClient();
82+
83+
expect(homedirStub.calledOnce).toEqual(true);
84+
expect(readFileSyncStub.calledWithExactly('/root/.gcloud/project-1234.json'))
85+
.toEqual(true);
6986
expect(authClient).toBeInstanceOf(google.auth.JWT);
7087
});
7188
});

0 commit comments

Comments
 (0)