backup serving, storing and restoring

This commit is contained in:
Julian Krauser 2025-02-02 16:23:44 +01:00
parent fc01263c4e
commit 6330ebd01d
8 changed files with 261 additions and 3 deletions

View file

@ -1,5 +1,6 @@
import express from "express";
import PermissionHelper from "../../helpers/permissionHelper";
import preventWebapiAccess from "../../middleware/preventWebApiAccess";
import award from "./settings/award";
import communicationType from "./settings/communicationType";
@ -23,7 +24,7 @@ import role from "./user/role";
import user from "./user/user";
import invite from "./user/invite";
import api from "./user/webapi";
import preventWebapiAccess from "../../middleware/preventWebApiAccess";
import backup from "./user/backup";
var router = express.Router({ mergeParams: true });
@ -143,5 +144,6 @@ router.use(
);
router.use("/invite", PermissionHelper.passCheckMiddleware("read", "user", "user"), invite);
router.use("/webapi", preventWebapiAccess, PermissionHelper.passCheckMiddleware("read", "user", "webapi"), api);
router.use("/backup", preventWebapiAccess, PermissionHelper.passCheckMiddleware("read", "user", "backup"), backup);
export default router;

View file

@ -0,0 +1,67 @@
import express, { Request, Response } from "express";
import PermissionHelper from "../../../helpers/permissionHelper";
import multer from "multer";
import {
createManualBackup,
downloadBackupFile,
getGeneratedBackups,
restoreBackupByLocalFile,
uploadBackupFile,
} from "../../../controller/admin/club/backupController";
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, "files/backup/");
},
filename: (req, file, cb) => {
cb(null, `${new Date().toISOString().split("T")[0]}-uploaded-${file.originalname}`);
},
});
const upload = multer({
storage,
fileFilter: (req: Request, file, cb) => {
if (file.mimetype === "application/json") {
cb(null, true);
} else {
cb(new Error("Only JSON files are allowed!"));
}
},
});
var router = express.Router({ mergeParams: true });
router.get("/", async (req: Request, res: Response) => {
await getGeneratedBackups(req, res);
});
router.get("/:filename", async (req: Request, res: Response) => {
await downloadBackupFile(req, res);
});
router.post(
"/",
PermissionHelper.passCheckMiddleware("create", "user", "backup"),
async (req: Request, res: Response) => {
await createManualBackup(req, res);
}
);
router.post(
"/restore",
PermissionHelper.passCheckMiddleware("admin", "user", "backup"),
async (req: Request, res: Response) => {
await restoreBackupByLocalFile(req, res);
}
);
router.post(
"/upload",
PermissionHelper.passCheckMiddleware("create", "user", "backup"),
upload.single("file"),
async (req: Request, res: Response) => {
await uploadBackupFile(req, res);
}
);
export default router;