From 99eafcb3527b45d7b30df475fd3513556ad5d84f Mon Sep 17 00:00:00 2001 From: Julian Krauser Date: Fri, 25 Apr 2025 12:21:25 +0200 Subject: [PATCH] add settings to backup --- src/helpers/backupHelper.ts | 18 +++++++++++++++++- src/index.ts | 2 +- src/routes/setup.ts | 16 +++++++--------- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/helpers/backupHelper.ts b/src/helpers/backupHelper.ts index 159df26..4534a30 100644 --- a/src/helpers/backupHelper.ts +++ b/src/helpers/backupHelper.ts @@ -18,7 +18,8 @@ export type BackupSection = | "query" | "template" | "user" - | "webapi"; + | "webapi" + | "settings"; export type BackupSectionRefered = { [key in BackupSection]?: Array; @@ -42,6 +43,7 @@ export default abstract class BackupHelper { { type: "template", orderOnInsert: 2, orderOnClear: 1 }, // INSERT depends on member com { type: "user", orderOnInsert: 1, orderOnClear: 1 }, { type: "webapi", orderOnInsert: 1, orderOnClear: 1 }, + { type: "settings", orderOnInsert: 1, orderOnClear: 1 }, ]; private static readonly backupSectionRefered: BackupSectionRefered = { @@ -76,6 +78,7 @@ export default abstract class BackupHelper { template: ["template", "template_usage"], user: ["user", "user_permission", "role", "role_permission", "invite"], webapi: ["webapi", "webapi_permission"], + settings: ["setting"], }; private static transactionManager: EntityManager; @@ -220,6 +223,8 @@ export default abstract class BackupHelper { return await this.getUser(collectIds); case "webapi": return await this.getWebapi(); + case "settings": + return await this.getSettings(); default: return []; } @@ -460,6 +465,13 @@ export default abstract class BackupHelper { .addSelect(["permissions.permission"]) .getMany(); } + private static async getSettings(): Promise> { + return await dataSource + .getRepository("setting") + .createQueryBuilder("setting") + .select(["setting.topic", "setting.key", "setting.value"]) + .getMany(); + } private static async setSectionData( section: BackupSection, @@ -476,6 +488,7 @@ export default abstract class BackupHelper { if (section == "template" && !Array.isArray(data)) await this.setTemplate(data); if (section == "user" && !Array.isArray(data)) await this.setUser(data); if (section == "webapi" && Array.isArray(data)) await this.setWebapi(data); + if (section == "settings" && Array.isArray(data)) await this.setSettings(data); } private static async setMemberData(data: Array): Promise { @@ -810,4 +823,7 @@ export default abstract class BackupHelper { private static async setWebapi(data: Array): Promise { await this.transactionManager.getRepository("webapi").save(data); } + private static async setSettings(data: Array): Promise { + await this.transactionManager.getRepository("setting").save(data); + } } diff --git a/src/index.ts b/src/index.ts index 2e248f0..13de2ee 100644 --- a/src/index.ts +++ b/src/index.ts @@ -23,7 +23,7 @@ import { dataSource } from "./data-source"; import BackupHelper from "./helpers/backupHelper"; import SettingHelper from "./helpers/settingsHelper"; dataSource.initialize().then(async () => { - if (false && (await dataSource.createQueryRunner().hasTable("user"))) { + if (await dataSource.createQueryRunner().hasTable("user")) { await BackupHelper.autoRestoreBackup().catch((err) => { console.log(`${new Date().toISOString()}: failed auto-restoring database`, err); }); diff --git a/src/routes/setup.ts b/src/routes/setup.ts index 2d69e07..4830d4a 100644 --- a/src/routes/setup.ts +++ b/src/routes/setup.ts @@ -28,9 +28,13 @@ router.post("/app", async (req, res) => { await setAppIdentity(req, res); }); -router.post("/mail", async (req, res) => { - await setMailConfig(req, res); -}); +router.post( + "/mail", + ParamaterPassCheckHelper.requiredIncludedMiddleware(["mail", "username", "password", "host", "port", "secure"]), + async (req, res) => { + await setMailConfig(req, res); + } +); router.post("/verify", ParamaterPassCheckHelper.requiredIncludedMiddleware(["mail", "token"]), async (req, res) => { await verifyInvite(req, res); @@ -52,10 +56,4 @@ router.post( } ); -/** - * TODO: - * set basic settings like clubname ... - * enable upload of images and icons: transform pwa-> 512x512 png / 48x48 ico - */ - export default router;