diff --git a/web/database/utils/constants.js b/web/database/utils/constants.js --- a/web/database/utils/constants.js +++ b/web/database/utils/constants.js @@ -1,3 +1,4 @@ // @flow export const SQLITE_CONTENT = 'sqliteFileContent'; +export const SQLITE_ENCRYPTION_KEY = 'encryptionKey'; diff --git a/web/database/worker/db-worker.js b/web/database/worker/db-worker.js --- a/web/database/worker/db-worker.js +++ b/web/database/worker/db-worker.js @@ -12,7 +12,8 @@ type WorkerRequestProxyMessage, } from '../../types/worker-types.js'; import { getSQLiteDBVersion } from '../queries/db-queries.js'; -import { SQLITE_CONTENT } from '../utils/constants.js'; +import { SQLITE_CONTENT, SQLITE_ENCRYPTION_KEY } from '../utils/constants.js'; +import { generateDatabaseCryptoKey } from '../utils/worker-crypto-utils.js'; const localforageConfig: PartialConfig = { driver: localforage.INDEXEDDB, @@ -59,6 +60,12 @@ } else if (message.type === workerRequestMessageTypes.INIT) { await initDatabase(message.sqljsFilePath, message.sqljsFilename); return; + } else if ( + message.type === workerRequestMessageTypes.GENERATE_DATABASE_ENCRYPTION_KEY + ) { + const cryptoKey = await generateDatabaseCryptoKey(); + await localforage.setItem(SQLITE_ENCRYPTION_KEY, cryptoKey); + return; } throw new Error('Request type not supported'); diff --git a/web/types/worker-types.js b/web/types/worker-types.js --- a/web/types/worker-types.js +++ b/web/types/worker-types.js @@ -4,6 +4,7 @@ export const workerRequestMessageTypes = Object.freeze({ PING: 0, INIT: 1, + GENERATE_DATABASE_ENCRYPTION_KEY: 2, }); export type PingWorkerRequestMessage = { @@ -17,9 +18,14 @@ +sqljsFilename: ?string, }; +export type GenerateDatabaseEncryptionKeyRequestMessage = { + +type: 2, +}; + export type WorkerRequestMessage = | PingWorkerRequestMessage - | InitWorkerRequestMessage; + | InitWorkerRequestMessage + | GenerateDatabaseEncryptionKeyRequestMessage; export type WorkerRequestProxyMessage = { +id: number,