2018-04-24 22:00:20 +02:00
|
|
|
import { ipcRenderer } from 'electron';
|
|
|
|
|
2021-06-09 22:53:54 +02:00
|
|
|
import { StorageService, StorageServiceOptions } from 'jslib-common/abstractions/storage.service';
|
2018-04-24 22:00:20 +02:00
|
|
|
|
|
|
|
export class ElectronRendererSecureStorageService implements StorageService {
|
2021-06-09 22:53:54 +02:00
|
|
|
async get<T>(key: string, options?: StorageServiceOptions): Promise<T> {
|
2018-04-24 22:00:20 +02:00
|
|
|
const val = ipcRenderer.sendSync('keytar', {
|
|
|
|
action: 'getPassword',
|
|
|
|
key: key,
|
2021-06-09 22:53:54 +02:00
|
|
|
keySuffix: options?.keySuffix ?? '',
|
2018-04-24 22:00:20 +02:00
|
|
|
});
|
|
|
|
return Promise.resolve(val != null ? JSON.parse(val) as T : null);
|
|
|
|
}
|
|
|
|
|
2021-06-09 22:53:54 +02:00
|
|
|
async has(key: string, options?: StorageServiceOptions): Promise<boolean> {
|
|
|
|
const val = ipcRenderer.sendSync('keytar', {
|
|
|
|
action: 'hasPassword',
|
|
|
|
key: key,
|
|
|
|
keySuffix: options?.keySuffix ?? '',
|
|
|
|
});
|
|
|
|
return Promise.resolve(!!val);
|
|
|
|
}
|
|
|
|
|
|
|
|
async save(key: string, obj: any, options?: StorageServiceOptions): Promise<any> {
|
2018-04-24 22:00:20 +02:00
|
|
|
ipcRenderer.sendSync('keytar', {
|
|
|
|
action: 'setPassword',
|
|
|
|
key: key,
|
2021-06-09 22:53:54 +02:00
|
|
|
keySuffix: options?.keySuffix ?? '',
|
2018-04-24 22:00:20 +02:00
|
|
|
value: JSON.stringify(obj),
|
|
|
|
});
|
|
|
|
return Promise.resolve();
|
|
|
|
}
|
|
|
|
|
2021-06-09 22:53:54 +02:00
|
|
|
async remove(key: string, options?: StorageServiceOptions): Promise<any> {
|
2018-04-24 22:00:20 +02:00
|
|
|
ipcRenderer.sendSync('keytar', {
|
|
|
|
action: 'deletePassword',
|
|
|
|
key: key,
|
2021-06-09 22:53:54 +02:00
|
|
|
keySuffix: options?.keySuffix ?? '',
|
2018-04-24 22:00:20 +02:00
|
|
|
});
|
|
|
|
return Promise.resolve();
|
|
|
|
}
|
|
|
|
}
|