add .editorconfig and fix db imports in scripts

This commit is contained in:
Milo Schwartz 2024-09-28 17:42:07 -04:00
parent 2970088b29
commit a67463a518
No known key found for this signature in database
3 changed files with 182 additions and 106 deletions

15
.editorconfig Normal file
View file

@ -0,0 +1,15 @@
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true
[*.ts]
quote_type = double
[*.md]
max_line_length = off
trim_trailing_whitespace = false

View file

@ -1,99 +1,172 @@
import { drizzle } from 'drizzle-orm/better-sqlite3'; import {
import Database from 'better-sqlite3'; orgs,
import { orgs, users, sites, resources, exitNodes, routes, targets } from '../server/db/schema'; users,
sites,
const sqlite = new Database('./config/db/db.sqlite'); resources,
const db = drizzle(sqlite); exitNodes,
routes,
targets,
} from "@server/db/schema";
import db from "@server/db";
async function insertDummyData() { async function insertDummyData() {
// Insert dummy orgs // Insert dummy orgs
const org1 = await db.insert(orgs).values({ const org1 = db
name: 'Fosrl', .insert(orgs)
domain: 'fosrl.io' .values({
}).returning().get(); name: "Fosrl",
domain: "fosrl.io",
})
.returning()
.get();
const org2 = await db.insert(orgs).values({ const org2 = db
name: 'Fossorial', .insert(orgs)
domain: 'fossorial.io' .values({
}).returning().get(); name: "Fossorial",
domain: "fossorial.io",
})
.returning()
.get();
// Insert dummy users // Insert dummy users
await db.insert(users).values([ 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: org1.orgId,
{ orgId: org2.orgId, name: 'Bob Johnson', email: 'bob@fosrl.io', groups: 'admin' } 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 // Insert dummy exit nodes
const exitNode1 = db.insert(exitNodes).values({ const exitNode1 = db
name: 'Exit Node 1', .insert(exitNodes)
address: '10.0.0.1/24', .values({
privateKey: 'sKQlCNErB2n+dV8eLp5Yw/avsjK/zkrxJE0n48hjb10=', name: "Exit Node 1",
listenPort: 51820 address: "10.0.0.1/24",
}).returning().get(); privateKey: "sKQlCNErB2n+dV8eLp5Yw/avsjK/zkrxJE0n48hjb10=",
listenPort: 51820,
})
.returning()
.get();
const exitNode2 = db.insert(exitNodes).values({ const exitNode2 = db
name: 'Exit Node 2', .insert(exitNodes)
address: '172.16.1.1/24', .values({
privateKey: 'ACaw+q5vHVm8Xb0jIgIkMzlkJiriC7cURuOiNbGsGHg=', name: "Exit Node 2",
listenPort: 51820 address: "172.16.1.1/24",
}).returning().get(); privateKey: "ACaw+q5vHVm8Xb0jIgIkMzlkJiriC7cURuOiNbGsGHg=",
listenPort: 51820,
})
.returning()
.get();
// Insert dummy sites // Insert dummy sites
const site1 = db.insert(sites).values({ const site1 = db
orgId: org1.orgId, .insert(sites)
exitNode: exitNode1.exitNodeId, .values({
name: 'Main Site', orgId: org1.orgId,
subdomain: 'main', exitNode: exitNode1.exitNodeId,
pubKey: 'Kn4eD0kvcTwjO//zqH/CtNVkMNdMiUkbqFxysEym2D8=', name: "Main Site",
subnet: '10.0.0.16/28' subdomain: "main",
}).returning().get(); pubKey: "Kn4eD0kvcTwjO//zqH/CtNVkMNdMiUkbqFxysEym2D8=",
subnet: "10.0.0.16/28",
})
.returning()
.get();
const site2 = db.insert(sites).values({ const site2 = db
orgId: org2.orgId, .insert(sites)
exitNode: exitNode2.exitNodeId, .values({
name: 'Dev Site', orgId: org2.orgId,
subdomain: 'dev', exitNode: exitNode2.exitNodeId,
pubKey: 'V329Uf/vhnBwYxAuT/ZlMZuLokHy5tug/sGsLfIMK1w=', name: "Dev Site",
subnet: '172.16.1.16/28' subdomain: "dev",
}).returning().get(); pubKey: "V329Uf/vhnBwYxAuT/ZlMZuLokHy5tug/sGsLfIMK1w=",
subnet: "172.16.1.16/28",
})
.returning()
.get();
// Insert dummy resources // Insert dummy resources
const resource1 = db.insert(resources).values({ const resource1 = db
resourceId: `web.${site1.subdomain}.${org1.domain}`, .insert(resources)
siteId: site1.siteId, .values({
name: 'Web Server', resourceId: `web.${site1.subdomain}.${org1.domain}`,
subdomain: 'web' siteId: site1.siteId,
}).returning().get(); name: "Web Server",
subdomain: "web",
})
.returning()
.get();
const resource2 = db.insert(resources).values({ const resource2 = db
resourceId: `web2.${site1.subdomain}.${org1.domain}`, .insert(resources)
siteId: site1.siteId, .values({
name: 'Web Server 2', resourceId: `web2.${site1.subdomain}.${org1.domain}`,
subdomain: 'web2' siteId: site1.siteId,
}).returning().get(); name: "Web Server 2",
subdomain: "web2",
})
.returning()
.get();
const resource3 = db.insert(resources).values({ const resource3 = db
resourceId: `db.${site2.subdomain}.${org2.domain}`, .insert(resources)
siteId: site2.siteId, .values({
name: 'Database', resourceId: `db.${site2.subdomain}.${org2.domain}`,
subdomain: 'db' siteId: site2.siteId,
}).returning().get(); name: "Database",
subdomain: "db",
})
.returning()
.get();
// Insert dummy routes // Insert dummy routes
await db.insert(routes).values([ await db.insert(routes).values([
{ exitNodeId: exitNode1.exitNodeId, subnet: '10.0.0.0/24' }, { exitNodeId: exitNode1.exitNodeId, subnet: "10.0.0.0/24" },
{ exitNodeId: exitNode2.exitNodeId, subnet: '172.16.1.1/24' } { exitNodeId: exitNode2.exitNodeId, subnet: "172.16.1.1/24" },
]); ]);
// Insert dummy targets // Insert dummy targets
await db.insert(targets).values([ await db.insert(targets).values([
{ resourceId: resource1.resourceId, ip: '10.0.0.16', method: 'https', port: 443, protocol: 'TCP' }, {
{ resourceId: resource2.resourceId, ip: '10.0.0.17', method: 'http', port: 80, protocol: 'TCP' }, resourceId: resource1.resourceId,
{ resourceId: resource3.resourceId, ip: '172.16.1.16', method: 'http', port: 80, protocol: 'TCP' } ip: "10.0.0.16",
]); method: "https",
port: 443,
protocol: "TCP",
},
{
resourceId: resource2.resourceId,
ip: "10.0.0.17",
method: "http",
port: 80,
protocol: "TCP",
},
{
resourceId: resource3.resourceId,
ip: "172.16.1.16",
method: "http",
port: 80,
protocol: "TCP",
},
]);
console.log('Dummy data inserted successfully'); console.log("Dummy data inserted successfully");
} }
insertDummyData().catch(console.error); insertDummyData().catch(console.error);

View file

@ -1,27 +1,15 @@
import { drizzle } from 'drizzle-orm/better-sqlite3'; import { migrate } from "drizzle-orm/better-sqlite3/migrator";
import { migrate } from 'drizzle-orm/better-sqlite3/migrator'; import db from "@server/db";
import Database from 'better-sqlite3';
const runMigrations = async () => { const runMigrations = async () => {
// Create a new SQLite database connection console.log("Running migrations...");
const sqlite = new Database('./config/db/db.sqlite'); try {
migrate(db, { migrationsFolder: "./server/migrations" });
// Create a Drizzle instance console.log("Migrations completed successfully.");
const db = drizzle(sqlite); } catch (error) {
console.error("Error running migrations:", error);
console.log('Running migrations...'); process.exit(1);
}
try {
// Run the migrations
await migrate(db, { migrationsFolder: './server/migrations' });
console.log('Migrations completed successfully.');
} catch (error) {
console.error('Error running migrations:', error);
process.exit(1);
} finally {
// Close the database connection
sqlite.close();
}
}; };
runMigrations(); runMigrations();