diff --git a/src/pages/code-repositories/overview/CodeRepositoriesOverviewPage.tsx b/src/pages/code-repositories/overview/CodeRepositoriesOverviewPage.tsx index 8da79dd3..12d87f37 100644 --- a/src/pages/code-repositories/overview/CodeRepositoriesOverviewPage.tsx +++ b/src/pages/code-repositories/overview/CodeRepositoriesOverviewPage.tsx @@ -6,6 +6,7 @@ import { RouteComponentProps } from 'react-router-dom' import { getRole } from 'utils/data' import { useGetAllAplCodeReposQuery, useGetTeamAplCodeReposQuery } from 'redux/otomiApi' import { useAppSelector } from 'redux/hooks' +import { SAFE_REPO_URL } from 'utils/constants' import { HeadCell } from '../../../components/EnhancedTable' import RLink from '../../../components/Link' import ListTable from '../../../components/ListTable' @@ -23,12 +24,20 @@ const getCodeRepoName = (): CallableFunction => ) } +const getSafeRepositoryHref = (repositoryUrl: string): string | null => { + if (!SAFE_REPO_URL.test(repositoryUrl)) return null + return `https://${repositoryUrl}` +} + const getCodeRepoUrl = (): CallableFunction => function (row): string | React.ReactElement { - const repositoryUrl = row?.spec?.repositoryUrl ?? '' + const repositoryUrl = String(row?.spec?.repositoryUrl ?? '') + const href = getSafeRepositoryHref(repositoryUrl) + + if (!href) return repositoryUrl return ( - + {repositoryUrl} ) diff --git a/src/utils/constants.ts b/src/utils/constants.ts new file mode 100644 index 00000000..8410c402 --- /dev/null +++ b/src/utils/constants.ts @@ -0,0 +1,2 @@ +export const SAFE_REPO_URL = + /^(?:https:\/\/[A-Za-z0-9.-]+\.[A-Za-z]{2,}\/|git@[A-Za-z0-9.-]+\.[A-Za-z]{2,}:|[A-Za-z0-9.-]+\.[A-Za-z]{2,}\/)[A-Za-z0-9_.-]+(?:\/[A-Za-z0-9_.-]+)+(?:\.git)?$/