mirror of
https://github.com/fosrl/pangolin.git
synced 2026-03-20 17:46:37 +00:00
Remove siteSiteResources
This commit is contained in:
@@ -249,8 +249,8 @@ export const siteResources = pgTable("siteResources", {
|
|||||||
|
|
||||||
export const networks = pgTable("networks", {
|
export const networks = pgTable("networks", {
|
||||||
networkId: serial("networkId").primaryKey(),
|
networkId: serial("networkId").primaryKey(),
|
||||||
niceId: text("niceId").notNull(),
|
niceId: text("niceId"),
|
||||||
name: text("name").notNull(),
|
name: text("name"),
|
||||||
scope: varchar("scope")
|
scope: varchar("scope")
|
||||||
.$type<"global" | "resource">()
|
.$type<"global" | "resource">()
|
||||||
.notNull()
|
.notNull()
|
||||||
|
|||||||
@@ -275,8 +275,8 @@ export const siteResources = sqliteTable("siteResources", {
|
|||||||
|
|
||||||
export const networks = sqliteTable("networks", {
|
export const networks = sqliteTable("networks", {
|
||||||
networkId: integer("networkId").primaryKey({ autoIncrement: true }),
|
networkId: integer("networkId").primaryKey({ autoIncrement: true }),
|
||||||
niceId: text("niceId").notNull(),
|
niceId: text("niceId"),
|
||||||
name: text("name").notNull(),
|
name: text("name"),
|
||||||
scope: text("scope")
|
scope: text("scope")
|
||||||
.$type<"global" | "resource">()
|
.$type<"global" | "resource">()
|
||||||
.notNull()
|
.notNull()
|
||||||
|
|||||||
@@ -5,12 +5,13 @@ import {
|
|||||||
roleSiteResources,
|
roleSiteResources,
|
||||||
Site,
|
Site,
|
||||||
SiteResource,
|
SiteResource,
|
||||||
|
siteNetworks,
|
||||||
siteResources,
|
siteResources,
|
||||||
siteSiteResources,
|
|
||||||
Transaction,
|
Transaction,
|
||||||
userOrgs,
|
userOrgs,
|
||||||
users,
|
users,
|
||||||
userSiteResources
|
userSiteResources,
|
||||||
|
networks
|
||||||
} from "@server/db";
|
} from "@server/db";
|
||||||
import { sites } from "@server/db";
|
import { sites } from "@server/db";
|
||||||
import { eq, and, ne, inArray, or } from "drizzle-orm";
|
import { eq, and, ne, inArray, or } from "drizzle-orm";
|
||||||
@@ -47,17 +48,12 @@ export async function updateClientResources(
|
|||||||
)
|
)
|
||||||
.limit(1);
|
.limit(1);
|
||||||
|
|
||||||
const existingSiteIds = await trx
|
const existingSiteIds = existingResource?.networkId
|
||||||
.select({ siteId: sites.siteId })
|
? await trx
|
||||||
.from(siteSiteResources)
|
.select({ siteId: sites.siteId })
|
||||||
.where(
|
.from(siteNetworks)
|
||||||
and(
|
.where(eq(siteNetworks.networkId, existingResource.networkId))
|
||||||
eq(
|
: [];
|
||||||
siteSiteResources.siteResourceId,
|
|
||||||
existingResource.siteResourceId
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
let allSites: { siteId: number }[] = [];
|
let allSites: { siteId: number }[] = [];
|
||||||
if (resourceData.site) {
|
if (resourceData.site) {
|
||||||
@@ -144,15 +140,19 @@ export async function updateClientResources(
|
|||||||
const siteResourceId = existingResource.siteResourceId;
|
const siteResourceId = existingResource.siteResourceId;
|
||||||
const orgId = existingResource.orgId;
|
const orgId = existingResource.orgId;
|
||||||
|
|
||||||
await trx
|
if (updatedResource.networkId) {
|
||||||
.delete(siteSiteResources)
|
await trx
|
||||||
.where(eq(siteSiteResources.siteResourceId, siteResourceId));
|
.delete(siteNetworks)
|
||||||
|
.where(
|
||||||
|
eq(siteNetworks.networkId, updatedResource.networkId)
|
||||||
|
);
|
||||||
|
|
||||||
for (const site of allSites) {
|
for (const site of allSites) {
|
||||||
await trx.insert(siteSiteResources).values({
|
await trx.insert(siteNetworks).values({
|
||||||
siteId: site.siteId,
|
siteId: site.siteId,
|
||||||
siteResourceId: siteResourceId
|
networkId: updatedResource.networkId
|
||||||
});
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await trx
|
await trx
|
||||||
@@ -268,12 +268,21 @@ export async function updateClientResources(
|
|||||||
aliasAddress = await getNextAvailableAliasAddress(orgId);
|
aliasAddress = await getNextAvailableAliasAddress(orgId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const [network] = await trx
|
||||||
|
.insert(networks)
|
||||||
|
.values({
|
||||||
|
scope: "resource",
|
||||||
|
orgId: orgId
|
||||||
|
})
|
||||||
|
.returning();
|
||||||
|
|
||||||
// Create new resource
|
// Create new resource
|
||||||
const [newResource] = await trx
|
const [newResource] = await trx
|
||||||
.insert(siteResources)
|
.insert(siteResources)
|
||||||
.values({
|
.values({
|
||||||
orgId: orgId,
|
orgId: orgId,
|
||||||
niceId: resourceNiceId,
|
niceId: resourceNiceId,
|
||||||
|
networkId: network.networkId,
|
||||||
name: resourceData.name || resourceNiceId,
|
name: resourceData.name || resourceNiceId,
|
||||||
mode: resourceData.mode,
|
mode: resourceData.mode,
|
||||||
destination: resourceData.destination,
|
destination: resourceData.destination,
|
||||||
@@ -290,9 +299,9 @@ export async function updateClientResources(
|
|||||||
const siteResourceId = newResource.siteResourceId;
|
const siteResourceId = newResource.siteResourceId;
|
||||||
|
|
||||||
for (const site of allSites) {
|
for (const site of allSites) {
|
||||||
await trx.insert(siteSiteResources).values({
|
await trx.insert(siteNetworks).values({
|
||||||
siteId: site.siteId,
|
siteId: site.siteId,
|
||||||
siteResourceId: siteResourceId
|
networkId: network.networkId
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,10 +5,11 @@ import {
|
|||||||
orgs,
|
orgs,
|
||||||
roles,
|
roles,
|
||||||
roleSiteResources,
|
roleSiteResources,
|
||||||
|
siteNetworks,
|
||||||
|
networks,
|
||||||
SiteResource,
|
SiteResource,
|
||||||
siteResources,
|
siteResources,
|
||||||
sites,
|
sites,
|
||||||
siteSiteResources,
|
|
||||||
userSiteResources
|
userSiteResources
|
||||||
} from "@server/db";
|
} from "@server/db";
|
||||||
import { getUniqueSiteResourceName } from "@server/db/names";
|
import { getUniqueSiteResourceName } from "@server/db/names";
|
||||||
@@ -186,7 +187,9 @@ export async function createSiteResource(
|
|||||||
.limit(1);
|
.limit(1);
|
||||||
|
|
||||||
if (sitesToAssign.length !== siteIds.length) {
|
if (sitesToAssign.length !== siteIds.length) {
|
||||||
return next(createHttpError(HttpCode.NOT_FOUND, "Some site not found"));
|
return next(
|
||||||
|
createHttpError(HttpCode.NOT_FOUND, "Some site not found")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const [org] = await db
|
const [org] = await db
|
||||||
@@ -288,11 +291,29 @@ export async function createSiteResource(
|
|||||||
|
|
||||||
let newSiteResource: SiteResource | undefined;
|
let newSiteResource: SiteResource | undefined;
|
||||||
await db.transaction(async (trx) => {
|
await db.transaction(async (trx) => {
|
||||||
|
const [network] = await trx
|
||||||
|
.insert(networks)
|
||||||
|
.values({
|
||||||
|
scope: "resource",
|
||||||
|
orgId: orgId
|
||||||
|
})
|
||||||
|
.returning();
|
||||||
|
|
||||||
|
if (!network) {
|
||||||
|
return next(
|
||||||
|
createHttpError(
|
||||||
|
HttpCode.INTERNAL_SERVER_ERROR,
|
||||||
|
`Failed to create network`
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// Create the site resource
|
// Create the site resource
|
||||||
const insertValues: typeof siteResources.$inferInsert = {
|
const insertValues: typeof siteResources.$inferInsert = {
|
||||||
niceId,
|
niceId,
|
||||||
orgId,
|
orgId,
|
||||||
name,
|
name,
|
||||||
|
networkId: network.networkId,
|
||||||
mode: mode as "host" | "cidr",
|
mode: mode as "host" | "cidr",
|
||||||
destination,
|
destination,
|
||||||
enabled,
|
enabled,
|
||||||
@@ -318,9 +339,9 @@ export async function createSiteResource(
|
|||||||
//////////////////// update the associations ////////////////////
|
//////////////////// update the associations ////////////////////
|
||||||
|
|
||||||
for (const siteId of siteIds) {
|
for (const siteId of siteIds) {
|
||||||
await trx.insert(siteSiteResources).values({
|
await trx.insert(siteNetworks).values({
|
||||||
siteId: siteId,
|
siteId: siteId,
|
||||||
siteResourceId: siteResourceId
|
networkId: network.networkId
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -383,7 +404,6 @@ export async function createSiteResource(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
await rebuildClientAssociationsFromSiteResource(
|
await rebuildClientAssociationsFromSiteResource(
|
||||||
newSiteResource,
|
newSiteResource,
|
||||||
trx
|
trx
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { db, SiteResource, siteResources, sites, siteSiteResources } from "@server/db";
|
import { db, SiteResource, siteNetworks, siteResources, sites } from "@server/db";
|
||||||
import response from "@server/lib/response";
|
import response from "@server/lib/response";
|
||||||
import logger from "@server/logger";
|
import logger from "@server/logger";
|
||||||
import { OpenAPITags, registry } from "@server/openApi";
|
import { OpenAPITags, registry } from "@server/openApi";
|
||||||
@@ -99,13 +99,15 @@ function querySiteResourcesBase() {
|
|||||||
disableIcmp: siteResources.disableIcmp,
|
disableIcmp: siteResources.disableIcmp,
|
||||||
authDaemonMode: siteResources.authDaemonMode,
|
authDaemonMode: siteResources.authDaemonMode,
|
||||||
authDaemonPort: siteResources.authDaemonPort,
|
authDaemonPort: siteResources.authDaemonPort,
|
||||||
|
networkId: siteResources.networkId,
|
||||||
|
defaultNetworkId: siteResources.defaultNetworkId,
|
||||||
siteNames: sql<string[]>`array_agg(${sites.name})`,
|
siteNames: sql<string[]>`array_agg(${sites.name})`,
|
||||||
siteNiceIds: sql<string[]>`array_agg(${sites.niceId})`,
|
siteNiceIds: sql<string[]>`array_agg(${sites.niceId})`,
|
||||||
siteAddresses: sql<(string | null)[]>`array_agg(${sites.address})`
|
siteAddresses: sql<(string | null)[]>`array_agg(${sites.address})`
|
||||||
})
|
})
|
||||||
.from(siteResources)
|
.from(siteResources)
|
||||||
.innerJoin(siteSiteResources, eq(siteResources.siteResourceId, siteSiteResources.siteResourceId))
|
.innerJoin(siteNetworks, eq(siteResources.networkId, siteNetworks.networkId))
|
||||||
.innerJoin(sites, eq(siteSiteResources.siteId, sites.siteId))
|
.innerJoin(sites, eq(siteNetworks.siteId, sites.siteId))
|
||||||
.groupBy(siteResources.siteResourceId);
|
.groupBy(siteResources.siteResourceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,9 @@ import {
|
|||||||
orgs,
|
orgs,
|
||||||
roles,
|
roles,
|
||||||
roleSiteResources,
|
roleSiteResources,
|
||||||
|
siteNetworks,
|
||||||
sites,
|
sites,
|
||||||
siteSiteResources,
|
networks,
|
||||||
Transaction,
|
Transaction,
|
||||||
userSiteResources
|
userSiteResources
|
||||||
} from "@server/db";
|
} from "@server/db";
|
||||||
@@ -257,10 +258,14 @@ export async function updateSiteResource(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let sitesChanged = false;
|
let sitesChanged = false;
|
||||||
const existingSiteIds = await db
|
const existingSiteIds = existingSiteResource.networkId
|
||||||
.select()
|
? await db
|
||||||
.from(siteSiteResources)
|
.select()
|
||||||
.where(eq(siteSiteResources.siteResourceId, siteResourceId));
|
.from(siteNetworks)
|
||||||
|
.where(
|
||||||
|
eq(siteNetworks.networkId, existingSiteResource.networkId)
|
||||||
|
)
|
||||||
|
: [];
|
||||||
|
|
||||||
const existingSiteIdSet = new Set(existingSiteIds.map((s) => s.siteId));
|
const existingSiteIdSet = new Set(existingSiteIds.map((s) => s.siteId));
|
||||||
const newSiteIdSet = new Set(siteIds);
|
const newSiteIdSet = new Set(siteIds);
|
||||||
@@ -460,15 +465,17 @@ export async function updateSiteResource(
|
|||||||
|
|
||||||
// delete the site - site resources associations
|
// delete the site - site resources associations
|
||||||
await trx
|
await trx
|
||||||
.delete(siteSiteResources)
|
.delete(siteNetworks)
|
||||||
.where(
|
.where(
|
||||||
eq(siteSiteResources.siteResourceId, siteResourceId)
|
eq(siteNetworks.networkId, updatedSiteResource.networkId!)
|
||||||
|
// TODO: HERE WE FORCE THE NETWORK TO BE DEFINED BUT THE NETWORK CAN GET DELETED and we need to handle that
|
||||||
);
|
);
|
||||||
|
|
||||||
for (const siteId of siteIds) {
|
for (const siteId of siteIds) {
|
||||||
await trx.insert(siteSiteResources).values({
|
await trx.insert(siteNetworks).values({
|
||||||
siteId: siteId,
|
siteId: siteId,
|
||||||
siteResourceId: siteResourceId
|
networkId: updatedSiteResource.networkId!
|
||||||
|
// TODO: HERE WE FORCE THE NETWORK TO BE DEFINED BUT THE NETWORK CAN GET DELETED and we need to handle that
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -664,10 +671,11 @@ export async function handleMessagingForUpdatedSiteResource(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
.innerJoin(
|
.innerJoin(
|
||||||
siteSiteResources,
|
siteNetworks,
|
||||||
eq(
|
eq(
|
||||||
siteSiteResources.siteResourceId,
|
siteNetworks.networkId,
|
||||||
siteResources.siteResourceId
|
siteResources.networkId
|
||||||
|
// TODO: HERE WE FORCE THE NETWORK TO BE DEFINED BUT THE NETWORK CAN GET DELETED and we need to handle that
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
.where(
|
.where(
|
||||||
@@ -676,7 +684,7 @@ export async function handleMessagingForUpdatedSiteResource(
|
|||||||
clientSiteResourcesAssociationsCache.clientId,
|
clientSiteResourcesAssociationsCache.clientId,
|
||||||
client.clientId
|
client.clientId
|
||||||
),
|
),
|
||||||
eq(siteSiteResources.siteId, site.siteId),
|
eq(siteNetworks.siteId, site.siteId),
|
||||||
eq(
|
eq(
|
||||||
siteResources.destination,
|
siteResources.destination,
|
||||||
existingSiteResource.destination
|
existingSiteResource.destination
|
||||||
|
|||||||
Reference in New Issue
Block a user