summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMeiMei <30769358+mei23@users.noreply.github.com>2019-09-08 11:30:44 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2019-09-08 11:30:44 +0900
commitc033464b924a91c8e80bd8a315153037450dcf96 (patch)
tree8e173a83648ec853585e87cce4eba20315deb0a1 /src
parentUpdate README.md [AUTOGEN] (#5402) (diff)
downloadsharkey-c033464b924a91c8e80bd8a315153037450dcf96.tar.gz
sharkey-c033464b924a91c8e80bd8a315153037450dcf96.tar.bz2
sharkey-c033464b924a91c8e80bd8a315153037450dcf96.zip
AP Undo Announce (#5400)
* AP Undo Announce * Use activity id
Diffstat (limited to 'src')
-rw-r--r--src/remote/activitypub/kernel/undo/announce.ts16
-rw-r--r--src/remote/activitypub/kernel/undo/index.ts6
-rw-r--r--src/services/note/delete.ts14
3 files changed, 34 insertions, 2 deletions
diff --git a/src/remote/activitypub/kernel/undo/announce.ts b/src/remote/activitypub/kernel/undo/announce.ts
new file mode 100644
index 0000000000..38ce5b6c59
--- /dev/null
+++ b/src/remote/activitypub/kernel/undo/announce.ts
@@ -0,0 +1,16 @@
+import { Notes } from '../../../../models';
+import { IRemoteUser } from '../../../../models/entities/user';
+import { IAnnounce, getApId } from '../../type';
+import deleteNote from '../../../../services/note/delete';
+
+export const undoAnnounce = async (actor: IRemoteUser, activity: IAnnounce): Promise<void> => {
+ const uri = getApId(activity);
+
+ const note = await Notes.findOne({
+ uri
+ });
+
+ if (!note) return;
+
+ await deleteNote(actor, note);
+};
diff --git a/src/remote/activitypub/kernel/undo/index.ts b/src/remote/activitypub/kernel/undo/index.ts
index 5f2e58c3bf..f49f66cc69 100644
--- a/src/remote/activitypub/kernel/undo/index.ts
+++ b/src/remote/activitypub/kernel/undo/index.ts
@@ -1,8 +1,9 @@
import { IRemoteUser } from '../../../../models/entities/user';
-import { IUndo, IFollow, IBlock, ILike } from '../../type';
+import { IUndo, IFollow, IBlock, ILike, IAnnounce } from '../../type';
import unfollow from './follow';
import unblock from './block';
import undoLike from './like';
+import { undoAnnounce } from './announce';
import Resolver from '../../resolver';
import { apLogger } from '../../logger';
@@ -38,5 +39,8 @@ export default async (actor: IRemoteUser, activity: IUndo): Promise<void> => {
case 'Like':
undoLike(actor, object as ILike);
break;
+ case 'Announce':
+ undoAnnounce(actor, object as IAnnounce);
+ break;
}
};
diff --git a/src/services/note/delete.ts b/src/services/note/delete.ts
index 95776f7287..0f087de420 100644
--- a/src/services/note/delete.ts
+++ b/src/services/note/delete.ts
@@ -1,5 +1,7 @@
import { publishNoteStream } from '../stream';
import renderDelete from '../../remote/activitypub/renderer/delete';
+import renderAnnounce from '../../remote/activitypub/renderer/announce';
+import renderUndo from '../../remote/activitypub/renderer/undo';
import { renderActivity } from '../../remote/activitypub/renderer';
import { deliver } from '../../queue';
import renderTombstone from '../../remote/activitypub/renderer/tombstone';
@@ -35,7 +37,17 @@ export default async function(user: User, note: Note, quiet = false) {
//#region ローカルの投稿なら削除アクティビティを配送
if (Users.isLocalUser(user)) {
- const content = renderActivity(renderDelete(renderTombstone(`${config.url}/notes/${note.id}`), user));
+ let renote: Note | undefined;
+
+ if (note.renoteId && note.text == null && !note.hasPoll && (note.fileIds == null || note.fileIds.length == 0)) {
+ renote = await Notes.findOne({
+ id: note.renoteId
+ });
+ }
+
+ const content = renderActivity(renote
+ ? renderUndo(renderAnnounce(renote.uri || `${config.url}/notes/${renote.id}`, note), user)
+ : renderDelete(renderTombstone(`${config.url}/notes/${note.id}`), user));
const queue: string[] = [];