From 9519f6418da8fc07ae42ef1477c604cb181e5539 Mon Sep 17 00:00:00 2001 From: mfcar Date: Tue, 19 Sep 2023 22:37:57 +0100 Subject: [PATCH 1/6] Now, whenever someone requests a backup file, it will automatically suggest a default file name for the downloaded file. --- server/controllers/BackupController.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/controllers/BackupController.js b/server/controllers/BackupController.js index f33624ac..c578c63f 100644 --- a/server/controllers/BackupController.js +++ b/server/controllers/BackupController.js @@ -42,6 +42,9 @@ class BackupController { Logger.debug(`Use X-Accel to serve static file ${encodedURI}`) return res.status(204).header({ 'X-Accel-Redirect': encodedURI }).send() } + + res.setHeader('Content-disposition', 'attachment; filename=' + req.backup.filename) + res.sendFile(req.backup.fullPath) } @@ -65,4 +68,4 @@ class BackupController { next() } } -module.exports = new BackupController() \ No newline at end of file +module.exports = new BackupController() From bfa87a2131edcde4da7a3f92a8621fd5fb190616 Mon Sep 17 00:00:00 2001 From: mfcar Date: Wed, 20 Sep 2023 22:33:58 +0100 Subject: [PATCH 2/6] Add a way to see the backup location --- client/pages/config/backups.vue | 17 +++++++++++++++++ client/strings/en-us.json | 3 ++- server/controllers/BackupController.js | 6 ++++++ server/managers/BackupManager.js | 4 ++++ server/routers/ApiRouter.js | 1 + 5 files changed, 30 insertions(+), 1 deletion(-) diff --git a/client/pages/config/backups.vue b/client/pages/config/backups.vue index ba6ff2be..e02575b0 100644 --- a/client/pages/config/backups.vue +++ b/client/pages/config/backups.vue @@ -134,6 +134,23 @@ export default { this.enableBackups = !!this.newServerSettings.backupSchedule this.maxBackupSize = this.newServerSettings.maxBackupSize || 1 this.cronExpression = this.newServerSettings.backupSchedule || '30 1 * * *' + + this.loadBackupLocation() + }, + loadBackupLocation() { + this.processing = true + this.$axios + .$get('/api/backups/location') + .then((data) => { + this.backupLocation = data.backupLocation + }) + .catch((error) => { + console.error('Failed to load backup location', error) + this.$toast.error('Failed to load backup location') + }) + .finally(() => { + this.processing = false + }) } }, mounted() { diff --git a/client/strings/en-us.json b/client/strings/en-us.json index 75606da2..1bbecb48 100644 --- a/client/strings/en-us.json +++ b/client/strings/en-us.json @@ -188,6 +188,7 @@ "LabelBackToUser": "Back to User", "LabelBackupsEnableAutomaticBackups": "Enable automatic backups", "LabelBackupsEnableAutomaticBackupsHelp": "Backups saved in /metadata/backups", + "LabelBackupLocation": "Backup Location", "LabelBackupsMaxBackupSize": "Maximum backup size (in GB)", "LabelBackupsMaxBackupSizeHelp": "As a safeguard against misconfiguration, backups will fail if they exceed the configured size.", "LabelBackupsNumberToKeep": "Number of backups to keep", @@ -711,4 +712,4 @@ "ToastSocketFailedToConnect": "Socket failed to connect", "ToastUserDeleteFailed": "Failed to delete user", "ToastUserDeleteSuccess": "User deleted" -} \ No newline at end of file +} diff --git a/server/controllers/BackupController.js b/server/controllers/BackupController.js index c578c63f..d4e818b6 100644 --- a/server/controllers/BackupController.js +++ b/server/controllers/BackupController.js @@ -10,6 +10,12 @@ class BackupController { }) } + getBackupLocation(req, res) { + res.json({ + backupLocation: this.backupManager.backupLocation + }) + } + create(req, res) { this.backupManager.requestCreateBackup(res) } diff --git a/server/managers/BackupManager.js b/server/managers/BackupManager.js index e19b1db6..50d6d19c 100644 --- a/server/managers/BackupManager.js +++ b/server/managers/BackupManager.js @@ -26,6 +26,10 @@ class BackupManager { this.backups = [] } + get backupLocation() { + return this.BackupPath + } + get backupSchedule() { return global.ServerSettings.backupSchedule } diff --git a/server/routers/ApiRouter.js b/server/routers/ApiRouter.js index 71d9429e..2346f114 100644 --- a/server/routers/ApiRouter.js +++ b/server/routers/ApiRouter.js @@ -187,6 +187,7 @@ class ApiRouter { this.router.get('/backups/:id/download', BackupController.middleware.bind(this), BackupController.download.bind(this)) this.router.get('/backups/:id/apply', BackupController.middleware.bind(this), BackupController.apply.bind(this)) this.router.post('/backups/upload', BackupController.middleware.bind(this), BackupController.upload.bind(this)) + this.router.get('/backups/location', BackupController.middleware.bind(this), BackupController.getBackupLocation.bind(this)) // // File System Routes From 944f5950caac93743444460810e3ff177c7ee622 Mon Sep 17 00:00:00 2001 From: mfcar Date: Wed, 20 Sep 2023 22:36:30 +0100 Subject: [PATCH 3/6] File missing --- client/pages/config/backups.vue | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/client/pages/config/backups.vue b/client/pages/config/backups.vue index e02575b0..50114d34 100644 --- a/client/pages/config/backups.vue +++ b/client/pages/config/backups.vue @@ -18,13 +18,21 @@ edit -
+
event
{{ $strings.LabelNextBackupDate }}:
{{ nextBackupDate }}
+ +
+ folder +
+ {{ $strings.LabelBackupLocation }}: +
+
{{ backupLocation }}
+
@@ -65,7 +73,8 @@ export default { maxBackupSize: 1, cronExpression: '', newServerSettings: {}, - showCronBuilder: false + showCronBuilder: false, + backupLocation: '' } }, watch: { From f37ab53effc759e9435efaa90169460da54cc955 Mon Sep 17 00:00:00 2001 From: advplyr Date: Fri, 22 Sep 2023 16:49:01 -0500 Subject: [PATCH 4/6] Update get all backups api endpoint to return backupLocation, display location above backup settings --- client/components/tables/BackupsTable.vue | 1 + client/pages/config/backups.vue | 36 +++++++++-------------- server/controllers/BackupController.js | 7 +---- server/routers/ApiRouter.js | 1 - 4 files changed, 16 insertions(+), 29 deletions(-) diff --git a/client/components/tables/BackupsTable.vue b/client/components/tables/BackupsTable.vue index a216f463..08692a4d 100644 --- a/client/components/tables/BackupsTable.vue +++ b/client/components/tables/BackupsTable.vue @@ -164,6 +164,7 @@ export default { this.$axios .$get('/api/backups') .then((data) => { + this.$emit('loaded', data.backupLocation) this.setBackups(data.backups || []) }) .catch((error) => { diff --git a/client/pages/config/backups.vue b/client/pages/config/backups.vue index 50114d34..61543e65 100644 --- a/client/pages/config/backups.vue +++ b/client/pages/config/backups.vue @@ -1,6 +1,12 @@