|
|
@ -1,3 +1,8 @@ |
|
|
|
|
|
|
|
importScripts("https://cdn.jsdelivr.net/npm/tweetnacl-util@0.15.1/nacl-util.min.js"); |
|
|
|
importScripts("https://cdnjs.cloudflare.com/ajax/libs/tweetnacl/1.0.2/nacl.min.js"); |
|
|
|
importScripts("https://cdn.jsdelivr.net/npm/@sphereon/did-jwt/build/index.min.js"); |
|
|
|
|
|
|
|
self.addEventListener("push", function (event) { |
|
|
|
let payload; |
|
|
|
if (event.data) { |
|
|
@ -13,3 +18,74 @@ self.addEventListener("push", function (event) { |
|
|
|
|
|
|
|
event.waitUntil(self.registration.showNotification(title, options)); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
self.addEventListener('message', function(event) { |
|
|
|
const data = event.data; |
|
|
|
|
|
|
|
const secret = await page.evaluate(() => { |
|
|
|
const secret = localStorage.getItem('secret'); |
|
|
|
return secret; |
|
|
|
}); |
|
|
|
|
|
|
|
const secretUint8Array = util.decodeBase64(secret); |
|
|
|
|
|
|
|
const dbNames = await page.evaluate(() => { |
|
|
|
return new Promise((resolve, reject) => { |
|
|
|
let db = indexedDB.open('TimeSafari'); |
|
|
|
db.onsuccess = async (event) => { |
|
|
|
this.db = event.target.result; |
|
|
|
const transaction = this.db.transaction('settings', 'readonly'); |
|
|
|
const objectStore = transaction.objectStore('settings'); |
|
|
|
const request = objectStore.get(1); |
|
|
|
request.onsuccess = () => { |
|
|
|
const row = request.result; |
|
|
|
resolve(row); |
|
|
|
} |
|
|
|
}; |
|
|
|
}); |
|
|
|
}, {timeout: 10000}); |
|
|
|
|
|
|
|
const dbAccounts = await page.evaluate(() => { |
|
|
|
return new Promise((resolve, reject) => { |
|
|
|
let db = indexedDB.open('TimeSafariAccounts'); |
|
|
|
db.onsuccess = async (event) => { |
|
|
|
this.db = event.target.result; |
|
|
|
const transaction = this.db.transaction('accounts', 'readonly'); |
|
|
|
const objectStore = transaction.objectStore('accounts'); |
|
|
|
const request = objectStore.getAll(); |
|
|
|
request.onsuccess = () => { |
|
|
|
const rows = request.result; |
|
|
|
resolve(rows); |
|
|
|
} |
|
|
|
}; |
|
|
|
}); |
|
|
|
}, {timeout: 10000}); |
|
|
|
|
|
|
|
for (var i = 0; i < dbAccounts.length; i++) { |
|
|
|
let account = dbAccounts[i]; |
|
|
|
let did = account['did']; |
|
|
|
let publicKeyHex = account['publicKeyHex']; |
|
|
|
let identity = account['identity']; |
|
|
|
|
|
|
|
const messageWithNonceAsUint8Array = util.decodeBase64(identity); |
|
|
|
const nonce = messageWithNonceAsUint8Array.slice(0, 24); |
|
|
|
const message = messageWithNonceAsUint8Array.slice(24, identity.length); |
|
|
|
|
|
|
|
const decrypted = nacl.secretbox.open(message, nonce, secretUint8Array); |
|
|
|
|
|
|
|
const decoder = new TextDecoder('utf-8'); |
|
|
|
const string = decoder.decode(decrypted); |
|
|
|
const indentifier = JSON.parse(string); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
switch (data.command) { |
|
|
|
case 'account': |
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
console.log('Unknown command:', data.command); |
|
|
|
} |
|
|
|
}); |
|
|
|