From 35655773d7ea9b3c0319e0376c5e6c2b481732e5 Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Mon, 4 Jan 2021 16:10:12 +0100 Subject: [PATCH] :sparkles: update to use new Lambert-server --- package-lock.json | Bin 59731 -> 118860 bytes package.json | 1 + src/Server.ts | 85 ++++++++------------------------------ src/routes/attachments.ts | 6 +-- src/routes/external.ts | 4 +- 5 files changed, 23 insertions(+), 73 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9b5a53109bd9137b7bc58ccdb5c55e70f9f32443..c9c7a98d0b6f7c1f670d3baa9cf19d5b6295bc0b 100644 GIT binary patch literal 118860 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 XuTfv4qD!a~eCtgJ;ujeD|NQz7Ls1qd literal 59731 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�lso&`^$KxK! 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%0Dl#VAfYnU0=>G&qzA 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 diff --git a/package.json b/package.json index 03662356..d1f88c56 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "express": "^4.17.1", "express-async-errors": "^3.1.1", "lambert-db": "^1.0.5", + "lambert-server": "^1.0.3", "missing-native-js-functions": "^1.0.8", "multer": "^1.4.2", "node-fetch": "^2.6.1", diff --git a/src/Server.ts b/src/Server.ts index 7d93c444..5e96c602 100644 --- a/src/Server.ts +++ b/src/Server.ts @@ -1,93 +1,42 @@ -import express, { Application, Router, Request, Response, NextFunction } from "express"; import { MongoDatabase, Database } from "lambert-db"; -import { Server as HTTPServer } from "http"; -import { traverseDirectory } from "./Util"; -import bodyParser from "body-parser"; -import "express-async-errors"; +import { Server, ServerOptions } from "lambert-server"; const log = console.log; console.log = (content) => { log(`[${new Date().toTimeString().split(" ")[0]}]`, content); }; -export type ServerOptions = { - db: string; - port: number; - host: string; -}; - declare global { namespace Express { interface Request { - server: Server; + cdn: CDNServer; } } } -export class Server { - app: Application; - http: HTTPServer; +export interface CDNServerOptions extends ServerOptions { + db: string; +} + +export class CDNServer extends Server { db: Database; - routes: Router[]; - options: ServerOptions; + public options: CDNServerOptions; + + constructor(options: CDNServerOptions) { + super(options); - constructor(options: Partial = { port: 3000, host: "0.0.0.0" }) { - this.app = express(); this.db = new MongoDatabase(options?.db); - this.options = options as ServerOptions; } - async init() { + async start() { + console.log("[Database] connecting ..."); await this.db.init(); - - console.log("[Database] connected..."); - await new Promise((res, rej) => { - this.http = this.app.listen(this.options.port, this.options.host, () => res(null)); - }); - this.routes = await this.registerRoutes(__dirname + "/routes/"); + console.log("[Database] connected"); + return super.start(); } - async registerRoutes(root: string) { - this.app.use((req, res, next) => { - req.server = this; - next(); - }); - const routes = await traverseDirectory({ dirname: root, recursive: true }, this.registerRoute.bind(this, root)); - this.app.use((err: string | Error, req: Request, res: Response, next: NextFunction) => { - res.status(400).send(err); - next(err); - }); - return routes; - } - - registerRoute(root: string, file: string): any { - if (root.endsWith("/") || root.endsWith("\\")) root = root.slice(0, -1); // removes slash at the end of the root dir - let path = file.replace(root, ""); // remove root from path and - path = path.split(".").slice(0, -1).join("."); // trancate .js/.ts file extension of path - if (path.endsWith("/index")) path = path.slice(0, -6); // delete index from path - - try { - var router = require(file); - if (router.router) router = router.router; - if (router.default) router = router.default; - if (!router || router?.prototype?.constructor?.name !== "router") - throw `File doesn't export any default router`; - this.app.use(path, router); - console.log(`[Routes] ${path} registerd`); - - return router; - } catch (error) { - console.error(new Error(`[Server] ¯\\_(ツ)_/¯ Failed to register route ${path}: ${error}`)); - } - } - - async destroy() { + async stop() { await this.db.destroy(); - await new Promise((res, rej) => { - this.http.close((err) => { - if (err) return rej(err); - return res(""); - }); - }); + return super.stop(); } } diff --git a/src/routes/attachments.ts b/src/routes/attachments.ts index 7d09e402..9f016174 100644 --- a/src/routes/attachments.ts +++ b/src/routes/attachments.ts @@ -15,7 +15,7 @@ type Attachment = { router.post("/:filename", multer_.single("attachment"), async (req, res) => { const { buffer, mimetype } = req.file; const { filename } = req.params; - const { db } = req.server; + const { db } = req.cdn; const File: Attachment = { filename, @@ -30,7 +30,7 @@ router.post("/:filename", multer_.single("attachment"), async (req, res) => { }); router.get("/:hash/:filename", async (req, res) => { - const { db } = req.server; + const { db } = req.cdn; const { hash, filename } = req.params; const File: Attachment = await db.data.attachments({ id: hash, filename: filename }).get(); @@ -41,7 +41,7 @@ router.get("/:hash/:filename", async (req, res) => { router.delete("/:hash/:filename", async (req, res) => { const { hash, filename } = req.params; - const { db } = req.server; + const { db } = req.cdn; await db.data.attachments({ id: hash, filename: filename }).delete(); return res.send({ success: true, message: "attachment deleted" }); diff --git a/src/routes/external.ts b/src/routes/external.ts index be680003..f75f6a66 100644 --- a/src/routes/external.ts +++ b/src/routes/external.ts @@ -30,7 +30,7 @@ const DEFAULT_FETCH_OPTIONS: any = { router.post("/", bodyParser.json(), async (req, res) => { if (!req.body) throw new Error("Invalid Body (url missing) \nExample: url:https://discord.com"); - const { db } = req.server; + const { db } = req.cdn; const { url } = req.body; const ID = btoa(url); @@ -72,7 +72,7 @@ router.post("/", bodyParser.json(), async (req, res) => { }); router.get("/:id/:filename", async (req, res) => { - const { db } = req.server; + const { db } = req.cdn; const { id, filename } = req.params; const { image, type } = await db.data.externals({ id: id }).get(); const imageBuffer = Buffer.from(image, "base64");