mirror of
https://github.com/KuekHaoYang/KVideo.git
synced 2026-08-14 16:23:43 +08:00
63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {
|
|
buildSourceEndpointUrl,
|
|
normalizeSourceConfig,
|
|
normalizeSourceConfigList,
|
|
} from '@/lib/server/source-validation';
|
|
|
|
test('normalizeSourceConfig accepts safe public source definitions and sanitizes headers', async () => {
|
|
const source = await normalizeSourceConfig({
|
|
id: 'demo-source',
|
|
name: 'Demo Source',
|
|
baseUrl: 'https://1.1.1.1',
|
|
searchPath: '/api/search?q={wd}',
|
|
detailPath: '/api/detail?id={id}',
|
|
headers: {
|
|
Referer: 'https://1.1.1.1/app',
|
|
Cookie: 'do-not-forward',
|
|
},
|
|
enabled: true,
|
|
priority: 5,
|
|
});
|
|
|
|
assert.ok(source);
|
|
assert.equal(source?.id, 'demo-source');
|
|
assert.equal(source?.headers?.Referer, 'https://1.1.1.1/app');
|
|
assert.equal(source?.headers?.Cookie, undefined);
|
|
assert.equal(
|
|
buildSourceEndpointUrl(source!.baseUrl, source!.searchPath || '/'),
|
|
'https://1.1.1.1/api/search?q={wd}',
|
|
);
|
|
});
|
|
|
|
test('normalizeSourceConfig rejects malformed source objects and unsafe absolute paths', async () => {
|
|
const invalid = await normalizeSourceConfig({
|
|
id: 'Bad Source',
|
|
name: 'Bad Source',
|
|
baseUrl: 'http://127.0.0.1',
|
|
searchPath: 'https://evil.example/redirect',
|
|
});
|
|
|
|
assert.equal(invalid, null);
|
|
|
|
const normalizedList = await normalizeSourceConfigList([
|
|
{
|
|
id: 'valid-source',
|
|
name: 'Valid Source',
|
|
baseUrl: 'https://1.1.1.1',
|
|
searchPath: '/search',
|
|
detailPath: '/detail',
|
|
},
|
|
{
|
|
id: 'bad source',
|
|
name: 'Bad Source',
|
|
baseUrl: 'https://1.1.1.1',
|
|
searchPath: 'https://evil.example',
|
|
},
|
|
]);
|
|
|
|
assert.equal(normalizedList.length, 1);
|
|
assert.equal(normalizedList[0].id, 'valid-source');
|
|
});
|