summaryrefslogtreecommitdiff
path: root/src/remote/activitypub
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-09-22 22:53:41 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2021-09-22 22:53:41 +0900
commit338793d891d1657f158cd4dc83f998e124bd7e45 (patch)
treed47080ad4fcff61ad5eafdb8eb1e3ca997739115 /src/remote/activitypub
parentMerge branch 'develop' (diff)
parent12.91.0 (diff)
downloadmisskey-338793d891d1657f158cd4dc83f998e124bd7e45.tar.gz
misskey-338793d891d1657f158cd4dc83f998e124bd7e45.tar.bz2
misskey-338793d891d1657f158cd4dc83f998e124bd7e45.zip
Merge branch 'develop'
Diffstat (limited to 'src/remote/activitypub')
-rw-r--r--src/remote/activitypub/kernel/delete/actor.ts26
-rw-r--r--src/remote/activitypub/kernel/delete/index.ts3
-rw-r--r--src/remote/activitypub/resolver.ts8
3 files changed, 36 insertions, 1 deletions
diff --git a/src/remote/activitypub/kernel/delete/actor.ts b/src/remote/activitypub/kernel/delete/actor.ts
new file mode 100644
index 0000000000..502f8d5ab5
--- /dev/null
+++ b/src/remote/activitypub/kernel/delete/actor.ts
@@ -0,0 +1,26 @@
+import { apLogger } from '../../logger';
+import { createDeleteAccountJob } from '@/queue';
+import { IRemoteUser } from '@/models/entities/user';
+import { Users } from '@/models/index';
+
+const logger = apLogger;
+
+export async function deleteActor(actor: IRemoteUser, uri: string): Promise<string> {
+ logger.info(`Deleting the Actor: ${uri}`);
+
+ if (actor.uri !== uri) {
+ return `skip: delete actor ${actor.uri} !== ${uri}`;
+ }
+
+ if (actor.isDeleted) {
+ logger.info(`skip: already deleted`);
+ }
+
+ const job = await createDeleteAccountJob(actor);
+
+ await Users.update(actor.id, {
+ isDeleted: true,
+ });
+
+ return `ok: queued ${job.name} ${job.id}`;
+}
diff --git a/src/remote/activitypub/kernel/delete/index.ts b/src/remote/activitypub/kernel/delete/index.ts
index 474f3f6d60..86a452de76 100644
--- a/src/remote/activitypub/kernel/delete/index.ts
+++ b/src/remote/activitypub/kernel/delete/index.ts
@@ -2,6 +2,7 @@ import deleteNote from './note';
import { IRemoteUser } from '@/models/entities/user';
import { IDelete, getApId, isTombstone, IObject, validPost, validActor } from '../../type';
import { toSingle } from '@/prelude/array';
+import { deleteActor } from './actor';
/**
* 削除アクティビティを捌きます
@@ -41,7 +42,7 @@ export default async (actor: IRemoteUser, activity: IDelete): Promise<string> =>
if (validPost.includes(formarType)) {
return await deleteNote(actor, uri);
} else if (validActor.includes(formarType)) {
- return `Delete Actor is not implanted`;
+ return await deleteActor(actor, uri);
} else {
return `Unknown type ${formarType}`;
}
diff --git a/src/remote/activitypub/resolver.ts b/src/remote/activitypub/resolver.ts
index 32f3d9ef26..f392a65e3a 100644
--- a/src/remote/activitypub/resolver.ts
+++ b/src/remote/activitypub/resolver.ts
@@ -4,6 +4,8 @@ import { ILocalUser } from '@/models/entities/user';
import { getInstanceActor } from '@/services/instance-actor';
import { signedGet } from './request';
import { IObject, isCollectionOrOrderedCollection, ICollection, IOrderedCollection } from './type';
+import { fetchMeta } from '@/misc/fetch-meta';
+import { extractDbHost } from '@/misc/convert-host';
export default class Resolver {
private history: Set<string>;
@@ -44,6 +46,12 @@ export default class Resolver {
this.history.add(value);
+ const meta = await fetchMeta();
+ const host = extractDbHost(value);
+ if (meta.blockedHosts.includes(host)) {
+ throw new Error('Instance is blocked');
+ }
+
if (config.signToActivityPubGet && !this.user) {
this.user = await getInstanceActor();
}