From 91fc5a5c747121475a50f2713d571ceb89e95257 Mon Sep 17 00:00:00 2001 From: Meier Lukas Date: Fri, 27 Feb 2026 19:24:24 +0100 Subject: [PATCH] Merge commit from fork * fix(security): restrict access to integrations to authenticated users * chore: github is broken --- .../src/components/board/items/item-menu.tsx | 22 ++++++++++++------- .../router/integration/integration-router.ts | 6 ++--- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/apps/nextjs/src/components/board/items/item-menu.tsx b/apps/nextjs/src/components/board/items/item-menu.tsx index 2279755bf..2cd5d01fc 100644 --- a/apps/nextjs/src/components/board/items/item-menu.tsx +++ b/apps/nextjs/src/components/board/items/item-menu.tsx @@ -14,16 +14,22 @@ import type { SectionItem } from "~/app/[locale]/boards/_types"; import { useSectionContext } from "../sections/section-context"; import { useItemActions } from "./item-actions"; import { ItemMoveModal } from "./item-move-modal"; +import { useSession } from "@homarr/auth/client"; -export const BoardItemMenu = ({ - offset, - item, - resetErrorBoundary, -}: { - offset: number; +interface BoardItemMenuProps { + offset: number; item: SectionItem; resetErrorBoundary?: () => void; -}) => { +} + +export const BoardItemMenu = (props: BoardItemMenuProps) => { + const {data: session} = useSession(); + if (!session) return null; + + return ; +}; + +const BoardItemMenuInner = ({ offset, item, resetErrorBoundary }: BoardItemMenuProps) => { const refResetErrorBoundaryOnNextRender = useRef(false); const tItem = useScopedI18n("item"); const t = useI18n(); @@ -130,4 +136,4 @@ export const BoardItemMenu = ({ ); -}; +} \ No newline at end of file diff --git a/packages/api/src/router/integration/integration-router.ts b/packages/api/src/router/integration/integration-router.ts index 77a98515b..ec177d3b5 100644 --- a/packages/api/src/router/integration/integration-router.ts +++ b/packages/api/src/router/integration/integration-router.ts @@ -43,7 +43,7 @@ import { mapTestConnectionError } from "./map-test-connection-error"; const logger = createLogger({ module: "integrationRouter" }); export const integrationRouter = createTRPCRouter({ - all: publicProcedure.query(async ({ ctx }) => { + all: protectedProcedure.query(async ({ ctx }) => { const groupsOfCurrentUser = await ctx.db.query.groupMembers.findMany({ where: eq(groupMembers.userId, ctx.session?.user.id ?? ""), }); @@ -85,7 +85,7 @@ export const integrationRouter = createTRPCRouter({ integrationKinds.indexOf(integrationA.kind) - integrationKinds.indexOf(integrationB.kind), ); }), - allThatSupportSearch: publicProcedure.query(async ({ ctx }) => { + allThatSupportSearch: protectedProcedure.query(async ({ ctx }) => { const groupsOfCurrentUser = await ctx.db.query.groupMembers.findMany({ where: eq(groupMembers.userId, ctx.session?.user.id ?? ""), }); @@ -133,7 +133,7 @@ export const integrationRouter = createTRPCRouter({ integrationKinds.indexOf(integrationA.kind) - integrationKinds.indexOf(integrationB.kind), ); }), - allOfGivenCategory: publicProcedure + allOfGivenCategory: protectedProcedure .input( z.object({ category: z.enum(integrationCategories),