diff --git a/scripts/hydrate.ts b/scripts/hydrate.ts index 68b7e02..667f751 100644 --- a/scripts/hydrate.ts +++ b/scripts/hydrate.ts @@ -14,24 +14,26 @@ async function insertDummyData() { const org1 = db .insert(orgs) .values({ + orgId: "default", name: "Default", domain: "fosrl.io", }) .returning() .get(); - await createSuperuserRole(org1.orgId); + await createSuperuserRole(org1.orgId!); const org2 = db .insert(orgs) .values({ + orgId: "fossorial", name: "Fossorial", domain: "fossorial.io", }) .returning() .get(); - await createSuperuserRole(org2.orgId); + await createSuperuserRole(org2.orgId!); // Insert dummy exit nodes const exitNode1 = db diff --git a/server/auth/limits.ts b/server/auth/limits.ts index c6e4dc5..b5758f5 100644 --- a/server/auth/limits.ts +++ b/server/auth/limits.ts @@ -5,7 +5,7 @@ import createHttpError from 'http-errors'; import HttpCode from '@server/types/HttpCode'; interface CheckLimitOptions { - orgId: number; + orgId: string; limitName: string; currentValue: number; increment?: number; diff --git a/server/db/ensureActions.ts b/server/db/ensureActions.ts index 82968a8..a3fb175 100644 --- a/server/db/ensureActions.ts +++ b/server/db/ensureActions.ts @@ -39,7 +39,7 @@ export async function ensureActions() { } } -export async function createSuperuserRole(orgId: number) { +export async function createSuperuserRole(orgId: string) { // Create the Default role if it doesn't exist const [insertedRole] = await db .insert(roles) diff --git a/server/db/schema.ts b/server/db/schema.ts index 1d35da5..50aeab5 100644 --- a/server/db/schema.ts +++ b/server/db/schema.ts @@ -2,14 +2,14 @@ import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core"; import { InferSelectModel } from "drizzle-orm"; export const orgs = sqliteTable("orgs", { - orgId: integer("orgId").primaryKey({ autoIncrement: true }), + orgId: text("orgId").primaryKey(), name: text("name").notNull(), domain: text("domain").notNull(), }); export const sites = sqliteTable("sites", { siteId: integer("siteId").primaryKey({ autoIncrement: true }), - orgId: integer("orgId").references(() => orgs.orgId, { + orgId: text("orgId").references(() => orgs.orgId, { onDelete: "cascade", }), exitNode: integer("exitNode").references(() => exitNodes.exitNodeId, { @@ -28,7 +28,7 @@ export const resources = sqliteTable("resources", { siteId: integer("siteId").references(() => sites.siteId, { onDelete: "cascade", }), - orgId: integer("orgId").references(() => orgs.orgId, { + orgId: text("orgId").references(() => orgs.orgId, { onDelete: "cascade", }), name: text("name").notNull(), @@ -97,7 +97,7 @@ export const userOrgs = sqliteTable("userOrgs", { userId: text("userId") .notNull() .references(() => users.userId), - orgId: integer("orgId") + orgId: text("orgId") .notNull() .references(() => orgs.orgId), roleId: integer("roleId") @@ -132,7 +132,7 @@ export const actions = sqliteTable("actions", { export const roles = sqliteTable("roles", { roleId: integer("roleId").primaryKey({ autoIncrement: true }), - orgId: integer("orgId").references(() => orgs.orgId, { + orgId: text("orgId").references(() => orgs.orgId, { onDelete: "cascade", }), isSuperuserRole: integer("isSuperuserRole", { mode: "boolean" }), @@ -147,7 +147,7 @@ export const roleActions = sqliteTable("roleActions", { actionId: text("actionId") .notNull() .references(() => actions.actionId, { onDelete: "cascade" }), - orgId: integer("orgId") + orgId: text("orgId") .notNull() .references(() => orgs.orgId, { onDelete: "cascade" }), }); @@ -159,7 +159,7 @@ export const userActions = sqliteTable("userActions", { actionId: text("actionId") .notNull() .references(() => actions.actionId, { onDelete: "cascade" }), - orgId: integer("orgId") + orgId: text("orgId") .notNull() .references(() => orgs.orgId, { onDelete: "cascade" }), }); @@ -202,7 +202,7 @@ export const userResources = sqliteTable("userResources", { export const limitsTable = sqliteTable("limits", { limitId: integer("limitId").primaryKey({ autoIncrement: true }), - orgId: integer("orgId").references(() => orgs.orgId, { + orgId: text("orgId").references(() => orgs.orgId, { onDelete: "cascade", }), name: text("name").notNull(), diff --git a/server/index.ts b/server/index.ts index bebe581..9e7d0f5 100644 --- a/server/index.ts +++ b/server/index.ts @@ -91,8 +91,8 @@ declare global { interface Request { user?: User; userOrgRoleId?: number; - userOrgId?: number; - userOrgIds?: number[]; + userOrgId?: string; + userOrgIds?: string[]; } } } diff --git a/server/routers/auth/verifyOrgAccess.ts b/server/routers/auth/verifyOrgAccess.ts index d195b87..e67dc62 100644 --- a/server/routers/auth/verifyOrgAccess.ts +++ b/server/routers/auth/verifyOrgAccess.ts @@ -8,13 +8,13 @@ import { AuthenticatedRequest } from '@server/types/Auth'; export function verifyOrgAccess(req: Request, res: Response, next: NextFunction) { const userId = req.user!.userId; // Assuming you have user information in the request - const orgId = parseInt(req.params.orgId); + const orgId = req.params.orgId; if (!userId) { return next(createHttpError(HttpCode.UNAUTHORIZED, 'User not authenticated')); } - if (isNaN(orgId)) { + if (!orgId) { return next(createHttpError(HttpCode.BAD_REQUEST, 'Invalid organization ID')); } diff --git a/server/routers/org/deleteOrg.ts b/server/routers/org/deleteOrg.ts index 9cf7ba3..44a1a6e 100644 --- a/server/routers/org/deleteOrg.ts +++ b/server/routers/org/deleteOrg.ts @@ -10,7 +10,7 @@ import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions'; import logger from '@server/logger'; const deleteOrgSchema = z.object({ - orgId: z.string().transform(Number).pipe(z.number().int().positive()) + orgId: z.string() }); export async function deleteOrg(req: Request, res: Response, next: NextFunction): Promise { diff --git a/server/routers/org/getOrg.ts b/server/routers/org/getOrg.ts index 71e8917..647b3e8 100644 --- a/server/routers/org/getOrg.ts +++ b/server/routers/org/getOrg.ts @@ -10,7 +10,7 @@ import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions'; import logger from '@server/logger'; const getOrgSchema = z.object({ - orgId: z.string().transform(Number).pipe(z.number().int().positive()) + orgId: z.string() }); export async function getOrg(req: Request, res: Response, next: NextFunction): Promise { diff --git a/server/routers/org/updateOrg.ts b/server/routers/org/updateOrg.ts index 078dd8e..44f757c 100644 --- a/server/routers/org/updateOrg.ts +++ b/server/routers/org/updateOrg.ts @@ -10,7 +10,7 @@ import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions'; import logger from '@server/logger'; const updateOrgParamsSchema = z.object({ - orgId: z.string().transform(Number).pipe(z.number().int().positive()) + orgId: z.string() }); const updateOrgBodySchema = z.object({ diff --git a/server/routers/resource/createResource.ts b/server/routers/resource/createResource.ts index 1680a99..6f0a7c9 100644 --- a/server/routers/resource/createResource.ts +++ b/server/routers/resource/createResource.ts @@ -11,7 +11,7 @@ import { eq, and } from 'drizzle-orm'; const createResourceParamsSchema = z.object({ siteId: z.number().int().positive(), - orgId: z.string().transform(Number).pipe(z.number().int().positive()) + orgId: z.string() }); // Define Zod schema for request body validation diff --git a/server/routers/site/createSite.ts b/server/routers/site/createSite.ts index 75d9441..a1d192b 100644 --- a/server/routers/site/createSite.ts +++ b/server/routers/site/createSite.ts @@ -13,7 +13,7 @@ import { eq, and } from 'drizzle-orm'; const API_BASE_URL = "http://localhost:3000"; const createSiteParamsSchema = z.object({ - orgId: z.string().transform(Number).pipe(z.number().int().positive()) + orgId: z.string() }); // Define Zod schema for request body validation diff --git a/server/routers/user/addUserAction.ts b/server/routers/user/addUserAction.ts index 0ac899e..981d651 100644 --- a/server/routers/user/addUserAction.ts +++ b/server/routers/user/addUserAction.ts @@ -12,7 +12,7 @@ import { eq } from 'drizzle-orm'; const addUserActionSchema = z.object({ userId: z.string(), actionId: z.string(), - orgId: z.string().transform(Number).pipe(z.number().int().positive()), + orgId: z.string(), }); export async function addUserAction(req: Request, res: Response, next: NextFunction): Promise { diff --git a/server/routers/user/addUserOrg.ts b/server/routers/user/addUserOrg.ts index 0e3f07b..139fd0c 100644 --- a/server/routers/user/addUserOrg.ts +++ b/server/routers/user/addUserOrg.ts @@ -11,7 +11,7 @@ import logger from '@server/logger'; const addUserParamsSchema = z.object({ userId: z.string().uuid(), - orgId: z.string().transform(Number).pipe(z.number().int().positive()) + orgId: z.string() }); const addUserSchema = z.object({ diff --git a/server/routers/user/removeUserAction.ts b/server/routers/user/removeUserAction.ts index 52f4050..0896dd6 100644 --- a/server/routers/user/removeUserAction.ts +++ b/server/routers/user/removeUserAction.ts @@ -15,7 +15,7 @@ const removeUserActionParamsSchema = z.object({ const removeUserActionSchema = z.object({ actionId: z.string(), - orgId: z.string().transform(Number).pipe(z.number().int().positive()) + orgId: z.string() }); export async function removeUserAction(req: Request, res: Response, next: NextFunction): Promise { diff --git a/server/routers/user/removeUserOrg.ts b/server/routers/user/removeUserOrg.ts index 24cd8b2..4a65596 100644 --- a/server/routers/user/removeUserOrg.ts +++ b/server/routers/user/removeUserOrg.ts @@ -11,7 +11,7 @@ import logger from '@server/logger'; const removeUserSchema = z.object({ userId: z.string().uuid(), - orgId: z.string().transform(Number).pipe(z.number().int().positive()) + orgId: z.string() }); export async function removeUserOrg(req: Request, res: Response, next: NextFunction): Promise { diff --git a/server/routers/user/setUserRole.ts b/server/routers/user/setUserRole.ts index 89e7a9f..7bd5d34 100644 --- a/server/routers/user/setUserRole.ts +++ b/server/routers/user/setUserRole.ts @@ -12,7 +12,7 @@ import logger from '@server/logger'; const addUserRoleSchema = z.object({ userId: z.string(), roleId: z.number().int().positive(), - orgId: z.string().transform(Number).pipe(z.number().int().positive()) + orgId: z.string() }); export async function addUserRole(req: Request, res: Response, next: NextFunction): Promise {