diff --git a/server/setup/scriptsPg/1.7.0.ts b/server/setup/scriptsPg/1.7.0.ts new file mode 100644 index 00000000..9814db34 --- /dev/null +++ b/server/setup/scriptsPg/1.7.0.ts @@ -0,0 +1,118 @@ +import { db } from "@server/db/pg/driver"; +import { sql } from "drizzle-orm"; + +const version = "1.7.0"; + +export default async function migration() { + console.log(`Running setup script ${version}...`); + + try { + db.execute(sql` + CREATE TABLE "clientSites" ( + "clientId" integer NOT NULL, + "siteId" integer NOT NULL, + "isRelayed" boolean DEFAULT false NOT NULL + ); + --> statement-breakpoint + CREATE TABLE "clients" ( + "id" serial PRIMARY KEY NOT NULL, + "orgId" varchar NOT NULL, + "exitNode" integer, + "name" varchar NOT NULL, + "pubKey" varchar, + "subnet" varchar NOT NULL, + "bytesIn" integer, + "bytesOut" integer, + "lastBandwidthUpdate" varchar, + "lastPing" varchar, + "type" varchar NOT NULL, + "online" boolean DEFAULT false NOT NULL, + "endpoint" varchar, + "lastHolePunch" integer, + "maxConnections" integer + ); + --> statement-breakpoint + CREATE TABLE "clientSession" ( + "id" varchar PRIMARY KEY NOT NULL, + "olmId" varchar NOT NULL, + "expiresAt" integer NOT NULL + ); + --> statement-breakpoint + CREATE TABLE "olms" ( + "id" varchar PRIMARY KEY NOT NULL, + "secretHash" varchar NOT NULL, + "dateCreated" varchar NOT NULL, + "clientId" integer + ); + --> statement-breakpoint + CREATE TABLE "roleClients" ( + "roleId" integer NOT NULL, + "clientId" integer NOT NULL + ); + --> statement-breakpoint + CREATE TABLE "webauthnCredentials" ( + "credentialId" varchar PRIMARY KEY NOT NULL, + "userId" varchar NOT NULL, + "publicKey" varchar NOT NULL, + "signCount" integer NOT NULL, + "transports" varchar, + "name" varchar, + "lastUsed" varchar NOT NULL, + "dateCreated" varchar NOT NULL, + "securityKeyName" varchar + ); + --> statement-breakpoint + CREATE TABLE "userClients" ( + "userId" varchar NOT NULL, + "clientId" integer NOT NULL + ); + --> statement-breakpoint + CREATE TABLE "webauthnChallenge" ( + "sessionId" varchar PRIMARY KEY NOT NULL, + "challenge" varchar NOT NULL, + "securityKeyName" varchar, + "userId" varchar, + "expiresAt" bigint NOT NULL + ); + --> statement-breakpoint + ALTER TABLE "limits" DISABLE ROW LEVEL SECURITY;--> statement-breakpoint + DROP TABLE "limits" CASCADE;--> statement-breakpoint + ALTER TABLE "sites" ALTER COLUMN "subnet" DROP NOT NULL;--> statement-breakpoint + ALTER TABLE "sites" ALTER COLUMN "bytesIn" SET DEFAULT 0;--> statement-breakpoint + ALTER TABLE "sites" ALTER COLUMN "bytesOut" SET DEFAULT 0;--> statement-breakpoint + ALTER TABLE "domains" ADD COLUMN "type" varchar;--> statement-breakpoint + ALTER TABLE "domains" ADD COLUMN "verified" boolean DEFAULT false NOT NULL;--> statement-breakpoint + ALTER TABLE "domains" ADD COLUMN "failed" boolean DEFAULT false NOT NULL;--> statement-breakpoint + ALTER TABLE "domains" ADD COLUMN "tries" integer DEFAULT 0 NOT NULL;--> statement-breakpoint + ALTER TABLE "exitNodes" ADD COLUMN "maxConnections" integer;--> statement-breakpoint + ALTER TABLE "newt" ADD COLUMN "version" varchar;--> statement-breakpoint + ALTER TABLE "orgs" ADD COLUMN "subnet" varchar NOT NULL;--> statement-breakpoint + ALTER TABLE "sites" ADD COLUMN "address" varchar;--> statement-breakpoint + ALTER TABLE "sites" ADD COLUMN "endpoint" varchar;--> statement-breakpoint + ALTER TABLE "sites" ADD COLUMN "publicKey" varchar;--> statement-breakpoint + ALTER TABLE "sites" ADD COLUMN "lastHolePunch" bigint;--> statement-breakpoint + ALTER TABLE "sites" ADD COLUMN "listenPort" integer;--> statement-breakpoint + ALTER TABLE "user" ADD COLUMN "twoFactorSetupRequested" boolean DEFAULT false;--> statement-breakpoint + ALTER TABLE "clientSites" ADD CONSTRAINT "clientSites_clientId_clients_id_fk" FOREIGN KEY ("clientId") REFERENCES "public"."clients"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint + ALTER TABLE "clientSites" ADD CONSTRAINT "clientSites_siteId_sites_siteId_fk" FOREIGN KEY ("siteId") REFERENCES "public"."sites"("siteId") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint + ALTER TABLE "clients" ADD CONSTRAINT "clients_orgId_orgs_orgId_fk" FOREIGN KEY ("orgId") REFERENCES "public"."orgs"("orgId") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint + ALTER TABLE "clients" ADD CONSTRAINT "clients_exitNode_exitNodes_exitNodeId_fk" FOREIGN KEY ("exitNode") REFERENCES "public"."exitNodes"("exitNodeId") ON DELETE set null ON UPDATE no action;--> statement-breakpoint + ALTER TABLE "clientSession" ADD CONSTRAINT "clientSession_olmId_olms_id_fk" FOREIGN KEY ("olmId") REFERENCES "public"."olms"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint + ALTER TABLE "olms" ADD CONSTRAINT "olms_clientId_clients_id_fk" FOREIGN KEY ("clientId") REFERENCES "public"."clients"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint + ALTER TABLE "roleClients" ADD CONSTRAINT "roleClients_roleId_roles_roleId_fk" FOREIGN KEY ("roleId") REFERENCES "public"."roles"("roleId") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint + ALTER TABLE "roleClients" ADD CONSTRAINT "roleClients_clientId_clients_id_fk" FOREIGN KEY ("clientId") REFERENCES "public"."clients"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint + ALTER TABLE "webauthnCredentials" ADD CONSTRAINT "webauthnCredentials_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint + ALTER TABLE "userClients" ADD CONSTRAINT "userClients_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint + ALTER TABLE "userClients" ADD CONSTRAINT "userClients_clientId_clients_id_fk" FOREIGN KEY ("clientId") REFERENCES "public"."clients"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint + ALTER TABLE "webauthnChallenge" ADD CONSTRAINT "webauthnChallenge_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint + ALTER TABLE "resources" DROP COLUMN "isBaseDomain"; + `); + + console.log(`Migrated database schema`); + } catch (e) { + console.log("Unable to migrate database schema"); + console.log(e); + } + + console.log(`${version} migration complete`); +}