40 lines
1.4 KiB
JavaScript
40 lines
1.4 KiB
JavaScript
import renderDelete from "../remote/activitypub/renderer/delete.js";
|
|
import { renderActivity } from "../remote/activitypub/renderer/index.js";
|
|
import { deliver } from "../queue/index.js";
|
|
import config from "../config/index.js";
|
|
import { Users, Followings } from "../models/index.js";
|
|
import { Not, IsNull } from "typeorm";
|
|
import { publishInternalEvent } from "./stream.js";
|
|
export async function doPostSuspend(user) {
|
|
publishInternalEvent("userChangeSuspendedState", {
|
|
id: user.id,
|
|
isSuspended: true
|
|
});
|
|
if (Users.isLocalUser(user)) {
|
|
// Send Delete to all known SharedInboxes
|
|
const content = renderActivity(renderDelete(`${config.url}/users/${user.id}`, user));
|
|
const queue = [];
|
|
const followings = await Followings.find({
|
|
where: [
|
|
{
|
|
followerSharedInbox: Not(IsNull())
|
|
},
|
|
{
|
|
followeeSharedInbox: Not(IsNull())
|
|
}
|
|
],
|
|
select: [
|
|
"followerSharedInbox",
|
|
"followeeSharedInbox"
|
|
]
|
|
});
|
|
const inboxes = followings.map((x)=>x.followerSharedInbox || x.followeeSharedInbox);
|
|
for (const inbox of inboxes){
|
|
if (inbox != null && !queue.includes(inbox)) queue.push(inbox);
|
|
}
|
|
for (const inbox of queue){
|
|
deliver(user, content, inbox);
|
|
}
|
|
}
|
|
}
|