mirror of
https://github.com/fosrl/pangolin.git
synced 2025-08-01 00:24:38 +02:00
ensure subdomain is null if is base domain
This commit is contained in:
parent
f1291d4d7d
commit
a3be0d4655
3 changed files with 51 additions and 30 deletions
|
@ -35,8 +35,8 @@ const createHttpResourceSchema = z
|
|||
name: z.string().min(1).max(255),
|
||||
subdomain: z
|
||||
.string()
|
||||
.optional()
|
||||
.transform((val) => val?.toLowerCase()),
|
||||
.nullable()
|
||||
.optional(),
|
||||
siteId: z.number(),
|
||||
http: z.boolean(),
|
||||
protocol: z.enum(["tcp", "udp"]),
|
||||
|
@ -201,7 +201,8 @@ async function createHttpResource(
|
|||
);
|
||||
}
|
||||
|
||||
const { name, subdomain, domainId } = parsedBody.data;
|
||||
const { name, domainId } = parsedBody.data;
|
||||
let subdomain = parsedBody.data.subdomain;
|
||||
|
||||
const [domainRes] = await db
|
||||
.select()
|
||||
|
@ -274,6 +275,10 @@ async function createHttpResource(
|
|||
}
|
||||
}
|
||||
|
||||
if (fullDomain === domainRes.domains.baseDomain) {
|
||||
subdomain = null;
|
||||
}
|
||||
|
||||
fullDomain = fullDomain.toLowerCase();
|
||||
|
||||
logger.debug(`Full domain: ${fullDomain}`);
|
||||
|
|
|
@ -35,8 +35,8 @@ const updateHttpResourceBodySchema = z
|
|||
.object({
|
||||
name: z.string().min(1).max(255).optional(),
|
||||
subdomain: subdomainSchema
|
||||
.optional()
|
||||
.transform((val) => val?.toLowerCase()),
|
||||
.nullable()
|
||||
.optional(),
|
||||
ssl: z.boolean().optional(),
|
||||
sso: z.boolean().optional(),
|
||||
blockAccess: z.boolean().optional(),
|
||||
|
@ -286,7 +286,7 @@ async function updateHttpResource(
|
|||
} else if (domainRes.domains.type == "cname") {
|
||||
fullDomain = domainRes.domains.baseDomain;
|
||||
} else if (domainRes.domains.type == "wildcard") {
|
||||
if (updateData.subdomain) {
|
||||
if (updateData.subdomain !== undefined) {
|
||||
// the subdomain cant have a dot in it
|
||||
const parsedSubdomain = subdomainSchema.safeParse(updateData.subdomain);
|
||||
if (!parsedSubdomain.success) {
|
||||
|
@ -341,11 +341,15 @@ async function updateHttpResource(
|
|||
.set({ fullDomain })
|
||||
.where(eq(resources.resourceId, resource.resourceId));
|
||||
}
|
||||
|
||||
if (fullDomain === domainRes.domains.baseDomain) {
|
||||
updateData.subdomain = null;
|
||||
}
|
||||
}
|
||||
|
||||
const updatedResource = await db
|
||||
.update(resources)
|
||||
.set(updateData)
|
||||
.set({...updateData, })
|
||||
.where(eq(resources.resourceId, resource.resourceId))
|
||||
.returning();
|
||||
|
||||
|
|
|
@ -118,13 +118,12 @@ export default function GeneralForm() {
|
|||
fullDomain: string;
|
||||
} | null>(null);
|
||||
|
||||
const GeneralFormSchema = z
|
||||
.object({
|
||||
enabled: z.boolean(),
|
||||
subdomain: z.string().optional(),
|
||||
name: z.string().min(1).max(255),
|
||||
domainId: z.string().optional()
|
||||
});
|
||||
const GeneralFormSchema = z.object({
|
||||
enabled: z.boolean(),
|
||||
subdomain: z.string().optional(),
|
||||
name: z.string().min(1).max(255),
|
||||
domainId: z.string().optional()
|
||||
});
|
||||
|
||||
type GeneralFormValues = z.infer<typeof GeneralFormSchema>;
|
||||
|
||||
|
@ -197,7 +196,7 @@ export default function GeneralForm() {
|
|||
enabled: data.enabled,
|
||||
name: data.name,
|
||||
subdomain: data.subdomain,
|
||||
domainId: data.domainId,
|
||||
domainId: data.domainId
|
||||
}
|
||||
)
|
||||
.catch((e) => {
|
||||
|
@ -299,11 +298,9 @@ export default function GeneralForm() {
|
|||
defaultChecked={
|
||||
resource.enabled
|
||||
}
|
||||
label={
|
||||
t(
|
||||
"resourceEnable"
|
||||
)
|
||||
}
|
||||
label={t(
|
||||
"resourceEnable"
|
||||
)}
|
||||
onCheckedChange={(
|
||||
val
|
||||
) =>
|
||||
|
@ -341,7 +338,7 @@ export default function GeneralForm() {
|
|||
<Label>Domain</Label>
|
||||
<div className="border p-2 rounded-md flex items-center justify-between">
|
||||
<span className="text-sm text-muted-foreground flex items-center gap-2">
|
||||
<Globe size="14"/>
|
||||
<Globe size="14" />
|
||||
{resourceFullDomain}
|
||||
</span>
|
||||
<Button
|
||||
|
@ -438,7 +435,10 @@ export default function GeneralForm() {
|
|||
</Button>
|
||||
</FormControl>
|
||||
</PopoverTrigger>
|
||||
<PopoverContent className="w-full p-0" align="start">
|
||||
<PopoverContent
|
||||
className="w-full p-0"
|
||||
align="start"
|
||||
>
|
||||
<Command>
|
||||
<CommandInput
|
||||
placeholder={t(
|
||||
|
@ -539,14 +539,26 @@ export default function GeneralForm() {
|
|||
<CredenzaClose asChild>
|
||||
<Button variant="outline">{t("cancel")}</Button>
|
||||
</CredenzaClose>
|
||||
<Button onClick={() => {
|
||||
if (selectedDomain) {
|
||||
setResourceFullDomain(selectedDomain.fullDomain);
|
||||
form.setValue("domainId", selectedDomain.domainId);
|
||||
form.setValue("subdomain", selectedDomain.subdomain);
|
||||
setEditDomainOpen(false);
|
||||
}
|
||||
}}>Select Domain</Button>
|
||||
<Button
|
||||
onClick={() => {
|
||||
if (selectedDomain) {
|
||||
setResourceFullDomain(
|
||||
selectedDomain.fullDomain
|
||||
);
|
||||
form.setValue(
|
||||
"domainId",
|
||||
selectedDomain.domainId
|
||||
);
|
||||
form.setValue(
|
||||
"subdomain",
|
||||
selectedDomain.subdomain
|
||||
);
|
||||
setEditDomainOpen(false);
|
||||
}
|
||||
}}
|
||||
>
|
||||
Select Domain
|
||||
</Button>
|
||||
</CredenzaFooter>
|
||||
</CredenzaContent>
|
||||
</Credenza>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue