Changeset View
Changeset View
Standalone View
Standalone View
web/database/worker/db-worker.js
Show First 20 Lines • Show All 55 Lines • ▼ Show 20 Lines | |||||
let encryptionKey: ?CryptoKey = null; | let encryptionKey: ?CryptoKey = null; | ||||
let persistNeeded: boolean = false; | let persistNeeded: boolean = false; | ||||
let persistInProgress: boolean = false; | let persistInProgress: boolean = false; | ||||
async function initDatabase(sqljsFilePath: string, sqljsFilename: ?string) { | async function initDatabase(sqljsFilePath: string, sqljsFilename: ?string) { | ||||
encryptionKey = await localforage.getItem(SQLITE_ENCRYPTION_KEY); | encryptionKey = await localforage.getItem(SQLITE_ENCRYPTION_KEY); | ||||
if (!encryptionKey) { | if (!encryptionKey) { | ||||
const cryptoKey = await generateDatabaseCryptoKey(); | const cryptoKey = await generateDatabaseCryptoKey({ extractable: false }); | ||||
await localforage.setItem(SQLITE_ENCRYPTION_KEY, cryptoKey); | await localforage.setItem(SQLITE_ENCRYPTION_KEY, cryptoKey); | ||||
} | } | ||||
const encryptedContent = await localforage.getItem(SQLITE_CONTENT); | const encryptedContent = await localforage.getItem(SQLITE_CONTENT); | ||||
let dbContent = null; | let dbContent = null; | ||||
try { | try { | ||||
if (encryptionKey && encryptedContent) { | if (encryptionKey && encryptedContent) { | ||||
▲ Show 20 Lines • Show All 113 Lines • ▼ Show 20 Lines | ): Promise<?WorkerResponseMessage> { | ||||
if (message.type === workerRequestMessageTypes.PING) { | if (message.type === workerRequestMessageTypes.PING) { | ||||
return { | return { | ||||
type: workerResponseMessageTypes.PONG, | type: workerResponseMessageTypes.PONG, | ||||
text: 'PONG', | text: 'PONG', | ||||
}; | }; | ||||
} else if ( | } else if ( | ||||
message.type === workerRequestMessageTypes.GENERATE_DATABASE_ENCRYPTION_KEY | message.type === workerRequestMessageTypes.GENERATE_DATABASE_ENCRYPTION_KEY | ||||
) { | ) { | ||||
const cryptoKey = await generateDatabaseCryptoKey(); | const cryptoKey = await generateDatabaseCryptoKey({ extractable: false }); | ||||
await localforage.setItem(SQLITE_ENCRYPTION_KEY, cryptoKey); | await localforage.setItem(SQLITE_ENCRYPTION_KEY, cryptoKey); | ||||
return undefined; | return undefined; | ||||
} | } | ||||
// database operations | // database operations | ||||
if (message.type === workerRequestMessageTypes.INIT) { | if (message.type === workerRequestMessageTypes.INIT) { | ||||
await initDatabase(message.sqljsFilePath, message.sqljsFilename); | await initDatabase(message.sqljsFilePath, message.sqljsFilename); | ||||
return undefined; | return undefined; | ||||
▲ Show 20 Lines • Show All 100 Lines • Show Last 20 Lines |