From 2237568b92a2f88ced81c4377b66dee6a0bbe65a Mon Sep 17 00:00:00 2001 From: Greyson Date: Sat, 20 Apr 2024 22:25:08 +0000 Subject: [PATCH] feature: Adds backend creation. --- routes/NextNet API/Create Backend.bru | 23 ++++++++++ src/index.ts | 12 ++++-- src/routes/ROUTE_PLAN.md | 2 +- src/routes/backends/create.ts | 61 +++++++++++++++++++++++++++ 4 files changed, 93 insertions(+), 5 deletions(-) create mode 100644 routes/NextNet API/Create Backend.bru create mode 100644 src/routes/backends/create.ts diff --git a/routes/NextNet API/Create Backend.bru b/routes/NextNet API/Create Backend.bru new file mode 100644 index 0000000..c681353 --- /dev/null +++ b/routes/NextNet API/Create Backend.bru @@ -0,0 +1,23 @@ +meta { + name: Create User + type: http + seq: 1 +} + +post { + url: http://127.0.0.1:3000/api/v1/backends/create + body: json + auth: none +} + +body:json { + { + "token": "134597ea81976ac0799824ea3f345cfd2e31b9febaeef10ba93817fa562862d69e88d8e3acd58ebdd1345a1fd11f38b7153c5d8516edce67aaebce55fc9cde", + "name": "PortCopier Route", + "description": "This is a test route for portcopier.", + "backend": "PortCopier", + "connectionDetails": { + "funny": true + } + } +} diff --git a/src/index.ts b/src/index.ts index 3603a3f..465afcf 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,8 +4,10 @@ import { PrismaClient } from '@prisma/client'; import Fastify from "fastify"; import { ServerOptions, SessionToken } from "./libs/types.js"; -import { route as create } from "./routes/user/create.js"; -import { route as login } from "./routes/user/login.js"; +import { route as backendCreate } from "./routes/backends/create.js"; + +import { route as userCreate } from "./routes/user/create.js"; +import { route as userLogin } from "./routes/user/login.js"; const prisma = new PrismaClient(); @@ -31,8 +33,10 @@ const fastify = Fastify({ logger: true }); -create(fastify, prisma, sessionTokens, serverOptions); -login(fastify, prisma, sessionTokens, serverOptions); +backendCreate(fastify, prisma, sessionTokens, serverOptions); + +userCreate(fastify, prisma, sessionTokens, serverOptions); +userLogin(fastify, prisma, sessionTokens, serverOptions); // Run the server! try { diff --git a/src/routes/ROUTE_PLAN.md b/src/routes/ROUTE_PLAN.md index a2ea92f..b0945af 100644 --- a/src/routes/ROUTE_PLAN.md +++ b/src/routes/ROUTE_PLAN.md @@ -1,6 +1,6 @@ # Route Plan - /api/v1/users/create -- /api/v1/users/disable +- /api/v1/users/login - /api/v1/users/remove - /api/v1/backends/create - /api/v1/backends/remove diff --git a/src/routes/backends/create.ts b/src/routes/backends/create.ts new file mode 100644 index 0000000..f72baf9 --- /dev/null +++ b/src/routes/backends/create.ts @@ -0,0 +1,61 @@ +import type { PrismaClient } from "@prisma/client"; +import type { FastifyInstance } from "fastify"; + +import { ServerOptions, SessionToken } from "../../libs/types.js"; +import { hasPermissionByToken } from "../../libs/permissions.js"; + +export function route(fastify: FastifyInstance, prisma: PrismaClient, tokens: Record, options: ServerOptions) { + function hasPermission(token: string, permissionList: string[]): Promise { + return hasPermissionByToken(permissionList, token, tokens, prisma); + }; + + /** + * Creates a new backend to use + */ + fastify.post("/api/v1/backends/create", { + schema: { + body: { + type: "object", + required: ["token", "name", "backend", "connectionDetails"], + + properties: { + token: { type: "string" }, + name: { type: "string" }, + description: { type: "string" }, + backend: { type: "string" } + } + } + } + }, async(req, res) => { + // @ts-ignore + const body: { + token: string, + name: string, + description?: string, + connectionDetails: any, + backend: string + } = req.body; + + if (!await hasPermission(body.token, [ + "backends.add" + ])) { + return res.status(403).send({ + error: "Unauthorized" + }); + }; + + await prisma.desinationProvider.create({ + data: { + name: body.name, + description: body.description, + + backend: body.backend, + connectionDetails: JSON.stringify(body.connectionDetails) + } + }); + + return { + success: true + }; + }); +} \ No newline at end of file