diff --git a/fosscord-server.code-workspace b/fosscord-server.code-workspace index a9b15856..8b7268a5 100644 --- a/fosscord-server.code-workspace +++ b/fosscord-server.code-workspace @@ -30,7 +30,7 @@ "type": "node-terminal" }, { - "command": "kitty npm run start:bundle:vscode-dbg", + "command": "[ \"$(basename $PWD)\" != \"fosscord-server\" ] && cd ..; node scripts/build_new.js && kitty node --enable-source-maps --inspect dist/start.js", "name": "Run Fosscord with debugger (kitty)", "request": "launch", "type": "node-terminal" diff --git a/package.json b/package.json index 014e8fcd..a5de4ef1 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "ajv": "^8.11.0", "ajv-formats": "^2.1.1", "amqplib": "^0.10.1", + "bcrypt": "^5.0.1", "bcryptjs": "^2.4.3", "body-parser": "^1.19.0", "cheerio": "^1.0.0-rc.10", diff --git a/scripts/build.js b/scripts/build.js index 6cf4e818..c76f49b6 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -30,10 +30,10 @@ if (silent) console.error = console.log = function () {}; if (argv.includes("clean")) { console.log(`[${++i}/${steps}] Cleaning...`); let d = "../" + "/dist"; - if (fs.existsSync(d)) { - fs.rmSync(d, { recursive: true }); - if (verbose) console.log(`Deleted ${d}!`); - } + if (fs.existsSync(d)) { + fs.rmSync(d, { recursive: true }); + if (verbose) console.log(`Deleted ${d}!`); + } } console.log(`[${++i}/${steps}] Compiling src files ...`); @@ -110,7 +110,7 @@ if (!argv.includes("copyonly")) { } console.log(`[${++i}/${steps}] Copying plugin data...`); -let pluginFiles = walk(pluginDir).filter(x=>!x.endsWith('.ts')); -pluginFiles.forEach(x=>{ - fs.copyFileSync(x, x.replace('src','dist')) -}) \ No newline at end of file +let pluginFiles = walk(pluginDir).filter((x) => !x.endsWith(".ts")); +pluginFiles.forEach((x) => { + fs.copyFileSync(x, x.replace("src", "dist")); +}); diff --git a/src/api/Server.ts b/src/api/Server.ts index 03c68af1..007c8163 100644 --- a/src/api/Server.ts +++ b/src/api/Server.ts @@ -1,5 +1,6 @@ import { Config, getOrInitialiseDatabase, initEvent, registerRoutes } from "@fosscord/util"; import { NextFunction, Request, Response, Router } from "express"; +import fs from "fs"; import { Server, ServerOptions } from "lambert-server"; import morgan from "morgan"; import path from "path"; @@ -12,8 +13,6 @@ import { initRateLimits } from "./middlewares/RateLimit"; import TestClient from "./middlewares/TestClient"; import { initTranslation } from "./middlewares/Translation"; import { initInstance } from "./util/handlers/Instance"; -import fs from "fs"; -import { PluginConfig } from "util/plugin/PluginConfig"; export interface FosscordServerOptions extends ServerOptions {} diff --git a/src/util/plugin/PluginConfig.ts b/src/util/plugin/PluginConfig.ts index b9c8aef0..17ec172c 100644 --- a/src/util/plugin/PluginConfig.ts +++ b/src/util/plugin/PluginConfig.ts @@ -57,12 +57,14 @@ function applyConfig(val: any) { if (!pair) pair = new PluginConfigEntity(); pair.key = key; - pair.value = obj; - if (!pair.key || pair.key == null) { - console.log(`[PluginConfig] WARN: Empty key`); - console.log(pair); - if (Environment.isDebug) debugger; - } else return pair.save(); + if (pair.value != obj) { + pair.value = obj; + if (!pair.key || pair.key == null) { + console.log(`[PluginConfig] WARN: Empty key`); + console.log(pair); + if (Environment.isDebug) debugger; + } else return pair.save(); + } } if (process.env.PLUGIN_CONFIG_PATH) { if (Environment.isDebug) console.log(`Writing config: ${process.env.PLUGIN_CONFIG_PATH}`); diff --git a/src/util/util/Config.ts b/src/util/util/Config.ts index 2879b955..567cf129 100644 --- a/src/util/util/Config.ts +++ b/src/util/util/Config.ts @@ -5,7 +5,6 @@ import { ConfigValue } from "../config"; import { ConfigEntity } from "../entities/Config"; const overridePath = process.env.CONFIG_PATH ?? ""; -const initialPath = path.join(process.cwd(), "initial.json"); let config: ConfigValue; let pairs: ConfigEntity[]; @@ -18,25 +17,21 @@ export const Config = { if (config) return config; console.log("[Config] Loading configuration..."); pairs = await ConfigEntity.find(); + console.log(`[Config] Loaded ${pairs.length} configuration pairs`); config = pairsToConfig(pairs); + console.log("[Config] Configuration loaded"); //config = (config || {}).merge(new ConfigValue()); config = OrmUtils.mergeDeep(new ConfigValue(), config); + console.log("[Config] Configuration merged"); if (process.env.CONFIG_PATH) try { const overrideConfig = JSON.parse(fs.readFileSync(overridePath, { encoding: "utf8" })); config = OrmUtils.mergeDeep(config, overrideConfig); + console.log("[Config] Override configuration loaded"); } catch (error) { fs.writeFileSync(overridePath, JSON.stringify(config, null, 4)); } - if (fs.existsSync(initialPath)) { - console.log("[Config] Importing initial configuration..."); - try { - const overrideConfig = JSON.parse(fs.readFileSync(initialPath, { encoding: "utf8" })); - config = overrideConfig.merge(config); - fs.rmSync(initialPath); - } catch (error) {} - } if (fs.existsSync(path.join(process.cwd(), "initial.json"))) try { @@ -77,8 +72,10 @@ function applyConfig(val: ConfigValue) { if (!pair) pair = new ConfigEntity(); pair.key = key; - pair.value = obj; - return pair.save(); + if (pair.value != obj) { + pair.value = obj; + return pair.save(); + } } if (process.env.CONFIG_PATH) { if (/--debug|--inspect/.test(process.execArgv.join(" "))) console.log(`Writing config: ${process.env.CONFIG_PATH}`);