summaryrefslogtreecommitdiff
path: root/packages/backend/src
diff options
context:
space:
mode:
author饺子w (Yumechi) <35571479+eternal-flame-AD@users.noreply.github.com>2025-03-09 12:28:47 +0000
committerGitHub <noreply@github.com>2025-03-09 12:28:47 +0000
commitdb5c127cdd3467ca0c0284ee74094af3c18ae8ea (patch)
tree21c00dfd17902c5e448031b823f7c791044fd741 /packages/backend/src
parentenhance(frontend): improve plugin management (diff)
downloadsharkey-db5c127cdd3467ca0c0284ee74094af3c18ae8ea.tar.gz
sharkey-db5c127cdd3467ca0c0284ee74094af3c18ae8ea.tar.bz2
sharkey-db5c127cdd3467ca0c0284ee74094af3c18ae8ea.zip
fix(backend): fix handling of invalid urls in user profile (#15635)
Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
Diffstat (limited to 'packages/backend/src')
-rw-r--r--packages/backend/src/core/activitypub/ApRendererService.ts19
1 files changed, 18 insertions, 1 deletions
diff --git a/packages/backend/src/core/activitypub/ApRendererService.ts b/packages/backend/src/core/activitypub/ApRendererService.ts
index 83a095cdea..f01874952f 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 `<a href="${urlPartParsed.href}" rel="me nofollow noopener" target="_blank">${urlPart}</a>${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://'))
- ? `<a href="${new URL(field.value).href}" rel="me nofollow noopener" target="_blank">${new URL(field.value).href}</a>`
+ ? tryRewriteUrl(field.value)
: field.value,
}));