|
@@ -1,41 +1,41 @@
|
|
-import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
|
|
|
|
import { InferSelectModel } from "drizzle-orm";
|
|
import { InferSelectModel } from "drizzle-orm";
|
|
|
|
+import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
|
|
|
|
|
|
export const orgs = sqliteTable("orgs", {
|
|
export const orgs = sqliteTable("orgs", {
|
|
orgId: text("orgId").primaryKey(),
|
|
orgId: text("orgId").primaryKey(),
|
|
name: text("name").notNull(),
|
|
name: text("name").notNull(),
|
|
- domain: text("domain").notNull(),
|
|
|
|
|
|
+ domain: text("domain").notNull()
|
|
});
|
|
});
|
|
|
|
|
|
export const sites = sqliteTable("sites", {
|
|
export const sites = sqliteTable("sites", {
|
|
siteId: integer("siteId").primaryKey({ autoIncrement: true }),
|
|
siteId: integer("siteId").primaryKey({ autoIncrement: true }),
|
|
orgId: text("orgId")
|
|
orgId: text("orgId")
|
|
.references(() => orgs.orgId, {
|
|
.references(() => orgs.orgId, {
|
|
- onDelete: "cascade",
|
|
|
|
|
|
+ onDelete: "cascade"
|
|
})
|
|
})
|
|
.notNull(),
|
|
.notNull(),
|
|
niceId: text("niceId").notNull(),
|
|
niceId: text("niceId").notNull(),
|
|
exitNodeId: integer("exitNode").references(() => exitNodes.exitNodeId, {
|
|
exitNodeId: integer("exitNode").references(() => exitNodes.exitNodeId, {
|
|
- onDelete: "set null",
|
|
|
|
|
|
+ onDelete: "set null"
|
|
}),
|
|
}),
|
|
name: text("name").notNull(),
|
|
name: text("name").notNull(),
|
|
pubKey: text("pubKey"),
|
|
pubKey: text("pubKey"),
|
|
subnet: text("subnet").notNull(),
|
|
subnet: text("subnet").notNull(),
|
|
megabytesIn: integer("bytesIn"),
|
|
megabytesIn: integer("bytesIn"),
|
|
megabytesOut: integer("bytesOut"),
|
|
megabytesOut: integer("bytesOut"),
|
|
- type: text("type").notNull(), // "newt" or "wireguard"
|
|
|
|
|
|
+ type: text("type").notNull() // "newt" or "wireguard"
|
|
});
|
|
});
|
|
|
|
|
|
export const resources = sqliteTable("resources", {
|
|
export const resources = sqliteTable("resources", {
|
|
resourceId: integer("resourceId").primaryKey({ autoIncrement: true }),
|
|
resourceId: integer("resourceId").primaryKey({ autoIncrement: true }),
|
|
siteId: integer("siteId")
|
|
siteId: integer("siteId")
|
|
.references(() => sites.siteId, {
|
|
.references(() => sites.siteId, {
|
|
- onDelete: "cascade",
|
|
|
|
|
|
+ onDelete: "cascade"
|
|
})
|
|
})
|
|
.notNull(),
|
|
.notNull(),
|
|
orgId: text("orgId")
|
|
orgId: text("orgId")
|
|
.references(() => orgs.orgId, {
|
|
.references(() => orgs.orgId, {
|
|
- onDelete: "cascade",
|
|
|
|
|
|
+ onDelete: "cascade"
|
|
})
|
|
})
|
|
.notNull(),
|
|
.notNull(),
|
|
name: text("name").notNull(),
|
|
name: text("name").notNull(),
|
|
@@ -46,16 +46,16 @@ export const resources = sqliteTable("resources", {
|
|
.notNull()
|
|
.notNull()
|
|
.default(false),
|
|
.default(false),
|
|
sso: integer("sso", { mode: "boolean" }).notNull().default(true),
|
|
sso: integer("sso", { mode: "boolean" }).notNull().default(true),
|
|
- twoFactorEnabled: integer("twoFactorEnabled", { mode: "boolean" })
|
|
|
|
|
|
+ otpEnabled: integer("otpEnabled", { mode: "boolean" })
|
|
.notNull()
|
|
.notNull()
|
|
- .default(false),
|
|
|
|
|
|
+ .default(false)
|
|
});
|
|
});
|
|
|
|
|
|
export const targets = sqliteTable("targets", {
|
|
export const targets = sqliteTable("targets", {
|
|
targetId: integer("targetId").primaryKey({ autoIncrement: true }),
|
|
targetId: integer("targetId").primaryKey({ autoIncrement: true }),
|
|
resourceId: integer("resourceId")
|
|
resourceId: integer("resourceId")
|
|
.references(() => resources.resourceId, {
|
|
.references(() => resources.resourceId, {
|
|
- onDelete: "cascade",
|
|
|
|
|
|
+ onDelete: "cascade"
|
|
})
|
|
})
|
|
.notNull(),
|
|
.notNull(),
|
|
ip: text("ip").notNull(),
|
|
ip: text("ip").notNull(),
|
|
@@ -63,7 +63,7 @@ export const targets = sqliteTable("targets", {
|
|
port: integer("port").notNull(),
|
|
port: integer("port").notNull(),
|
|
internalPort: integer("internalPort"),
|
|
internalPort: integer("internalPort"),
|
|
protocol: text("protocol"),
|
|
protocol: text("protocol"),
|
|
- enabled: integer("enabled", { mode: "boolean" }).notNull().default(true),
|
|
|
|
|
|
+ enabled: integer("enabled", { mode: "boolean" }).notNull().default(true)
|
|
});
|
|
});
|
|
|
|
|
|
export const exitNodes = sqliteTable("exitNodes", {
|
|
export const exitNodes = sqliteTable("exitNodes", {
|
|
@@ -73,7 +73,7 @@ export const exitNodes = sqliteTable("exitNodes", {
|
|
endpoint: text("endpoint").notNull(), // this is how to reach gerbil externally - gets put into the wireguard config
|
|
endpoint: text("endpoint").notNull(), // this is how to reach gerbil externally - gets put into the wireguard config
|
|
publicKey: text("pubicKey").notNull(),
|
|
publicKey: text("pubicKey").notNull(),
|
|
listenPort: integer("listenPort").notNull(),
|
|
listenPort: integer("listenPort").notNull(),
|
|
- reachableAt: text("reachableAt"), // this is the internal address of the gerbil http server for command control
|
|
|
|
|
|
+ reachableAt: text("reachableAt") // this is the internal address of the gerbil http server for command control
|
|
});
|
|
});
|
|
|
|
|
|
export const users = sqliteTable("user", {
|
|
export const users = sqliteTable("user", {
|
|
@@ -87,14 +87,14 @@ export const users = sqliteTable("user", {
|
|
emailVerified: integer("emailVerified", { mode: "boolean" })
|
|
emailVerified: integer("emailVerified", { mode: "boolean" })
|
|
.notNull()
|
|
.notNull()
|
|
.default(false),
|
|
.default(false),
|
|
- dateCreated: text("dateCreated").notNull(),
|
|
|
|
|
|
+ dateCreated: text("dateCreated").notNull()
|
|
});
|
|
});
|
|
|
|
|
|
export const newts = sqliteTable("newt", {
|
|
export const newts = sqliteTable("newt", {
|
|
newtId: text("id").primaryKey(),
|
|
newtId: text("id").primaryKey(),
|
|
secretHash: text("secretHash").notNull(),
|
|
secretHash: text("secretHash").notNull(),
|
|
dateCreated: text("dateCreated").notNull(),
|
|
dateCreated: text("dateCreated").notNull(),
|
|
- siteId: integer("siteId").references(() => sites.siteId),
|
|
|
|
|
|
+ siteId: integer("siteId").references(() => sites.siteId)
|
|
});
|
|
});
|
|
|
|
|
|
export const twoFactorBackupCodes = sqliteTable("twoFactorBackupCodes", {
|
|
export const twoFactorBackupCodes = sqliteTable("twoFactorBackupCodes", {
|
|
@@ -102,7 +102,7 @@ export const twoFactorBackupCodes = sqliteTable("twoFactorBackupCodes", {
|
|
userId: text("userId")
|
|
userId: text("userId")
|
|
.notNull()
|
|
.notNull()
|
|
.references(() => users.userId, { onDelete: "cascade" }),
|
|
.references(() => users.userId, { onDelete: "cascade" }),
|
|
- codeHash: text("codeHash").notNull(),
|
|
|
|
|
|
+ codeHash: text("codeHash").notNull()
|
|
});
|
|
});
|
|
|
|
|
|
export const sessions = sqliteTable("session", {
|
|
export const sessions = sqliteTable("session", {
|
|
@@ -110,7 +110,7 @@ export const sessions = sqliteTable("session", {
|
|
userId: text("userId")
|
|
userId: text("userId")
|
|
.notNull()
|
|
.notNull()
|
|
.references(() => users.userId, { onDelete: "cascade" }),
|
|
.references(() => users.userId, { onDelete: "cascade" }),
|
|
- expiresAt: integer("expiresAt").notNull(),
|
|
|
|
|
|
+ expiresAt: integer("expiresAt").notNull()
|
|
});
|
|
});
|
|
|
|
|
|
export const newtSessions = sqliteTable("newtSession", {
|
|
export const newtSessions = sqliteTable("newtSession", {
|
|
@@ -118,7 +118,7 @@ export const newtSessions = sqliteTable("newtSession", {
|
|
newtId: text("newtId")
|
|
newtId: text("newtId")
|
|
.notNull()
|
|
.notNull()
|
|
.references(() => newts.newtId, { onDelete: "cascade" }),
|
|
.references(() => newts.newtId, { onDelete: "cascade" }),
|
|
- expiresAt: integer("expiresAt").notNull(),
|
|
|
|
|
|
+ expiresAt: integer("expiresAt").notNull()
|
|
});
|
|
});
|
|
|
|
|
|
export const userOrgs = sqliteTable("userOrgs", {
|
|
export const userOrgs = sqliteTable("userOrgs", {
|
|
@@ -131,7 +131,7 @@ export const userOrgs = sqliteTable("userOrgs", {
|
|
roleId: integer("roleId")
|
|
roleId: integer("roleId")
|
|
.notNull()
|
|
.notNull()
|
|
.references(() => roles.roleId),
|
|
.references(() => roles.roleId),
|
|
- isOwner: integer("isOwner", { mode: "boolean" }).notNull().default(false),
|
|
|
|
|
|
+ isOwner: integer("isOwner", { mode: "boolean" }).notNull().default(false)
|
|
});
|
|
});
|
|
|
|
|
|
export const emailVerificationCodes = sqliteTable("emailVerificationCodes", {
|
|
export const emailVerificationCodes = sqliteTable("emailVerificationCodes", {
|
|
@@ -141,7 +141,7 @@ export const emailVerificationCodes = sqliteTable("emailVerificationCodes", {
|
|
.references(() => users.userId, { onDelete: "cascade" }),
|
|
.references(() => users.userId, { onDelete: "cascade" }),
|
|
email: text("email").notNull(),
|
|
email: text("email").notNull(),
|
|
code: text("code").notNull(),
|
|
code: text("code").notNull(),
|
|
- expiresAt: integer("expiresAt").notNull(),
|
|
|
|
|
|
+ expiresAt: integer("expiresAt").notNull()
|
|
});
|
|
});
|
|
|
|
|
|
export const passwordResetTokens = sqliteTable("passwordResetTokens", {
|
|
export const passwordResetTokens = sqliteTable("passwordResetTokens", {
|
|
@@ -150,25 +150,25 @@ export const passwordResetTokens = sqliteTable("passwordResetTokens", {
|
|
.notNull()
|
|
.notNull()
|
|
.references(() => users.userId, { onDelete: "cascade" }),
|
|
.references(() => users.userId, { onDelete: "cascade" }),
|
|
tokenHash: text("tokenHash").notNull(),
|
|
tokenHash: text("tokenHash").notNull(),
|
|
- expiresAt: integer("expiresAt").notNull(),
|
|
|
|
|
|
+ expiresAt: integer("expiresAt").notNull()
|
|
});
|
|
});
|
|
|
|
|
|
export const actions = sqliteTable("actions", {
|
|
export const actions = sqliteTable("actions", {
|
|
actionId: text("actionId").primaryKey(),
|
|
actionId: text("actionId").primaryKey(),
|
|
name: text("name"),
|
|
name: text("name"),
|
|
- description: text("description"),
|
|
|
|
|
|
+ description: text("description")
|
|
});
|
|
});
|
|
|
|
|
|
export const roles = sqliteTable("roles", {
|
|
export const roles = sqliteTable("roles", {
|
|
roleId: integer("roleId").primaryKey({ autoIncrement: true }),
|
|
roleId: integer("roleId").primaryKey({ autoIncrement: true }),
|
|
orgId: text("orgId")
|
|
orgId: text("orgId")
|
|
.references(() => orgs.orgId, {
|
|
.references(() => orgs.orgId, {
|
|
- onDelete: "cascade",
|
|
|
|
|
|
+ onDelete: "cascade"
|
|
})
|
|
})
|
|
.notNull(),
|
|
.notNull(),
|
|
isAdmin: integer("isAdmin", { mode: "boolean" }),
|
|
isAdmin: integer("isAdmin", { mode: "boolean" }),
|
|
name: text("name").notNull(),
|
|
name: text("name").notNull(),
|
|
- description: text("description"),
|
|
|
|
|
|
+ description: text("description")
|
|
});
|
|
});
|
|
|
|
|
|
export const roleActions = sqliteTable("roleActions", {
|
|
export const roleActions = sqliteTable("roleActions", {
|
|
@@ -180,7 +180,7 @@ export const roleActions = sqliteTable("roleActions", {
|
|
.references(() => actions.actionId, { onDelete: "cascade" }),
|
|
.references(() => actions.actionId, { onDelete: "cascade" }),
|
|
orgId: text("orgId")
|
|
orgId: text("orgId")
|
|
.notNull()
|
|
.notNull()
|
|
- .references(() => orgs.orgId, { onDelete: "cascade" }),
|
|
|
|
|
|
+ .references(() => orgs.orgId, { onDelete: "cascade" })
|
|
});
|
|
});
|
|
|
|
|
|
export const userActions = sqliteTable("userActions", {
|
|
export const userActions = sqliteTable("userActions", {
|
|
@@ -192,7 +192,7 @@ export const userActions = sqliteTable("userActions", {
|
|
.references(() => actions.actionId, { onDelete: "cascade" }),
|
|
.references(() => actions.actionId, { onDelete: "cascade" }),
|
|
orgId: text("orgId")
|
|
orgId: text("orgId")
|
|
.notNull()
|
|
.notNull()
|
|
- .references(() => orgs.orgId, { onDelete: "cascade" }),
|
|
|
|
|
|
+ .references(() => orgs.orgId, { onDelete: "cascade" })
|
|
});
|
|
});
|
|
|
|
|
|
export const roleSites = sqliteTable("roleSites", {
|
|
export const roleSites = sqliteTable("roleSites", {
|
|
@@ -201,7 +201,7 @@ export const roleSites = sqliteTable("roleSites", {
|
|
.references(() => roles.roleId, { onDelete: "cascade" }),
|
|
.references(() => roles.roleId, { onDelete: "cascade" }),
|
|
siteId: integer("siteId")
|
|
siteId: integer("siteId")
|
|
.notNull()
|
|
.notNull()
|
|
- .references(() => sites.siteId, { onDelete: "cascade" }),
|
|
|
|
|
|
+ .references(() => sites.siteId, { onDelete: "cascade" })
|
|
});
|
|
});
|
|
|
|
|
|
export const userSites = sqliteTable("userSites", {
|
|
export const userSites = sqliteTable("userSites", {
|
|
@@ -210,7 +210,7 @@ export const userSites = sqliteTable("userSites", {
|
|
.references(() => users.userId, { onDelete: "cascade" }),
|
|
.references(() => users.userId, { onDelete: "cascade" }),
|
|
siteId: integer("siteId")
|
|
siteId: integer("siteId")
|
|
.notNull()
|
|
.notNull()
|
|
- .references(() => sites.siteId, { onDelete: "cascade" }),
|
|
|
|
|
|
+ .references(() => sites.siteId, { onDelete: "cascade" })
|
|
});
|
|
});
|
|
|
|
|
|
export const roleResources = sqliteTable("roleResources", {
|
|
export const roleResources = sqliteTable("roleResources", {
|
|
@@ -219,7 +219,7 @@ export const roleResources = sqliteTable("roleResources", {
|
|
.references(() => roles.roleId, { onDelete: "cascade" }),
|
|
.references(() => roles.roleId, { onDelete: "cascade" }),
|
|
resourceId: integer("resourceId")
|
|
resourceId: integer("resourceId")
|
|
.notNull()
|
|
.notNull()
|
|
- .references(() => resources.resourceId, { onDelete: "cascade" }),
|
|
|
|
|
|
+ .references(() => resources.resourceId, { onDelete: "cascade" })
|
|
});
|
|
});
|
|
|
|
|
|
export const userResources = sqliteTable("userResources", {
|
|
export const userResources = sqliteTable("userResources", {
|
|
@@ -228,19 +228,19 @@ export const userResources = sqliteTable("userResources", {
|
|
.references(() => users.userId, { onDelete: "cascade" }),
|
|
.references(() => users.userId, { onDelete: "cascade" }),
|
|
resourceId: integer("resourceId")
|
|
resourceId: integer("resourceId")
|
|
.notNull()
|
|
.notNull()
|
|
- .references(() => resources.resourceId, { onDelete: "cascade" }),
|
|
|
|
|
|
+ .references(() => resources.resourceId, { onDelete: "cascade" })
|
|
});
|
|
});
|
|
|
|
|
|
export const limitsTable = sqliteTable("limits", {
|
|
export const limitsTable = sqliteTable("limits", {
|
|
limitId: integer("limitId").primaryKey({ autoIncrement: true }),
|
|
limitId: integer("limitId").primaryKey({ autoIncrement: true }),
|
|
orgId: text("orgId")
|
|
orgId: text("orgId")
|
|
.references(() => orgs.orgId, {
|
|
.references(() => orgs.orgId, {
|
|
- onDelete: "cascade",
|
|
|
|
|
|
+ onDelete: "cascade"
|
|
})
|
|
})
|
|
.notNull(),
|
|
.notNull(),
|
|
name: text("name").notNull(),
|
|
name: text("name").notNull(),
|
|
value: integer("value").notNull(),
|
|
value: integer("value").notNull(),
|
|
- description: text("description"),
|
|
|
|
|
|
+ description: text("description")
|
|
});
|
|
});
|
|
|
|
|
|
export const userInvites = sqliteTable("userInvites", {
|
|
export const userInvites = sqliteTable("userInvites", {
|
|
@@ -253,28 +253,28 @@ export const userInvites = sqliteTable("userInvites", {
|
|
tokenHash: text("token").notNull(),
|
|
tokenHash: text("token").notNull(),
|
|
roleId: integer("roleId")
|
|
roleId: integer("roleId")
|
|
.notNull()
|
|
.notNull()
|
|
- .references(() => roles.roleId, { onDelete: "cascade" }),
|
|
|
|
|
|
+ .references(() => roles.roleId, { onDelete: "cascade" })
|
|
});
|
|
});
|
|
|
|
|
|
export const resourcePincode = sqliteTable("resourcePincode", {
|
|
export const resourcePincode = sqliteTable("resourcePincode", {
|
|
pincodeId: integer("pincodeId").primaryKey({
|
|
pincodeId: integer("pincodeId").primaryKey({
|
|
- autoIncrement: true,
|
|
|
|
|
|
+ autoIncrement: true
|
|
}),
|
|
}),
|
|
resourceId: integer("resourceId")
|
|
resourceId: integer("resourceId")
|
|
.notNull()
|
|
.notNull()
|
|
.references(() => resources.resourceId, { onDelete: "cascade" }),
|
|
.references(() => resources.resourceId, { onDelete: "cascade" }),
|
|
pincodeHash: text("pincodeHash").notNull(),
|
|
pincodeHash: text("pincodeHash").notNull(),
|
|
- digitLength: integer("digitLength").notNull(),
|
|
|
|
|
|
+ digitLength: integer("digitLength").notNull()
|
|
});
|
|
});
|
|
|
|
|
|
export const resourcePassword = sqliteTable("resourcePassword", {
|
|
export const resourcePassword = sqliteTable("resourcePassword", {
|
|
passwordId: integer("passwordId").primaryKey({
|
|
passwordId: integer("passwordId").primaryKey({
|
|
- autoIncrement: true,
|
|
|
|
|
|
+ autoIncrement: true
|
|
}),
|
|
}),
|
|
resourceId: integer("resourceId")
|
|
resourceId: integer("resourceId")
|
|
.notNull()
|
|
.notNull()
|
|
.references(() => resources.resourceId, { onDelete: "cascade" }),
|
|
.references(() => resources.resourceId, { onDelete: "cascade" }),
|
|
- passwordHash: text("passwordHash").notNull(),
|
|
|
|
|
|
+ passwordHash: text("passwordHash").notNull()
|
|
});
|
|
});
|
|
|
|
|
|
export const resourceSessions = sqliteTable("resourceSessions", {
|
|
export const resourceSessions = sqliteTable("resourceSessions", {
|
|
@@ -282,31 +282,49 @@ export const resourceSessions = sqliteTable("resourceSessions", {
|
|
resourceId: integer("resourceId")
|
|
resourceId: integer("resourceId")
|
|
.notNull()
|
|
.notNull()
|
|
.references(() => resources.resourceId, { onDelete: "cascade" }),
|
|
.references(() => resources.resourceId, { onDelete: "cascade" }),
|
|
|
|
+ usedOtp: integer("usedOtp", { mode: "boolean" }).notNull().default(false),
|
|
expiresAt: integer("expiresAt").notNull(),
|
|
expiresAt: integer("expiresAt").notNull(),
|
|
passwordId: integer("passwordId").references(
|
|
passwordId: integer("passwordId").references(
|
|
() => resourcePassword.passwordId,
|
|
() => resourcePassword.passwordId,
|
|
{
|
|
{
|
|
- onDelete: "cascade",
|
|
|
|
- },
|
|
|
|
|
|
+ onDelete: "cascade"
|
|
|
|
+ }
|
|
),
|
|
),
|
|
pincodeId: integer("pincodeId").references(
|
|
pincodeId: integer("pincodeId").references(
|
|
() => resourcePincode.pincodeId,
|
|
() => resourcePincode.pincodeId,
|
|
{
|
|
{
|
|
- onDelete: "cascade",
|
|
|
|
- },
|
|
|
|
|
|
+ onDelete: "cascade"
|
|
|
|
+ }
|
|
),
|
|
),
|
|
|
|
+ whitelistId: integer("whitelistId").references(
|
|
|
|
+ () => resourceWhitelistedEmail.whitelistId,
|
|
|
|
+ {
|
|
|
|
+ onDelete: "cascade"
|
|
|
|
+ }
|
|
|
|
+ )
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+export const resourceWhitelistedEmail = sqliteTable(
|
|
|
|
+ "resourceWhitelistedEmail",
|
|
|
|
+ {
|
|
|
|
+ whitelistId: integer("id").primaryKey({ autoIncrement: true }),
|
|
|
|
+ email: text("email").primaryKey(),
|
|
|
|
+ resourceId: integer("resourceId")
|
|
|
|
+ .notNull()
|
|
|
|
+ .references(() => resources.resourceId, { onDelete: "cascade" })
|
|
|
|
+ }
|
|
|
|
+);
|
|
|
|
+
|
|
export const resourceOtp = sqliteTable("resourceOtp", {
|
|
export const resourceOtp = sqliteTable("resourceOtp", {
|
|
otpId: integer("otpId").primaryKey({
|
|
otpId: integer("otpId").primaryKey({
|
|
- autoIncrement: true,
|
|
|
|
|
|
+ autoIncrement: true
|
|
}),
|
|
}),
|
|
resourceId: integer("resourceId")
|
|
resourceId: integer("resourceId")
|
|
.notNull()
|
|
.notNull()
|
|
.references(() => resources.resourceId, { onDelete: "cascade" }),
|
|
.references(() => resources.resourceId, { onDelete: "cascade" }),
|
|
email: text("email").notNull(),
|
|
email: text("email").notNull(),
|
|
otpHash: text("otpHash").notNull(),
|
|
otpHash: text("otpHash").notNull(),
|
|
- expiresAt: integer("expiresAt").notNull(),
|
|
|
|
|
|
+ expiresAt: integer("expiresAt").notNull()
|
|
});
|
|
});
|
|
|
|
|
|
export type Org = InferSelectModel<typeof orgs>;
|
|
export type Org = InferSelectModel<typeof orgs>;
|