summaryrefslogtreecommitdiff
path: root/packages/backend/src/server
diff options
context:
space:
mode:
authorHazelnoot <acomputerdog@gmail.com>2025-05-05 09:14:09 -0400
committerHazelnoot <acomputerdog@gmail.com>2025-05-08 11:05:14 -0400
commit1d2a4c6f5631ffa1155a284b58e41b72ed8b7cc2 (patch)
tree2ca24466530f9b27e85f0d739a4c29471ab2cc57 /packages/backend/src/server
parentinfer ActivityPub links from local DB (diff)
downloadsharkey-1d2a4c6f5631ffa1155a284b58e41b72ed8b7cc2.tar.gz
sharkey-1d2a4c6f5631ffa1155a284b58e41b72ed8b7cc2.tar.bz2
sharkey-1d2a4c6f5631ffa1155a284b58e41b72ed8b7cc2.zip
infer ActivityPub links from signed GET
Diffstat (limited to 'packages/backend/src/server')
-rw-r--r--packages/backend/src/server/web/UrlPreviewService.ts19
1 files changed, 17 insertions, 2 deletions
diff --git a/packages/backend/src/server/web/UrlPreviewService.ts b/packages/backend/src/server/web/UrlPreviewService.ts
index a38454fafc..8f2ec5be00 100644
--- a/packages/backend/src/server/web/UrlPreviewService.ts
+++ b/packages/backend/src/server/web/UrlPreviewService.ts
@@ -7,6 +7,7 @@ import { Inject, Injectable } from '@nestjs/common';
import { summaly } from '@misskey-dev/summaly';
import { SummalyResult } from '@misskey-dev/summaly/built/summary.js';
import * as Redis from 'ioredis';
+import { IsNull, Not } from 'typeorm';
import { DI } from '@/di-symbols.js';
import type { Config } from '@/config.js';
import { HttpRequestService } from '@/core/HttpRequestService.js';
@@ -19,10 +20,11 @@ import { MiMeta } from '@/models/Meta.js';
import { RedisKVCache } from '@/misc/cache.js';
import { UtilityService } from '@/core/UtilityService.js';
import { ApDbResolverService } from '@/core/activitypub/ApDbResolverService.js';
-import type { FastifyRequest, FastifyReply } from 'fastify';
import type { NotesRepository } from '@/models/_.js';
import { ApUtilityService } from '@/core/activitypub/ApUtilityService.js';
-import { IsNull, Not } from 'typeorm';
+import { ApRequestService } from '@/core/activitypub/ApRequestService.js';
+import { SystemAccountService } from '@/core/SystemAccountService.js';
+import type { FastifyRequest, FastifyReply } from 'fastify';
export type LocalSummalyResult = SummalyResult & {
haveNoteLocally?: boolean;
@@ -51,6 +53,8 @@ export class UrlPreviewService {
private readonly utilityService: UtilityService,
private readonly apUtilityService: ApUtilityService,
private readonly apDbResolverService: ApDbResolverService,
+ private readonly apRequestService: ApRequestService,
+ private readonly systemAccountService: SystemAccountService,
) {
this.logger = this.loggerService.getLogger('url-preview');
this.previewCache = new RedisKVCache<LocalSummalyResult>(this.redisClient, 'summaly', {
@@ -216,6 +220,7 @@ export class UrlPreviewService {
if (isCanonicalUri) {
summary.activityPub = summary.url;
summary.haveNoteLocally = true;
+ return;
}
// Try public URL next.
@@ -235,6 +240,16 @@ export class UrlPreviewService {
if (matchByUrl) {
summary.activityPub = matchByUrl.uri;
summary.haveNoteLocally = true;
+ return;
+ }
+
+ // Finally, attempt a signed GET in case it's a direct link to an instance with authorized fetch.
+ const instanceActor = await this.systemAccountService.getInstanceActor();
+ const remoteObject = await this.apRequestService.signedGet(summary.url, instanceActor).catch(() => null);
+ if (remoteObject) {
+ summary.activityPub = remoteObject.id;
+ summary.haveNoteLocally = false;
+ return;
}
}
}