mirror of
https://github.com/fosrl/pangolin.git
synced 2026-03-03 17:26:38 +00:00
Fix resource new id number
This commit is contained in:
@@ -38,7 +38,7 @@ export const resources = sqliteTable("resources", {
|
|||||||
|
|
||||||
export const targets = sqliteTable("targets", {
|
export const targets = sqliteTable("targets", {
|
||||||
targetId: integer("targetId").primaryKey({ autoIncrement: true }),
|
targetId: integer("targetId").primaryKey({ autoIncrement: true }),
|
||||||
resourceId: text("resourceId").references(() => resources.resourceId, {
|
resourceId: integer("resourceId").references(() => resources.resourceId, {
|
||||||
onDelete: "cascade",
|
onDelete: "cascade",
|
||||||
}),
|
}),
|
||||||
ip: text("ip").notNull(),
|
ip: text("ip").notNull(),
|
||||||
@@ -188,7 +188,7 @@ export const roleResources = sqliteTable("roleResources", {
|
|||||||
roleId: integer("roleId")
|
roleId: integer("roleId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => roles.roleId, { onDelete: "cascade" }),
|
.references(() => roles.roleId, { onDelete: "cascade" }),
|
||||||
resourceId: text("resourceId")
|
resourceId: integer("resourceId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => resources.resourceId, { onDelete: "cascade" }),
|
.references(() => resources.resourceId, { onDelete: "cascade" }),
|
||||||
});
|
});
|
||||||
@@ -197,7 +197,7 @@ export const userResources = sqliteTable("userResources", {
|
|||||||
userId: text("userId")
|
userId: text("userId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => users.userId, { onDelete: "cascade" }),
|
.references(() => users.userId, { onDelete: "cascade" }),
|
||||||
resourceId: text("resourceId")
|
resourceId: integer("resourceId")
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => resources.resourceId, { onDelete: "cascade" }),
|
.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({
|
const newOrg = await db.insert(orgs).values({
|
||||||
orgId,
|
orgId,
|
||||||
name,
|
name,
|
||||||
domain: config.app.base_domain
|
domain
|
||||||
}).returning();
|
}).returning();
|
||||||
|
|
||||||
const roleId = await createSuperuserRole(newOrg[0].orgId);
|
const roleId = await createSuperuserRole(newOrg[0].orgId);
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import { eq, and } from 'drizzle-orm';
|
|||||||
import stoi from '@server/utils/stoi';
|
import stoi from '@server/utils/stoi';
|
||||||
|
|
||||||
const createResourceParamsSchema = z.object({
|
const createResourceParamsSchema = z.object({
|
||||||
siteId: z.string().optional().transform(stoi).pipe(z.number().int().positive().optional()),
|
siteId: z.string().optional().transform(stoi).pipe(z.number().int().positive().optional()),
|
||||||
orgId: z.string()
|
orgId: z.string()
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ export async function createResource(req: Request, res: Response, next: NextFunc
|
|||||||
.from(orgs)
|
.from(orgs)
|
||||||
.where(eq(orgs.orgId, orgId))
|
.where(eq(orgs.orgId, orgId))
|
||||||
.limit(1);
|
.limit(1);
|
||||||
|
|
||||||
if (org.length === 0) {
|
if (org.length === 0) {
|
||||||
return next(
|
return next(
|
||||||
createHttpError(
|
createHttpError(
|
||||||
@@ -75,11 +75,11 @@ export async function createResource(req: Request, res: Response, next: NextFunc
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Generate a unique resourceId
|
// 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
|
// Create new resource in the database
|
||||||
const newResource = await db.insert(resources).values({
|
const newResource = await db.insert(resources).values({
|
||||||
resourceId,
|
fullDomain,
|
||||||
siteId,
|
siteId,
|
||||||
orgId,
|
orgId,
|
||||||
name,
|
name,
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import logger from '@server/logger';
|
|||||||
|
|
||||||
// Define Zod schema for request parameters validation
|
// Define Zod schema for request parameters validation
|
||||||
const deleteResourceSchema = z.object({
|
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> {
|
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
|
// Define Zod schema for request parameters validation
|
||||||
const getResourceSchema = z.object({
|
const getResourceSchema = z.object({
|
||||||
resourceId: z.string()
|
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
|
||||||
});
|
});
|
||||||
|
|
||||||
export type GetResourceResponse = {
|
export type GetResourceResponse = {
|
||||||
resourceId: string;
|
resourceId: number;
|
||||||
siteId: number;
|
siteId: number;
|
||||||
orgId: string;
|
orgId: string;
|
||||||
name: string;
|
name: string;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { ActionsEnum, checkUserActionPermission } from '@server/auth/actions';
|
|||||||
import logger from '@server/logger';
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const listResourceRolesSchema = z.object({
|
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> {
|
export async function listResourceRoles(req: Request, res: Response, next: NextFunction): Promise<any> {
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ const listResourcesSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
function queryResources(
|
function queryResources(
|
||||||
accessibleResourceIds: string[],
|
accessibleResourceIds: number[],
|
||||||
siteId?: number,
|
siteId?: number,
|
||||||
orgId?: string,
|
orgId?: string,
|
||||||
) {
|
) {
|
||||||
@@ -141,7 +141,7 @@ export async function listResources(
|
|||||||
// Get the list of resources the user has access to
|
// Get the list of resources the user has access to
|
||||||
const accessibleResources = await db
|
const accessibleResources = await db
|
||||||
.select({
|
.select({
|
||||||
resourceId: sql<string>`COALESCE(${userResources.resourceId}, ${roleResources.resourceId})`,
|
resourceId: sql<number>`COALESCE(${userResources.resourceId}, ${roleResources.resourceId})`,
|
||||||
})
|
})
|
||||||
.from(userResources)
|
.from(userResources)
|
||||||
.fullJoin(
|
.fullJoin(
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import logger from '@server/logger';
|
|||||||
|
|
||||||
// Define Zod schema for request parameters validation
|
// Define Zod schema for request parameters validation
|
||||||
const updateResourceParamsSchema = z.object({
|
const updateResourceParamsSchema = z.object({
|
||||||
resourceId: z.string()
|
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
|
||||||
});
|
});
|
||||||
|
|
||||||
// Define Zod schema for request body validation
|
// Define Zod schema for request body validation
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ const addRoleResourceParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const addRoleResourceSchema = 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> {
|
export async function addRoleResource(req: Request, res: Response, next: NextFunction): Promise<any> {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ const removeRoleResourceParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const removeRoleResourceSchema = 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> {
|
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';
|
import logger from '@server/logger';
|
||||||
|
|
||||||
const createTargetParamsSchema = z.object({
|
const createTargetParamsSchema = z.object({
|
||||||
resourceId: z.string(),
|
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
|
||||||
});
|
});
|
||||||
|
|
||||||
const createTargetSchema = z.object({
|
const createTargetSchema = z.object({
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import { fromError } from "zod-validation-error";
|
|||||||
import logger from "@server/logger";
|
import logger from "@server/logger";
|
||||||
|
|
||||||
const listTargetsParamsSchema = z.object({
|
const listTargetsParamsSchema = z.object({
|
||||||
resourceId: z.string()
|
resourceId: z.string().transform(Number).pipe(z.number().int().positive()),
|
||||||
});
|
});
|
||||||
|
|
||||||
const listTargetsSchema = z.object({
|
const listTargetsSchema = z.object({
|
||||||
@@ -29,7 +29,7 @@ const listTargetsSchema = z.object({
|
|||||||
.pipe(z.number().int().nonnegative()),
|
.pipe(z.number().int().nonnegative()),
|
||||||
});
|
});
|
||||||
|
|
||||||
function queryTargets(resourceId: string) {
|
function queryTargets(resourceId: number) {
|
||||||
let baseQuery = db
|
let baseQuery = db
|
||||||
.select({
|
.select({
|
||||||
targetId: targets.targetId,
|
targetId: targets.targetId,
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import logger from '@server/logger';
|
|||||||
|
|
||||||
const addUserResourceSchema = z.object({
|
const addUserResourceSchema = z.object({
|
||||||
userId: z.string(),
|
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> {
|
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({
|
const removeUserResourceSchema = z.object({
|
||||||
userId: z.string(),
|
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> {
|
export async function removeUserResource(req: Request, res: Response, next: NextFunction): Promise<any> {
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ export const metadata: Metadata = {
|
|||||||
|
|
||||||
interface SettingsLayoutProps {
|
interface SettingsLayoutProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
params: Promise<{ resourceId: string; orgId: string }>;
|
params: Promise<{ resourceId: number | string; orgId: string }>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function SettingsLayout(props: SettingsLayoutProps) {
|
export default async function SettingsLayout(props: SettingsLayoutProps) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { GeneralForm } from "./components/GeneralForm";
|
|||||||
|
|
||||||
export default async function SettingsPage(
|
export default async function SettingsPage(
|
||||||
props: {
|
props: {
|
||||||
params: Promise<{ resourceId: string }>;
|
params: Promise<{ resourceId: number | string }>;
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
const params = await props.params;
|
const params = await props.params;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ const isValidIPAddress = (ip: string) => {
|
|||||||
|
|
||||||
export default function ReverseProxyTargets(
|
export default function ReverseProxyTargets(
|
||||||
props: {
|
props: {
|
||||||
params: Promise<{ resourceId: string }>;
|
params: Promise<{ resourceId: number }>;
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
const params = use(props.params);
|
const params = use(props.params);
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import { useRouter } from "next/navigation";
|
|||||||
import api from "@app/api";
|
import api from "@app/api";
|
||||||
|
|
||||||
export type ResourceRow = {
|
export type ResourceRow = {
|
||||||
id: string;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
orgId: string;
|
orgId: string;
|
||||||
domain: string;
|
domain: string;
|
||||||
@@ -66,7 +66,7 @@ export const columns: ColumnDef<ResourceRow>[] = [
|
|||||||
|
|
||||||
const resourceRow = row.original;
|
const resourceRow = row.original;
|
||||||
|
|
||||||
const deleteResource = (resourceId: string) => {
|
const deleteResource = (resourceId: number) => {
|
||||||
api.delete(`/resource/${resourceId}`)
|
api.delete(`/resource/${resourceId}`)
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
console.error("Error deleting resource", e);
|
console.error("Error deleting resource", e);
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export default async function Page(props: ResourcesPageProps) {
|
|||||||
|
|
||||||
const resourceRows: ResourceRow[] = resources.map((resource) => {
|
const resourceRows: ResourceRow[] = resources.map((resource) => {
|
||||||
return {
|
return {
|
||||||
id: resource.resourceId.toString(),
|
id: resource.resourceId,
|
||||||
name: resource.name,
|
name: resource.name,
|
||||||
orgId: params.orgId,
|
orgId: params.orgId,
|
||||||
domain: resource.subdomain || "",
|
domain: resource.subdomain || "",
|
||||||
|
|||||||
Reference in New Issue
Block a user