Skip to content

Commit 38a907c

Browse files
committed
Proposed credentials API: Patchwork
1 parent 81b6eaf commit 38a907c

1 file changed

Lines changed: 18 additions & 11 deletions

File tree

src/vs/platform/credentials/node/credentialsService.ts

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,36 @@
66

77
import { TPromise } from 'vs/base/common/winjs.base';
88
import { ICredentialsService } from 'vs/platform/credentials/common/credentials';
9-
109
import * as keytarType from 'keytar';
11-
let keytar: typeof keytarType;
12-
require(['keytar'], ([k]) => {
13-
keytar = k;
14-
}, err => {
15-
// TODO chrmarti
16-
});
1710

1811
export class CredentialsService implements ICredentialsService {
1912

2013
_serviceBrand: any;
2114

15+
private keytarPromise: TPromise<typeof keytarType>;
16+
2217
readSecret(service: string, account: string): TPromise<string | undefined> {
23-
return TPromise.wrap(keytar.getPassword(service, account)
24-
.then(result => result === null ? undefined : result));
18+
return this.getKeytar()
19+
.then(keytar => TPromise.wrap(keytar.getPassword(service, account)))
20+
.then(result => result === null ? undefined : result);
2521
}
2622

2723
writeSecret(service: string, account: string, secret: string): TPromise<void> {
28-
return TPromise.wrap(keytar.setPassword(service, account, secret));
24+
return this.getKeytar()
25+
.then(keytar => TPromise.wrap(keytar.setPassword(service, account, secret)));
2926
}
3027

3128
deleteSecret(service: string, account: string): TPromise<boolean> {
32-
return TPromise.wrap(keytar.deletePassword(service, account));
29+
return this.getKeytar()
30+
.then(keytar => TPromise.wrap(keytar.deletePassword(service, account)));
31+
}
32+
33+
private getKeytar(): TPromise<typeof keytarType> {
34+
if (!this.keytarPromise) {
35+
this.keytarPromise = new TPromise<typeof keytarType>((c, e) => {
36+
require(['keytar'], c, e);
37+
});
38+
}
39+
return this.keytarPromise;
3340
}
3441
}

0 commit comments

Comments
 (0)