mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-08 08:53:51 +00:00
7c234466f7
quick fix for some typos/spelling Small way of saying thanks for the software
78 lines
2.8 KiB
TypeScript
78 lines
2.8 KiB
TypeScript
import isEqual from 'react-fast-compare';
|
|
import { Location, resolvePath } from 'react-router-dom';
|
|
import { Alias } from 'ontime-types';
|
|
|
|
/**
|
|
* Validates an alias against defined parameters
|
|
* @param {string} alias
|
|
* @returns {{message: string, status: boolean}}
|
|
*/
|
|
export const validateAlias = (alias: string) => {
|
|
const valid = { status: true, message: 'ok' };
|
|
|
|
if (alias === '' || alias == null) {
|
|
// cannot be empty
|
|
valid.status = false;
|
|
valid.message = 'should not be empty';
|
|
} else if (alias.includes('http') || alias.includes('https') || alias.includes('www')) {
|
|
// cannot contain http, https or www
|
|
valid.status = false;
|
|
valid.message = 'should not include http, https, www';
|
|
} else if (alias.includes('127.0.0.1') || alias.includes('localhost') || alias.includes('0.0.0.0')) {
|
|
// aliases cannot contain hostname
|
|
valid.status = false;
|
|
valid.message = 'should not include hostname';
|
|
} else if (alias.includes('editor')) {
|
|
// no editor
|
|
valid.status = false;
|
|
valid.message = 'No aliases to editor page allowed';
|
|
}
|
|
|
|
return valid;
|
|
};
|
|
|
|
/**
|
|
* Gets the URL to send an alias to
|
|
* @param location
|
|
* @param data
|
|
* @param searchParams
|
|
*/
|
|
export const getAliasRoute = (location: Location, data: Alias[], searchParams: URLSearchParams) => {
|
|
const currentURL = location.pathname.substring(1);
|
|
// we need to check if the whole url here is an alias, so we can redirect
|
|
const foundAlias = data.filter((d) => d.alias === currentURL && d.enabled)[0];
|
|
if (foundAlias) {
|
|
return generateURLFromAlias(foundAlias);
|
|
}
|
|
const aliasOnPage = searchParams.get('alias');
|
|
for (const d of data) {
|
|
if (aliasOnPage) {
|
|
// if the alias fits the alias on this page, but the URL is different, we redirect user to the new URL
|
|
// if we have the same alias and its enabled and its not empty
|
|
if (d.alias !== '' && d.enabled && d.alias === aliasOnPage) {
|
|
const newAliasPath = resolvePath(d.pathAndParams);
|
|
const urlParams = new URLSearchParams(newAliasPath.search);
|
|
urlParams.set('alias', d.alias);
|
|
// we confirm either the url parameters does not match or the url path doesnt
|
|
if (!isEqual(urlParams, searchParams) || newAliasPath.pathname !== location.pathname) {
|
|
// we then redirect to the alias route, since the view listening to this alias has an outdated URL
|
|
return `${newAliasPath.pathname}?${urlParams}`;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
|
|
/**
|
|
* Generate URL from an alias
|
|
* @param aliasData
|
|
*/
|
|
export const generateURLFromAlias = (aliasData: Alias) => {
|
|
const newAliasPath = resolvePath(aliasData.pathAndParams);
|
|
const urlParams = new URLSearchParams(newAliasPath.search);
|
|
urlParams.set('alias', aliasData.alias);
|
|
|
|
return `${newAliasPath.pathname}?${urlParams}`;
|
|
};
|