Restrict the number of sites in the api

This commit is contained in:
Owen
2026-06-02 16:38:04 -07:00
parent 8bcc130947
commit 33fad57bf7
3 changed files with 91 additions and 0 deletions

View File

@@ -173,6 +173,25 @@ const createSiteResourceSchema = z
{
message: "At least one of siteIds or siteId must be provided"
}
)
.refine(
(data) => {
if (data.mode !== "ssh") return true;
const isSingleSiteMode =
data.authDaemonMode === "native" ||
(data.pamMode === "push" && data.authDaemonMode === "site") ||
(data.pamMode === "push" && data.authDaemonMode === undefined);
if (!isSingleSiteMode) return true;
const effectiveSiteIds = [
...(data.siteIds ?? []),
...(data.siteId !== undefined ? [data.siteId] : [])
];
const uniqueSiteIds = new Set(effectiveSiteIds);
return uniqueSiteIds.size <= 1;
},
{
message: "Only one site is allowed for this SSH daemon mode"
}
);
export type CreateSiteResourceBody = z.infer<typeof createSiteResourceSchema>;

View File

@@ -181,6 +181,25 @@ const updateSiteResourceSchema = z
{
message: "At least one of siteIds or siteId must be provided"
}
)
.refine(
(data) => {
if (data.mode !== "ssh") return true;
const isSingleSiteMode =
data.authDaemonMode === "native" ||
(data.pamMode === "push" && data.authDaemonMode === "site") ||
(data.pamMode === "push" && data.authDaemonMode === undefined);
if (!isSingleSiteMode) return true;
const effectiveSiteIds = [
...(data.siteIds ?? []),
...(data.siteId !== undefined ? [data.siteId] : [])
];
const uniqueSiteIds = new Set(effectiveSiteIds);
return uniqueSiteIds.size <= 1;
},
{
message: "Only one site is allowed for this SSH daemon mode"
}
);
export type UpdateSiteResourceBody = z.infer<typeof updateSiteResourceSchema>;