Skip to content

Commit 44b2644

Browse files
Partial refactor: Break KeychainServiceDriver into .keytar and .electron files
1 parent c6ea45e commit 44b2644

File tree

4 files changed

+51
-14
lines changed

4 files changed

+51
-14
lines changed

.eslintignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1032,8 +1032,9 @@ packages/lib/services/joplinCloudUtils.js
10321032
packages/lib/services/joplinServer/personalizedUserContentBaseUrl.js
10331033
packages/lib/services/keychain/KeychainService.js
10341034
packages/lib/services/keychain/KeychainServiceDriver.dummy.js
1035+
packages/lib/services/keychain/KeychainServiceDriver.electron.js
1036+
packages/lib/services/keychain/KeychainServiceDriver.keytar.js
10351037
packages/lib/services/keychain/KeychainServiceDriver.mobile.js
1036-
packages/lib/services/keychain/KeychainServiceDriver.node.js
10371038
packages/lib/services/keychain/KeychainServiceDriverBase.js
10381039
packages/lib/services/noteList/defaultLeftToRightListRenderer.js
10391040
packages/lib/services/noteList/defaultListRenderer.js

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1011,8 +1011,9 @@ packages/lib/services/joplinCloudUtils.js
10111011
packages/lib/services/joplinServer/personalizedUserContentBaseUrl.js
10121012
packages/lib/services/keychain/KeychainService.js
10131013
packages/lib/services/keychain/KeychainServiceDriver.dummy.js
1014+
packages/lib/services/keychain/KeychainServiceDriver.electron.js
1015+
packages/lib/services/keychain/KeychainServiceDriver.keytar.js
10141016
packages/lib/services/keychain/KeychainServiceDriver.mobile.js
1015-
packages/lib/services/keychain/KeychainServiceDriver.node.js
10161017
packages/lib/services/keychain/KeychainServiceDriverBase.js
10171018
packages/lib/services/noteList/defaultLeftToRightListRenderer.js
10181019
packages/lib/services/noteList/defaultListRenderer.js

packages/lib/services/keychain/KeychainServiceDriver.node.ts renamed to packages/lib/services/keychain/KeychainServiceDriver.electron.ts

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import KeychainServiceDriverBase from './KeychainServiceDriverBase';
2+
import KeychainServiceDriverLegacy from './KeychainServiceDriver.keytar';
23
import shim from '../../shim';
34
import JoplinDatabase from '../../JoplinDatabase';
45
import Logger from '@joplin/utils/Logger';
@@ -15,10 +16,13 @@ const encryptedSettingKey = (key: string) => {
1516

1617
export default class KeychainServiceDriver extends KeychainServiceDriverBase {
1718

19+
private legacyDriver_: KeychainServiceDriverBase;
1820
private tableName = 'settings';
1921

2022
public constructor(appId: string, clientId: string, private db: JoplinDatabase) {
2123
super(appId, clientId);
24+
25+
this.legacyDriver_ = new KeychainServiceDriverLegacy(appId, clientId);
2226
}
2327

2428
public async setPassword(name: string, password: string): Promise<boolean> {
@@ -30,14 +34,10 @@ export default class KeychainServiceDriver extends KeychainServiceDriverBase {
3034
`INSERT OR REPLACE INTO ${this.tableName} (\`key\`, \`value\`) VALUES (?, ?)`,
3135
[encryptedSettingKey(name), encrypted],
3236
);
33-
} else if (shim.keytar()) {
34-
logger.debug('Saving password with keytar. ID: ', name);
35-
await shim.keytar().setPassword(`${this.appId}.${name}`, `${this.clientId}@joplin`, password);
37+
return true;
3638
} else {
37-
// Unsupported.
38-
return false;
39+
return this.legacyDriver_.setPassword(name, password);
3940
}
40-
return true;
4141
}
4242

4343
public async password(name: string): Promise<string> {
@@ -55,8 +55,8 @@ export default class KeychainServiceDriver extends KeychainServiceDriverBase {
5555
}
5656

5757
// Fall back to keytar for compatibility.
58-
if (result === null && shim.keytar()) {
59-
result = await shim.keytar().getPassword(`${this.appId}.${name}`, `${this.clientId}@joplin`);
58+
if (result === null) {
59+
result = await this.legacyDriver_.password(name);
6060
}
6161

6262
return result;
@@ -68,10 +68,7 @@ export default class KeychainServiceDriver extends KeychainServiceDriverBase {
6868
await this.db.exec(`DELETE FROM ${this.tableName} WHERE key = ?`, [encryptedSettingKey(name)]);
6969
}
7070

71-
if (shim.keytar()) {
72-
logger.debug('Trying to password from the keychain. ID: ', name);
73-
await shim.keytar().deletePassword(`${this.appId}.${name}`, `${this.clientId}@joplin`);
74-
}
71+
await this.legacyDriver_.deletePassword(name);
7572
}
7673

7774
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import KeychainServiceDriverBase from './KeychainServiceDriverBase';
2+
import shim from '../../shim';
3+
import Logger from '@joplin/utils/Logger';
4+
5+
const logger = Logger.create('KeychainServiceDriver.keytar');
6+
export default class KeychainServiceDriver extends KeychainServiceDriverBase {
7+
8+
public constructor(appId: string, clientId: string) {
9+
super(appId, clientId);
10+
}
11+
12+
public async setPassword(name: string, password: string): Promise<boolean> {
13+
if (shim.keytar()) {
14+
logger.debug('Saving password with keytar. ID: ', name);
15+
await shim.keytar().setPassword(`${this.appId}.${name}`, `${this.clientId}@joplin`, password);
16+
} else {
17+
// Unsupported.
18+
return false;
19+
}
20+
return true;
21+
}
22+
23+
public async password(name: string): Promise<string> {
24+
if (shim.keytar()) {
25+
return await shim.keytar().getPassword(`${this.appId}.${name}`, `${this.clientId}@joplin`);
26+
}
27+
28+
return null;
29+
}
30+
31+
public async deletePassword(name: string): Promise<void> {
32+
if (shim.keytar()) {
33+
logger.debug('Trying to delete password from the keychain. ID: ', name);
34+
await shim.keytar().deletePassword(`${this.appId}.${name}`, `${this.clientId}@joplin`);
35+
}
36+
}
37+
38+
}

0 commit comments

Comments
 (0)