Purge deleted users from user lookup caches
This commit is contained in:
parent
9e5f96b9ad
commit
c6dee2da09
3 changed files with 30 additions and 0 deletions
|
|
@ -8,6 +8,7 @@ import { MoreThan } from "typeorm";
|
||||||
import { deleteFileSync } from "@/services/drive/delete-file.js";
|
import { deleteFileSync } from "@/services/drive/delete-file.js";
|
||||||
import { sendEmail } from "@/services/send-email.js";
|
import { sendEmail } from "@/services/send-email.js";
|
||||||
import meilisearch from "@/db/meilisearch.js";
|
import meilisearch from "@/db/meilisearch.js";
|
||||||
|
import { publishInternalEvent } from "@/services/stream.js";
|
||||||
|
|
||||||
const logger = queueLogger.createSubLogger("delete-account");
|
const logger = queueLogger.createSubLogger("delete-account");
|
||||||
|
|
||||||
|
|
@ -18,6 +19,7 @@ export async function deleteAccount(
|
||||||
|
|
||||||
const user = await Users.findOneBy({ id: job.data.user.id });
|
const user = await Users.findOneBy({ id: job.data.user.id });
|
||||||
if (!user) return;
|
if (!user) return;
|
||||||
|
const isLocal = Users.isLocalUser(user);
|
||||||
|
|
||||||
{
|
{
|
||||||
// Delete notes
|
// Delete notes
|
||||||
|
|
@ -98,6 +100,7 @@ export async function deleteAccount(
|
||||||
// nop
|
// nop
|
||||||
} else {
|
} else {
|
||||||
await Users.delete(job.data.user.id);
|
await Users.delete(job.data.user.id);
|
||||||
|
publishInternalEvent(isLocal ? "localUserDeleted" : "remoteUserDeleted", { id: user.id });
|
||||||
}
|
}
|
||||||
|
|
||||||
return "Account deleted";
|
return "Account deleted";
|
||||||
|
|
|
||||||
|
|
@ -38,9 +38,15 @@ export interface InternalStreamTypes {
|
||||||
localUserUpdated: {
|
localUserUpdated: {
|
||||||
id: User["id"];
|
id: User["id"];
|
||||||
};
|
};
|
||||||
|
localUserDeleted: {
|
||||||
|
id: User["id"];
|
||||||
|
};
|
||||||
remoteUserUpdated: {
|
remoteUserUpdated: {
|
||||||
id: User["id"];
|
id: User["id"];
|
||||||
};
|
};
|
||||||
|
remoteUserDeleted: {
|
||||||
|
id: User["id"];
|
||||||
|
};
|
||||||
webhookCreated: Webhook;
|
webhookCreated: Webhook;
|
||||||
webhookDeleted: Webhook;
|
webhookDeleted: Webhook;
|
||||||
webhookUpdated: Webhook;
|
webhookUpdated: Webhook;
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,19 @@ subscriber.on("message", async (_, data) => {
|
||||||
if (obj.channel === "internal") {
|
if (obj.channel === "internal") {
|
||||||
const { type, body } = obj.message;
|
const { type, body } = obj.message;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
case "localUserDeleted": {
|
||||||
|
await userByIdCache.delete(body.id);
|
||||||
|
await localUserByIdCache.delete(body.id);
|
||||||
|
const toDelete = Array.from(await localUserByNativeTokenCache.getAll())
|
||||||
|
.filter((v) => v[1]?.id === body.id)
|
||||||
|
.map((v) => v[0]);
|
||||||
|
await localUserByNativeTokenCache.delete(...toDelete);
|
||||||
|
const uriCacheToDelete = Array.from(await uriPersonCache.getAll())
|
||||||
|
.filter((v) => v[1]?.id === body.id)
|
||||||
|
.map((v) => v[0]);
|
||||||
|
await uriPersonCache.delete(...uriCacheToDelete);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case "localUserUpdated": {
|
case "localUserUpdated": {
|
||||||
await userByIdCache.delete(body.id);
|
await userByIdCache.delete(body.id);
|
||||||
await localUserByIdCache.delete(body.id);
|
await localUserByIdCache.delete(body.id);
|
||||||
|
|
@ -55,6 +68,14 @@ subscriber.on("message", async (_, data) => {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case "remoteUserDeleted": {
|
||||||
|
await userByIdCache.delete(body.id);
|
||||||
|
const toDelete = Array.from(await uriPersonCache.getAll())
|
||||||
|
.filter((v) => v[1]?.id === body.id)
|
||||||
|
.map((v) => v[0]);
|
||||||
|
await uriPersonCache.delete(...toDelete);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case "userTokenRegenerated": {
|
case "userTokenRegenerated": {
|
||||||
const user = (await Users.findOneByOrFail({
|
const user = (await Users.findOneByOrFail({
|
||||||
id: body.id,
|
id: body.id,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue