From 569016711a18394a10d8c5634730d7ca19aeabb7 Mon Sep 17 00:00:00 2001 From: Greyson Date: Thu, 25 Apr 2024 13:14:33 +0000 Subject: [PATCH] feature: Adds protocol feidld. --- .../migration.sql | 8 ++++++++ prisma/schema.prisma | 1 + routes/NextNet API/Forward/Create Forward.bru | 4 +++- routes/NextNet API/Forward/Lookup Forward.bru | 6 +++--- routes/NextNet API/Forward/Remove Forward.bru | 2 +- src/routes/forward/create.ts | 19 ++++++++++++++++--- src/routes/forward/lookup.ts | 19 ++++++++++++++----- 7 files changed, 46 insertions(+), 13 deletions(-) create mode 100644 prisma/migrations/20240425125737_fix_adds_protocol_field/migration.sql diff --git a/prisma/migrations/20240425125737_fix_adds_protocol_field/migration.sql b/prisma/migrations/20240425125737_fix_adds_protocol_field/migration.sql new file mode 100644 index 0000000..a0a108f --- /dev/null +++ b/prisma/migrations/20240425125737_fix_adds_protocol_field/migration.sql @@ -0,0 +1,8 @@ +/* + Warnings: + + - Added the required column `protocol` to the `ForwardRule` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE "ForwardRule" ADD COLUMN "protocol" TEXT NOT NULL; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index d5ce5d8..343af83 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -24,6 +24,7 @@ model ForwardRule { name String description String? + protocol String sourceIP String sourcePort Int destPort Int diff --git a/routes/NextNet API/Forward/Create Forward.bru b/routes/NextNet API/Forward/Create Forward.bru index 0786bf4..d5e1418 100644 --- a/routes/NextNet API/Forward/Create Forward.bru +++ b/routes/NextNet API/Forward/Create Forward.bru @@ -12,9 +12,11 @@ post { body:json { { - "token": "5e2cb92a338a832d385790861312eb85d69f46f82317bfa984ac5e3517368ab5a827897b0f9775a9181b02fa3b9cffed7e59e5b3111d5bdc37f729156caf5f", + "token": "535c80825631c04b9add7a8682e06799d62ba57b5089b557f5bab2183fc9926b187b3b8d96da8ef16c67ec80f2917cf81bc21337f47728534f58ac9c4ed5f3fe", "name": "Test Route", "description": "This is a test route for portcopier.", + + "protocol": "tcp", "sourceIP": "127.0.0.1", "sourcePort": "8000", diff --git a/routes/NextNet API/Forward/Lookup Forward.bru b/routes/NextNet API/Forward/Lookup Forward.bru index 31eb31c..a8d60b3 100644 --- a/routes/NextNet API/Forward/Lookup Forward.bru +++ b/routes/NextNet API/Forward/Lookup Forward.bru @@ -5,14 +5,14 @@ meta { } post { - url: http://127.0.0.1:3000/api/v1/forward/remove + url: http://127.0.0.1:3000/api/v1/forward/lookup body: json auth: none } body:json { { - "token": "f1b89cc337073476289ade17ffbe7a6419b4bd52aa7ede26114bffd76fa263b5cb1bcaf389462e1d9e7acb7f4b6a7c28152a9cc9af83e3ec862f1892b1", - "id": "2" + "token": "535c80825631c04b9add7a8682e06799d62ba57b5089b557f5bab2183fc9926b187b3b8d96da8ef16c67ec80f2917cf81bc21337f47728534f58ac9c4ed5f3fe", + "protocol": "tcp" } } diff --git a/routes/NextNet API/Forward/Remove Forward.bru b/routes/NextNet API/Forward/Remove Forward.bru index 024cf6c..4d6b8e5 100644 --- a/routes/NextNet API/Forward/Remove Forward.bru +++ b/routes/NextNet API/Forward/Remove Forward.bru @@ -5,7 +5,7 @@ meta { } post { - url: http://127.0.0.1:3000/api/v1/forward/create + url: http://127.0.0.1:3000/api/v1/forward/remove body: json auth: none } diff --git a/src/routes/forward/create.ts b/src/routes/forward/create.ts index da350db..8414f0b 100644 --- a/src/routes/forward/create.ts +++ b/src/routes/forward/create.ts @@ -19,7 +19,7 @@ export function route(routeOptions: RouteOptions) { schema: { body: { type: "object", - required: ["token", "name", "sourceIP", "sourcePort", "destinationPort", "providerID"], + required: ["token", "name", "protocol", "sourceIP", "sourcePort", "destinationPort", "providerID"], properties: { token: { type: "string" }, @@ -27,6 +27,8 @@ export function route(routeOptions: RouteOptions) { name: { type: "string" }, description: { type: "string" }, + protocol: { type: "string" }, + sourceIP: { type: "string" }, sourcePort: { type: "number" }, @@ -45,6 +47,8 @@ export function route(routeOptions: RouteOptions) { name: string, description?: string, + protocol: "tcp" | "udp", + sourceIP: string, sourcePort: number, @@ -55,6 +59,12 @@ export function route(routeOptions: RouteOptions) { autoStart?: boolean } = req.body; + if (body.protocol != "tcp" && body.protocol != "udp") { + return res.status(400).send({ + error: "Body protocol field must be either tcp or udp" + }); + }; + if (!await hasPermission(body.token, [ "routes.add" ])) { @@ -73,11 +83,13 @@ export function route(routeOptions: RouteOptions) { error: "Could not find provider" }); - await prisma.forwardRule.create({ + const forwardRule = await prisma.forwardRule.create({ data: { name: body.name, description: body.description, + protocol: body.protocol, + sourceIP: body.sourceIP, sourcePort: body.sourcePort, @@ -90,7 +102,8 @@ export function route(routeOptions: RouteOptions) { }); return { - success: true + success: true, + id: forwardRule.id } }); } \ No newline at end of file diff --git a/src/routes/forward/lookup.ts b/src/routes/forward/lookup.ts index b4dd312..f5fe701 100644 --- a/src/routes/forward/lookup.ts +++ b/src/routes/forward/lookup.ts @@ -26,14 +26,15 @@ export function route(routeOptions: RouteOptions) { id: { type: "number" }, name: { type: "string" }, + protocol: { type: "string" }, description: { type: "string" }, - sourceIP: { type: "string" }, - sourcePort: { type: "number" }, - destPort: { type: "number" }, + sourceIP: { type: "string" }, + sourcePort: { type: "number" }, + destPort: { type: "number" }, - providerID: { type: "number" }, - autoStart: { type: "boolean" } + providerID: { type: "number" }, + autoStart: { type: "boolean" } } } } @@ -46,6 +47,8 @@ export function route(routeOptions: RouteOptions) { name?: string, description?: string, + protocol?: "tcp" | "udp", + sourceIP?: string, sourcePort?: number, @@ -55,6 +58,12 @@ export function route(routeOptions: RouteOptions) { autoStart?: boolean } = req.body; + if (body.protocol && body.protocol != "tcp" && body.protocol != "udp") { + return res.status(400).send({ + error: "Protocol specified in body must be either 'tcp' or 'udp'" + }) + } + if (!await hasPermission(body.token, [ "routes.visible" // wtf? ])) {