verify links in remote profiles.

This commit is contained in:
piuvas 2025-04-19 23:10:27 -03:00
parent 6a77512737
commit 8a60c7df02
No known key found for this signature in database

View file

@ -41,6 +41,8 @@ import { DriveFileEntityService } from '@/core/entities/DriveFileEntityService.j
import type { AccountMoveService } from '@/core/AccountMoveService.js'; import type { AccountMoveService } from '@/core/AccountMoveService.js';
import { ApUtilityService } from '@/core/activitypub/ApUtilityService.js'; import { ApUtilityService } from '@/core/activitypub/ApUtilityService.js';
import { MemoryKVCache } from '@/misc/cache.js'; import { MemoryKVCache } from '@/misc/cache.js';
import { HttpRequestService } from '@/core/HttpRequestService.js';
import { verifyFieldLink } from '@/misc/verify-field-link.js';
import { getApId, getApType, isActor, isCollection, isCollectionOrOrderedCollection, isPropertyValue } from '../type.js'; import { getApId, getApType, isActor, isCollection, isCollectionOrOrderedCollection, isPropertyValue } from '../type.js';
import { extractApHashtags } from './tag.js'; import { extractApHashtags } from './tag.js';
import type { OnModuleInit } from '@nestjs/common'; import type { OnModuleInit } from '@nestjs/common';
@ -112,6 +114,7 @@ export class ApPersonService implements OnModuleInit, OnApplicationShutdown {
private roleService: RoleService, private roleService: RoleService,
private readonly apUtilityService: ApUtilityService, private readonly apUtilityService: ApUtilityService,
private httpRequestService: HttpRequestService,
) { ) {
} }
@ -334,6 +337,7 @@ export class ApPersonService implements OnModuleInit, OnApplicationShutdown {
this.logger.info(`Creating the Person: ${person.id}`); this.logger.info(`Creating the Person: ${person.id}`);
const fields = this.analyzeAttachments(person.attachment ?? []); const fields = this.analyzeAttachments(person.attachment ?? []);
const field_urls = fields.filter(x => x.value.includes('https://'));
const tags = extractApHashtags(person.tag).map(normalizeForSearch).splice(0, 32); const tags = extractApHashtags(person.tag).map(normalizeForSearch).splice(0, 32);
@ -362,6 +366,16 @@ export class ApPersonService implements OnModuleInit, OnApplicationShutdown {
const url = this.apUtilityService.findBestObjectUrl(person); const url = this.apUtilityService.findBestObjectUrl(person);
const verifiedLinks: string[] = [];
if (url) {
for (const field_url of field_urls) {
const includesProfileLinks = await verifyFieldLink(field_url.value, url, this.httpRequestService);
if (includesProfileLinks) {
verifiedLinks.push(field_url.value)
}
}
}
// Create user // Create user
let user: MiRemoteUser | null = null; let user: MiRemoteUser | null = null;
let publicKey: MiUserPublickey | null = null; let publicKey: MiUserPublickey | null = null;
@ -436,6 +450,7 @@ export class ApPersonService implements OnModuleInit, OnApplicationShutdown {
followedMessage: person._misskey_followedMessage != null ? truncate(person._misskey_followedMessage, 256) : null, followedMessage: person._misskey_followedMessage != null ? truncate(person._misskey_followedMessage, 256) : null,
url, url,
fields, fields,
verifiedLinks,
followingVisibility, followingVisibility,
followersVisibility, followersVisibility,
birthday: bday?.[0] ?? null, birthday: bday?.[0] ?? null,
@ -551,6 +566,7 @@ export class ApPersonService implements OnModuleInit, OnApplicationShutdown {
const emojiNames = emojis.map(emoji => emoji.name); const emojiNames = emojis.map(emoji => emoji.name);
const fields = this.analyzeAttachments(person.attachment ?? []); const fields = this.analyzeAttachments(person.attachment ?? []);
const field_urls = fields.filter(x => x.value.includes('https://'));
const tags = extractApHashtags(person.tag).map(normalizeForSearch).splice(0, 32); const tags = extractApHashtags(person.tag).map(normalizeForSearch).splice(0, 32);
@ -579,6 +595,16 @@ export class ApPersonService implements OnModuleInit, OnApplicationShutdown {
const url = this.apUtilityService.findBestObjectUrl(person); const url = this.apUtilityService.findBestObjectUrl(person);
const verifiedLinks: string[] = [];
if (url) {
for (const field_url of field_urls) {
const includesProfileLinks = await verifyFieldLink(field_url.value, url, this.httpRequestService);
if (includesProfileLinks) {
verifiedLinks.push(field_url.value)
}
}
}
const updates = { const updates = {
lastFetchedAt: new Date(), lastFetchedAt: new Date(),
inbox: person.inbox, inbox: person.inbox,
@ -661,6 +687,7 @@ export class ApPersonService implements OnModuleInit, OnApplicationShutdown {
await this.userProfilesRepository.update({ userId: exist.id }, { await this.userProfilesRepository.update({ userId: exist.id }, {
url, url,
fields, fields,
verifiedLinks,
description: _description, description: _description,
followedMessage: person._misskey_followedMessage != null ? truncate(person._misskey_followedMessage, 256) : null, followedMessage: person._misskey_followedMessage != null ? truncate(person._misskey_followedMessage, 256) : null,
followingVisibility, followingVisibility,