mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-24 08:29:14 +00:00
fix: ensure well formed URLs for IP address destinations
This commit is contained in:
committed by
Carlos Valente
parent
cbc03c898c
commit
e488ad19b3
@@ -175,7 +175,7 @@ describe('generateUrlPresetOptions', () => {
|
|||||||
expect(() => generateUrlPresetOptions('test', 'invalid-url')).toThrow();
|
expect(() => generateUrlPresetOptions('test', 'invalid-url')).toThrow();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('throws on on invalid route', () => {
|
it('throws on invalid route', () => {
|
||||||
expect(() => generateUrlPresetOptions('test', 'www.getontime.no/somethingelse/')).toThrow();
|
expect(() => generateUrlPresetOptions('test', 'www.getontime.no/somethingelse/')).toThrow();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,12 +14,18 @@ export default function GenerateLinkFormExport({ lockedPath }: GenerateLinkFormE
|
|||||||
const { data: infoData } = useInfo();
|
const { data: infoData } = useInfo();
|
||||||
const { data: urlPresetData } = useUrlPresets({ skip: lockedPath === undefined });
|
const { data: urlPresetData } = useUrlPresets({ skip: lockedPath === undefined });
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hostOptions are only used for local networks
|
||||||
|
* the NIF address is a local IP address: 192.168.x.x or 10.x.x.x
|
||||||
|
* We need to inject the port and protocol to create a valid URL
|
||||||
|
* eg: http://192.168.x.x:port
|
||||||
|
*/
|
||||||
const hostOptions = useMemo(() => {
|
const hostOptions = useMemo(() => {
|
||||||
return infoData.networkInterfaces.map((nif) => ({
|
return infoData.networkInterfaces.map((nif) => ({
|
||||||
value: nif.address,
|
value: `http://${nif.address}:${infoData.serverPort}`,
|
||||||
label: `${nif.name} - ${nif.address}`,
|
label: `${nif.name} - ${nif.address}`,
|
||||||
}));
|
}));
|
||||||
}, [infoData.networkInterfaces]);
|
}, [infoData.networkInterfaces, infoData.serverPort]);
|
||||||
|
|
||||||
const pathOptions = useMemo(() => {
|
const pathOptions = useMemo(() => {
|
||||||
if (lockedPath) {
|
if (lockedPath) {
|
||||||
|
|||||||
@@ -80,6 +80,18 @@ describe('generateAuthenticatedUrl()', () => {
|
|||||||
});
|
});
|
||||||
expect(withAuth.toString()).toBe('http://192.168.10.173:4001/?token=1234');
|
expect(withAuth.toString()).toBe('http://192.168.10.173:4001/?token=1234');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('throws if provided an IP address without protocol', () => {
|
||||||
|
expect(() =>
|
||||||
|
generateShareUrl('192.168.10.173', '<<companion>>', {
|
||||||
|
lockConfig: false,
|
||||||
|
lockNav: false,
|
||||||
|
authenticate: true,
|
||||||
|
preset: undefined,
|
||||||
|
hash: '1234',
|
||||||
|
}),
|
||||||
|
).toThrowError('Invalid URL');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('for ontime-cloud URLs', () => {
|
describe('for ontime-cloud URLs', () => {
|
||||||
|
|||||||
@@ -62,6 +62,11 @@ export function generateShareUrl(
|
|||||||
canonicalPath: string,
|
canonicalPath: string,
|
||||||
{ authenticate, lockConfig, lockNav, preset, prefix = routerPrefix, hash = hashedPassword }: LinkOptions,
|
{ authenticate, lockConfig, lockNav, preset, prefix = routerPrefix, hash = hashedPassword }: LinkOptions,
|
||||||
): URL {
|
): URL {
|
||||||
|
/**
|
||||||
|
* URL constructor will throw if given an IP address without protocol
|
||||||
|
* for the case of IP addresses, we expect that the base URL provides protocol and port
|
||||||
|
* eg: http://192.168.10.1:4001
|
||||||
|
*/
|
||||||
const url = new URL(baseUrl);
|
const url = new URL(baseUrl);
|
||||||
|
|
||||||
// companion links point to the root
|
// companion links point to the root
|
||||||
|
|||||||
Reference in New Issue
Block a user