Add allow anonymous switch

This commit is contained in:
Manuel
2023-09-21 19:45:30 +02:00
committed by GitHub
parent 141c27cda7
commit b49d021daf
17 changed files with 437 additions and 107 deletions

View File

@@ -10,6 +10,7 @@ import { getFrontendConfig } from '~/tools/config/getFrontendConfig';
import { getServerSideTranslations } from '~/tools/server/getServerSideTranslations';
import { boardNamespaces } from '~/tools/server/translation-namespaces';
import { ConfigType } from '~/types/config';
import { getServerAuthSession } from '~/server/auth';
export default function BoardPage({
config: initialConfig,
@@ -57,14 +58,36 @@ export const getServerSideProps: GetServerSideProps<BoardGetServerSideProps> = a
const config = await getFrontendConfig(routeParams.data.slug);
const translations = await getServerSideTranslations(boardNamespaces, locale, req, res);
return {
props: {
config,
primaryColor: config.settings.customization.colors.primary,
secondaryColor: config.settings.customization.colors.secondary,
primaryShade: config.settings.customization.colors.shade,
dockerEnabled: !!env.DOCKER_HOST && !!env.DOCKER_PORT,
...translations,
},
};
const getSuccessResponse = () => {
return {
props: {
config,
primaryColor: config.settings.customization.colors.primary,
secondaryColor: config.settings.customization.colors.secondary,
primaryShade: config.settings.customization.colors.shade,
dockerEnabled: !!env.DOCKER_HOST && !!env.DOCKER_PORT,
...translations,
},
};
}
if (!config.settings.access.allowGuests) {
const session = await getServerAuthSession({ req, res });
if (session?.user) {
return getSuccessResponse();
}
return {
notFound: true,
props: {
primaryColor: config.settings.customization.colors.primary,
secondaryColor: config.settings.customization.colors.secondary,
primaryShade: config.settings.customization.colors.shade,
}
};
}
return getSuccessResponse();
};

View File

@@ -18,7 +18,7 @@ import {
IconChartCandle,
IconCheck,
IconDragDrop,
IconLayout,
IconLayout, IconLock,
IconX,
TablerIconsProps,
} from '@tabler/icons-react';
@@ -46,6 +46,7 @@ import { firstUpperCase } from '~/tools/shared/strings';
import { api } from '~/utils/api';
import { useI18nZodResolver } from '~/utils/i18n-zod-resolver';
import { boardCustomizationSchema } from '~/validations/boards';
import { AccessCustomization } from '~/components/Board/Customize/Access/AccessCustomization';
const notificationId = 'board-customization-notification';
@@ -58,6 +59,9 @@ export default function CustomizationPage() {
const { t } = useTranslation('boards/customize');
const form = useBoardCustomizationForm({
initialValues: {
access: {
allowGuests: config?.settings.access.allowGuests ?? false
},
layout: {
leftSidebarEnabled: config?.settings.customization.layout.enabledLeftSidebar ?? false,
rightSidebarEnabled: config?.settings.customization.layout.enabledRightSidebar ?? false,
@@ -210,6 +214,10 @@ export default function CustomizationPage() {
<SectionTitle type="layout" icon={IconLayout} />
<LayoutCustomization />
</Stack>
<Stack spacing="xs">
<SectionTitle type="access" icon={IconLock} />
<AccessCustomization />
</Stack>
<Stack spacing="xs">
<SectionTitle type="gridstack" icon={IconDragDrop} />
<GridstackCustomization />
@@ -232,7 +240,7 @@ export default function CustomizationPage() {
}
type SectionTitleProps = {
type: 'layout' | 'gridstack' | 'pageMetadata' | 'appereance';
type: 'layout' | 'gridstack' | 'pageMetadata' | 'appereance' | 'access';
icon: (props: TablerIconsProps) => ReactNode;
};
@@ -282,6 +290,7 @@ export const getServerSideProps: GetServerSideProps = async ({ req, res, locale,
'settings/customization/shade-selector',
'settings/customization/opacity-selector',
'settings/customization/gridstack',
'settings/customization/access'
],
locale,
req,

View File

@@ -47,6 +47,17 @@ export const getServerSideProps: GetServerSideProps<BoardGetServerSideProps> = a
const boardName = currentUserSettings?.defaultBoard ?? 'default';
const config = await getFrontendConfig(boardName);
if (!config.settings.access.allowGuests && !session?.user) {
return {
notFound: true,
props: {
primaryColor: config.settings.customization.colors.primary,
secondaryColor: config.settings.customization.colors.secondary,
primaryShade: config.settings.customization.colors.shade,
}
};
}
return {
props: {
config,