diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d53e4c1fad2..03dd1407bcb6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ - 自動でバックアップされるように ### Server -- +- Fix: プロフィール追加情報で無効なURLに入力された場合に照会エラーを出るのを修正 ## 2025.3.1 diff --git a/packages/backend/src/core/activitypub/ApRendererService.ts b/packages/backend/src/core/activitypub/ApRendererService.ts index 83a095cdea17..f01874952fae 100644 --- a/packages/backend/src/core/activitypub/ApRendererService.ts +++ b/packages/backend/src/core/activitypub/ApRendererService.ts @@ -499,11 +499,28 @@ export class ApRendererService { this.userProfilesRepository.findOneByOrFail({ userId: user.id }), ]); + const tryRewriteUrl = (maybeUrl: string) => { + const urlSafeRegex = /^(?:http[s]?:\/\/.)?(?:www\.)?[-a-zA-Z0-9@%._\+~#=]{2,256}\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)/; + try { + const match = maybeUrl.match(urlSafeRegex); + if (!match) { + return maybeUrl; + } + const urlPart = match[0]; + const urlPartParsed = new URL(urlPart); + const restPart = maybeUrl.slice(match[0].length); + + return `${urlPart}${restPart}`; + } catch (e) { + return maybeUrl; + } + }; + const attachment = profile.fields.map(field => ({ type: 'PropertyValue', name: field.name, value: (field.value.startsWith('http://') || field.value.startsWith('https://')) - ? `${new URL(field.value).href}` + ? tryRewriteUrl(field.value) : field.value, }));