mirror of
https://github.com/fosrl/pangolin.git
synced 2025-08-25 19:55:41 +02:00
Tested list endpoints
This commit is contained in:
parent
afe3d0659c
commit
bbc06245fa
4 changed files with 25 additions and 33 deletions
|
@ -30,26 +30,20 @@ async function insertDummyData() {
|
||||||
.get();
|
.get();
|
||||||
|
|
||||||
// Insert dummy users
|
// Insert dummy users
|
||||||
await db.insert(users).values([
|
// await db.insert(users).values([
|
||||||
{
|
// {
|
||||||
orgId: org1.orgId,
|
// email: "john@fossorial.com",
|
||||||
name: "John Doe",
|
// groups: "admin,developer",
|
||||||
email: "john@fossorial.com",
|
// },
|
||||||
groups: "admin,developer",
|
// {
|
||||||
},
|
// email: "jane@fossorial.com",
|
||||||
{
|
// groups: "developer",
|
||||||
orgId: org1.orgId,
|
// },
|
||||||
name: "Jane Smith",
|
// {
|
||||||
email: "jane@fossorial.com",
|
// email: "bob@fosrl.io",
|
||||||
groups: "developer",
|
// groups: "admin",
|
||||||
},
|
// },
|
||||||
{
|
// ]);
|
||||||
orgId: org2.orgId,
|
|
||||||
name: "Bob Johnson",
|
|
||||||
email: "bob@fosrl.io",
|
|
||||||
groups: "admin",
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Insert dummy exit nodes
|
// Insert dummy exit nodes
|
||||||
const exitNode1 = db
|
const exitNode1 = db
|
||||||
|
@ -107,6 +101,7 @@ async function insertDummyData() {
|
||||||
.values({
|
.values({
|
||||||
resourceId: `web.${site1.subdomain}.${org1.domain}`,
|
resourceId: `web.${site1.subdomain}.${org1.domain}`,
|
||||||
siteId: site1.siteId,
|
siteId: site1.siteId,
|
||||||
|
orgId: site1.orgId,
|
||||||
name: "Web Server",
|
name: "Web Server",
|
||||||
subdomain: "web",
|
subdomain: "web",
|
||||||
})
|
})
|
||||||
|
@ -118,6 +113,7 @@ async function insertDummyData() {
|
||||||
.values({
|
.values({
|
||||||
resourceId: `web2.${site1.subdomain}.${org1.domain}`,
|
resourceId: `web2.${site1.subdomain}.${org1.domain}`,
|
||||||
siteId: site1.siteId,
|
siteId: site1.siteId,
|
||||||
|
orgId: site1.orgId,
|
||||||
name: "Web Server 2",
|
name: "Web Server 2",
|
||||||
subdomain: "web2",
|
subdomain: "web2",
|
||||||
})
|
})
|
||||||
|
@ -129,6 +125,7 @@ async function insertDummyData() {
|
||||||
.values({
|
.values({
|
||||||
resourceId: `db.${site2.subdomain}.${org2.domain}`,
|
resourceId: `db.${site2.subdomain}.${org2.domain}`,
|
||||||
siteId: site2.siteId,
|
siteId: site2.siteId,
|
||||||
|
orgId: site2.orgId,
|
||||||
name: "Database",
|
name: "Database",
|
||||||
subdomain: "db",
|
subdomain: "db",
|
||||||
})
|
})
|
||||||
|
|
|
@ -43,7 +43,7 @@ authenticated.post("/target/:targetId", target.updateTarget);
|
||||||
authenticated.delete("/target/:targetId", target.deleteTarget);
|
authenticated.delete("/target/:targetId", target.deleteTarget);
|
||||||
|
|
||||||
authenticated.get("/users", user.listUsers);
|
authenticated.get("/users", user.listUsers);
|
||||||
authenticated.get("/org/:orgId/users", user.listUsers);
|
// authenticated.get("/org/:orgId/users", user.???); // TODO: Implement this
|
||||||
authenticated.get("/user/:userId", user.getUser);
|
authenticated.get("/user/:userId", user.getUser);
|
||||||
authenticated.delete("/user/:userId", user.deleteUser);
|
authenticated.delete("/user/:userId", user.deleteUser);
|
||||||
|
|
||||||
|
|
|
@ -8,13 +8,15 @@ import createHttpError from 'http-errors';
|
||||||
import { sql, eq } from 'drizzle-orm';
|
import { sql, eq } from 'drizzle-orm';
|
||||||
|
|
||||||
const listResourcesParamsSchema = z.object({
|
const listResourcesParamsSchema = z.object({
|
||||||
siteId: z.string().optional().transform(Number).pipe(z.number().int().positive()),
|
siteId: z.coerce.number().int().positive().optional(),
|
||||||
orgId: z.string().optional().transform(Number).pipe(z.number().int().positive()),
|
orgId: z.coerce.number().int().positive().optional(),
|
||||||
|
}).refine(data => !!data.siteId !== !!data.orgId, {
|
||||||
|
message: "Either siteId or orgId must be provided, but not both",
|
||||||
});
|
});
|
||||||
|
|
||||||
const listResourcesSchema = z.object({
|
const listResourcesSchema = z.object({
|
||||||
limit: z.string().optional().transform(Number).pipe(z.number().int().positive().default(10)),
|
limit: z.coerce.number().int().positive().default(10),
|
||||||
offset: z.string().optional().transform(Number).pipe(z.number().int().nonnegative().default(0)),
|
offset: z.coerce.number().int().nonnegative().default(0),
|
||||||
});
|
});
|
||||||
|
|
||||||
export async function listResources(req: Request, res: Response, next: NextFunction): Promise<any> {
|
export async function listResources(req: Request, res: Response, next: NextFunction): Promise<any> {
|
||||||
|
@ -59,13 +61,6 @@ export async function listResources(req: Request, res: Response, next: NextFunct
|
||||||
} else if (orgId) {
|
} else if (orgId) {
|
||||||
baseQuery = baseQuery.where(eq(resources.orgId, orgId));
|
baseQuery = baseQuery.where(eq(resources.orgId, orgId));
|
||||||
countQuery = countQuery.where(eq(resources.orgId, orgId));
|
countQuery = countQuery.where(eq(resources.orgId, orgId));
|
||||||
} else {
|
|
||||||
return next(
|
|
||||||
createHttpError(
|
|
||||||
HttpCode.BAD_REQUEST,
|
|
||||||
'Either siteId or orgId must be provided'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const resourcesList = await baseQuery.limit(limit).offset(offset);
|
const resourcesList = await baseQuery.limit(limit).offset(offset);
|
||||||
|
|
|
@ -8,7 +8,7 @@ import createHttpError from 'http-errors';
|
||||||
import { sql, eq } from 'drizzle-orm';
|
import { sql, eq } from 'drizzle-orm';
|
||||||
|
|
||||||
const listTargetsParamsSchema = z.object({
|
const listTargetsParamsSchema = z.object({
|
||||||
resourceId: z.string().optional(),
|
resourceId: z.string().optional()
|
||||||
});
|
});
|
||||||
|
|
||||||
const listTargetsSchema = z.object({
|
const listTargetsSchema = z.object({
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue