From 568fb14f3ac5d7251833dd18ed880e2146b46ecc Mon Sep 17 00:00:00 2001 From: Johnny A <5891646+johnny243@users.noreply.github.com> Date: Thu, 3 Sep 2020 05:19:21 -0700 Subject: [PATCH] feat: namespaced keychain (#428) * feat: namespaced keychain * fix: update device interface * fix: update WebApplication * chore(deps): update snjs * fix: Bridge interface * chore(deps): update snjs Co-authored-by: Johnny Almonte --- app/assets/javascripts/services/bridge.ts | 2 + .../javascripts/ui_models/application.ts | 4 +- .../javascripts/web_device_interface.ts | 38 +++++++++++++++---- package-lock.json | 4 +- package.json | 2 +- 5 files changed, 36 insertions(+), 14 deletions(-) diff --git a/app/assets/javascripts/services/bridge.ts b/app/assets/javascripts/services/bridge.ts index 5b67e3a95..08fa09076 100644 --- a/app/assets/javascripts/services/bridge.ts +++ b/app/assets/javascripts/services/bridge.ts @@ -8,12 +8,14 @@ export interface Bridge { const KEYCHAIN_STORAGE_KEY = 'keychain'; export class BrowserBridge implements Bridge { + async getKeychainValue(): Promise { const value = localStorage.getItem(KEYCHAIN_STORAGE_KEY); if (value) { return JSON.parse(value); } } + async setKeychainValue(value: any): Promise { localStorage.setItem(KEYCHAIN_STORAGE_KEY, JSON.stringify(value)); } diff --git a/app/assets/javascripts/ui_models/application.ts b/app/assets/javascripts/ui_models/application.ts index 5ae97a792..4a68378b7 100644 --- a/app/assets/javascripts/ui_models/application.ts +++ b/app/assets/javascripts/ui_models/application.ts @@ -59,9 +59,7 @@ export class WebApplication extends SNApplication { defaultSyncServerHost: string, bridge: Bridge, ) { - const namespace = ''; const deviceInterface = new WebDeviceInterface( - namespace, $timeout, bridge ); @@ -71,7 +69,7 @@ export class WebApplication extends SNApplication { deviceInterface, new SNWebCrypto(), new AlertService(), - namespace, + undefined, undefined, undefined, defaultSyncServerHost diff --git a/app/assets/javascripts/web_device_interface.ts b/app/assets/javascripts/web_device_interface.ts index e46e7c58c..395bf7b41 100644 --- a/app/assets/javascripts/web_device_interface.ts +++ b/app/assets/javascripts/web_device_interface.ts @@ -7,12 +7,10 @@ export class WebDeviceInterface extends DeviceInterface { private database: Database constructor( - namespace: string, timeout: any, private bridge: Bridge ) { super( - namespace, timeout || setTimeout.bind(getGlobalScope()), setInterval.bind(getGlobalScope()) ); @@ -100,15 +98,39 @@ export class WebDeviceInterface extends DeviceInterface { return this.database.clearAllPayloads(); } - getKeychainValue(): Promise { + async getNamespacedKeychainValue() { + const keychain = await this.getRawKeychainValue(); + if (!keychain) { + return; + } + return keychain[this.namespace!.identifier]; + } + + async setNamespacedKeychainValue(value: any) { + let keychain = await this.getRawKeychainValue(); + if (!keychain) { + keychain = {}; + } + this.bridge.setKeychainValue({ + ...keychain, + [this.namespace!.identifier]: value + }); + } + + async clearNamespacedKeychainValue() { + const keychain = await this.getRawKeychainValue(); + if (!keychain) { + return; + } + delete keychain[this.namespace!.identifier]; + this.bridge.setKeychainValue(keychain); + } + + getRawKeychainValue(): Promise { return this.bridge.getKeychainValue(); } - setKeychainValue(value: any) { - return this.bridge.setKeychainValue(value); - } - - clearKeychainValue() { + clearRawKeychainValue() { return this.bridge.clearKeychainValue(); } diff --git a/package-lock.json b/package-lock.json index 7025094a3..353a4acbf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10956,8 +10956,8 @@ "from": "github:standardnotes/sncrypto#4a080efeb646dbf9ca3dffdfcfa9d081b4dc6de0" }, "snjs": { - "version": "github:standardnotes/snjs#7c983dc558ea7777a4957b44efa3362aaf18d3c9", - "from": "github:standardnotes/snjs#7c983dc558ea7777a4957b44efa3362aaf18d3c9" + "version": "github:standardnotes/snjs#cb83f0dfacd6b0a9ac4b51cb32f2534f2a23d232", + "from": "github:standardnotes/snjs#cb83f0dfacd6b0a9ac4b51cb32f2534f2a23d232" }, "sockjs": { "version": "0.3.20", diff --git a/package.json b/package.json index c1e0c7474..9983d5a82 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,6 @@ }, "dependencies": { "sncrypto": "github:standardnotes/sncrypto#4a080efeb646dbf9ca3dffdfcfa9d081b4dc6de0", - "snjs": "github:standardnotes/snjs#7c983dc558ea7777a4957b44efa3362aaf18d3c9" + "snjs": "github:standardnotes/snjs#cb83f0dfacd6b0a9ac4b51cb32f2534f2a23d232" } }