mirror of
https://github.com/fosrl/pangolin.git
synced 2026-09-09 04:26:43 +02:00
Add drizzle indexes to match db
This commit is contained in:
@@ -11,7 +11,7 @@ import {
|
|||||||
primaryKey,
|
primaryKey,
|
||||||
uniqueIndex
|
uniqueIndex
|
||||||
} from "drizzle-orm/pg-core";
|
} from "drizzle-orm/pg-core";
|
||||||
import { InferSelectModel } from "drizzle-orm";
|
import { InferSelectModel, sql } from "drizzle-orm";
|
||||||
import {
|
import {
|
||||||
domains,
|
domains,
|
||||||
orgs,
|
orgs,
|
||||||
@@ -207,17 +207,28 @@ export const remoteExitNodeSessions = pgTable("remoteExitNodeSession", {
|
|||||||
expiresAt: bigint("expiresAt", { mode: "number" }).notNull()
|
expiresAt: bigint("expiresAt", { mode: "number" }).notNull()
|
||||||
});
|
});
|
||||||
|
|
||||||
export const loginPage = pgTable("loginPage", {
|
export const loginPage = pgTable(
|
||||||
|
"loginPage",
|
||||||
|
{
|
||||||
loginPageId: serial("loginPageId").primaryKey(),
|
loginPageId: serial("loginPageId").primaryKey(),
|
||||||
subdomain: varchar("subdomain"),
|
subdomain: varchar("subdomain"),
|
||||||
fullDomain: varchar("fullDomain"),
|
fullDomain: varchar("fullDomain"),
|
||||||
exitNodeId: integer("exitNodeId").references(() => exitNodes.exitNodeId, {
|
exitNodeId: integer("exitNodeId").references(
|
||||||
|
() => exitNodes.exitNodeId,
|
||||||
|
{
|
||||||
onDelete: "set null"
|
onDelete: "set null"
|
||||||
}),
|
}
|
||||||
|
),
|
||||||
domainId: varchar("domainId").references(() => domains.domainId, {
|
domainId: varchar("domainId").references(() => domains.domainId, {
|
||||||
onDelete: "set null"
|
onDelete: "set null"
|
||||||
})
|
})
|
||||||
});
|
},
|
||||||
|
(t) => [
|
||||||
|
index("idx_loginpage_fulldomain")
|
||||||
|
.on(t.fullDomain)
|
||||||
|
.where(sql`${t.fullDomain} IS NOT NULL`)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
export const loginPageOrg = pgTable("loginPageOrg", {
|
export const loginPageOrg = pgTable("loginPageOrg", {
|
||||||
loginPageId: integer("loginPageId")
|
loginPageId: integer("loginPageId")
|
||||||
|
|||||||
+144
-34
@@ -1,5 +1,5 @@
|
|||||||
import { randomUUID } from "crypto";
|
import { randomUUID } from "crypto";
|
||||||
import { InferSelectModel } from "drizzle-orm";
|
import { InferSelectModel, sql } from "drizzle-orm";
|
||||||
import {
|
import {
|
||||||
bigint,
|
bigint,
|
||||||
boolean,
|
boolean,
|
||||||
@@ -82,7 +82,9 @@ export const orgDomains = pgTable("orgDomains", {
|
|||||||
.references(() => domains.domainId, { onDelete: "cascade" })
|
.references(() => domains.domainId, { onDelete: "cascade" })
|
||||||
});
|
});
|
||||||
|
|
||||||
export const sites = pgTable("sites", {
|
export const sites = pgTable(
|
||||||
|
"sites",
|
||||||
|
{
|
||||||
siteId: serial("siteId").primaryKey(),
|
siteId: serial("siteId").primaryKey(),
|
||||||
orgId: varchar("orgId")
|
orgId: varchar("orgId")
|
||||||
.references(() => orgs.orgId, {
|
.references(() => orgs.orgId, {
|
||||||
@@ -107,17 +109,32 @@ export const sites = pgTable("sites", {
|
|||||||
publicKey: varchar("publicKey"),
|
publicKey: varchar("publicKey"),
|
||||||
lastHolePunch: bigint("lastHolePunch", { mode: "number" }),
|
lastHolePunch: bigint("lastHolePunch", { mode: "number" }),
|
||||||
listenPort: integer("listenPort"),
|
listenPort: integer("listenPort"),
|
||||||
dockerSocketEnabled: boolean("dockerSocketEnabled").notNull().default(true),
|
dockerSocketEnabled: boolean("dockerSocketEnabled")
|
||||||
autoUpdateEnabled: boolean("autoUpdateEnabled").notNull().default(false),
|
.notNull()
|
||||||
|
.default(true),
|
||||||
|
autoUpdateEnabled: boolean("autoUpdateEnabled")
|
||||||
|
.notNull()
|
||||||
|
.default(false),
|
||||||
autoUpdateOverrideOrg: boolean("autoUpdateOverrideOrg")
|
autoUpdateOverrideOrg: boolean("autoUpdateOverrideOrg")
|
||||||
.notNull()
|
.notNull()
|
||||||
.default(false),
|
.default(false),
|
||||||
status: varchar("status")
|
status: varchar("status")
|
||||||
.$type<"pending" | "approved">()
|
.$type<"pending" | "approved">()
|
||||||
.default("approved")
|
.default("approved")
|
||||||
});
|
},
|
||||||
|
(t) => [
|
||||||
|
index("idx_sites_exitnodeid").on(t.exitNodeId),
|
||||||
|
index("idx_sites_exitnode_type_siteid").on(
|
||||||
|
t.exitNodeId,
|
||||||
|
t.type,
|
||||||
|
t.siteId
|
||||||
|
)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
export const resources = pgTable("resources", {
|
export const resources = pgTable(
|
||||||
|
"resources",
|
||||||
|
{
|
||||||
resourceId: serial("resourceId").primaryKey(),
|
resourceId: serial("resourceId").primaryKey(),
|
||||||
resourcePolicyId: integer("resourcePolicyId").references(
|
resourcePolicyId: integer("resourcePolicyId").references(
|
||||||
() => resourcePolicies.resourcePolicyId,
|
() => resourcePolicies.resourcePolicyId,
|
||||||
@@ -182,7 +199,13 @@ export const resources = pgTable("resources", {
|
|||||||
.$type<"site" | "remote" | "native">()
|
.$type<"site" | "remote" | "native">()
|
||||||
.default("site"),
|
.default("site"),
|
||||||
authDaemonPort: integer("authDaemonPort").default(22123)
|
authDaemonPort: integer("authDaemonPort").default(22123)
|
||||||
});
|
},
|
||||||
|
(t) => [
|
||||||
|
index("idx_resources_fulldomain")
|
||||||
|
.on(t.fullDomain)
|
||||||
|
.where(sql`${t.fullDomain} IS NOT NULL`)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
export const labels = pgTable("labels", {
|
export const labels = pgTable("labels", {
|
||||||
labelId: serial("labelId").primaryKey(),
|
labelId: serial("labelId").primaryKey(),
|
||||||
@@ -267,7 +290,9 @@ export const clientLabels = pgTable(
|
|||||||
(t) => [unique("client_label_uniq").on(t.clientId, t.labelId)]
|
(t) => [unique("client_label_uniq").on(t.clientId, t.labelId)]
|
||||||
);
|
);
|
||||||
|
|
||||||
export const targets = pgTable("targets", {
|
export const targets = pgTable(
|
||||||
|
"targets",
|
||||||
|
{
|
||||||
targetId: serial("targetId").primaryKey(),
|
targetId: serial("targetId").primaryKey(),
|
||||||
resourceId: integer("resourceId")
|
resourceId: integer("resourceId")
|
||||||
.references(() => resources.resourceId, {
|
.references(() => resources.resourceId, {
|
||||||
@@ -294,9 +319,18 @@ export const targets = pgTable("targets", {
|
|||||||
.notNull()
|
.notNull()
|
||||||
.default("http"),
|
.default("http"),
|
||||||
authToken: varchar("authToken")
|
authToken: varchar("authToken")
|
||||||
});
|
},
|
||||||
|
(t) => [
|
||||||
|
index("idx_targets_resourceid_siteid").on(t.resourceId, t.siteId),
|
||||||
|
index("idx_targets_site_enabled_priority_target_resource")
|
||||||
|
.on(t.siteId, t.priority.desc(), t.targetId, t.resourceId)
|
||||||
|
.where(sql`${t.enabled} = true`)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
export const targetHealthCheck = pgTable("targetHealthCheck", {
|
export const targetHealthCheck = pgTable(
|
||||||
|
"targetHealthCheck",
|
||||||
|
{
|
||||||
targetHealthCheckId: serial("targetHealthCheckId").primaryKey(),
|
targetHealthCheckId: serial("targetHealthCheckId").primaryKey(),
|
||||||
targetId: integer("targetId").references(() => targets.targetId, {
|
targetId: integer("targetId").references(() => targets.targetId, {
|
||||||
onDelete: "cascade"
|
onDelete: "cascade"
|
||||||
@@ -331,7 +365,9 @@ export const targetHealthCheck = pgTable("targetHealthCheck", {
|
|||||||
hcTlsServerName: text("hcTlsServerName"),
|
hcTlsServerName: text("hcTlsServerName"),
|
||||||
hcHealthyThreshold: integer("hcHealthyThreshold").default(1),
|
hcHealthyThreshold: integer("hcHealthyThreshold").default(1),
|
||||||
hcUnhealthyThreshold: integer("hcUnhealthyThreshold").default(1)
|
hcUnhealthyThreshold: integer("hcUnhealthyThreshold").default(1)
|
||||||
});
|
},
|
||||||
|
(t) => [index("idx_targethealthcheck_targetid").on(t.targetId)]
|
||||||
|
);
|
||||||
|
|
||||||
export const exitNodes = pgTable("exitNodes", {
|
export const exitNodes = pgTable("exitNodes", {
|
||||||
exitNodeId: serial("exitNodeId").primaryKey(),
|
exitNodeId: serial("exitNodeId").primaryKey(),
|
||||||
@@ -406,7 +442,9 @@ export const networks = pgTable("networks", {
|
|||||||
.notNull()
|
.notNull()
|
||||||
});
|
});
|
||||||
|
|
||||||
export const siteNetworks = pgTable("siteNetworks", {
|
export const siteNetworks = pgTable(
|
||||||
|
"siteNetworks",
|
||||||
|
{
|
||||||
siteId: integer("siteId")
|
siteId: integer("siteId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => sites.siteId, {
|
.references(() => sites.siteId, {
|
||||||
@@ -415,34 +453,63 @@ export const siteNetworks = pgTable("siteNetworks", {
|
|||||||
networkId: integer("networkId")
|
networkId: integer("networkId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => networks.networkId, { onDelete: "cascade" })
|
.references(() => networks.networkId, { onDelete: "cascade" })
|
||||||
});
|
},
|
||||||
|
(t) => [
|
||||||
|
index("idx_sitenetworks_siteid").on(t.siteId),
|
||||||
|
index("idx_sitenetworks_networkid").on(t.networkId)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
export const clientSiteResources = pgTable("clientSiteResources", {
|
export const clientSiteResources = pgTable(
|
||||||
|
"clientSiteResources",
|
||||||
|
{
|
||||||
clientId: integer("clientId")
|
clientId: integer("clientId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => clients.clientId, { onDelete: "cascade" }),
|
.references(() => clients.clientId, { onDelete: "cascade" }),
|
||||||
siteResourceId: integer("siteResourceId")
|
siteResourceId: integer("siteResourceId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => siteResources.siteResourceId, { onDelete: "cascade" })
|
.references(() => siteResources.siteResourceId, {
|
||||||
});
|
onDelete: "cascade"
|
||||||
|
})
|
||||||
|
},
|
||||||
|
(t) => [
|
||||||
|
index("idx_clientsiteresources_clientid").on(t.clientId),
|
||||||
|
index("idx_clientsiteresources_siteresourceid").on(t.siteResourceId)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
export const roleSiteResources = pgTable("roleSiteResources", {
|
export const roleSiteResources = pgTable(
|
||||||
|
"roleSiteResources",
|
||||||
|
{
|
||||||
roleId: integer("roleId")
|
roleId: integer("roleId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => roles.roleId, { onDelete: "cascade" }),
|
.references(() => roles.roleId, { onDelete: "cascade" }),
|
||||||
siteResourceId: integer("siteResourceId")
|
siteResourceId: integer("siteResourceId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => siteResources.siteResourceId, { onDelete: "cascade" })
|
.references(() => siteResources.siteResourceId, {
|
||||||
});
|
onDelete: "cascade"
|
||||||
|
})
|
||||||
|
},
|
||||||
|
(t) => [index("idx_rolesiteresources_siteresourceid").on(t.siteResourceId)]
|
||||||
|
);
|
||||||
|
|
||||||
export const userSiteResources = pgTable("userSiteResources", {
|
export const userSiteResources = pgTable(
|
||||||
|
"userSiteResources",
|
||||||
|
{
|
||||||
userId: varchar("userId")
|
userId: varchar("userId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => users.userId, { onDelete: "cascade" }),
|
.references(() => users.userId, { onDelete: "cascade" }),
|
||||||
siteResourceId: integer("siteResourceId")
|
siteResourceId: integer("siteResourceId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => siteResources.siteResourceId, { onDelete: "cascade" })
|
.references(() => siteResources.siteResourceId, {
|
||||||
});
|
onDelete: "cascade"
|
||||||
|
})
|
||||||
|
},
|
||||||
|
(t) => [
|
||||||
|
index("idx_usersiteresources_userid").on(t.userId),
|
||||||
|
index("idx_usersiteresources_siteresourceid").on(t.siteResourceId)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
export const users = pgTable("user", {
|
export const users = pgTable("user", {
|
||||||
userId: varchar("id").primaryKey(),
|
userId: varchar("id").primaryKey(),
|
||||||
@@ -467,7 +534,9 @@ export const users = pgTable("user", {
|
|||||||
locale: varchar("locale")
|
locale: varchar("locale")
|
||||||
});
|
});
|
||||||
|
|
||||||
export const newts = pgTable("newt", {
|
export const newts = pgTable(
|
||||||
|
"newt",
|
||||||
|
{
|
||||||
newtId: varchar("id").primaryKey(),
|
newtId: varchar("id").primaryKey(),
|
||||||
secretHash: varchar("secretHash").notNull(),
|
secretHash: varchar("secretHash").notNull(),
|
||||||
dateCreated: varchar("dateCreated").notNull(),
|
dateCreated: varchar("dateCreated").notNull(),
|
||||||
@@ -475,7 +544,9 @@ export const newts = pgTable("newt", {
|
|||||||
siteId: integer("siteId").references(() => sites.siteId, {
|
siteId: integer("siteId").references(() => sites.siteId, {
|
||||||
onDelete: "cascade"
|
onDelete: "cascade"
|
||||||
})
|
})
|
||||||
});
|
},
|
||||||
|
(t) => [index("idx_newt_siteid").on(t.siteId)]
|
||||||
|
);
|
||||||
|
|
||||||
export const twoFactorBackupCodes = pgTable("twoFactorBackupCodes", {
|
export const twoFactorBackupCodes = pgTable("twoFactorBackupCodes", {
|
||||||
codeId: serial("id").primaryKey(),
|
codeId: serial("id").primaryKey(),
|
||||||
@@ -576,7 +647,9 @@ export const userOrgRoles = pgTable(
|
|||||||
(t) => [unique().on(t.userId, t.orgId, t.roleId)]
|
(t) => [unique().on(t.userId, t.orgId, t.roleId)]
|
||||||
);
|
);
|
||||||
|
|
||||||
export const roleActions = pgTable("roleActions", {
|
export const roleActions = pgTable(
|
||||||
|
"roleActions",
|
||||||
|
{
|
||||||
roleId: integer("roleId")
|
roleId: integer("roleId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => roles.roleId, { onDelete: "cascade" }),
|
.references(() => roles.roleId, { onDelete: "cascade" }),
|
||||||
@@ -586,9 +659,19 @@ export const roleActions = pgTable("roleActions", {
|
|||||||
orgId: varchar("orgId")
|
orgId: varchar("orgId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => orgs.orgId, { onDelete: "cascade" })
|
.references(() => orgs.orgId, { onDelete: "cascade" })
|
||||||
});
|
},
|
||||||
|
(t) => [
|
||||||
|
index("idx_roleActions_roleId_orgId_actionId").on(
|
||||||
|
t.roleId,
|
||||||
|
t.orgId,
|
||||||
|
t.actionId
|
||||||
|
)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
export const userActions = pgTable("userActions", {
|
export const userActions = pgTable(
|
||||||
|
"userActions",
|
||||||
|
{
|
||||||
userId: varchar("userId")
|
userId: varchar("userId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => users.userId, { onDelete: "cascade" }),
|
.references(() => users.userId, { onDelete: "cascade" }),
|
||||||
@@ -598,7 +681,15 @@ export const userActions = pgTable("userActions", {
|
|||||||
orgId: varchar("orgId")
|
orgId: varchar("orgId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => orgs.orgId, { onDelete: "cascade" })
|
.references(() => orgs.orgId, { onDelete: "cascade" })
|
||||||
});
|
},
|
||||||
|
(t) => [
|
||||||
|
index("idx_userActions_userId_orgId_actionId").on(
|
||||||
|
t.userId,
|
||||||
|
t.orgId,
|
||||||
|
t.actionId
|
||||||
|
)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
export const roleSites = pgTable("roleSites", {
|
export const roleSites = pgTable("roleSites", {
|
||||||
roleId: integer("roleId")
|
roleId: integer("roleId")
|
||||||
@@ -1004,7 +1095,9 @@ export const idpOrg = pgTable("idpOrg", {
|
|||||||
orgMapping: varchar("orgMapping")
|
orgMapping: varchar("orgMapping")
|
||||||
});
|
});
|
||||||
|
|
||||||
export const clients = pgTable("clients", {
|
export const clients = pgTable(
|
||||||
|
"clients",
|
||||||
|
{
|
||||||
clientId: serial("clientId").primaryKey(),
|
clientId: serial("clientId").primaryKey(),
|
||||||
orgId: varchar("orgId")
|
orgId: varchar("orgId")
|
||||||
.references(() => orgs.orgId, {
|
.references(() => orgs.orgId, {
|
||||||
@@ -1037,7 +1130,9 @@ export const clients = pgTable("clients", {
|
|||||||
approvalState: varchar("approvalState").$type<
|
approvalState: varchar("approvalState").$type<
|
||||||
"pending" | "approved" | "denied"
|
"pending" | "approved" | "denied"
|
||||||
>()
|
>()
|
||||||
});
|
},
|
||||||
|
(t) => [index("idx_clients_userid").on(t.userId)]
|
||||||
|
);
|
||||||
|
|
||||||
export const clientSitesAssociationsCache = pgTable(
|
export const clientSitesAssociationsCache = pgTable(
|
||||||
"clientSitesAssociationsCache",
|
"clientSitesAssociationsCache",
|
||||||
@@ -1049,7 +1144,11 @@ export const clientSitesAssociationsCache = pgTable(
|
|||||||
isJitMode: boolean("isJitMode").notNull().default(false),
|
isJitMode: boolean("isJitMode").notNull().default(false),
|
||||||
endpoint: varchar("endpoint"),
|
endpoint: varchar("endpoint"),
|
||||||
publicKey: varchar("publicKey") // this will act as the session's public key for hole punching so we can track when it changes
|
publicKey: varchar("publicKey") // this will act as the session's public key for hole punching so we can track when it changes
|
||||||
}
|
},
|
||||||
|
(t) => [
|
||||||
|
primaryKey({ columns: [t.clientId, t.siteId] }),
|
||||||
|
index("idx_clientsitesassociationscache_siteid").on(t.siteId)
|
||||||
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
export const clientSiteResourcesAssociationsCache = pgTable(
|
export const clientSiteResourcesAssociationsCache = pgTable(
|
||||||
@@ -1058,7 +1157,14 @@ export const clientSiteResourcesAssociationsCache = pgTable(
|
|||||||
clientId: integer("clientId") // not a foreign key here so after its deleted the rebuild function can delete it and send the message
|
clientId: integer("clientId") // not a foreign key here so after its deleted the rebuild function can delete it and send the message
|
||||||
.notNull(),
|
.notNull(),
|
||||||
siteResourceId: integer("siteResourceId").notNull()
|
siteResourceId: integer("siteResourceId").notNull()
|
||||||
}
|
},
|
||||||
|
(t) => [
|
||||||
|
primaryKey({ columns: [t.clientId, t.siteResourceId] }),
|
||||||
|
index("idx_clientSiteResourcesAssociationsCache_siteResourceId").on(
|
||||||
|
t.siteResourceId,
|
||||||
|
t.clientId
|
||||||
|
)
|
||||||
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
export const clientPostureSnapshots = pgTable("clientPostureSnapshots", {
|
export const clientPostureSnapshots = pgTable("clientPostureSnapshots", {
|
||||||
@@ -1071,7 +1177,9 @@ export const clientPostureSnapshots = pgTable("clientPostureSnapshots", {
|
|||||||
collectedAt: integer("collectedAt").notNull()
|
collectedAt: integer("collectedAt").notNull()
|
||||||
});
|
});
|
||||||
|
|
||||||
export const olms = pgTable("olms", {
|
export const olms = pgTable(
|
||||||
|
"olms",
|
||||||
|
{
|
||||||
olmId: varchar("id").primaryKey(),
|
olmId: varchar("id").primaryKey(),
|
||||||
secretHash: varchar("secretHash").notNull(),
|
secretHash: varchar("secretHash").notNull(),
|
||||||
dateCreated: varchar("dateCreated").notNull(),
|
dateCreated: varchar("dateCreated").notNull(),
|
||||||
@@ -1087,7 +1195,9 @@ export const olms = pgTable("olms", {
|
|||||||
onDelete: "cascade"
|
onDelete: "cascade"
|
||||||
}),
|
}),
|
||||||
archived: boolean("archived").notNull().default(false)
|
archived: boolean("archived").notNull().default(false)
|
||||||
});
|
},
|
||||||
|
(t) => [index("idx_olms_clientid").on(t.clientId)]
|
||||||
|
);
|
||||||
|
|
||||||
export const currentFingerprint = pgTable("currentFingerprint", {
|
export const currentFingerprint = pgTable("currentFingerprint", {
|
||||||
fingerprintId: serial("id").primaryKey(),
|
fingerprintId: serial("id").primaryKey(),
|
||||||
|
|||||||
Reference in New Issue
Block a user