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), eq(siteResources.orgId, orgId),
// exclude looking at the ones on exit nodes if this is an inference resource, // 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 // 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 siteResourceId
? ne(siteResources.siteResourceId, siteResourceId) ? ne(siteResources.siteResourceId, siteResourceId)
: isNotNull(siteResources.siteResourceId) : isNotNull(siteResources.siteResourceId)
+50 -22
View File
@@ -289,7 +289,9 @@ export async function updatePublicResources(
if (existingResource) { if (existingResource) {
let domain; let domain;
if ( if (
["http", "ssh", "rdp", "vnc", "inference"].includes(resourceData.mode || "") ["http", "ssh", "rdp", "vnc", "inference"].includes(
resourceData.mode || ""
)
) { ) {
if (resourceData["full-domain"]?.startsWith("*.")) { if (resourceData["full-domain"]?.startsWith("*.")) {
const isLicensed = await isLicensedOrSubscribed( const isLicensed = await isLicensedOrSubscribed(
@@ -374,14 +376,22 @@ export async function updatePublicResources(
name: resourceData.name || "Unnamed Resource", name: resourceData.name || "Unnamed Resource",
mode: resourceData.mode, mode: resourceData.mode,
proxyPort: ["http", "ssh", "rdp", "vnc", "inference"].includes( proxyPort: [
resourceData.mode || "" "http",
) "ssh",
"rdp",
"vnc",
"inference"
].includes(resourceData.mode || "")
? null ? null
: resourceData["proxy-port"], : resourceData["proxy-port"],
fullDomain: ["http", "ssh", "rdp", "vnc", "inference"].includes( fullDomain: [
resourceData.mode || "" "http",
) "ssh",
"rdp",
"vnc",
"inference"
].includes(resourceData.mode || "")
? resourceData["full-domain"] ? resourceData["full-domain"]
: null, : null,
subdomain: domain ? domain.subdomain : null, subdomain: domain ? domain.subdomain : null,
@@ -571,14 +581,22 @@ export async function updatePublicResources(
.set({ .set({
name: resourceData.name || "Unnamed Resource", name: resourceData.name || "Unnamed Resource",
mode: resourceData.mode, mode: resourceData.mode,
proxyPort: ["http", "ssh", "rdp", "vnc", "inference"].includes( proxyPort: [
resourceData.mode || "" "http",
) "ssh",
"rdp",
"vnc",
"inference"
].includes(resourceData.mode || "")
? null ? null
: resourceData["proxy-port"], : resourceData["proxy-port"],
fullDomain: ["http", "ssh", "rdp", "vnc", "inference"].includes( fullDomain: [
resourceData.mode || "" "http",
) "ssh",
"rdp",
"vnc",
"inference"
].includes(resourceData.mode || "")
? resourceData["full-domain"] ? resourceData["full-domain"]
: null, : null,
subdomain: domain ? domain.subdomain : null, subdomain: domain ? domain.subdomain : null,
@@ -1090,7 +1108,9 @@ export async function updatePublicResources(
let domain; let domain;
if ( if (
["http", "ssh", "rdp", "vnc", "inference"].includes(resourceData.mode || "") ["http", "ssh", "rdp", "vnc", "inference"].includes(
resourceData.mode || ""
)
) { ) {
if (resourceData["full-domain"]?.startsWith("*.")) { if (resourceData["full-domain"]?.startsWith("*.")) {
const isLicensed = await isLicensedOrSubscribed( const isLicensed = await isLicensedOrSubscribed(
@@ -1188,14 +1208,22 @@ export async function updatePublicResources(
status: resourceStatusFromSite, status: resourceStatusFromSite,
name: resourceData.name || "Unnamed Resource", name: resourceData.name || "Unnamed Resource",
mode: resourceData.mode, mode: resourceData.mode,
proxyPort: ["http", "ssh", "rdp", "vnc", "inference"].includes( proxyPort: [
resourceData.mode || "" "http",
) "ssh",
"rdp",
"vnc",
"inference"
].includes(resourceData.mode || "")
? null ? null
: resourceData["proxy-port"], : resourceData["proxy-port"],
fullDomain: ["http", "ssh", "rdp", "vnc", "inference"].includes( fullDomain: [
resourceData.mode || "" "http",
) "ssh",
"rdp",
"vnc",
"inference"
].includes(resourceData.mode || "")
? resourceData["full-domain"] ? resourceData["full-domain"]
: null, : null,
subdomain: domain ? domain.subdomain : null, subdomain: domain ? domain.subdomain : null,
@@ -2148,8 +2176,8 @@ export async function getDomain(
// resource (and vice versa) - only conflicts within the // resource (and vice versa) - only conflicts within the
// same routing category are rejected. // same routing category are rejected.
isInference isInference
? eq(resources.mode, "inference") ? ne(resources.mode, "inference")
: ne(resources.mode, "inference"), : eq(resources.mode, "inference"),
resourceId resourceId
? ne(resources.resourceId, resourceId) ? ne(resources.resourceId, resourceId)
: isNotNull(resources.resourceId) : isNotNull(resources.resourceId)
@@ -518,10 +518,9 @@ export async function createSiteResource(
.where( .where(
and( and(
eq(siteResources.fullDomain, fullDomain), eq(siteResources.fullDomain, fullDomain),
ne( mode == "inference"
siteResources.requiresExitNodeConnection, ? ne(siteResources.mode, "inference")
mode == "inference" : eq(siteResources.mode, "inference")
)
) )
); // exclude looking at the ones on exit nodes if this is an inference resource ); // exclude looking at the ones on exit nodes if this is an inference resource
@@ -484,10 +484,9 @@ export async function updateSiteResource(
.where( .where(
and( and(
eq(siteResources.fullDomain, fullDomain), eq(siteResources.fullDomain, fullDomain),
ne( mode == "inference"
siteResources.requiresExitNodeConnection, ? ne(siteResources.mode, "inference")
mode == "inference" : eq(siteResources.mode, "inference")
)
) )
); // exclude looking at the ones on exit nodes if this is an inference resource ); // exclude looking at the ones on exit nodes if this is an inference resource