2023-08-15 00:22:55 +02:00
|
|
|
const path = require("path");
|
|
|
|
const fs = require("fs");
|
|
|
|
const { getType } = require("mime");
|
|
|
|
const { v4 } = require("uuid");
|
|
|
|
const { SystemSettings } = require("../../models/systemSettings");
|
2023-10-23 22:10:34 +02:00
|
|
|
const LOGO_FILENAME = "anything-llm.png";
|
2023-08-15 00:22:55 +02:00
|
|
|
|
|
|
|
function validFilename(newFilename = "") {
|
2023-10-23 22:10:34 +02:00
|
|
|
return ![LOGO_FILENAME].includes(newFilename);
|
2023-08-15 00:22:55 +02:00
|
|
|
}
|
|
|
|
|
2023-10-23 22:10:34 +02:00
|
|
|
function getDefaultFilename() {
|
|
|
|
return LOGO_FILENAME;
|
2023-08-15 00:22:55 +02:00
|
|
|
}
|
|
|
|
|
2023-10-23 22:10:34 +02:00
|
|
|
async function determineLogoFilepath(defaultFilename = LOGO_FILENAME) {
|
2023-08-15 00:22:55 +02:00
|
|
|
const currentLogoFilename = await SystemSettings.currentLogoFilename();
|
2023-12-06 20:56:07 +01:00
|
|
|
const basePath = process.env.STORAGE_DIR
|
|
|
|
? path.join(process.env.STORAGE_DIR, "assets")
|
|
|
|
: path.join(__dirname, "../../storage/assets");
|
2023-08-15 00:22:55 +02:00
|
|
|
const defaultFilepath = path.join(basePath, defaultFilename);
|
|
|
|
|
|
|
|
if (currentLogoFilename && validFilename(currentLogoFilename)) {
|
|
|
|
customLogoPath = path.join(basePath, currentLogoFilename);
|
|
|
|
return fs.existsSync(customLogoPath) ? customLogoPath : defaultFilepath;
|
|
|
|
}
|
|
|
|
|
|
|
|
return defaultFilepath;
|
|
|
|
}
|
|
|
|
|
|
|
|
function fetchLogo(logoPath) {
|
2023-12-06 20:56:07 +01:00
|
|
|
if (!fs.existsSync(logoPath)) {
|
|
|
|
return {
|
|
|
|
found: false,
|
|
|
|
buffer: null,
|
|
|
|
size: 0,
|
|
|
|
mime: "none/none",
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2023-08-15 00:22:55 +02:00
|
|
|
const mime = getType(logoPath);
|
|
|
|
const buffer = fs.readFileSync(logoPath);
|
|
|
|
return {
|
2023-12-07 23:11:51 +01:00
|
|
|
found: true,
|
2023-08-15 00:22:55 +02:00
|
|
|
buffer,
|
|
|
|
size: buffer.length,
|
|
|
|
mime,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
async function renameLogoFile(originalFilename = null) {
|
|
|
|
const extname = path.extname(originalFilename) || ".png";
|
|
|
|
const newFilename = `${v4()}${extname}`;
|
2023-12-06 20:56:07 +01:00
|
|
|
const originalFilepath = process.env.STORAGE_DIR
|
|
|
|
? path.join(process.env.STORAGE_DIR, "assets", originalFilename)
|
|
|
|
: path.join(__dirname, `../../storage/assets/${originalFilename}`);
|
|
|
|
const outputFilepath = process.env.STORAGE_DIR
|
|
|
|
? path.join(process.env.STORAGE_DIR, "assets", newFilename)
|
|
|
|
: path.join(__dirname, `../../storage/assets/${newFilename}`);
|
2023-08-15 00:22:55 +02:00
|
|
|
|
|
|
|
fs.renameSync(originalFilepath, outputFilepath);
|
|
|
|
return newFilename;
|
|
|
|
}
|
|
|
|
|
2023-10-23 22:10:34 +02:00
|
|
|
async function removeCustomLogo(logoFilename = LOGO_FILENAME) {
|
2023-08-15 00:22:55 +02:00
|
|
|
if (!logoFilename || !validFilename(logoFilename)) return false;
|
2023-12-06 20:56:07 +01:00
|
|
|
const logoPath = process.env.STORAGE_DIR
|
|
|
|
? path.join(process.env.STORAGE_DIR, `assets/${logoFilename}`)
|
|
|
|
: path.join(__dirname, `../../storage/assets/${logoFilename}`);
|
2023-08-15 00:22:55 +02:00
|
|
|
if (fs.existsSync(logoPath)) fs.unlinkSync(logoPath);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
fetchLogo,
|
|
|
|
renameLogoFile,
|
|
|
|
removeCustomLogo,
|
|
|
|
validFilename,
|
|
|
|
getDefaultFilename,
|
|
|
|
determineLogoFilepath,
|
2023-10-23 22:10:34 +02:00
|
|
|
LOGO_FILENAME,
|
2023-08-15 00:22:55 +02:00
|
|
|
};
|