From ca32c231d0aaab9dacaa88a0b0564d626827e797 Mon Sep 17 00:00:00 2001 From: piuvas Date: Mon, 26 May 2025 22:44:29 -0300 Subject: initial link attributions work. --- packages/backend/src/models/User.ts | 6 ++++++ packages/backend/src/models/json-schema/user.ts | 7 +++++++ 2 files changed, 13 insertions(+) (limited to 'packages/backend/src/models') diff --git a/packages/backend/src/models/User.ts b/packages/backend/src/models/User.ts index 46f8e84a94..d5f572a879 100644 --- a/packages/backend/src/models/User.ts +++ b/packages/backend/src/models/User.ts @@ -378,6 +378,12 @@ export class MiUser { }) public allowUnsignedFetch: UserUnsignedFetchOption; + @Column('varchar', { + name: 'attributionDomains', + length: 128, array: true, default: '{}', + }) + public attributionDomains: string[]; + constructor(data: Partial) { if (data == null) return; diff --git a/packages/backend/src/models/json-schema/user.ts b/packages/backend/src/models/json-schema/user.ts index 964a179244..9bfb57fc66 100644 --- a/packages/backend/src/models/json-schema/user.ts +++ b/packages/backend/src/models/json-schema/user.ts @@ -236,6 +236,13 @@ export const packedUserLiteSchema = { }, }, }, + attributionDomains: { + type: 'object', + nullable: false, optional: false, + additionalProperties: { + type: 'string', + }, + }, }, } as const; -- cgit v1.2.3-freya From 5545ddf9ddefa5620c58ea34b2e6fdf18fdac30a Mon Sep 17 00:00:00 2001 From: piuvas Date: Tue, 27 May 2025 13:25:06 -0300 Subject: requested changes. --- locales/index.d.ts | 4 +-- packages/backend/src/models/json-schema/user.ts | 2 +- .../backend/src/server/web/UrlPreviewService.ts | 18 +++++----- packages/frontend/src/components/MkUrlPreview.vue | 41 ++++++++++------------ packages/frontend/src/pages/settings/profile.vue | 2 -- sharkey-locales/en-US.yml | 2 +- sharkey-locales/pt-PT.yml | 2 +- 7 files changed, 32 insertions(+), 39 deletions(-) (limited to 'packages/backend/src/models') diff --git a/locales/index.d.ts b/locales/index.d.ts index 1070318fa2..f809613e7a 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -13138,9 +13138,9 @@ export interface Locale extends ILocale { */ "attributionDomainsDescription": string; /** - * Written by + * Written by {user} */ - "writtenBy": string; + "writtenBy": ParameterizedString<"user">; } declare const locales: { [lang: string]: Locale; diff --git a/packages/backend/src/models/json-schema/user.ts b/packages/backend/src/models/json-schema/user.ts index 9bfb57fc66..82d354cfd0 100644 --- a/packages/backend/src/models/json-schema/user.ts +++ b/packages/backend/src/models/json-schema/user.ts @@ -237,7 +237,7 @@ export const packedUserLiteSchema = { }, }, attributionDomains: { - type: 'object', + type: 'array', nullable: false, optional: false, additionalProperties: { type: 'string', diff --git a/packages/backend/src/server/web/UrlPreviewService.ts b/packages/backend/src/server/web/UrlPreviewService.ts index b50e5d49fd..ccf8fa342d 100644 --- a/packages/backend/src/server/web/UrlPreviewService.ts +++ b/packages/backend/src/server/web/UrlPreviewService.ts @@ -28,7 +28,7 @@ import { ApNoteService } from '@/core/activitypub/models/ApNoteService.js'; import { AuthenticateService, AuthenticationError } from '@/server/api/AuthenticateService.js'; import { SkRateLimiterService } from '@/server/SkRateLimiterService.js'; import { BucketRateLimit, Keyed, sendRateLimitHeaders } from '@/misc/rate-limit-utils.js'; -import type { MiLocalUser } from '@/models/User.js'; +import type { MiLocalUser, MiUser } from '@/models/User.js'; import { getIpHash } from '@/misc/get-ip-hash.js'; import { isRetryableError } from '@/misc/is-retryable-error.js'; import type { FastifyRequest, FastifyReply } from 'fastify'; @@ -36,10 +36,7 @@ import type { FastifyRequest, FastifyReply } from 'fastify'; export type LocalSummalyResult = SummalyResult & { haveNoteLocally?: boolean; linkAttribution?: { - name: string, - username: string, - avatarUrl: string, - avatarBlurhash: string, + user: MiUser, } }; @@ -448,6 +445,10 @@ export class UrlPreviewService { } const array = fediverseCreator.split('@'); + + // make sure we only have username@host. + if (array.length !== 2) return; + const username = array[0].toLowerCase(); let host: string | null = array[1]; if (host.toLowerCase() === this.config.host) { @@ -459,14 +460,11 @@ export class UrlPreviewService { const attributionDomains = user.attributionDomains; if (attributionDomains.some(x => `.${url.host.toLowerCase()}`.endsWith(`.${x}`))) { summary.linkAttribution = { - name: user.name ?? user.username, - username: fediverseCreator, - avatarUrl: user.avatarUrl ?? '', - avatarBlurhash: user.avatarBlurhash ?? '', + user: user, }; } } catch { - console.warn('user not found: ' + fediverseCreator); + this.logger.warn('user not found: ' + fediverseCreator); } } diff --git a/packages/frontend/src/components/MkUrlPreview.vue b/packages/frontend/src/components/MkUrlPreview.vue index ca8f6848e5..0cba73ef05 100644 --- a/packages/frontend/src/components/MkUrlPreview.vue +++ b/packages/frontend/src/components/MkUrlPreview.vue @@ -65,13 +65,14 @@ SPDX-License-Identifier: AGPL-3.0-only - + + +