fix(api): secure spotlight catalogs
This commit is contained in:
1 parent
7acff56abb
commit
6316fa5407
2 files changed
+30
-21
No files matched your search
@@ -181,13 +181,7 @@ const searchAccessibleBoardsAsync = async (
|
||||
where: eq(boardUserPermissions.userId, ctx.session?.user.id ?? ""),
|
||||
},
|
||||
groupPermissions: {
|
||||
where:
|
||||
permissionsOfCurrentUserGroupsWhenPresent.length >= 1
|
||||
? inArray(
|
||||
boardGroupPermissions.groupId,
|
||||
permissionsOfCurrentUserGroupsWhenPresent.map((groupMember) => groupMember.groupId),
|
||||
)
|
||||
: undefined,
|
||||
where: getBoardGroupPermissionWhere(permissionsOfCurrentUserGroupsWhenPresent),
|
||||
},
|
||||
},
|
||||
});
|
||||
@@ -561,9 +555,17 @@ export const boardRouter = createTRPCRouter({
|
||||
};
|
||||
});
|
||||
}),
|
||||
catalog: publicProcedure.query(async ({ ctx }) => searchAccessibleBoardsAsync(ctx, "")),
|
||||
catalog: publicProcedure
|
||||
.meta({ mcp: { enabled: true, description: "List every board the current user can access." } })
|
||||
.query(async ({ ctx }) => searchAccessibleBoardsAsync(ctx, "")),
|
||||
search: publicProcedure
|
||||
.input(z.object({ query: z.string(), limit: z.number().min(1).max(100).default(10) }))
|
||||
.meta({
|
||||
mcp: {
|
||||
enabled: true,
|
||||
description: "Search accessible boards by name. REQUIRED: query (string). OPTIONAL: limit (number).",
|
||||
},
|
||||
})
|
||||
.query(async ({ ctx, input }) => searchAccessibleBoardsAsync(ctx, input.query, input.limit)),
|
||||
createBoard: permissionRequiredProcedure
|
||||
.requiresPermission("board-create")
|
||||
|
||||
@@ -130,21 +130,28 @@ export const searchEngineRouter = createTRPCRouter({
|
||||
|
||||
return null;
|
||||
}),
|
||||
catalog: publicProcedure.query(async ({ ctx }) => {
|
||||
return await ctx.db.query.searchEngines.findMany({
|
||||
where: ctx.session?.user ? undefined : eq(searchEngines.type, "generic"),
|
||||
orderBy: asc(searchEngines.name),
|
||||
with: {
|
||||
integration: {
|
||||
columns: {
|
||||
kind: true,
|
||||
url: true,
|
||||
id: true,
|
||||
catalog: publicProcedure
|
||||
.meta({
|
||||
mcp: {
|
||||
enabled: true,
|
||||
description: "List search engines available to the current user.",
|
||||
},
|
||||
})
|
||||
.query(async ({ ctx }) => {
|
||||
return await ctx.db.query.searchEngines.findMany({
|
||||
where: ctx.session?.user ? undefined : eq(searchEngines.type, "generic"),
|
||||
orderBy: asc(searchEngines.name),
|
||||
with: {
|
||||
integration: {
|
||||
columns: {
|
||||
kind: true,
|
||||
url: true,
|
||||
id: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
}),
|
||||
});
|
||||
}),
|
||||
search: publicProcedure.input(searchSchema).query(async ({ ctx, input }) => {
|
||||
return await ctx.db.query.searchEngines.findMany({
|
||||
// Public dashboards have no session: restrict anonymous users to generic
|
||||
|
||||
Reference in new issue
Block a user