From ad3cb10722c50d364ddaf24e72e0e8e9cae5c061 Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Wed, 15 Nov 2023 06:05:08 -0500 Subject: [PATCH] Selected active account and did a little decoding an extraction before building JWT --- src/App.vue | 50 ++++++++++++++++-------------- sw_scripts/additional-scripts.js | 8 ++--- sw_scripts/safari-notifications.js | 30 +++++++++--------- 3 files changed, 45 insertions(+), 43 deletions(-) diff --git a/src/App.vue b/src/App.vue index c6d45d6..947be47 100644 --- a/src/App.vue +++ b/src/App.vue @@ -431,34 +431,38 @@ export default class App extends Vue { return outputArray; } - // The subscribeToPush method private subscribeToPush(): Promise { return new Promise((resolve, reject) => { - if ("serviceWorker" in navigator && "PushManager" in window) { - const applicationServerKey = this.urlBase64ToUint8Array(this.b64); - const options: PushSubscriptionOptions = { - userVisibleOnly: true, - applicationServerKey: applicationServerKey, - }; - console.log(options); - - navigator.serviceWorker.ready - .then((registration) => { - return registration.pushManager.subscribe(options); - }) - .then((subscription) => { - console.log("Push subscription successful:", subscription); - resolve(); - }) - .catch((error) => { - console.error("Push subscription failed:", error, options); - reject(error); - }); - } else { + if (!("serviceWorker" in navigator && "PushManager" in window)) { const errorMsg = "Push messaging is not supported"; console.warn(errorMsg); - reject(new Error(errorMsg)); + return reject(new Error(errorMsg)); } + + if (Notification.permission !== "granted") { + const errorMsg = "Notification permission not granted"; + console.warn(errorMsg); + return reject(new Error(errorMsg)); + } + + const applicationServerKey = this.urlBase64ToUint8Array(this.b64); + const options: PushSubscriptionOptions = { + userVisibleOnly: true, + applicationServerKey: applicationServerKey, + }; + + navigator.serviceWorker.ready + .then((registration) => { + return registration.pushManager.subscribe(options); + }) + .then((subscription) => { + console.log("Push subscription successful:", subscription); + resolve(); + }) + .catch((error) => { + console.error("Push subscription failed:", error, options); + reject(error); + }); }); } diff --git a/sw_scripts/additional-scripts.js b/sw_scripts/additional-scripts.js index c39a815..af65b25 100644 --- a/sw_scripts/additional-scripts.js +++ b/sw_scripts/additional-scripts.js @@ -5,11 +5,9 @@ importScripts( ); self.addEventListener("install", (event) => { - event.waitUntil( - (async () => { - importScripts("safari-notifications.js"); - })(), - ); + console.log("Install event fired."); + importScripts("safari-notifications.js"); + console.log("scripts imported", event); }); self.addEventListener("push", function (event) { diff --git a/sw_scripts/safari-notifications.js b/sw_scripts/safari-notifications.js index d1d486d..d80f903 100644 --- a/sw_scripts/safari-notifications.js +++ b/sw_scripts/safari-notifications.js @@ -87,6 +87,7 @@ async function fetchAllAccounts() { async function getNotificationCount() { let secret = null; let accounts = []; + let result = null; if ("secret" in self) { secret = self.secret; const secretUint8Array = self.decodeBase64(secret); @@ -94,22 +95,21 @@ async function getNotificationCount() { const activeDid = settings["activeDid"]; accounts = await fetchAllAccounts(); let did = null; - let result = null; - /** - for (var i = 0; i < accounts.length; i++) { - let account = accounts[i]; - let did = account['did']; - if (did == activeDid) { - let publicKeyHex = account['publicKeyHex']; - let identity = account['identity']; - - const messageWithNonceAsUint8Array = decodeBase64(identity); - const nonce = messageWithNonceAsUint8Array.slice(0, 24); - const message = messageWithNonceAsUint8Array.slice(24, identity.length); - } - **/ + for (var i = 0; i < accounts.length; i++) { + let account = accounts[i]; + let did = account["did"]; + if (did == activeDid) { + let publicKeyHex = account["publicKeyHex"]; + let identity = account["identity"]; + result = publicKeyHex; + const messageWithNonceAsUint8Array = self.decodeBase64(identity); + const nonce = messageWithNonceAsUint8Array.slice(0, 24); + const message = messageWithNonceAsUint8Array.slice(24, identity.length); + break; + } + } + return result; } - return accounts.length; } self.getNotificationCount = getNotificationCount;