summaryrefslogtreecommitdiff
path: root/packages/backend/test/utils.ts
diff options
context:
space:
mode:
authortamaina <tamaina@hotmail.co.jp>2024-02-17 12:41:19 +0900
committerGitHub <noreply@github.com>2024-02-17 12:41:19 +0900
commit9a70ce8f5ea9df00001894809f5ce7bc69b14c8a (patch)
treef615d85b9fa8298d5009abc3f1dec7561ac82ec1 /packages/backend/test/utils.ts
parent2024.2.0-beta.13 (diff)
downloadmisskey-9a70ce8f5ea9df00001894809f5ce7bc69b14c8a.tar.gz
misskey-9a70ce8f5ea9df00001894809f5ce7bc69b14c8a.tar.bz2
misskey-9a70ce8f5ea9df00001894809f5ce7bc69b14c8a.zip
Merge pull request from GHSA-qqrm-9grj-6v32
* maybe ok * fix * test wip * :v: * fix * if (res.ok) * validateContentTypeSetAsJsonLD * 条件を考慮し直す * その他の+json接尾辞が付いているメディアタイプも受け容れる * https://github.com/misskey-dev/misskey-ghsa-qqrm-9grj-6v32/pull/1#discussion_r1490999009 * add `; profile="https://www.w3.org/ns/activitystreams"` * application/ld+json;
Diffstat (limited to 'packages/backend/test/utils.ts')
-rw-r--r--packages/backend/test/utils.ts36
1 files changed, 22 insertions, 14 deletions
diff --git a/packages/backend/test/utils.ts b/packages/backend/test/utils.ts
index d5da8e0226..a2220ffae6 100644
--- a/packages/backend/test/utils.ts
+++ b/packages/backend/test/utils.ts
@@ -13,10 +13,11 @@ import fetch, { File, RequestInit } from 'node-fetch';
import { DataSource } from 'typeorm';
import { JSDOM } from 'jsdom';
import { DEFAULT_POLICIES } from '@/core/RoleService.js';
+import { Packed } from '@/misc/json-schema.js';
+import { validateContentTypeSetAsActivityPub } from '@/core/activitypub/misc/validator.js';
import { entities } from '../src/postgres.js';
import { loadConfig } from '../src/config.js';
import type * as misskey from 'misskey-js';
-import { Packed } from '@/misc/json-schema.js';
export { server as startServer, jobQueue as startJobQueue } from '@/boot/common.js';
@@ -123,9 +124,9 @@ export function randomString(chars = 'abcdefghijklmnopqrstuvwxyz0123456789', len
function timeoutPromise<T>(p: Promise<T>, timeout: number): Promise<T> {
return Promise.race([
p,
- new Promise((reject) =>{
- setTimeout(() => { reject(new Error('timed out')); }, timeout)
- }) as never
+ new Promise((reject) => {
+ setTimeout(() => { reject(new Error('timed out')); }, timeout);
+ }) as never,
]);
}
@@ -327,7 +328,6 @@ export const uploadFile = async (user?: UserToken, { path, name, blob }: UploadO
});
const body = res.status !== 204 ? await res.json() as misskey.Endpoints['drive/files/create']['res'] : null;
-
return {
status: res.status,
headers: res.headers,
@@ -343,7 +343,7 @@ export const uploadUrl = async (user: UserToken, url: string): Promise<Packed<'D
'main',
(msg) => msg.type === 'urlUploadFinished' && msg.body.marker === marker,
(msg) => msg.body.file as Packed<'DriveFile'>,
- 60 * 1000
+ 60 * 1000,
);
await api('drive/files/upload-from-url', {
@@ -434,20 +434,20 @@ export const waitFire = async (user: UserToken, channel: string, trgr: () => any
* @returns 時間内に正常に処理できた場合に通知からextractorを通した値を得る
*/
export function makeStreamCatcher<T>(
- user: UserToken,
- channel: string,
- cond: (message: Record<string, any>) => boolean,
- extractor: (message: Record<string, any>) => T,
- timeout = 60 * 1000): Promise<T> {
- let ws: WebSocket
+ user: UserToken,
+ channel: string,
+ cond: (message: Record<string, any>) => boolean,
+ extractor: (message: Record<string, any>) => T,
+ timeout = 60 * 1000): Promise<T> {
+ let ws: WebSocket;
const p = new Promise<T>(async (resolve) => {
ws = await connectStream(user, channel, (msg) => {
if (cond(msg)) {
- resolve(extractor(msg))
+ resolve(extractor(msg));
}
});
}).finally(() => {
- ws?.close();
+ ws.close();
});
return timeoutPromise(p, timeout);
@@ -476,6 +476,14 @@ export const simpleGet = async (path: string, accept = '*/*', cookie: any = unde
'text/html; charset=utf-8',
];
+ if (res.ok && (
+ accept.startsWith('application/activity+json') ||
+ (accept.startsWith('application/ld+json') && accept.includes('https://www.w3.org/ns/activitystreams'))
+ )) {
+ // validateContentTypeSetAsActivityPubのテストを兼ねる
+ validateContentTypeSetAsActivityPub(res);
+ }
+
const body =
jsonTypes.includes(res.headers.get('content-type') ?? '') ? await res.json() :
htmlTypes.includes(res.headers.get('content-type') ?? '') ? new JSDOM(await res.text()) :