diff --git a/keyserver/src/deleters/account-deleters.js b/keyserver/src/deleters/account-deleters.js --- a/keyserver/src/deleters/account-deleters.js +++ b/keyserver/src/deleters/account-deleters.js @@ -17,9 +17,11 @@ fetchUsername, } from '../fetchers/user-fetchers.js'; import { rescindPushNotifs } from '../push/rescind.js'; +import { removeBlobHolders } from '../services/blob.js'; import { createNewAnonymousCookie } from '../session/cookies.js'; import type { Viewer, AnonymousViewerData } from '../session/viewer.js'; import { fetchOlmAccount } from '../updaters/olm-account-updater.js'; +import { blobHoldersFromUploadRows } from '../uploads/media-utils.js'; async function deleteAccount(viewer: Viewer): Promise { if (!viewer.loggedIn) { @@ -33,6 +35,12 @@ (user: UserInfo): boolean => user.id !== deletedUserID, ); + const holdersQuery = SQL` + SELECT extra + FROM uploads + WHERE user_container = ${deletedUserID} + `; + // TODO: if this results in any orphaned orgs, convert them to chats const deletionQuery = SQL` START TRANSACTION; @@ -71,6 +79,10 @@ COMMIT; `; + const [holderRows] = await dbQuery(holdersQuery); + const blobHolders = blobHoldersFromUploadRows(holderRows); + ignorePromiseRejections(removeBlobHolders(blobHolders)); + const deletionPromise = dbQuery(deletionQuery, { multipleStatements: true }); const anonymousViewerDataPromise: Promise = (async () => {