You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
const path = require("path");const fs = require("fs");const { getType } = require("mime");const { User } = require("../../models/user");const { normalizePath, isWithin } = require(".");const { Workspace } = require("../../models/workspace");
function fetchPfp(pfpPath) { if (!fs.existsSync(pfpPath)) { return { found: false, buffer: null, size: 0, mime: "none/none", }; }
const mime = getType(pfpPath); const buffer = fs.readFileSync(pfpPath); return { found: true, buffer, size: buffer.length, mime, };}
async function determinePfpFilepath(id) { const numberId = Number(id); const user = await User.get({ id: numberId }); const pfpFilename = user?.pfpFilename || null; if (!pfpFilename) return null;
const basePath = process.env.STORAGE_DIR ? path.join(process.env.STORAGE_DIR, "assets/pfp") : path.join(__dirname, "../../storage/assets/pfp"); const pfpFilepath = path.join(basePath, normalizePath(pfpFilename));
if (!isWithin(path.resolve(basePath), path.resolve(pfpFilepath))) return null; if (!fs.existsSync(pfpFilepath)) return null; return pfpFilepath;}
async function determineWorkspacePfpFilepath(slug) { const workspace = await Workspace.get({ slug }); const pfpFilename = workspace?.pfpFilename || null; if (!pfpFilename) return null;
const basePath = process.env.STORAGE_DIR ? path.join(process.env.STORAGE_DIR, "assets/pfp") : path.join(__dirname, "../../storage/assets/pfp"); const pfpFilepath = path.join(basePath, normalizePath(pfpFilename));
if (!isWithin(path.resolve(basePath), path.resolve(pfpFilepath))) return null; if (!fs.existsSync(pfpFilepath)) return null; return pfpFilepath;}
module.exports = { fetchPfp, determinePfpFilepath, determineWorkspacePfpFilepath,};
|