UNPKG

@paroicms/server

Version:
45 lines 2.19 kB
import { checkBackupFileName } from "../../connector/site-backup/backup.helper.js"; import { deleteBackupFile, listBackups } from "../../connector/site-backup/backup.js"; import { siteReadyGuard } from "../../graphql/graphql.types.js"; import { permissionGuard } from "../auth/authorization.helper.js"; import { createPresignedLink } from "./backup.helper.js"; import { executeHardenedBackup } from "./hardened-backup.service.js"; export const backupResolvers = { Query: { backups: async (_parent, { offset, limit }, { siteContext, httpContext }) => { siteReadyGuard(siteContext); await permissionGuard(siteContext, httpContext, "site.backup"); return listBackups(siteContext, { offset: offset ?? 0, limit: limit ?? 10 }); }, }, Mutation: { initializeBackup: async (_parent, _values, { siteContext, httpContext }) => { siteReadyGuard(siteContext); await permissionGuard(siteContext, httpContext, "site.backup"); const { zipFileWeight, zipFileName } = await executeHardenedBackup(siteContext); return { fileName: zipFileName, fileWeight: zipFileWeight, }; }, generateBackupDownloadLink: async (_parent, { fileName }, { siteContext, httpContext }) => { siteReadyGuard(siteContext); await permissionGuard(siteContext, httpContext, "site.backup"); if (!checkBackupFileName({ fqdn: siteContext.fqdn }, fileName)) { throw new Error("Invalid backup filename"); } const accessToken = createPresignedLink({ backupFile: fileName, contentType: "application/zip", }); return `/adm/backend/backup/${fileName}/?t=${accessToken}`; }, deleteBackup: async (_parent, { fileName }, { siteContext, httpContext }) => { siteReadyGuard(siteContext); await permissionGuard(siteContext, httpContext, "site.backup"); await deleteBackupFile(siteContext, fileName); return true; }, }, }; //# sourceMappingURL=backup.resolver.js.map