Handle overlapping fullDomain properly

This commit is contained in:
Owen
2026-08-14 12:04:04 -04:00
parent 234819f8f2
commit 954dc8d1d9
4 changed files with 59 additions and 31 deletions
+3 -1
View File
@@ -48,7 +48,9 @@ async function getDomainForSiteResource(
eq(siteResources.orgId, orgId),
// exclude looking at the ones on exit nodes if this is an inference resource,
// and vice versa, so inference and non-inference resources can share a full-domain
ne(siteResources.requiresExitNodeConnection, !isInference),
isInference
? ne(siteResources.mode, "inference")
: eq(siteResources.mode, "inference"),
siteResourceId
? ne(siteResources.siteResourceId, siteResourceId)
: isNotNull(siteResources.siteResourceId)
+50 -22
View File
@@ -289,7 +289,9 @@ export async function updatePublicResources(
if (existingResource) {
let domain;
if (
["http", "ssh", "rdp", "vnc", "inference"].includes(resourceData.mode || "")
["http", "ssh", "rdp", "vnc", "inference"].includes(
resourceData.mode || ""
)
) {
if (resourceData["full-domain"]?.startsWith("*.")) {
const isLicensed = await isLicensedOrSubscribed(
@@ -374,14 +376,22 @@ export async function updatePublicResources(
name: resourceData.name || "Unnamed Resource",
mode: resourceData.mode,
proxyPort: ["http", "ssh", "rdp", "vnc", "inference"].includes(
resourceData.mode || ""
)
proxyPort: [
"http",
"ssh",
"rdp",
"vnc",
"inference"
].includes(resourceData.mode || "")
? null
: resourceData["proxy-port"],
fullDomain: ["http", "ssh", "rdp", "vnc", "inference"].includes(
resourceData.mode || ""
)
fullDomain: [
"http",
"ssh",
"rdp",
"vnc",
"inference"
].includes(resourceData.mode || "")
? resourceData["full-domain"]
: null,
subdomain: domain ? domain.subdomain : null,
@@ -571,14 +581,22 @@ export async function updatePublicResources(
.set({
name: resourceData.name || "Unnamed Resource",
mode: resourceData.mode,
proxyPort: ["http", "ssh", "rdp", "vnc", "inference"].includes(
resourceData.mode || ""
)
proxyPort: [
"http",
"ssh",
"rdp",
"vnc",
"inference"
].includes(resourceData.mode || "")
? null
: resourceData["proxy-port"],
fullDomain: ["http", "ssh", "rdp", "vnc", "inference"].includes(
resourceData.mode || ""
)
fullDomain: [
"http",
"ssh",
"rdp",
"vnc",
"inference"
].includes(resourceData.mode || "")
? resourceData["full-domain"]
: null,
subdomain: domain ? domain.subdomain : null,
@@ -1090,7 +1108,9 @@ export async function updatePublicResources(
let domain;
if (
["http", "ssh", "rdp", "vnc", "inference"].includes(resourceData.mode || "")
["http", "ssh", "rdp", "vnc", "inference"].includes(
resourceData.mode || ""
)
) {
if (resourceData["full-domain"]?.startsWith("*.")) {
const isLicensed = await isLicensedOrSubscribed(
@@ -1188,14 +1208,22 @@ export async function updatePublicResources(
status: resourceStatusFromSite,
name: resourceData.name || "Unnamed Resource",
mode: resourceData.mode,
proxyPort: ["http", "ssh", "rdp", "vnc", "inference"].includes(
resourceData.mode || ""
)
proxyPort: [
"http",
"ssh",
"rdp",
"vnc",
"inference"
].includes(resourceData.mode || "")
? null
: resourceData["proxy-port"],
fullDomain: ["http", "ssh", "rdp", "vnc", "inference"].includes(
resourceData.mode || ""
)
fullDomain: [
"http",
"ssh",
"rdp",
"vnc",
"inference"
].includes(resourceData.mode || "")
? resourceData["full-domain"]
: null,
subdomain: domain ? domain.subdomain : null,
@@ -2148,8 +2176,8 @@ export async function getDomain(
// resource (and vice versa) - only conflicts within the
// same routing category are rejected.
isInference
? eq(resources.mode, "inference")
: ne(resources.mode, "inference"),
? ne(resources.mode, "inference")
: eq(resources.mode, "inference"),
resourceId
? ne(resources.resourceId, resourceId)
: isNotNull(resources.resourceId)
@@ -518,10 +518,9 @@ export async function createSiteResource(
.where(
and(
eq(siteResources.fullDomain, fullDomain),
ne(
siteResources.requiresExitNodeConnection,
mode == "inference"
)
mode == "inference"
? ne(siteResources.mode, "inference")
: eq(siteResources.mode, "inference")
)
); // exclude looking at the ones on exit nodes if this is an inference resource
@@ -484,10 +484,9 @@ export async function updateSiteResource(
.where(
and(
eq(siteResources.fullDomain, fullDomain),
ne(
siteResources.requiresExitNodeConnection,
mode == "inference"
)
mode == "inference"
? ne(siteResources.mode, "inference")
: eq(siteResources.mode, "inference")
)
); // exclude looking at the ones on exit nodes if this is an inference resource