mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-05 15:26:35 +00:00
improvement: improve query param boolean handling for dashboard queries and move dashboard router to v1
This commit is contained in:
+21
-35
@@ -17,6 +17,20 @@ import { AuthMode } from "@app/services/auth/auth-type";
|
|||||||
import { SecretsOrderBy } from "@app/services/secret/secret-types";
|
import { SecretsOrderBy } from "@app/services/secret/secret-types";
|
||||||
import { PostHogEventTypes } from "@app/services/telemetry/telemetry-types";
|
import { PostHogEventTypes } from "@app/services/telemetry/telemetry-types";
|
||||||
|
|
||||||
|
// handle querystring boolean values
|
||||||
|
const booleanSchema = z
|
||||||
|
.union([z.boolean(), z.string().trim()])
|
||||||
|
.transform((value) => {
|
||||||
|
if (typeof value === "string") {
|
||||||
|
// ie if not empty, 0 or false, return true
|
||||||
|
return !!value && Number(value) !== 0 && value.toLowerCase() !== "false";
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
})
|
||||||
|
.optional()
|
||||||
|
.default(true);
|
||||||
|
|
||||||
export const registerDashboardRouter = async (server: FastifyZodProvider) => {
|
export const registerDashboardRouter = async (server: FastifyZodProvider) => {
|
||||||
server.route({
|
server.route({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
@@ -57,21 +71,9 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => {
|
|||||||
.describe(DASHBOARD.SECRET_OVERVIEW_LIST.orderDirection)
|
.describe(DASHBOARD.SECRET_OVERVIEW_LIST.orderDirection)
|
||||||
.optional(),
|
.optional(),
|
||||||
search: z.string().trim().describe(DASHBOARD.SECRET_OVERVIEW_LIST.search).optional(),
|
search: z.string().trim().describe(DASHBOARD.SECRET_OVERVIEW_LIST.search).optional(),
|
||||||
includeSecrets: z.coerce
|
includeSecrets: booleanSchema.describe(DASHBOARD.SECRET_OVERVIEW_LIST.includeSecrets),
|
||||||
.boolean()
|
includeFolders: booleanSchema.describe(DASHBOARD.SECRET_OVERVIEW_LIST.includeFolders),
|
||||||
.optional()
|
includeDynamicSecrets: booleanSchema.describe(DASHBOARD.SECRET_OVERVIEW_LIST.includeDynamicSecrets)
|
||||||
.default(true)
|
|
||||||
.describe(DASHBOARD.SECRET_OVERVIEW_LIST.includeSecrets),
|
|
||||||
includeFolders: z.coerce
|
|
||||||
.boolean()
|
|
||||||
.optional()
|
|
||||||
.default(true)
|
|
||||||
.describe(DASHBOARD.SECRET_OVERVIEW_LIST.includeFolders),
|
|
||||||
includeDynamicSecrets: z.coerce
|
|
||||||
.boolean()
|
|
||||||
.optional()
|
|
||||||
.default(true)
|
|
||||||
.describe(DASHBOARD.SECRET_OVERVIEW_LIST.includeDynamicSecrets)
|
|
||||||
}),
|
}),
|
||||||
response: {
|
response: {
|
||||||
200: z.object({
|
200: z.object({
|
||||||
@@ -354,26 +356,10 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => {
|
|||||||
.optional(),
|
.optional(),
|
||||||
search: z.string().trim().describe(DASHBOARD.SECRET_DETAILS_LIST.search).optional(),
|
search: z.string().trim().describe(DASHBOARD.SECRET_DETAILS_LIST.search).optional(),
|
||||||
tags: z.string().trim().transform(decodeURIComponent).describe(DASHBOARD.SECRET_DETAILS_LIST.tags).optional(),
|
tags: z.string().trim().transform(decodeURIComponent).describe(DASHBOARD.SECRET_DETAILS_LIST.tags).optional(),
|
||||||
includeSecrets: z.coerce
|
includeSecrets: booleanSchema.describe(DASHBOARD.SECRET_DETAILS_LIST.includeSecrets),
|
||||||
.boolean()
|
includeFolders: booleanSchema.describe(DASHBOARD.SECRET_DETAILS_LIST.includeFolders),
|
||||||
.optional()
|
includeDynamicSecrets: booleanSchema.describe(DASHBOARD.SECRET_DETAILS_LIST.includeDynamicSecrets),
|
||||||
.default(true)
|
includeImports: booleanSchema.describe(DASHBOARD.SECRET_DETAILS_LIST.includeImports)
|
||||||
.describe(DASHBOARD.SECRET_DETAILS_LIST.includeSecrets),
|
|
||||||
includeFolders: z.coerce
|
|
||||||
.boolean()
|
|
||||||
.optional()
|
|
||||||
.default(true)
|
|
||||||
.describe(DASHBOARD.SECRET_DETAILS_LIST.includeFolders),
|
|
||||||
includeDynamicSecrets: z.coerce
|
|
||||||
.boolean()
|
|
||||||
.optional()
|
|
||||||
.default(true)
|
|
||||||
.describe(DASHBOARD.SECRET_DETAILS_LIST.includeDynamicSecrets),
|
|
||||||
includeImports: z.coerce
|
|
||||||
.boolean()
|
|
||||||
.optional()
|
|
||||||
.default(true)
|
|
||||||
.describe(DASHBOARD.SECRET_DETAILS_LIST.includeImports)
|
|
||||||
}),
|
}),
|
||||||
response: {
|
response: {
|
||||||
200: z.object({
|
200: z.object({
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import { registerDashboardRouter } from "@app/server/routes/v1/dashboard-router";
|
||||||
|
|
||||||
import { registerAdminRouter } from "./admin-router";
|
import { registerAdminRouter } from "./admin-router";
|
||||||
import { registerAuthRoutes } from "./auth-router";
|
import { registerAuthRoutes } from "./auth-router";
|
||||||
import { registerProjectBotRouter } from "./bot-router";
|
import { registerProjectBotRouter } from "./bot-router";
|
||||||
@@ -101,4 +103,6 @@ export const registerV1Routes = async (server: FastifyZodProvider) => {
|
|||||||
await server.register(registerIdentityRouter, { prefix: "/identities" });
|
await server.register(registerIdentityRouter, { prefix: "/identities" });
|
||||||
await server.register(registerSecretSharingRouter, { prefix: "/secret-sharing" });
|
await server.register(registerSecretSharingRouter, { prefix: "/secret-sharing" });
|
||||||
await server.register(registerUserEngagementRouter, { prefix: "/user-engagement" });
|
await server.register(registerUserEngagementRouter, { prefix: "/user-engagement" });
|
||||||
|
|
||||||
|
await server.register(registerDashboardRouter, { prefix: "/dashboard" });
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import { registerDashboardRouter } from "./dashboard-router";
|
|
||||||
import { registerLoginRouter } from "./login-router";
|
import { registerLoginRouter } from "./login-router";
|
||||||
import { registerSecretBlindIndexRouter } from "./secret-blind-index-router";
|
import { registerSecretBlindIndexRouter } from "./secret-blind-index-router";
|
||||||
import { registerSecretRouter } from "./secret-router";
|
import { registerSecretRouter } from "./secret-router";
|
||||||
@@ -11,5 +10,4 @@ export const registerV3Routes = async (server: FastifyZodProvider) => {
|
|||||||
await server.register(registerUserRouter, { prefix: "/users" });
|
await server.register(registerUserRouter, { prefix: "/users" });
|
||||||
await server.register(registerSecretRouter, { prefix: "/secrets" });
|
await server.register(registerSecretRouter, { prefix: "/secrets" });
|
||||||
await server.register(registerSecretBlindIndexRouter, { prefix: "/workspaces" });
|
await server.register(registerSecretBlindIndexRouter, { prefix: "/workspaces" });
|
||||||
await server.register(registerDashboardRouter, { prefix: "/dashboard" });
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -48,21 +48,15 @@ export const dashboardKeys = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const fetchProjectSecretsOverview = async ({
|
export const fetchProjectSecretsOverview = async ({
|
||||||
includeFolders,
|
|
||||||
includeSecrets,
|
|
||||||
includeDynamicSecrets,
|
|
||||||
environments,
|
environments,
|
||||||
...params
|
...params
|
||||||
}: TGetDashboardProjectSecretsOverviewDTO) => {
|
}: TGetDashboardProjectSecretsOverviewDTO) => {
|
||||||
const { data } = await apiRequest.get<DashboardProjectSecretsOverviewResponse>(
|
const { data } = await apiRequest.get<DashboardProjectSecretsOverviewResponse>(
|
||||||
"/api/v3/dashboard/secrets-overview",
|
"/api/v1/dashboard/secrets-overview",
|
||||||
{
|
{
|
||||||
params: {
|
params: {
|
||||||
...params,
|
...params,
|
||||||
environments: encodeURIComponent(environments.join(",")),
|
environments: encodeURIComponent(environments.join(","))
|
||||||
includeFolders: includeFolders ? "1" : "",
|
|
||||||
includeSecrets: includeSecrets ? "1" : "",
|
|
||||||
includeDynamicSecrets: includeDynamicSecrets ? "1" : ""
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -71,22 +65,14 @@ export const fetchProjectSecretsOverview = async ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const fetchProjectSecretsDetails = async ({
|
export const fetchProjectSecretsDetails = async ({
|
||||||
includeFolders,
|
|
||||||
includeImports,
|
|
||||||
includeSecrets,
|
|
||||||
includeDynamicSecrets,
|
|
||||||
tags,
|
tags,
|
||||||
...params
|
...params
|
||||||
}: TGetDashboardProjectSecretsDetailsDTO) => {
|
}: TGetDashboardProjectSecretsDetailsDTO) => {
|
||||||
const { data } = await apiRequest.get<DashboardProjectSecretsDetailsResponse>(
|
const { data } = await apiRequest.get<DashboardProjectSecretsDetailsResponse>(
|
||||||
"/api/v3/dashboard/secrets-details",
|
"/api/v1/dashboard/secrets-details",
|
||||||
{
|
{
|
||||||
params: {
|
params: {
|
||||||
...params,
|
...params,
|
||||||
includeImports: includeImports ? "1" : "",
|
|
||||||
includeFolders: includeFolders ? "1" : "",
|
|
||||||
includeSecrets: includeSecrets ? "1" : "",
|
|
||||||
includeDynamicSecrets: includeDynamicSecrets ? "1" : "",
|
|
||||||
tags: encodeURIComponent(
|
tags: encodeURIComponent(
|
||||||
Object.entries(tags)
|
Object.entries(tags)
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
|||||||
Reference in New Issue
Block a user