From 8bc3f5a56cc0f4a59718cce7644a3be2d0265ff2 Mon Sep 17 00:00:00 2001 From: Carlos Valente <34649812+cpvalente@users.noreply.github.com> Date: Fri, 6 Dec 2024 16:48:35 +0100 Subject: [PATCH] Fix links (#1366) * chore: remove unused code * bump version to 3.9.3 * chore: use constant links * refactor: build links * chore: ignore ontime-data --- .gitignore | 1 + apps/cli/package.json | 2 +- apps/client/package.json | 4 +- .../navigation-menu/NavigationMenu.tsx | 7 ++- apps/client/src/common/utils/linkUtils.js | 30 ---------- apps/client/src/common/utils/linkUtils.ts | 40 +++++++++++++ apps/client/src/externals.ts | 60 +++++++++++++------ .../panel/network-panel/NetworkInterfaces.tsx | 8 +-- .../panel/network-panel/NetworkLogPanel.tsx | 4 +- .../panel/project-panel/ProjectCreateForm.tsx | 5 +- .../panel/project-panel/ProjectData.tsx | 5 +- apps/electron/package.json | 2 +- apps/server/package.json | 2 +- apps/server/src/utils/__tests__/url.test.ts | 33 ---------- apps/server/src/utils/url.ts | 20 ------- e2e/tests/000-upload-showfile.spec.ts | 4 ++ ...mote.spec.ts => 210-client-remote.spec.ts} | 0 package.json | 2 +- 18 files changed, 110 insertions(+), 119 deletions(-) delete mode 100644 apps/client/src/common/utils/linkUtils.js create mode 100644 apps/client/src/common/utils/linkUtils.ts delete mode 100644 apps/server/src/utils/__tests__/url.test.ts delete mode 100644 apps/server/src/utils/url.ts rename e2e/tests/features/{302-client-remote.spec.ts => 210-client-remote.spec.ts} (100%) diff --git a/.gitignore b/.gitignore index 0cf66a490..a73158227 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,7 @@ dist/ # docker utils ontime-db ontime-external/ +ontime-data/ # versioning file **/ONTIME_VERSION.js diff --git a/apps/cli/package.json b/apps/cli/package.json index f07fd9d11..021140b01 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -1,6 +1,6 @@ { "name": "@getontime/cli", - "version": "3.9.2", + "version": "3.9.3", "author": "Carlos Valente", "description": "Time keeping for live events", "repository": "https://github.com/cpvalente/ontime", diff --git a/apps/client/package.json b/apps/client/package.json index 8bfcd3489..1f655beed 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -1,6 +1,6 @@ { "name": "ontime-ui", - "version": "3.9.2", + "version": "3.9.3", "private": true, "type": "module", "dependencies": { @@ -39,7 +39,7 @@ "build": "vite build", "build:local": "cross-env NODE_ENV=local vite build", "build:electron": "cross-env NODE_ENV=local vite build", - "build:docker": "cross-env VITE_IS_CLOUD=true vite build", + "build:docker": "cross-env VITE_IS_DOCKER=true vite build", "build:localdocker": "cross-env NODE_ENV=local vite build", "lint": "eslint . --quiet", "test": "vitest", diff --git a/apps/client/src/common/components/navigation-menu/NavigationMenu.tsx b/apps/client/src/common/components/navigation-menu/NavigationMenu.tsx index 7180f2d36..97371d8e9 100644 --- a/apps/client/src/common/components/navigation-menu/NavigationMenu.tsx +++ b/apps/client/src/common/components/navigation-menu/NavigationMenu.tsx @@ -17,7 +17,7 @@ import { IoExpand } from '@react-icons/all-files/io5/IoExpand'; import { IoLockClosedOutline } from '@react-icons/all-files/io5/IoLockClosedOutline'; import { IoSwapVertical } from '@react-icons/all-files/io5/IoSwapVertical'; -import { isLocalhost, serverPort } from '../../../externals'; +import { isLocalhost } from '../../../externals'; import { navigatorConstants } from '../../../viewerConfig'; import useClickOutside from '../../hooks/useClickOutside'; import { useElectronEvent } from '../../hooks/useElectronEvent'; @@ -25,7 +25,7 @@ import useInfo from '../../hooks-query/useInfo'; import { useClientStore } from '../../stores/clientStore'; import { useViewOptionsStore } from '../../stores/viewOptions'; import { isKeyEnter } from '../../utils/keyEvent'; -import { handleLinks, openLink } from '../../utils/linkUtils'; +import { handleLinks, linkToOtherHost, openLink } from '../../utils/linkUtils'; import { cx } from '../../utils/styleUtils'; import { RenameClientModal } from '../client-modal/RenameClientModal'; import CopyTag from '../copy-tag/CopyTag'; @@ -154,7 +154,8 @@ function OtherAddresses(props: OtherAddressesProps) { return null; } - const address = `http://${nif.address}:${serverPort}${currentLocation}`; + const address = linkToOtherHost(nif.address, currentLocation); + return ( - {data.networkInterfaces?.map((nif) => { + {data.networkInterfaces.map((nif) => { // interfaces outside localhost wont have access if (nif.name === 'localhost' && !isLocalhost) return null; + const address = linkToOtherHost(nif.address); - const address = `http://${nif.address}:${serverPort}`; return ( Network - {isOntimeCloud && } + {isDockerImage && } Ontime is streaming on the following network interfaces diff --git a/apps/client/src/features/app-settings/panel/project-panel/ProjectCreateForm.tsx b/apps/client/src/features/app-settings/panel/project-panel/ProjectCreateForm.tsx index d88bfd7e1..fa5b902de 100644 --- a/apps/client/src/features/app-settings/panel/project-panel/ProjectCreateForm.tsx +++ b/apps/client/src/features/app-settings/panel/project-panel/ProjectCreateForm.tsx @@ -6,6 +6,7 @@ import { useQueryClient } from '@tanstack/react-query'; import { PROJECT_LIST } from '../../../../common/api/constants'; import { createProject } from '../../../../common/api/db'; import { maybeAxiosError } from '../../../../common/api/utils'; +import { documentationUrl, websiteUrl } from '../../../../externals'; import * as Panel from '../../panel-utils/PanelUtils'; import style from './ProjectPanel.module.scss'; @@ -118,7 +119,7 @@ export default function ProjectCreateForm(props: ProjectCreateFromProps) { @@ -140,7 +141,7 @@ export default function ProjectCreateForm(props: ProjectCreateFromProps) { diff --git a/apps/client/src/features/app-settings/panel/project-panel/ProjectData.tsx b/apps/client/src/features/app-settings/panel/project-panel/ProjectData.tsx index 960ceb218..7f3094f64 100644 --- a/apps/client/src/features/app-settings/panel/project-panel/ProjectData.tsx +++ b/apps/client/src/features/app-settings/panel/project-panel/ProjectData.tsx @@ -10,6 +10,7 @@ import { postProjectData, uploadProjectLogo } from '../../../../common/api/proje import { maybeAxiosError } from '../../../../common/api/utils'; import useProjectData from '../../../../common/hooks-query/useProjectData'; import { validateLogo } from '../../../../common/utils/uploadUtils'; +import { documentationUrl, websiteUrl } from '../../../../externals'; import * as Panel from '../../panel-utils/PanelUtils'; import style from './ProjectPanel.module.scss'; @@ -203,7 +204,7 @@ export default function ProjectData() { @@ -225,7 +226,7 @@ export default function ProjectData() { diff --git a/apps/electron/package.json b/apps/electron/package.json index f60b19fe1..e6274e056 100644 --- a/apps/electron/package.json +++ b/apps/electron/package.json @@ -1,6 +1,6 @@ { "name": "ontime", - "version": "3.9.2", + "version": "3.9.3", "author": "Carlos Valente", "description": "Time keeping for live events", "repository": "https://github.com/cpvalente/ontime", diff --git a/apps/server/package.json b/apps/server/package.json index 36206f19b..1e2d68481 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -2,7 +2,7 @@ "name": "ontime-server", "type": "module", "main": "src/index.ts", - "version": "3.9.2", + "version": "3.9.3", "exports": "./src/index.js", "dependencies": { "@googleapis/sheets": "^5.0.5", diff --git a/apps/server/src/utils/__tests__/url.test.ts b/apps/server/src/utils/__tests__/url.test.ts deleted file mode 100644 index 326a33357..000000000 --- a/apps/server/src/utils/__tests__/url.test.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { cleanURL } from '../url.js'; - -describe('url is correctly formatted', () => { - it('has no leading spaces', () => { - const test = ' http://testing'; - const expected = 'http://testing'; - expect(cleanURL(test)).toBe(expected); - }); - - it('has no trailing spaces', () => { - const test = 'http://testing '; - const expected = 'http://testing'; - expect(cleanURL(test)).toBe(expected); - }); - - it('doesnt contain spaces', () => { - const test = 'http://t e s t i n g'; - const expected = 'http://t%20e%20s%20t%20i%20n%20g'; - expect(cleanURL(test)).toBe(expected); - }); - - it('only contains allowed characters', () => { - const test = 'http://<>[]{}|^'; - const expected = 'http://'; - expect(cleanURL(test)).toBe(expected); - }); - - it('begins with http://', () => { - const test = 'ontime.com'; - const expected = 'http://ontime.com'; - expect(cleanURL(test)).toBe(expected); - }); -}); diff --git a/apps/server/src/utils/url.ts b/apps/server/src/utils/url.ts deleted file mode 100644 index 9f8fd7bba..000000000 --- a/apps/server/src/utils/url.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @description Cleans given url - * @param {string} url - URL to be checked - * @returns {string} Sanitized url - */ -export const cleanURL = (url: string): string => { - // trim whitespaces - let sanitised = url.trim(); - - // clear any whitespaces - sanitised = sanitised.split(' ').join('%20'); - - // contain only allowed characters - sanitised = sanitised.replace(/([@\s<>[\]{}|\\^])+/g, ''); - - // starts with http:// - if (!sanitised.startsWith('http://')) sanitised = `http://${sanitised}`; - - return sanitised; -}; diff --git a/e2e/tests/000-upload-showfile.spec.ts b/e2e/tests/000-upload-showfile.spec.ts index 5517b83ab..f1245ac82 100644 --- a/e2e/tests/000-upload-showfile.spec.ts +++ b/e2e/tests/000-upload-showfile.spec.ts @@ -4,6 +4,10 @@ const fileToUpload = 'e2e/tests/fixtures/test-db.json'; test('project file upload', async ({ page }) => { await page.goto('http://localhost:4001/editor'); + + // close the welcome modal if it is open + await page.keyboard.down('Escape'); + await page.getByRole('button', { name: 'Edit' }).click(); await page.getByRole('button', { name: 'Clear rundown' }).click(); await page.getByRole('button', { name: 'Delete all' }).click(); diff --git a/e2e/tests/features/302-client-remote.spec.ts b/e2e/tests/features/210-client-remote.spec.ts similarity index 100% rename from e2e/tests/features/302-client-remote.spec.ts rename to e2e/tests/features/210-client-remote.spec.ts diff --git a/package.json b/package.json index c01073e36..31d644e5e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ontime", - "version": "3.9.2", + "version": "3.9.3", "description": "Time keeping for live events", "keywords": [ "ontime",