From 40056ab151506aa2fe799e26b0edf72640b2595e Mon Sep 17 00:00:00 2001 From: Meier Lukas Date: Mon, 31 Jul 2023 23:51:54 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Disable=20docker=20when=20?= =?UTF-8?q?not=20configured?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/env.js | 2 ++ src/pages/board/index.tsx | 3 ++- src/pages/docker.tsx | 15 +++++++++++---- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/env.js b/src/env.js index 8d208def5..1d3bd7bfd 100644 --- a/src/env.js +++ b/src/env.js @@ -34,6 +34,7 @@ const env = createEnv({ NEXT_PUBLIC_DEFAULT_COLOR_SCHEME: z.enum(['light', 'dark']).optional().default('light'), NEXT_PUBLIC_PORT: portSchema, NEXT_PUBLIC_NODE_ENV: envSchema, + NEXT_PUBLIC_DOCKER_ENABLED: z.boolean().optional().default(false), }, /** @@ -50,6 +51,7 @@ const env = createEnv({ NEXT_PUBLIC_DEFAULT_COLOR_SCHEME: process.env.DEFAULT_COLOR_SCHEME, NEXT_PUBLIC_PORT: process.env.PORT, NEXT_PUBLIC_NODE_ENV: process.env.NODE_ENV, + NEXT_PUBLIC_DOCKER_ENABLED: !!process.env.DOCKER_HOST, }, }); diff --git a/src/pages/board/index.tsx b/src/pages/board/index.tsx index 680a2a606..c3f4ca312 100644 --- a/src/pages/board/index.tsx +++ b/src/pages/board/index.tsx @@ -22,6 +22,7 @@ import { MainLayout } from '~/components/layout/main'; import { useCardStyles } from '~/components/layout/useCardStyles'; import { useInitConfig } from '~/config/init'; import { useConfigContext } from '~/config/provider'; +import { env } from '~/env'; import { getServerAuthSession } from '~/server/auth'; import { prisma } from '~/server/db'; import { getFrontendConfig } from '~/tools/config/getFrontendConfig'; @@ -79,7 +80,7 @@ export const HeaderActions = () => { return ( <> - + {env.NEXT_PUBLIC_DOCKER_ENABLED && } diff --git a/src/pages/docker.tsx b/src/pages/docker.tsx index b269e8c3a..840487c1e 100644 --- a/src/pages/docker.tsx +++ b/src/pages/docker.tsx @@ -1,20 +1,19 @@ import { Stack } from '@mantine/core'; -import { useDebouncedValue } from '@mantine/hooks'; import { ContainerInfo } from 'dockerode'; import { GetServerSideProps } from 'next'; -import { useTranslation } from 'next-i18next'; import { useState } from 'react'; import { MainLayout } from '~/components/layout/main'; +import { env } from '~/env'; import ContainerActionBar from '~/modules/Docker/ContainerActionBar'; import DockerTable from '~/modules/Docker/DockerTable'; +import { getServerAuthSession } from '~/server/auth'; import { getServerSideTranslations } from '~/tools/server/getServerSideTranslations'; import { dashboardNamespaces } from '~/tools/server/translation-namespaces'; import { api } from '~/utils/api'; export default function DockerPage() { const [selection, setSelection] = useState([]); - // TODO: read that from somewhere else? - const dockerEnabled = true; + const dockerEnabled = env.NEXT_PUBLIC_DOCKER_ENABLED; const { data, refetch, isRefetching } = api.docker.containers.useQuery(undefined, { enabled: dockerEnabled, }); @@ -35,6 +34,14 @@ export default function DockerPage() { } export const getServerSideProps: GetServerSideProps = async ({ locale, req, res }) => { + if (!env.NEXT_PUBLIC_DOCKER_ENABLED) return { notFound: true }; + const session = await getServerAuthSession({ req, res }); + if (!session?.user.isAdmin) { + return { + notFound: true, + }; + } + const translations = await getServerSideTranslations(dashboardNamespaces, locale, req, res); return { props: {