[backend] Add environment variables to configure config file location, files directory and custom assets directory

This commit is contained in:
Laura Hausmann 2023-11-23 20:16:40 +01:00
parent bb669edb82
commit e5276e2765
No known key found for this signature in database
GPG key ID: D044E84C5BE01605
5 changed files with 25 additions and 25 deletions

View file

@ -10,6 +10,7 @@ const cssnano = require("gulp-cssnano");
const locales = require("./locales");
const meta = require("./package.json");
const customDir = process.env.ICESHRIMP_CUSTOM_DIR ?? "./custom";
gulp.task("copy:backend:views", () =>
gulp
@ -19,7 +20,7 @@ gulp.task("copy:backend:views", () =>
gulp.task("copy:backend:custom", () =>
gulp
.src("./custom/assets/**/*")
.src(`${customDir}/assets/**/*`)
.pipe(gulp.dest("./packages/backend/assets/")),
);

View file

@ -6,6 +6,7 @@ const fs = require("fs");
const yaml = require("js-yaml");
const languages = [];
const languages_custom = [];
const customDir = process.env.ICESHRIMP_CUSTOM_DIR ?? __dirname + "/../custom";
const merge = (...args) =>
args.reduce(
@ -26,7 +27,7 @@ fs.readdirSync(__dirname).forEach((file) => {
}
});
fs.readdirSync(__dirname + "/../custom/locales").forEach((file) => {
fs.readdirSync(`${customDir}/locales`).forEach((file) => {
if (file.includes(".yml")) {
file = file.slice(0, file.indexOf("."));
languages_custom.push(file);
@ -57,7 +58,7 @@ const locales_custom = languages_custom.reduce(
(a[c] =
yaml.load(
clean(
fs.readFileSync(`${__dirname}/../custom/locales/${c}.yml`, "utf-8"),
fs.readFileSync(`${customDir}/locales/${c}.yml`, "utf-8"),
),
) || {}),
a

View file

@ -7,22 +7,23 @@ import { fileURLToPath } from "node:url";
import { dirname } from "node:path";
import * as yaml from "js-yaml";
import type { Source, Mixin } from "./types.js";
import Path from "node:path";
export default function load() {
const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename);
/**
* Path of configuration directory
*/
const dir = `${_dirname}/../../../../.config`;
const dir = `${_dirname}/../../../..`;
const {
ICESHRIMP_CONFIG: configFile,
ICESHRIMP_MEDIA_DIR: mediaDir,
} = process.env;
/**
* Path of configuration file
*/
const path =
process.env.NODE_ENV === "test" ? `${dir}/test.yml` : `${dir}/default.yml`;
process.env.NODE_ENV === "test"
? `${dir}/.config/test.yml`
: configFile ?? `${dir}/.config/default.yml`;
export default function load() {
const meta = JSON.parse(
fs.readFileSync(`${_dirname}/../../../../built/meta.json`, "utf-8"),
);
@ -63,6 +64,7 @@ export default function load() {
mixin.driveUrl = `${mixin.scheme}://${mixin.host}/files`;
mixin.userAgent = `Iceshrimp/${meta.version} (${config.url})`;
mixin.clientEntry = clientManifest["src/init.ts"];
mixin.mediaDir = mediaDir ?? `${dir}/files`;
if (!config.redis.prefix) config.redis.prefix = mixin.hostname;

View file

@ -144,6 +144,7 @@ export type Mixin = {
driveUrl: string;
userAgent: string;
clientEntry: string;
mediaDir: string;
};
export type Config = Source & Mixin;

View file

@ -4,27 +4,22 @@ import { fileURLToPath } from "node:url";
import { dirname } from "node:path";
import config from "@/config/index.js";
const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename);
export class InternalStorage {
private static readonly path = Path.resolve(_dirname, "../../../../../files");
public static resolvePath = (key: string) =>
Path.resolve(InternalStorage.path, key);
Path.resolve(config.mediaDir, key);
public static read(key: string) {
return fs.createReadStream(InternalStorage.resolvePath(key));
}
public static saveFromPath(key: string, srcPath: string) {
fs.mkdirSync(InternalStorage.path, { recursive: true });
fs.mkdirSync(config.mediaDir, { recursive: true });
fs.copyFileSync(srcPath, InternalStorage.resolvePath(key));
return `${config.url}/files/${key}`;
}
public static saveFromBuffer(key: string, data: Buffer) {
fs.mkdirSync(InternalStorage.path, { recursive: true });
fs.mkdirSync(config.mediaDir, { recursive: true });
fs.writeFileSync(InternalStorage.resolvePath(key), data);
return `${config.url}/files/${key}`;
}