summaryrefslogtreecommitdiff
path: root/packages/backend/src
diff options
context:
space:
mode:
authorMarie <github@yuugi.dev>2024-12-01 09:38:22 +0000
committerMarie <github@yuugi.dev>2024-12-01 09:38:22 +0000
commit7dc90e078ebdf62c8ff16cc3641ee3167f1531a4 (patch)
tree53366a9db0a02093bd7890713d0d62c292481895 /packages/backend/src
parentmerge: Add option `filePermissionBits` to override permissions on locally-sto... (diff)
parentinterpret Dislike activities as Undo(Like) (diff)
downloadsharkey-7dc90e078ebdf62c8ff16cc3641ee3167f1531a4.tar.gz
sharkey-7dc90e078ebdf62c8ff16cc3641ee3167f1531a4.tar.bz2
sharkey-7dc90e078ebdf62c8ff16cc3641ee3167f1531a4.zip
merge: Interpret Dislike activities as Undo(Like) (resolves #800) (!731)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/731 Closes #800 Approved-by: dakkar <dakkar@thenautilus.net> Approved-by: Marie <github@yuugi.dev>
Diffstat (limited to 'packages/backend/src')
-rw-r--r--packages/backend/src/core/activitypub/ApInboxService.ts13
-rw-r--r--packages/backend/src/core/activitypub/type.ts5
2 files changed, 15 insertions, 3 deletions
diff --git a/packages/backend/src/core/activitypub/ApInboxService.ts b/packages/backend/src/core/activitypub/ApInboxService.ts
index 5d0404d24e..75ba5e97b9 100644
--- a/packages/backend/src/core/activitypub/ApInboxService.ts
+++ b/packages/backend/src/core/activitypub/ApInboxService.ts
@@ -32,7 +32,7 @@ import { AbuseReportService } from '@/core/AbuseReportService.js';
import { FederatedInstanceService } from '@/core/FederatedInstanceService.js';
import { fromTuple } from '@/misc/from-tuple.js';
import { IdentifiableError } from '@/misc/identifiable-error.js';
-import { getApHrefNullable, getApId, getApIds, getApType, getNullableApId, isAccept, isActor, isAdd, isAnnounce, isApObject, isBlock, isCollection, isCollectionOrOrderedCollection, isCreate, isDelete, isFlag, isFollow, isLike, isMove, isPost, isReject, isRemove, isTombstone, isUndo, isUpdate, validActor, validPost } from './type.js';
+import { getApHrefNullable, getApId, getApIds, getApType, getNullableApId, isAccept, isActor, isAdd, isAnnounce, isApObject, isBlock, isCollection, isCollectionOrOrderedCollection, isCreate, isDelete, isFlag, isFollow, isLike, isDislike, isMove, isPost, isReject, isRemove, isTombstone, isUndo, isUpdate, validActor, validPost } from './type.js';
import { ApNoteService } from './models/ApNoteService.js';
import { ApLoggerService } from './ApLoggerService.js';
import { ApDbResolverService } from './ApDbResolverService.js';
@@ -41,7 +41,7 @@ import { ApAudienceService } from './ApAudienceService.js';
import { ApPersonService } from './models/ApPersonService.js';
import { ApQuestionService } from './models/ApQuestionService.js';
import type { Resolver } from './ApResolverService.js';
-import type { IAccept, IAdd, IAnnounce, IBlock, ICreate, IDelete, IFlag, IFollow, ILike, IObject, IReject, IRemove, IUndo, IUpdate, IMove, IPost } from './type.js';
+import type { IAccept, IAdd, IAnnounce, IBlock, ICreate, IDelete, IFlag, IFollow, ILike, IDislike, IObject, IReject, IRemove, IUndo, IUpdate, IMove, IPost } from './type.js';
@Injectable()
export class ApInboxService {
@@ -166,6 +166,8 @@ export class ApInboxService {
return await this.announce(actor, activity, resolver);
} else if (isLike(activity)) {
return await this.like(actor, activity, resolver);
+ } else if (isDislike(activity)) {
+ return await this.dislike(actor, activity);
} else if (isUndo(activity)) {
return await this.undo(actor, activity, resolver);
} else if (isBlock(activity)) {
@@ -221,6 +223,11 @@ export class ApInboxService {
}
@bindThis
+ private async dislike(actor: MiRemoteUser, dislike: IDislike): Promise<string> {
+ return await this.undoLike(actor, dislike);
+ }
+
+ @bindThis
private async accept(actor: MiRemoteUser, activity: IAccept, resolver?: Resolver): Promise<string> {
const uri = activity.id ?? activity;
@@ -782,7 +789,7 @@ export class ApInboxService {
}
@bindThis
- private async undoLike(actor: MiRemoteUser, activity: ILike): Promise<string> {
+ private async undoLike(actor: MiRemoteUser, activity: ILike | IDislike): Promise<string> {
const targetUri = getApId(activity.object);
const note = await this.apNoteService.fetchNote(targetUri);
diff --git a/packages/backend/src/core/activitypub/type.ts b/packages/backend/src/core/activitypub/type.ts
index 85ddc20064..c9e20e0168 100644
--- a/packages/backend/src/core/activitypub/type.ts
+++ b/packages/backend/src/core/activitypub/type.ts
@@ -336,6 +336,10 @@ export interface ILike extends IActivity {
_misskey_reaction?: string;
}
+export interface IDislike extends IActivity {
+ type: 'Dislike';
+}
+
export interface IAnnounce extends IActivity {
type: 'Announce';
}
@@ -368,6 +372,7 @@ export const isLike = (object: IObject): object is ILike => {
const type = getApType(object);
return type != null && ['Like', 'EmojiReaction', 'EmojiReact'].includes(type);
};
+export const isDislike = (object: IObject): object is IDislike => getApType(object) === 'Dislike';
export const isAnnounce = (object: IObject): object is IAnnounce => getApType(object) === 'Announce';
export const isBlock = (object: IObject): object is IBlock => getApType(object) === 'Block';
export const isFlag = (object: IObject): object is IFlag => getApType(object) === 'Flag';