mirror of
https://github.com/fosrl/pangolin.git
synced 2026-06-05 15:26:35 +00:00
Restrict the number of sites in the api
This commit is contained in:
@@ -173,6 +173,25 @@ const createSiteResourceSchema = z
|
|||||||
{
|
{
|
||||||
message: "At least one of siteIds or siteId must be provided"
|
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>;
|
export type CreateSiteResourceBody = z.infer<typeof createSiteResourceSchema>;
|
||||||
|
|||||||
@@ -181,6 +181,25 @@ const updateSiteResourceSchema = z
|
|||||||
{
|
{
|
||||||
message: "At least one of siteIds or siteId must be provided"
|
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>;
|
export type UpdateSiteResourceBody = z.infer<typeof updateSiteResourceSchema>;
|
||||||
|
|||||||
@@ -1885,6 +1885,36 @@ export function PrivateResourceForm({
|
|||||||
"authDaemonPort",
|
"authDaemonPort",
|
||||||
null
|
null
|
||||||
);
|
);
|
||||||
|
} else if (
|
||||||
|
v === "push"
|
||||||
|
) {
|
||||||
|
// push + site (default) = single site
|
||||||
|
const curAuthMode =
|
||||||
|
form.getValues(
|
||||||
|
"authDaemonMode"
|
||||||
|
);
|
||||||
|
if (
|
||||||
|
curAuthMode !==
|
||||||
|
"remote" &&
|
||||||
|
selectedSites.length >
|
||||||
|
1
|
||||||
|
) {
|
||||||
|
const first =
|
||||||
|
selectedSites.slice(
|
||||||
|
0,
|
||||||
|
1
|
||||||
|
);
|
||||||
|
setSelectedSites(
|
||||||
|
first
|
||||||
|
);
|
||||||
|
form.setValue(
|
||||||
|
"siteIds",
|
||||||
|
first.map(
|
||||||
|
(s) =>
|
||||||
|
s.siteId
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
cols={2}
|
cols={2}
|
||||||
@@ -1952,6 +1982,29 @@ export function PrivateResourceForm({
|
|||||||
"authDaemonPort",
|
"authDaemonPort",
|
||||||
null
|
null
|
||||||
);
|
);
|
||||||
|
// site daemon = single site
|
||||||
|
if (
|
||||||
|
selectedSites.length >
|
||||||
|
1
|
||||||
|
) {
|
||||||
|
const first =
|
||||||
|
selectedSites.slice(
|
||||||
|
0,
|
||||||
|
1
|
||||||
|
);
|
||||||
|
setSelectedSites(
|
||||||
|
first
|
||||||
|
);
|
||||||
|
form.setValue(
|
||||||
|
"siteIds",
|
||||||
|
first.map(
|
||||||
|
(
|
||||||
|
s
|
||||||
|
) =>
|
||||||
|
s.siteId
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
cols={2}
|
cols={2}
|
||||||
|
|||||||
Reference in New Issue
Block a user