Fixed 267U.pre2

This commit is contained in:
2026-07-26 18:25:37 +09:00
parent 50bfaeafdf
commit 317d00a284
1286 changed files with 80222 additions and 1 deletions
@@ -0,0 +1,23 @@
import { apLogger } from "../../logger.js";
import { createDeleteAccountJob } from "../../../../queue/index.js";
import { Users } from "../../../../models/index.js";
const logger = apLogger;
export async function deleteActor(actor, uri) {
logger.info(`Deleting the Actor: ${uri}`);
if (actor.uri !== uri) {
return `skip: delete actor ${actor.uri} !== ${uri}`;
}
const user = await Users.findOneBy({
id: actor.id
});
if (!user) {
return `skip: actor ${actor.id} not found in the local database`;
} else if (user.isDeleted) {
return `skip: user ${user.id} already deleted`;
}
const job = await createDeleteAccountJob(actor);
await Users.update(actor.id, {
isDeleted: true
});
return `ok: queued ${job.name} ${job.id}`;
}
@@ -0,0 +1,42 @@
import { toSingle } from "../../../../prelude/array.js";
import { getApId, isTombstone, validPost, validActor } from "../../type.js";
import deleteNote from "./note.js";
import { deleteActor } from "./actor.js";
/**
* Handle delete activity
*/ export default (async (actor, activity)=>{
if ("actor" in activity && actor.uri !== activity.actor) {
throw new Error("invalid actor");
}
// Type of object to be deleted
let formerType;
if (typeof activity.object === "string") {
// The type is unknown, but it has disappeared
// anyway, so it does not remote resolve
formerType = undefined;
} else {
const object = activity.object;
if (isTombstone(object)) {
formerType = toSingle(object.formerType);
} else {
formerType = toSingle(object.type);
}
}
const uri = getApId(activity.object);
// Even if type is unknown, if actor and object are the same,
// it must be `Person`.
if (!formerType && actor.uri === uri) {
formerType = "Person";
}
// If not, fallback to `Note`.
if (!formerType) {
formerType = "Note";
}
if (validPost.includes(formerType)) {
return await deleteNote(actor, uri);
} else if (validActor.includes(formerType)) {
return await deleteActor(actor, uri);
} else {
return `Unknown type ${formerType}`;
}
});
@@ -0,0 +1,30 @@
import deleteNode from "../../../../services/note/delete.js";
import { apLogger } from "../../logger.js";
import DbResolver from "../../db-resolver.js";
import { getApLock } from "../../../../misc/app-lock.js";
import { deleteMessage } from "../../../../services/messages/delete.js";
const logger = apLogger;
export default async function(actor, uri) {
logger.info(`Deleting the Note: ${uri}`);
const unlock = await getApLock(uri);
try {
const dbResolver = new DbResolver();
const note = await dbResolver.getNoteFromApId(uri);
if (note == null) {
const message = await dbResolver.getMessageFromApId(uri);
if (message == null) return "message not found";
if (message.userId !== actor.id) {
return "The user trying to delete the post is not the post author";
}
await deleteMessage(message);
return "ok: message deleted";
}
if (note.userId !== actor.id) {
return "The user trying to delete the post is not the post author";
}
await deleteNode(actor, note);
return "ok: note deleted";
} finally{
unlock();
}
}