From e0040f5da35200dec51eb467d844122e169492aa Mon Sep 17 00:00:00 2001
From: MomentQYC <62551256+MomentQYC@users.noreply.github.com>
Date: Wed, 27 Dec 2023 14:55:56 +0800
Subject: Add a prompt for Tor Browser users (#12776)
* perf: Add a prompt for Tor Browser users
* typo
---
packages/backend/src/server/web/boot.js | 1 +
1 file changed, 1 insertion(+)
(limited to 'packages/backend/src/server/web')
diff --git a/packages/backend/src/server/web/boot.js b/packages/backend/src/server/web/boot.js
index 48939ef7a0..c6b52a7a6b 100644
--- a/packages/backend/src/server/web/boot.js
+++ b/packages/backend/src/server/web/boot.js
@@ -173,6 +173,7 @@
Clear the browser cache / ブラウザのキャッシュをクリアする
Update your os and browser / ブラウザおよびOSを最新バージョンに更新する
Disable an adblocker / アドブロッカーを無効にする
+ (Tor Browser) Set dom.webaudio.enabled to true / dom.webaudio.enabledをtrueに設定する
Other options / その他のオプション
--
cgit v1.2.3-freya
From 2a3398181104e8cfa1aed84badd2fdf64428ec2b Mon Sep 17 00:00:00 2001
From: tamaina
Date: Sun, 31 Dec 2023 09:45:35 +0900
Subject: chore: use summaly, browser-image-resizer, and sharp-read-bmp on
registry.npmjs.org instead of git (#12856)
* chore: use @misskey-dev/summaly on registry.npmjs.org instead of git
* fix backend dependency
* fic backend dependency
* @misskey-dev/sharp-read-bmp
* fix
* use @misskey-dev/browser-image-resizer
---
packages/backend/package.json | 4 +-
packages/backend/src/core/DriveService.ts | 2 +-
packages/backend/src/server/FileServerService.ts | 2 +-
.../backend/src/server/web/UrlPreviewService.ts | 2 +-
packages/frontend/package.json | 4 +-
packages/frontend/src/components/MkUrlPreview.vue | 2 +-
packages/frontend/src/scripts/upload.ts | 2 +-
.../frontend/src/scripts/upload/compress-config.ts | 4 +-
packages/frontend/test/url-preview.test.ts | 2 +-
pnpm-lock.yaml | 130 +++++++--------------
10 files changed, 54 insertions(+), 100 deletions(-)
(limited to 'packages/backend/src/server/web')
diff --git a/packages/backend/package.json b/packages/backend/package.json
index 4d1e9936aa..710412c43d 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -74,6 +74,8 @@
"@fastify/multipart": "8.0.0",
"@fastify/static": "6.12.0",
"@fastify/view": "8.2.0",
+ "@misskey-dev/sharp-read-bmp": "^1.1.1",
+ "@misskey-dev/summaly": "^5.0.3",
"@nestjs/common": "10.2.10",
"@nestjs/core": "10.2.10",
"@nestjs/testing": "10.2.10",
@@ -157,11 +159,9 @@
"sanitize-html": "2.11.0",
"secure-json-parse": "2.7.0",
"sharp": "0.32.6",
- "sharp-read-bmp": "github:misskey-dev/sharp-read-bmp",
"slacc": "0.0.10",
"strict-event-emitter-types": "2.0.0",
"stringz": "2.1.0",
- "summaly": "github:misskey-dev/summaly",
"systeminformation": "5.21.20",
"tinycolor2": "1.6.0",
"tmp": "0.2.1",
diff --git a/packages/backend/src/core/DriveService.ts b/packages/backend/src/core/DriveService.ts
index 484f4fc52e..04f0e38e6f 100644
--- a/packages/backend/src/core/DriveService.ts
+++ b/packages/backend/src/core/DriveService.ts
@@ -7,7 +7,7 @@ import { randomUUID } from 'node:crypto';
import * as fs from 'node:fs';
import { Inject, Injectable } from '@nestjs/common';
import sharp from 'sharp';
-import { sharpBmp } from 'sharp-read-bmp';
+import { sharpBmp } from '@misskey-dev/sharp-read-bmp';
import { IsNull } from 'typeorm';
import { DeleteObjectCommandInput, PutObjectCommandInput, NoSuchKey } from '@aws-sdk/client-s3';
import { DI } from '@/di-symbols.js';
diff --git a/packages/backend/src/server/FileServerService.ts b/packages/backend/src/server/FileServerService.ts
index 0c7fc8cefe..f59996ce17 100644
--- a/packages/backend/src/server/FileServerService.ts
+++ b/packages/backend/src/server/FileServerService.ts
@@ -9,7 +9,7 @@ import { dirname } from 'node:path';
import { Inject, Injectable } from '@nestjs/common';
import rename from 'rename';
import sharp from 'sharp';
-import { sharpBmp } from 'sharp-read-bmp';
+import { sharpBmp } from '@misskey-dev/sharp-read-bmp';
import type { Config } from '@/config.js';
import type { MiDriveFile, DriveFilesRepository } from '@/models/_.js';
import { DI } from '@/di-symbols.js';
diff --git a/packages/backend/src/server/web/UrlPreviewService.ts b/packages/backend/src/server/web/UrlPreviewService.ts
index d590244e34..3fd88355dd 100644
--- a/packages/backend/src/server/web/UrlPreviewService.ts
+++ b/packages/backend/src/server/web/UrlPreviewService.ts
@@ -4,7 +4,7 @@
*/
import { Inject, Injectable } from '@nestjs/common';
-import { summaly } from 'summaly';
+import { summaly } from '@misskey-dev/summaly';
import { DI } from '@/di-symbols.js';
import type { Config } from '@/config.js';
import { MetaService } from '@/core/MetaService.js';
diff --git a/packages/frontend/package.json b/packages/frontend/package.json
index 523fc281b3..d3c655b0db 100644
--- a/packages/frontend/package.json
+++ b/packages/frontend/package.json
@@ -19,6 +19,7 @@
"dependencies": {
"@discordapp/twemoji": "15.0.2",
"@github/webauthn-json": "2.1.1",
+ "@misskey-dev/browser-image-resizer": "2.2.1-misskey.10",
"@rollup/plugin-json": "6.1.0",
"@rollup/plugin-replace": "5.0.5",
"@rollup/pluginutils": "5.1.0",
@@ -30,7 +31,6 @@
"aiscript-vscode": "github:aiscript-dev/aiscript-vscode#v0.0.6",
"astring": "1.8.6",
"broadcast-channel": "7.0.0",
- "browser-image-resizer": "github:misskey-dev/browser-image-resizer#v2.2.1-misskey.3",
"buraha": "0.0.1",
"canvas-confetti": "1.6.1",
"chart.js": "4.4.1",
@@ -74,6 +74,7 @@
"vuedraggable": "next"
},
"devDependencies": {
+ "@misskey-dev/summaly": "^5.0.3",
"@storybook/addon-actions": "7.6.5",
"@storybook/addon-essentials": "7.6.5",
"@storybook/addon-interactions": "7.6.5",
@@ -127,7 +128,6 @@
"start-server-and-test": "2.0.3",
"storybook": "7.6.5",
"storybook-addon-misskey-theme": "github:misskey-dev/storybook-addon-misskey-theme",
- "summaly": "github:misskey-dev/summaly",
"vite-plugin-turbosnap": "1.0.3",
"vitest": "0.34.6",
"vitest-fetch-mock": "0.2.2",
diff --git a/packages/frontend/src/components/MkUrlPreview.vue b/packages/frontend/src/components/MkUrlPreview.vue
index f0f1a13d0b..54f23780c2 100644
--- a/packages/frontend/src/components/MkUrlPreview.vue
+++ b/packages/frontend/src/components/MkUrlPreview.vue
@@ -84,7 +84,7 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/pages/admin/branding.vue b/packages/frontend/src/pages/admin/branding.vue
index 2b559f92c9..fe1b7c561d 100644
--- a/packages/frontend/src/pages/admin/branding.vue
+++ b/packages/frontend/src/pages/admin/branding.vue
@@ -169,7 +169,7 @@ function save() {
feedbackUrl: feedbackUrl.value === '' ? null : feedbackUrl.value,
manifestJsonOverride: manifestJsonOverride.value === '' ? '{}' : JSON.stringify(JSON5.parse(manifestJsonOverride.value)),
}).then(() => {
- fetchInstance();
+ fetchInstance(true);
});
}
diff --git a/packages/frontend/src/pages/admin/email-settings.vue b/packages/frontend/src/pages/admin/email-settings.vue
index 839b9bee16..4a858887f3 100644
--- a/packages/frontend/src/pages/admin/email-settings.vue
+++ b/packages/frontend/src/pages/admin/email-settings.vue
@@ -124,7 +124,7 @@ function save() {
smtpUser: smtpUser.value,
smtpPass: smtpPass.value,
}).then(() => {
- fetchInstance();
+ fetchInstance(true);
});
}
diff --git a/packages/frontend/src/pages/admin/external-services.vue b/packages/frontend/src/pages/admin/external-services.vue
index ba3eb05e72..e0b82eb02e 100644
--- a/packages/frontend/src/pages/admin/external-services.vue
+++ b/packages/frontend/src/pages/admin/external-services.vue
@@ -61,7 +61,7 @@ function save() {
deeplAuthKey: deeplAuthKey.value,
deeplIsPro: deeplIsPro.value,
}).then(() => {
- fetchInstance();
+ fetchInstance(true);
});
}
diff --git a/packages/frontend/src/pages/admin/instance-block.vue b/packages/frontend/src/pages/admin/instance-block.vue
index 5167b2e6b2..6b14bd42c2 100644
--- a/packages/frontend/src/pages/admin/instance-block.vue
+++ b/packages/frontend/src/pages/admin/instance-block.vue
@@ -50,7 +50,7 @@ function save() {
silencedHosts: silencedHosts.value.split('\n') || [],
}).then(() => {
- fetchInstance();
+ fetchInstance(true);
});
}
diff --git a/packages/frontend/src/pages/admin/moderation.vue b/packages/frontend/src/pages/admin/moderation.vue
index d6cb1e39a7..9efb34ac9a 100644
--- a/packages/frontend/src/pages/admin/moderation.vue
+++ b/packages/frontend/src/pages/admin/moderation.vue
@@ -110,7 +110,7 @@ function save() {
hiddenTags: hiddenTags.value.split('\n'),
preservedUsernames: preservedUsernames.value.split('\n'),
}).then(() => {
- fetchInstance();
+ fetchInstance(true);
});
}
diff --git a/packages/frontend/src/pages/admin/object-storage.vue b/packages/frontend/src/pages/admin/object-storage.vue
index 4ff5ab09ca..5fddb715cd 100644
--- a/packages/frontend/src/pages/admin/object-storage.vue
+++ b/packages/frontend/src/pages/admin/object-storage.vue
@@ -143,7 +143,7 @@ function save() {
objectStorageSetPublicRead: objectStorageSetPublicRead.value,
objectStorageS3ForcePathStyle: objectStorageS3ForcePathStyle.value,
}).then(() => {
- fetchInstance();
+ fetchInstance(true);
});
}
diff --git a/packages/frontend/src/pages/admin/other-settings.vue b/packages/frontend/src/pages/admin/other-settings.vue
index 651f0ef936..345cf333b5 100644
--- a/packages/frontend/src/pages/admin/other-settings.vue
+++ b/packages/frontend/src/pages/admin/other-settings.vue
@@ -73,7 +73,7 @@ function save() {
enableChartsForRemoteUser: enableChartsForRemoteUser.value,
enableChartsForFederatedInstances: enableChartsForFederatedInstances.value,
}).then(() => {
- fetchInstance();
+ fetchInstance(true);
});
}
diff --git a/packages/frontend/src/pages/admin/proxy-account.vue b/packages/frontend/src/pages/admin/proxy-account.vue
index 02b506d13d..81db9f1da9 100644
--- a/packages/frontend/src/pages/admin/proxy-account.vue
+++ b/packages/frontend/src/pages/admin/proxy-account.vue
@@ -56,7 +56,7 @@ function save() {
os.apiWithDialog('admin/update-meta', {
proxyAccountId: proxyAccountId.value,
}).then(() => {
- fetchInstance();
+ fetchInstance(true);
});
}
diff --git a/packages/frontend/src/pages/admin/security.vue b/packages/frontend/src/pages/admin/security.vue
index cadcf5a8cc..c4745978df 100644
--- a/packages/frontend/src/pages/admin/security.vue
+++ b/packages/frontend/src/pages/admin/security.vue
@@ -196,7 +196,7 @@ async function init() {
enableTruemailApi.value = meta.enableTruemailApi;
truemailInstance.value = meta.truemailInstance;
truemailAuthKey.value = meta.truemailAuthKey;
- bannedEmailDomains.value = meta.bannedEmailDomains?.join('\n') || "";
+ bannedEmailDomains.value = meta.bannedEmailDomains?.join('\n') || '';
}
function save() {
@@ -221,7 +221,7 @@ function save() {
truemailAuthKey: truemailAuthKey.value,
bannedEmailDomains: bannedEmailDomains.value.split('\n'),
}).then(() => {
- fetchInstance();
+ fetchInstance(true);
});
}
diff --git a/packages/frontend/src/pages/admin/server-rules.vue b/packages/frontend/src/pages/admin/server-rules.vue
index 87318bccce..ff9b8d6299 100644
--- a/packages/frontend/src/pages/admin/server-rules.vue
+++ b/packages/frontend/src/pages/admin/server-rules.vue
@@ -58,7 +58,7 @@ const save = async () => {
await os.apiWithDialog('admin/update-meta', {
serverRules: serverRules.value,
});
- fetchInstance();
+ fetchInstance(true);
};
const remove = (index: number): void => {
diff --git a/packages/frontend/src/pages/admin/settings.vue b/packages/frontend/src/pages/admin/settings.vue
index c505d70aa9..9a198ee8a3 100644
--- a/packages/frontend/src/pages/admin/settings.vue
+++ b/packages/frontend/src/pages/admin/settings.vue
@@ -243,7 +243,7 @@ async function save(): void {
notesPerOneAd: notesPerOneAd.value,
});
- fetchInstance();
+ fetchInstance(true);
}
const headerTabs = computed(() => []);
diff --git a/packages/frontend/src/scripts/clear-cache.ts b/packages/frontend/src/scripts/clear-cache.ts
index f2db87c4fb..b20109ec72 100644
--- a/packages/frontend/src/scripts/clear-cache.ts
+++ b/packages/frontend/src/scripts/clear-cache.ts
@@ -2,14 +2,18 @@ import { unisonReload } from '@/scripts/unison-reload.js';
import * as os from '@/os.js';
import { miLocalStorage } from '@/local-storage.js';
import { fetchCustomEmojis } from '@/custom-emojis.js';
+import { fetchInstance } from '@/instance.js';
export async function clearCache() {
os.waiting();
+ miLocalStorage.removeItem('instance');
+ miLocalStorage.removeItem('instanceCachedAt');
miLocalStorage.removeItem('locale');
miLocalStorage.removeItem('localeVersion');
miLocalStorage.removeItem('theme');
miLocalStorage.removeItem('emojis');
miLocalStorage.removeItem('lastEmojisFetchedAt');
+ await fetchInstance(true);
await fetchCustomEmojis(true);
unisonReload();
}
diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md
index c2428910fa..a2d5a4f514 100644
--- a/packages/misskey-js/etc/misskey-js.api.md
+++ b/packages/misskey-js/etc/misskey-js.api.md
@@ -1715,7 +1715,10 @@ declare namespace entities {
Role,
RolePolicies,
ReversiGameLite,
- ReversiGameDetailed
+ ReversiGameDetailed,
+ MetaLite,
+ MetaDetailedOnly,
+ MetaDetailed
}
}
export { entities }
@@ -2223,6 +2226,15 @@ type MeDetailed = components['schemas']['MeDetailed'];
// @public (undocumented)
type MeDetailedOnly = components['schemas']['MeDetailedOnly'];
+// @public (undocumented)
+type MetaDetailed = components['schemas']['MetaDetailed'];
+
+// @public (undocumented)
+type MetaDetailedOnly = components['schemas']['MetaDetailedOnly'];
+
+// @public (undocumented)
+type MetaLite = components['schemas']['MetaLite'];
+
// @public (undocumented)
type MetaRequest = operations['meta']['requestBody']['content']['application/json'];
diff --git a/packages/misskey-js/src/autogen/models.ts b/packages/misskey-js/src/autogen/models.ts
index 6400567a2d..ab49f9478a 100644
--- a/packages/misskey-js/src/autogen/models.ts
+++ b/packages/misskey-js/src/autogen/models.ts
@@ -46,3 +46,6 @@ export type Role = components['schemas']['Role'];
export type RolePolicies = components['schemas']['RolePolicies'];
export type ReversiGameLite = components['schemas']['ReversiGameLite'];
export type ReversiGameDetailed = components['schemas']['ReversiGameDetailed'];
+export type MetaLite = components['schemas']['MetaLite'];
+export type MetaDetailedOnly = components['schemas']['MetaDetailedOnly'];
+export type MetaDetailed = components['schemas']['MetaDetailed'];
diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts
index 0b2a88b537..18bc45b983 100644
--- a/packages/misskey-js/src/autogen/types.ts
+++ b/packages/misskey-js/src/autogen/types.ts
@@ -4724,6 +4724,96 @@ export type components = {
logs: number[][];
map: string[];
};
+ MetaLite: {
+ maintainerName: string | null;
+ maintainerEmail: string | null;
+ version: string;
+ providesTarball: boolean;
+ name: string | null;
+ shortName: string | null;
+ /**
+ * Format: url
+ * @example https://misskey.example.com
+ */
+ uri: string;
+ description: string | null;
+ langs: string[];
+ tosUrl: string | null;
+ /** @default https://github.com/misskey-dev/misskey */
+ repositoryUrl: string | null;
+ /** @default https://github.com/misskey-dev/misskey/issues/new */
+ feedbackUrl: string | null;
+ defaultDarkTheme: string | null;
+ defaultLightTheme: string | null;
+ disableRegistration: boolean;
+ emailRequiredForSignup: boolean;
+ enableHcaptcha: boolean;
+ hcaptchaSiteKey: string | null;
+ enableMcaptcha: boolean;
+ mcaptchaSiteKey: string | null;
+ mcaptchaInstanceUrl: string | null;
+ enableRecaptcha: boolean;
+ recaptchaSiteKey: string | null;
+ enableTurnstile: boolean;
+ turnstileSiteKey: string | null;
+ swPublickey: string | null;
+ /** @default /assets/ai.png */
+ mascotImageUrl: string;
+ bannerUrl: string | null;
+ serverErrorImageUrl: string | null;
+ infoImageUrl: string | null;
+ notFoundImageUrl: string | null;
+ iconUrl: string | null;
+ maxNoteTextLength: number;
+ ads: {
+ /**
+ * Format: id
+ * @example xxxxxxxxxx
+ */
+ id: string;
+ /** Format: url */
+ url: string;
+ place: string;
+ ratio: number;
+ /** Format: url */
+ imageUrl: string;
+ dayOfWeek: number;
+ }[];
+ /** @default 0 */
+ notesPerOneAd: number;
+ enableEmail: boolean;
+ enableServiceWorker: boolean;
+ translatorAvailable: boolean;
+ mediaProxy: string;
+ backgroundImageUrl: string | null;
+ impressumUrl: string | null;
+ logoImageUrl: string | null;
+ privacyPolicyUrl: string | null;
+ serverRules: string[];
+ themeColor: string | null;
+ policies: components['schemas']['RolePolicies'];
+ };
+ MetaDetailedOnly: {
+ features?: {
+ registration: boolean;
+ emailRequiredForSignup: boolean;
+ localTimeline: boolean;
+ globalTimeline: boolean;
+ hcaptcha: boolean;
+ turnstile: boolean;
+ recaptcha: boolean;
+ objectStorage: boolean;
+ serviceWorker: boolean;
+ /** @default true */
+ miauth?: boolean;
+ };
+ proxyAccountName: string | null;
+ /** @example false */
+ requireSetup: boolean;
+ cacheRemoteFiles: boolean;
+ cacheRemoteSensitiveFiles: boolean;
+ };
+ MetaDetailed: components['schemas']['MetaLite'] & components['schemas']['MetaDetailedOnly'];
};
responses: never;
parameters: never;
@@ -19448,91 +19538,7 @@ export type operations = {
/** @description OK (with results) */
200: {
content: {
- 'application/json': {
- maintainerName: string | null;
- maintainerEmail: string | null;
- version: string;
- providesTarball: boolean;
- name: string;
- shortName: string | null;
- /**
- * Format: url
- * @example https://misskey.example.com
- */
- uri: string;
- description: string | null;
- langs: string[];
- tosUrl: string | null;
- /** @default https://github.com/misskey-dev/misskey */
- repositoryUrl: string | null;
- /** @default https://github.com/misskey-dev/misskey/issues/new */
- feedbackUrl: string | null;
- defaultDarkTheme: string | null;
- defaultLightTheme: string | null;
- disableRegistration: boolean;
- cacheRemoteFiles: boolean;
- cacheRemoteSensitiveFiles: boolean;
- emailRequiredForSignup: boolean;
- enableHcaptcha: boolean;
- hcaptchaSiteKey: string | null;
- enableMcaptcha: boolean;
- mcaptchaSiteKey: string | null;
- mcaptchaInstanceUrl: string | null;
- enableRecaptcha: boolean;
- recaptchaSiteKey: string | null;
- enableTurnstile: boolean;
- turnstileSiteKey: string | null;
- swPublickey: string | null;
- /** @default /assets/ai.png */
- mascotImageUrl: string;
- bannerUrl: string;
- serverErrorImageUrl: string | null;
- infoImageUrl: string | null;
- notFoundImageUrl: string | null;
- iconUrl: string | null;
- maxNoteTextLength: number;
- ads: {
- /**
- * Format: id
- * @example xxxxxxxxxx
- */
- id: string;
- /** Format: url */
- url: string;
- place: string;
- ratio: number;
- /** Format: url */
- imageUrl: string;
- dayOfWeek: number;
- }[];
- /** @default 0 */
- notesPerOneAd: number;
- /** @example false */
- requireSetup: boolean;
- enableEmail: boolean;
- enableServiceWorker: boolean;
- translatorAvailable: boolean;
- proxyAccountName: string | null;
- mediaProxy: string;
- features?: {
- registration: boolean;
- localTimeline: boolean;
- globalTimeline: boolean;
- hcaptcha: boolean;
- recaptcha: boolean;
- objectStorage: boolean;
- serviceWorker: boolean;
- /** @default true */
- miauth?: boolean;
- };
- backgroundImageUrl: string | null;
- impressumUrl: string | null;
- logoImageUrl: string | null;
- privacyPolicyUrl: string | null;
- serverRules: string[];
- themeColor: string | null;
- policies: components['schemas']['RolePolicies'];
- };
+ 'application/json': components['schemas']['MetaLite'] | components['schemas']['MetaDetailed'];
};
};
/** @description Client error */
--
cgit v1.2.3-freya
From 080a3c20bd7f7d6ca7a30fa5a94d8431a6a9c688 Mon Sep 17 00:00:00 2001
From: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>
Date: Fri, 23 Feb 2024 14:10:13 +0900
Subject: fix: SSR時のmetaをエスケープするように (#13440)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* fix: SSR時のmetaをエスケープするように
* エスケープ方法を変更
---
packages/backend/package.json | 2 ++
packages/backend/src/server/web/ClientServerService.ts | 4 ++--
pnpm-lock.yaml | 15 +++++++++++++++
3 files changed, 19 insertions(+), 2 deletions(-)
(limited to 'packages/backend/src/server/web')
diff --git a/packages/backend/package.json b/packages/backend/package.json
index 3a3d8e0411..1745277b41 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -118,6 +118,7 @@
"got": "14.1.0",
"happy-dom": "10.0.3",
"hpagent": "1.2.0",
+ "htmlescape": "^1.1.1",
"http-link-header": "1.1.1",
"ioredis": "5.3.2",
"ip-cidr": "3.1.0",
@@ -194,6 +195,7 @@
"@types/color-convert": "2.0.3",
"@types/content-disposition": "0.5.8",
"@types/fluent-ffmpeg": "2.1.24",
+ "@types/htmlescape": "^1.1.3",
"@types/http-link-header": "1.0.5",
"@types/jest": "29.5.11",
"@types/js-yaml": "4.0.9",
diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts
index e8908f50ec..b1af0c3df6 100644
--- a/packages/backend/src/server/web/ClientServerService.ts
+++ b/packages/backend/src/server/web/ClientServerService.ts
@@ -19,6 +19,7 @@ import fastifyView from '@fastify/view';
import fastifyCookie from '@fastify/cookie';
import fastifyProxy from '@fastify/http-proxy';
import vary from 'vary';
+import htmlSafeJsonStringify from 'htmlescape';
import type { Config } from '@/config.js';
import { getNoteSummary } from '@/misc/get-note-summary.js';
import { DI } from '@/di-symbols.js';
@@ -34,7 +35,6 @@ import { ClipEntityService } from '@/core/entities/ClipEntityService.js';
import { ChannelEntityService } from '@/core/entities/ChannelEntityService.js';
import type { ChannelsRepository, ClipsRepository, FlashsRepository, GalleryPostsRepository, MiMeta, NotesRepository, PagesRepository, ReversiGamesRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js';
import type Logger from '@/logger.js';
-import { deepClone } from '@/misc/clone.js';
import { handleRequestRedirectToOmitSearch } from '@/misc/fastify-hook-handlers.js';
import { bindThis } from '@/decorators.js';
import { FlashEntityService } from '@/core/entities/FlashEntityService.js';
@@ -185,7 +185,7 @@ export class ClientServerService {
infoImageUrl: meta.infoImageUrl ?? 'https://xn--931a.moe/assets/info.jpg',
notFoundImageUrl: meta.notFoundImageUrl ?? 'https://xn--931a.moe/assets/not-found.jpg',
instanceUrl: this.config.url,
- metaJson: JSON.stringify(await this.metaEntityService.packDetailed(meta)),
+ metaJson: htmlSafeJsonStringify(await this.metaEntityService.packDetailed(meta)),
now: Date.now(),
};
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d7b2fb1f2f..ca86ad0445 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -227,6 +227,9 @@ importers:
hpagent:
specifier: 1.2.0
version: 1.2.0
+ htmlescape:
+ specifier: ^1.1.1
+ version: 1.1.1
http-link-header:
specifier: 1.1.1
version: 1.1.1
@@ -538,6 +541,9 @@ importers:
'@types/fluent-ffmpeg':
specifier: 2.1.24
version: 2.1.24
+ '@types/htmlescape':
+ specifier: ^1.1.3
+ version: 1.1.3
'@types/http-link-header':
specifier: 1.0.5
version: 1.0.5
@@ -7405,6 +7411,10 @@ packages:
'@types/unist': 3.0.2
dev: true
+ /@types/htmlescape@1.1.3:
+ resolution: {integrity: sha512-tuC81YJXGUe0q8WRtBNW+uyx79rkkzWK651ALIXXYq5/u/IxjX4iHneGF2uUqzsNp+F+9J2mFZOv9jiLTtIq0w==}
+ dev: true
+
/@types/http-cache-semantics@4.0.4:
resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==}
@@ -12456,6 +12466,11 @@ packages:
engines: {node: '>=8'}
dev: true
+ /htmlescape@1.1.1:
+ resolution: {integrity: sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==}
+ engines: {node: '>=0.10'}
+ dev: false
+
/htmlparser2@8.0.1:
resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==}
dependencies:
--
cgit v1.2.3-freya