From 77d71de9909089690430d027ad4ff8ab3b610788 Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 28 Sep 2024 14:46:36 -0400 Subject: [PATCH] Add scripts and fix routes --- package.json | 3 +- scripts/hydrate.ts | 85 ++++++++++++++++++++++++ scripts/{runMigrations.ts => migrate.ts} | 0 server/routers/badger/getConfig.ts | 8 +-- server/routers/external.ts | 4 +- server/routers/internal.ts | 4 +- 6 files changed, 91 insertions(+), 13 deletions(-) create mode 100644 scripts/hydrate.ts rename scripts/{runMigrations.ts => migrate.ts} (100%) diff --git a/package.json b/package.json index bb1e6a8d..b43e2015 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "scripts": { "dev": "dotenvx run -- tsx watch server/index.ts", "db:generate": "drizzle-kit generate", - "db:push": "npx tsx scripts/runMigrations.ts", + "db:push": "npx tsx scripts/migrate.ts", + "db:hydrate": "npx tsx scripts/hydrate.ts", "db:studio": "drizzle-kit studio" }, "dependencies": { diff --git a/scripts/hydrate.ts b/scripts/hydrate.ts new file mode 100644 index 00000000..8058ebde --- /dev/null +++ b/scripts/hydrate.ts @@ -0,0 +1,85 @@ +import { drizzle } from 'drizzle-orm/better-sqlite3'; +import Database from 'better-sqlite3'; +import { orgs, users, sites, resources, exitNodes, routes, targets } from '../server/db/schema'; + +const sqlite = new Database('./config/db/db.sqlite'); +const db = drizzle(sqlite); + +async function insertDummyData() { + // Insert dummy orgs + const org1 = await db.insert(orgs).values({ + name: 'Fosrl', + domain: 'fosrl.io' + }).returning().get(); + + const org2 = await db.insert(orgs).values({ + name: 'Fossorial', + domain: 'fossorial.io' + }).returning().get(); + + // Insert dummy users + await db.insert(users).values([ + { orgId: org1.orgId, name: 'John Doe', email: 'john@fossorial.com', groups: 'admin,developer' }, + { orgId: org1.orgId, name: 'Jane Smith', email: 'jane@fossorial.com', groups: 'developer' }, + { orgId: org2.orgId, name: 'Bob Johnson', email: 'bob@fosrl.io', groups: 'admin' } + ]); + + // Insert dummy exit nodes + const exitNode1 = await db.insert(exitNodes).values({ + name: 'Exit Node 1', + address: '192.168.1.1' + }).returning().get(); + + const exitNode2 = await db.insert(exitNodes).values({ + name: 'Exit Node 2', + address: '192.168.1.2' + }).returning().get(); + + // Insert dummy sites + const site1 = await db.insert(sites).values({ + orgId: org1.orgId, + exitNode: exitNode1.exitNodeId, + name: 'Main Site', + subdomain: 'main', + pubKey: 'abc123', + subnet: '10.0.0.0/24' + }).returning().get(); + + const site2 = await db.insert(sites).values({ + orgId: org2.orgId, + exitNode: exitNode2.exitNodeId, + name: 'Dev Site', + subdomain: 'dev', + pubKey: 'def456', + subnet: '10.0.1.0/24' + }).returning().get(); + + // Insert dummy resources + const resource1 = await db.insert(resources).values({ + siteId: site1.siteId, + name: 'Web Server', + subdomain: 'web' + }).returning().get(); + + const resource2 = await db.insert(resources).values({ + siteId: site2.siteId, + name: 'Database', + subdomain: 'db' + }).returning().get(); + + // Insert dummy routes + await db.insert(routes).values([ + { exitNodeId: exitNode1.exitNodeId, subnet: '192.168.0.0/24' }, + { exitNodeId: exitNode2.exitNodeId, subnet: '172.16.0.0/24' } + ]); + + // Insert dummy targets + await db.insert(targets).values([ + { resourceId: resource1.resourceId, ip: '10.0.0.10', method: 'GET', port: 80, protocol: 'http' }, + { resourceId: resource2.resourceId, ip: '10.0.1.20', method: 'TCP', port: 5432, protocol: 'postgresql' } + ]); + + console.log('Dummy data inserted successfully'); +} + +insertDummyData().catch(console.error); \ No newline at end of file diff --git a/scripts/runMigrations.ts b/scripts/migrate.ts similarity index 100% rename from scripts/runMigrations.ts rename to scripts/migrate.ts diff --git a/server/routers/badger/getConfig.ts b/server/routers/badger/getConfig.ts index b826295c..ce614b22 100644 --- a/server/routers/badger/getConfig.ts +++ b/server/routers/badger/getConfig.ts @@ -2,15 +2,11 @@ import { Request, Response, NextFunction } from 'express'; import { DrizzleError } from 'drizzle-orm'; import { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3'; import { sites, Site } from '../../db/schema'; - -interface CustomRequest extends Request { - db?: BetterSQLite3Database; -} +import db from '../../db'; export const getConfig = async (req: Request, res: Response, next: NextFunction): Promise => { try { - const customReq = req as CustomRequest; - const db = customReq.db; + const exitNodeId = req.query.exitNodeId as string; if (!db) { throw new Error('Database is not attached to the request'); diff --git a/server/routers/external.ts b/server/routers/external.ts index 637b58dc..66e65d35 100644 --- a/server/routers/external.ts +++ b/server/routers/external.ts @@ -1,7 +1,5 @@ import { Router } from "express"; import badger from "./badger/badger"; -import gerbil from "./gerbil/gerbil"; -import newt from "./newt/newt"; import pangolin from "./pangolin/pangolin"; const unauth = Router(); @@ -11,6 +9,6 @@ unauth.get("/", (_, res) => { }); unauth.use("/newt", badger); -unauth.use("/pangolin", badger); +unauth.use("/pangolin", pangolin); export default unauth; diff --git a/server/routers/internal.ts b/server/routers/internal.ts index 539ffa99..2467f932 100644 --- a/server/routers/internal.ts +++ b/server/routers/internal.ts @@ -1,8 +1,6 @@ import { Router } from "express"; import badger from "./badger/badger"; import gerbil from "./gerbil/gerbil"; -import newt from "./newt/newt"; -import pangolin from "./pangolin/pangolin"; const unauth = Router(); @@ -11,6 +9,6 @@ unauth.get("/", (_, res) => { }); unauth.use("/badger", badger); -unauth.use("/gerbil", badger); +unauth.use("/gerbil", gerbil); export default unauth;