1
0
mirror of https://github.com/spacebarchat/server.git synced 2024-11-14 14:42:55 +01:00

🐛 fix cdn route not working without hash

This commit is contained in:
Flam3rboy 2021-10-10 14:09:18 +02:00
parent 2908544b27
commit 63da3c0da4
2 changed files with 26 additions and 3 deletions

View File

@ -58,6 +58,21 @@ router.post(
} }
); );
router.get("/:user_id", async (req: Request, res: Response) => {
var { user_id } = req.params;
user_id = user_id.split(".")[0]; // remove .file extension
const path = `avatars/${user_id}`;
const file = await storage.get(path);
if (!file) throw new HTTPError("not found", 404);
const type = await FileType.fromBuffer(file);
res.set("Content-Type", type?.mime);
res.set("Cache-Control", "public, max-age=31536000");
return res.send(file);
});
router.get("/:user_id/:hash", async (req: Request, res: Response) => { router.get("/:user_id/:hash", async (req: Request, res: Response) => {
var { user_id, hash } = req.params; var { user_id, hash } = req.params;
hash = hash.split(".")[0]; // remove .file extension hash = hash.split(".")[0]; // remove .file extension

View File

@ -13,18 +13,26 @@ function getPath(path: string) {
const root = process.env.STORAGE_LOCATION || "../"; const root = process.env.STORAGE_LOCATION || "../";
var filename = join(root, path); var filename = join(root, path);
if (path.indexOf("\0") !== -1 || !filename.startsWith(root)) throw new Error("invalid path"); if (path.indexOf("\0") !== -1 || !filename.startsWith(root))
throw new Error("invalid path");
return filename; return filename;
} }
export class FileStorage implements Storage { export class FileStorage implements Storage {
async get(path: string): Promise<Buffer | null> { async get(path: string): Promise<Buffer | null> {
path = getPath(path);
try { try {
return fs.readFileSync(getPath(path)); return fs.readFileSync(path);
} catch (error) {
try {
const files = fs.readdirSync(path);
if (!files.length) return null;
return fs.readFileSync(join(path, files[0]));
} catch (error) { } catch (error) {
return null; return null;
} }
} }
}
async set(path: string, value: any) { async set(path: string, value: any) {
path = getPath(path); path = getPath(path);