summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Server.ts15
-rw-r--r--src/routes/attachments.ts2
-rw-r--r--src/routes/avatars.ts6
-rw-r--r--src/start.ts22
-rw-r--r--src/util/multer.ts10
5 files changed, 33 insertions, 22 deletions
diff --git a/src/Server.ts b/src/Server.ts
index 57dfa536..9996f07a 100644
--- a/src/Server.ts
+++ b/src/Server.ts
@@ -1,7 +1,7 @@
 import { Server, ServerOptions } from "lambert-server";
 import { Config, db } from "@fosscord/server-util";
 import path from "path";
-import multerConfig from "multer";
+import avatarsRoute from "./routes/avatars";
 
 export interface CDNServerOptions extends ServerOptions {}
 
@@ -20,6 +20,10 @@ export class CDNServer extends Server {
 		console.log("[Database] connected");
 
 		await this.registerRoutes(path.join(__dirname, "routes/"));
+		this.app.use("/icons/", avatarsRoute);
+		this.log("info", "[Server] Route /icons registered");
+		this.app.use("/banners/", avatarsRoute);
+		this.log("info", "[Server] Route /banners registered");
 		return super.start();
 	}
 
@@ -27,12 +31,3 @@ export class CDNServer extends Server {
 		return super.stop();
 	}
 }
-
-export const multer = multerConfig({
-	storage: multerConfig.memoryStorage(),
-	limits: {
-		fields: 10,
-		files: 10,
-		fileSize: 1024 * 1024 * 100, // 100 mb
-	},
-});
diff --git a/src/routes/attachments.ts b/src/routes/attachments.ts
index 9d43a921..9d208485 100644
--- a/src/routes/attachments.ts
+++ b/src/routes/attachments.ts
@@ -3,7 +3,7 @@ import { Config, Snowflake } from "@fosscord/server-util";
 import { storage } from "../util/Storage";
 import FileType from "file-type";
 import { HTTPError } from "lambert-server";
-import { multer } from "../Server";
+import { multer } from "../util/multer";
 import imageSize from "image-size";
 
 const router = Router();
diff --git a/src/routes/avatars.ts b/src/routes/avatars.ts
index fea7c5f4..476daacd 100644
--- a/src/routes/avatars.ts
+++ b/src/routes/avatars.ts
@@ -3,7 +3,7 @@ import { Config, Snowflake } from "@fosscord/server-util";
 import { storage } from "../util/Storage";
 import FileType from "file-type";
 import { HTTPError } from "lambert-server";
-import { multer } from "../Server";
+import { multer } from "../util/multer";
 import crypto from "crypto";
 
 // TODO: check premium and animated pfp are allowed in the config
@@ -13,7 +13,7 @@ import crypto from "crypto";
 // TODO: check request signature for modify methods
 
 const ANIMATED_MIME_TYPES = ["image/apng", "image/gif", "image/gifv"];
-const STATIC_MIME_TYPES = ["image/png", "image/jpeg", "image/webp"];
+const STATIC_MIME_TYPES = ["image/png", "image/jpeg", "image/webp", "image/svg+xml", "image/svg"];
 const ALLOWED_MIME_TYPES = [...ANIMATED_MIME_TYPES, ...STATIC_MIME_TYPES];
 
 const router = Router();
@@ -38,7 +38,7 @@ router.post("/:user_id", multer.single("file"), async (req: Request, res: Respon
 		id,
 		content_type: type.mime,
 		size,
-		url: `${endpoint}/path`,
+		url: `${endpoint}${req.baseUrl}/${user_id}/${id}`,
 	});
 });
 
diff --git a/src/start.ts b/src/start.ts
index 822a749f..57c9f704 100644
--- a/src/start.ts
+++ b/src/start.ts
@@ -1,17 +1,23 @@
+import path from "path";
 import dotenv from "dotenv";
+import fse from "fs-extra";
 dotenv.config();
 
-import { CDNServer } from "./Server";
-
-if (process.env.STORAGE_LOCATION) {
-	if (!process.env.STORAGE_LOCATION.startsWith("/")) {
-		process.env.STORAGE_LOCATION = __dirname + "/../" + process.env.STORAGE_LOCATION;
+if (!process.env.STORAGE_PROVIDER) process.env.STORAGE_PROVIDER = "file";
+// TODO:nodejs path.join trailing slash windows compatible
+if (process.env.STORAGE_PROVIDER === "file") {
+	if (process.env.STORAGE_LOCATION) {
+		if (!process.env.STORAGE_LOCATION.startsWith("/")) {
+			process.env.STORAGE_LOCATION = path.join(__dirname, "..", process.env.STORAGE_LOCATION, "/");
+		}
+	} else {
+		process.env.STORAGE_LOCATION = path.join(__dirname, "..", "files", "/");
 	}
-} else {
-	process.env.STORAGE_LOCATION = __dirname + "/../files/";
-	process.env.STORAGE_PROVIDER = "file";
+	fse.ensureDirSync(process.env.STORAGE_LOCATION);
 }
 
+import { CDNServer } from "./Server";
+
 const server = new CDNServer({ port: Number(process.env.PORT) || 3003 });
 server
 	.start()
diff --git a/src/util/multer.ts b/src/util/multer.ts
new file mode 100644
index 00000000..bfdf6aff
--- /dev/null
+++ b/src/util/multer.ts
@@ -0,0 +1,10 @@
+import multerConfig from "multer";
+
+export const multer = multerConfig({
+	storage: multerConfig.memoryStorage(),
+	limits: {
+		fields: 10,
+		files: 10,
+		fileSize: 1024 * 1024 * 100, // 100 mb
+	},
+});