mirror of
https://github.com/fosrl/pangolin.git
synced 2025-08-01 16:45:40 +02:00
Fix resource new id number
This commit is contained in:
parent
c6d4c4db20
commit
261b3c7e31
19 changed files with 31 additions and 28 deletions
|
@ -38,7 +38,7 @@ export const resources = sqliteTable("resources", {
|
|||
|
||||
export const targets = sqliteTable("targets", {
|
||||
targetId: integer("targetId").primaryKey({ autoIncrement: true }),
|
||||
resourceId: text("resourceId").references(() => resources.resourceId, {
|
||||
resourceId: integer("resourceId").references(() => resources.resourceId, {
|
||||
onDelete: "cascade",
|
||||
}),
|
||||
ip: text("ip").notNull(),
|
||||
|
@ -188,7 +188,7 @@ export const roleResources = sqliteTable("roleResources", {
|
|||
roleId: integer("roleId")
|
||||
.notNull()
|
||||
.references(() => roles.roleId, { onDelete: "cascade" }),
|
||||
resourceId: text("resourceId")
|
||||
resourceId: integer("resourceId")
|
||||
.notNull()
|
||||
.references(() => resources.resourceId, { onDelete: "cascade" }),
|
||||
});
|
||||
|
@ -197,7 +197,7 @@ export const userResources = sqliteTable("userResources", {
|
|||
userId: text("userId")
|
||||
.notNull()
|
||||
.references(() => users.userId, { onDelete: "cascade" }),
|
||||
resourceId: text("resourceId")
|
||||
resourceId: integer("resourceId")
|
||||
.notNull()
|
||||
.references(() => resources.resourceId, { onDelete: "cascade" }),
|
||||
});
|
||||
|
|
|
@ -65,10 +65,13 @@ export async function createOrg(req: Request, res: Response, next: NextFunction)
|
|||
);
|
||||
}
|
||||
|
||||
// create a url from config.app.base_url and get the hostname
|
||||
const domain = new URL(config.app.base_url).hostname;
|
||||
|
||||
const newOrg = await db.insert(orgs).values({
|
||||
orgId,
|
||||
name,
|
||||
domain: config.app.base_domain
|
||||
domain
|
||||
}).returning();
|
||||
|
||||
const roleId = await createSuperuserRole(newOrg[0].orgId);
|
||||
|
|
|
@ -75,11 +75,11 @@ export async function createResource(req: Request, res: Response, next: NextFunc
|
|||
}
|
||||
|
||||
// Generate a unique resourceId
|
||||
const resourceId = `${subdomain}.${org[0].orgId}.${org[0].domain}`;
|
||||
const fullDomain = `${subdomain}.${org[0].orgId}.${org[0].domain}`;
|
||||
|
||||
// Create new resource in the database
|
||||
const newResource = await db.insert(resources).values({
|
||||
resourceId,
|
||||
fullDomain,
|
||||
siteId,
|
||||
orgId,
|
||||
name,
|
||||
|
|
|
@ -11,7 +11,7 @@ import logger from '@server/logger';
|
|||
|
||||
// Define Zod schema for request parameters validation
|
||||
const deleteResourceSchema = z.object({
|
||||
resourceId: z.string()
|
||||
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
|
||||
});
|
||||
|
||||
export async function deleteResource(req: Request, res: Response, next: NextFunction): Promise<any> {
|
||||
|
|
|
@ -11,11 +11,11 @@ import logger from '@server/logger';
|
|||
|
||||
// Define Zod schema for request parameters validation
|
||||
const getResourceSchema = z.object({
|
||||
resourceId: z.string()
|
||||
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
|
||||
});
|
||||
|
||||
export type GetResourceResponse = {
|
||||
resourceId: string;
|
||||
resourceId: number;
|
||||
siteId: number;
|
||||
orgId: string;
|
||||
name: string;
|
||||
|
|
|
@ -10,7 +10,7 @@ import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
|||
import logger from '@server/logger';
|
||||
|
||||
const listResourceRolesSchema = z.object({
|
||||
resourceId: z.string(),
|
||||
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
|
||||
});
|
||||
|
||||
export async function listResourceRoles(req: Request, res: Response, next: NextFunction): Promise<any> {
|
||||
|
|
|
@ -41,7 +41,7 @@ const listResourcesSchema = z.object({
|
|||
});
|
||||
|
||||
function queryResources(
|
||||
accessibleResourceIds: string[],
|
||||
accessibleResourceIds: number[],
|
||||
siteId?: number,
|
||||
orgId?: string,
|
||||
) {
|
||||
|
@ -141,7 +141,7 @@ export async function listResources(
|
|||
// Get the list of resources the user has access to
|
||||
const accessibleResources = await db
|
||||
.select({
|
||||
resourceId: sql<string>`COALESCE(${userResources.resourceId}, ${roleResources.resourceId})`,
|
||||
resourceId: sql<number>`COALESCE(${userResources.resourceId}, ${roleResources.resourceId})`,
|
||||
})
|
||||
.from(userResources)
|
||||
.fullJoin(
|
||||
|
|
|
@ -11,7 +11,7 @@ import logger from '@server/logger';
|
|||
|
||||
// Define Zod schema for request parameters validation
|
||||
const updateResourceParamsSchema = z.object({
|
||||
resourceId: z.string()
|
||||
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
|
||||
});
|
||||
|
||||
// Define Zod schema for request body validation
|
||||
|
|
|
@ -13,7 +13,7 @@ const addRoleResourceParamsSchema = z.object({
|
|||
});
|
||||
|
||||
const addRoleResourceSchema = z.object({
|
||||
resourceId: z.string(),
|
||||
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
|
||||
});
|
||||
|
||||
export async function addRoleResource(req: Request, res: Response, next: NextFunction): Promise<any> {
|
||||
|
|
|
@ -14,7 +14,7 @@ const removeRoleResourceParamsSchema = z.object({
|
|||
});
|
||||
|
||||
const removeRoleResourceSchema = z.object({
|
||||
resourceId: z.string(),
|
||||
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
|
||||
});
|
||||
|
||||
export async function removeRoleResource(req: Request, res: Response, next: NextFunction): Promise<any> {
|
||||
|
|
|
@ -9,7 +9,7 @@ import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
|||
import logger from '@server/logger';
|
||||
|
||||
const createTargetParamsSchema = z.object({
|
||||
resourceId: z.string(),
|
||||
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
|
||||
});
|
||||
|
||||
const createTargetSchema = z.object({
|
||||
|
|
|
@ -11,7 +11,7 @@ import { fromError } from "zod-validation-error";
|
|||
import logger from "@server/logger";
|
||||
|
||||
const listTargetsParamsSchema = z.object({
|
||||
resourceId: z.string()
|
||||
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
|
||||
});
|
||||
|
||||
const listTargetsSchema = z.object({
|
||||
|
@ -29,7 +29,7 @@ const listTargetsSchema = z.object({
|
|||
.pipe(z.number().int().nonnegative()),
|
||||
});
|
||||
|
||||
function queryTargets(resourceId: string) {
|
||||
function queryTargets(resourceId: number) {
|
||||
let baseQuery = db
|
||||
.select({
|
||||
targetId: targets.targetId,
|
||||
|
|
|
@ -10,7 +10,7 @@ import logger from '@server/logger';
|
|||
|
||||
const addUserResourceSchema = z.object({
|
||||
userId: z.string(),
|
||||
resourceId: z.string(),
|
||||
resourceId: z.string().transform(Number).pipe(z.number().int().positive())
|
||||
});
|
||||
|
||||
export async function addUserResource(req: Request, res: Response, next: NextFunction): Promise<any> {
|
||||
|
|
|
@ -11,7 +11,7 @@ import logger from '@server/logger';
|
|||
|
||||
const removeUserResourceSchema = z.object({
|
||||
userId: z.string(),
|
||||
resourceId: z.string(),
|
||||
resourceId: z.string().transform(Number).pipe(z.number().int().positive())
|
||||
});
|
||||
|
||||
export async function removeUserResource(req: Request, res: Response, next: NextFunction): Promise<any> {
|
||||
|
|
|
@ -22,7 +22,7 @@ export const metadata: Metadata = {
|
|||
|
||||
interface SettingsLayoutProps {
|
||||
children: React.ReactNode;
|
||||
params: Promise<{ resourceId: string; orgId: string }>;
|
||||
params: Promise<{ resourceId: number | string; orgId: string }>;
|
||||
}
|
||||
|
||||
export default async function SettingsLayout(props: SettingsLayoutProps) {
|
||||
|
|
|
@ -5,7 +5,7 @@ import { GeneralForm } from "./components/GeneralForm";
|
|||
|
||||
export default async function SettingsPage(
|
||||
props: {
|
||||
params: Promise<{ resourceId: string }>;
|
||||
params: Promise<{ resourceId: number | string }>;
|
||||
}
|
||||
) {
|
||||
const params = await props.params;
|
||||
|
|
|
@ -27,7 +27,7 @@ const isValidIPAddress = (ip: string) => {
|
|||
|
||||
export default function ReverseProxyTargets(
|
||||
props: {
|
||||
params: Promise<{ resourceId: string }>;
|
||||
params: Promise<{ resourceId: number }>;
|
||||
}
|
||||
) {
|
||||
const params = use(props.params);
|
||||
|
|
|
@ -15,7 +15,7 @@ import { useRouter } from "next/navigation";
|
|||
import api from "@app/api";
|
||||
|
||||
export type ResourceRow = {
|
||||
id: string;
|
||||
id: number;
|
||||
name: string;
|
||||
orgId: string;
|
||||
domain: string;
|
||||
|
@ -66,7 +66,7 @@ export const columns: ColumnDef<ResourceRow>[] = [
|
|||
|
||||
const resourceRow = row.original;
|
||||
|
||||
const deleteResource = (resourceId: string) => {
|
||||
const deleteResource = (resourceId: number) => {
|
||||
api.delete(`/resource/${resourceId}`)
|
||||
.catch((e) => {
|
||||
console.error("Error deleting resource", e);
|
||||
|
|
|
@ -23,7 +23,7 @@ export default async function Page(props: ResourcesPageProps) {
|
|||
|
||||
const resourceRows: ResourceRow[] = resources.map((resource) => {
|
||||
return {
|
||||
id: resource.resourceId.toString(),
|
||||
id: resource.resourceId,
|
||||
name: resource.name,
|
||||
orgId: params.orgId,
|
||||
domain: resource.subdomain || "",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue