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 @@ -2,3 +2,5 @@ export const SQLITE_CONTENT = 'sqliteFileContent'; export const SQLITE_ENCRYPTION_KEY = 'encryptionKey'; + +export const CURRENT_USER_ID_KEY = 'current_user_id'; 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 @@ -24,7 +24,12 @@ removeAllDrafts, updateDraft, } from '../queries/draft-queries.js'; -import { SQLITE_CONTENT, SQLITE_ENCRYPTION_KEY } from '../utils/constants.js'; +import { getMetadata, setMetadata } from '../queries/metadata-queries.js'; +import { + CURRENT_USER_ID_KEY, + SQLITE_CONTENT, + SQLITE_ENCRYPTION_KEY, +} from '../utils/constants.js'; import { generateDatabaseCryptoKey } from '../utils/worker-crypto-utils.js'; const localforageConfig: PartialConfig = { @@ -124,6 +129,21 @@ type: workerResponseMessageTypes.CLIENT_STORE, store: getClientStore(), }; + } else if (message.type === workerRequestMessageTypes.SET_CURRENT_USER_ID) { + if (!sqliteDb) { + throw new Error('Database not initialized'); + } + setMetadata(sqliteDb, CURRENT_USER_ID_KEY, message.userID); + return; + } else if (message.type === workerRequestMessageTypes.GET_CURRENT_USER_ID) { + if (!sqliteDb) { + throw new Error('Database not initialized'); + } + const userID = getMetadata(sqliteDb, CURRENT_USER_ID_KEY); + return { + type: workerResponseMessageTypes.GET_CURRENT_USER_ID, + userID, + }; } 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 @@ -12,6 +12,8 @@ GENERATE_DATABASE_ENCRYPTION_KEY: 2, PROCESS_STORE_OPERATIONS: 3, GET_CLIENT_STORE: 4, + SET_CURRENT_USER_ID: 5, + GET_CURRENT_USER_ID: 6, }); export type PingWorkerRequestMessage = { @@ -38,12 +40,23 @@ +type: 4, }; +export type SetCurrentUserIDRequestMessage = { + +type: 5, + +userID: string, +}; + +export type GetCurrentUserIDRequestMessage = { + +type: 6, +}; + export type WorkerRequestMessage = | PingWorkerRequestMessage | InitWorkerRequestMessage | GenerateDatabaseEncryptionKeyRequestMessage | ProcessStoreOperationsRequestMessage - | GetClientStoreRequestMessage; + | GetClientStoreRequestMessage + | SetCurrentUserIDRequestMessage + | GetCurrentUserIDRequestMessage; export type WorkerRequestProxyMessage = { +id: number, @@ -54,6 +67,7 @@ export const workerResponseMessageTypes = Object.freeze({ PONG: 0, CLIENT_STORE: 1, + GET_CURRENT_USER_ID: 2, }); export type PongWorkerResponseMessage = { @@ -66,9 +80,15 @@ +store: ClientDBStore, }; +export type GetCurrentUserIDResponseMessage = { + +type: 2, + +userID: ?string, +}; + export type WorkerResponseMessage = | PongWorkerResponseMessage - | ClientStoreResponseMessage; + | ClientStoreResponseMessage + | GetCurrentUserIDResponseMessage; export type WorkerResponseProxyMessage = { +id?: number,