Files
cinny/src/app/plugins/call/callPageUrl.test.ts
T

82 lines
2.7 KiB
TypeScript
Raw Normal View History

import { test } from 'node:test';
import assert from 'node:assert/strict';
import { resolveCallPageUrl, resolveDesktopCallPageUrl } from './callPageUrl';
const URL_OK = 'https://call.chat.example.org/public/element-call/index.html';
test('uses an absolute https URL on the web', () => {
assert.equal(resolveCallPageUrl(URL_OK, false), URL_OK);
});
test('strips a query or hash (the app adds its own parameters)', () => {
assert.equal(resolveCallPageUrl(`${URL_OK}?x=1#y`, false), URL_OK);
});
test('allows http only on localhost (development)', () => {
assert.equal(
resolveCallPageUrl('http://127.0.0.1:5174/public/element-call/index.html', false),
'http://127.0.0.1:5174/public/element-call/index.html',
);
assert.equal(resolveCallPageUrl('http://call.example.org/index.html', false), undefined);
});
test('desktop keeps the bundled page', () => {
assert.equal(resolveCallPageUrl(URL_OK, true), undefined);
});
test('anything else falls back to the bundled page', () => {
[
undefined,
null,
42,
'',
' ',
'not a url',
'/public/element-call/index.html',
'http://call.chat.example.org/index.html',
['javascript', 'alert(1)'].join(':'),
'data:text/html,x',
].forEach((v) => assert.equal(resolveCallPageUrl(v, false), undefined, String(v)));
});
const APP = 'http://localhost:44548';
const PAGE = '/public/element-call/index.html';
test('desktop: the bundled page from the loopback origin on the same port', () => {
assert.equal(
resolveDesktopCallPageUrl('http://127.0.0.1:44548', APP, '/'),
`http://127.0.0.1:44548${PAGE}`,
);
assert.equal(
resolveDesktopCallPageUrl('http://127.0.0.1:44548/', APP, '/app/'),
`http://127.0.0.1:44548/app${PAGE}`,
);
});
test('desktop: unset or anything but same-port loopback http keeps the same-origin page', () => {
[
undefined,
'',
'http://127.0.0.1:44549',
'http://127.0.0.1',
'https://127.0.0.1:44548',
'http://localhost:44548',
'http://[::1]:44548',
'http://10.0.0.5:44548',
'https://call.chat.lotusguild.org',
'http://127.0.0.1:44548/evil/',
'http://127.0.0.1:44548/?x=1',
'http://user:pw@127.0.0.1:44548',
'not a url',
42,
].forEach((v) => assert.equal(resolveDesktopCallPageUrl(v, APP, '/'), undefined, String(v)));
});
test('desktop: only when the app itself runs on http://localhost (release builds)', () => {
const v = 'http://127.0.0.1:44548';
assert.equal(resolveDesktopCallPageUrl(v, 'tauri://localhost', '/'), undefined);
assert.equal(resolveDesktopCallPageUrl(v, 'http://tauri.localhost', '/'), undefined);
assert.equal(resolveDesktopCallPageUrl(v, 'https://chat.lotusguild.org', '/'), undefined);
assert.equal(resolveDesktopCallPageUrl(v, 'http://localhost', '/'), undefined);
});