diff --git a/server/migrations/0000_ancient_blob.sql b/server/migrations/0000_ancient_blob.sql new file mode 100644 index 00000000..d74be97d --- /dev/null +++ b/server/migrations/0000_ancient_blob.sql @@ -0,0 +1,62 @@ +CREATE TABLE `exitNodes` ( + `exitNodeId` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `name` text NOT NULL, + `address` text NOT NULL, + `privateKey` text, + `listenPort` integer +); +--> statement-breakpoint +CREATE TABLE `orgs` ( + `orgId` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `name` text NOT NULL, + `domain` text NOT NULL +); +--> statement-breakpoint +CREATE TABLE `resources` ( + `resourceId` text(2048) PRIMARY KEY NOT NULL, + `siteId` integer, + `name` text NOT NULL, + `subdomain` text, + FOREIGN KEY (`siteId`) REFERENCES `sites`(`siteId`) ON UPDATE no action ON DELETE cascade +); +--> statement-breakpoint +CREATE TABLE `routes` ( + `routeId` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `exitNodeId` integer, + `subnet` text NOT NULL, + FOREIGN KEY (`exitNodeId`) REFERENCES `exitNodes`(`exitNodeId`) ON UPDATE no action ON DELETE cascade +); +--> statement-breakpoint +CREATE TABLE `sites` ( + `siteId` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `orgId` integer, + `exitNode` integer, + `name` text NOT NULL, + `subdomain` text, + `pubKey` text, + `subnet` text, + `bytesIn` integer, + `bytesOut` integer, + FOREIGN KEY (`orgId`) REFERENCES `orgs`(`orgId`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (`exitNode`) REFERENCES `exitNodes`(`exitNodeId`) ON UPDATE no action ON DELETE set null +); +--> statement-breakpoint +CREATE TABLE `targets` ( + `targetId` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `resourceId` text, + `ip` text NOT NULL, + `method` text NOT NULL, + `port` integer NOT NULL, + `protocol` text, + `enabled` integer DEFAULT true NOT NULL, + FOREIGN KEY (`resourceId`) REFERENCES `resources`(`resourceId`) ON UPDATE no action ON DELETE cascade +); +--> statement-breakpoint +CREATE TABLE `users` ( + `userId` integer PRIMARY KEY AUTOINCREMENT NOT NULL, + `orgId` integer, + `name` text NOT NULL, + `email` text NOT NULL, + `groups` text, + FOREIGN KEY (`orgId`) REFERENCES `orgs`(`orgId`) ON UPDATE no action ON DELETE cascade +); diff --git a/server/migrations/meta/0000_snapshot.json b/server/migrations/meta/0000_snapshot.json new file mode 100644 index 00000000..3b608e4d --- /dev/null +++ b/server/migrations/meta/0000_snapshot.json @@ -0,0 +1,416 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "db8ede7f-7ece-463c-be9c-da36b2b20db6", + "prevId": "00000000-0000-0000-0000-000000000000", + "tables": { + "exitNodes": { + "name": "exitNodes", + "columns": { + "exitNodeId": { + "name": "exitNodeId", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "address": { + "name": "address", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "privateKey": { + "name": "privateKey", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "listenPort": { + "name": "listenPort", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "orgs": { + "name": "orgs", + "columns": { + "orgId": { + "name": "orgId", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "domain": { + "name": "domain", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "resources": { + "name": "resources", + "columns": { + "resourceId": { + "name": "resourceId", + "type": "text(2048)", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "siteId": { + "name": "siteId", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "subdomain": { + "name": "subdomain", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "resources_siteId_sites_siteId_fk": { + "name": "resources_siteId_sites_siteId_fk", + "tableFrom": "resources", + "tableTo": "sites", + "columnsFrom": [ + "siteId" + ], + "columnsTo": [ + "siteId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "routes": { + "name": "routes", + "columns": { + "routeId": { + "name": "routeId", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "exitNodeId": { + "name": "exitNodeId", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "subnet": { + "name": "subnet", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "routes_exitNodeId_exitNodes_exitNodeId_fk": { + "name": "routes_exitNodeId_exitNodes_exitNodeId_fk", + "tableFrom": "routes", + "tableTo": "exitNodes", + "columnsFrom": [ + "exitNodeId" + ], + "columnsTo": [ + "exitNodeId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "sites": { + "name": "sites", + "columns": { + "siteId": { + "name": "siteId", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "orgId": { + "name": "orgId", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "exitNode": { + "name": "exitNode", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "subdomain": { + "name": "subdomain", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "pubKey": { + "name": "pubKey", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "subnet": { + "name": "subnet", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "bytesIn": { + "name": "bytesIn", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "bytesOut": { + "name": "bytesOut", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "sites_orgId_orgs_orgId_fk": { + "name": "sites_orgId_orgs_orgId_fk", + "tableFrom": "sites", + "tableTo": "orgs", + "columnsFrom": [ + "orgId" + ], + "columnsTo": [ + "orgId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "sites_exitNode_exitNodes_exitNodeId_fk": { + "name": "sites_exitNode_exitNodes_exitNodeId_fk", + "tableFrom": "sites", + "tableTo": "exitNodes", + "columnsFrom": [ + "exitNode" + ], + "columnsTo": [ + "exitNodeId" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "targets": { + "name": "targets", + "columns": { + "targetId": { + "name": "targetId", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "resourceId": { + "name": "resourceId", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "ip": { + "name": "ip", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "method": { + "name": "method", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "port": { + "name": "port", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "protocol": { + "name": "protocol", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "enabled": { + "name": "enabled", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": true + } + }, + "indexes": {}, + "foreignKeys": { + "targets_resourceId_resources_resourceId_fk": { + "name": "targets_resourceId_resources_resourceId_fk", + "tableFrom": "targets", + "tableTo": "resources", + "columnsFrom": [ + "resourceId" + ], + "columnsTo": [ + "resourceId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "users": { + "name": "users", + "columns": { + "userId": { + "name": "userId", + "type": "integer", + "primaryKey": true, + "notNull": true, + "autoincrement": true + }, + "orgId": { + "name": "orgId", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "groups": { + "name": "groups", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "users_orgId_orgs_orgId_fk": { + "name": "users_orgId_orgs_orgId_fk", + "tableFrom": "users", + "tableTo": "orgs", + "columnsFrom": [ + "orgId" + ], + "columnsTo": [ + "orgId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/server/migrations/meta/_journal.json b/server/migrations/meta/_journal.json new file mode 100644 index 00000000..f616f0c4 --- /dev/null +++ b/server/migrations/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "7", + "dialect": "sqlite", + "entries": [ + { + "idx": 0, + "version": "6", + "when": 1727582003591, + "tag": "0000_ancient_blob", + "breakpoints": true + } + ] +} \ No newline at end of file