diff --git a/api-backups.go b/api-backups.go index 5010e51..672fde2 100644 --- a/api-backups.go +++ b/api-backups.go @@ -32,8 +32,8 @@ func (app *appContext) CreateBackup(gc *gin.Context) { func (app *appContext) GetBackup(gc *gin.Context) { fname := gc.Param("fname") // Hopefully this is enough to ensure the path isn't malicious. Hidden behind bearer auth anyway so shouldn't matter too much I guess. - ok := strings.HasPrefix(fname, BACKUP_PREFIX) && strings.HasSuffix(fname, BACKUP_SUFFIX) - t, err := time.Parse(BACKUP_DATEFMT, strings.TrimSuffix(strings.TrimPrefix(fname, BACKUP_PREFIX), BACKUP_SUFFIX)) + ok := (strings.HasPrefix(fname, BACKUP_PREFIX) || strings.HasPrefix(fname, BACKUP_UPLOAD_PREFIX+BACKUP_PREFIX)) && strings.HasSuffix(fname, BACKUP_SUFFIX) + t, err := time.Parse(BACKUP_DATEFMT, strings.TrimSuffix(strings.TrimPrefix(strings.TrimPrefix(fname, BACKUP_UPLOAD_PREFIX), BACKUP_PREFIX), BACKUP_SUFFIX)) if !ok || err != nil || t.IsZero() { app.debug.Printf("Ignoring backup DL request due to fname: %v\n", err) respondBool(400, false, gc) @@ -109,7 +109,7 @@ func (app *appContext) RestoreBackup(gc *gin.Context) { } app.debug.Printf("Got uploaded file \"%s\"\n", file.Filename) path := app.config.Section("backups").Key("path").String() - fullpath := filepath.Join(path, "jfa-go-upload-bak-"+time.Now().Local().Format(BACKUP_DATEFMT)+BACKUP_SUFFIX) + fullpath := filepath.Join(path, BACKUP_UPLOAD_PREFIX+BACKUP_PREFIX+time.Now().Local().Format(BACKUP_DATEFMT)+BACKUP_SUFFIX) gc.SaveUploadedFile(file, fullpath) app.debug.Printf("Saved to \"%s\"\n", fullpath) LOADBAK = fullpath diff --git a/backups.go b/backups.go index 139e311..95e2fad 100644 --- a/backups.go +++ b/backups.go @@ -9,6 +9,13 @@ import ( "time" ) +const ( + BACKUP_PREFIX = "jfa-go-db-" + BACKUP_UPLOAD_PREFIX = "upload-" + BACKUP_DATEFMT = "2006-01-02T15-04-05" + BACKUP_SUFFIX = ".bak" +) + type BackupList struct { files []os.DirEntry dates []time.Time @@ -69,7 +76,7 @@ func (app *appContext) getBackups() *BackupList { if item.IsDir() || !(strings.HasSuffix(item.Name(), BACKUP_SUFFIX)) { continue } - t, err := time.Parse(BACKUP_DATEFMT, strings.TrimSuffix(strings.TrimPrefix(item.Name(), BACKUP_PREFIX), BACKUP_SUFFIX)) + t, err := time.Parse(BACKUP_DATEFMT, strings.TrimSuffix(strings.TrimPrefix(strings.TrimPrefix(item.Name(), BACKUP_UPLOAD_PREFIX), BACKUP_PREFIX), BACKUP_SUFFIX)) if err != nil { app.debug.Printf("Failed to parse backup filename \"%s\": %v\n", item.Name(), err) continue diff --git a/config/config-base.json b/config/config-base.json index 86c3c89..5bcb500 100644 --- a/config/config-base.json +++ b/config/config-base.json @@ -1561,11 +1561,11 @@ "order": [], "meta": { "name": "Backups", - "description": "Settings for database backups." + "description": "Settings for database backups. Press the \"Backups\" button above to create, download and restore backups." }, "settings": { "enabled": { - "name": "Enabled", + "name": "Scheduled Backups", "required": false, "requires_restart": true, "type": "bool", @@ -1593,7 +1593,6 @@ "name": "Number of backups to keep", "required": false, "requires_restart": true, - "depends_true": "enabled", "type": "number", "value": 20, "description": "Number of most recent backups to keep. Once this is hit, the oldest backup will be deleted before doing a new one." diff --git a/daemon.go b/daemon.go index 9dc8c7d..245800d 100644 --- a/daemon.go +++ b/daemon.go @@ -8,12 +8,6 @@ import ( "github.com/timshannon/badgerhold/v4" ) -const ( - BACKUP_PREFIX = "jfa-go-db-" - BACKUP_DATEFMT = "2006-01-02T15-04-05" - BACKUP_SUFFIX = ".bak" -) - // clearEmails removes stored emails for users which no longer exist. // meant to be called with other such housekeeping functions, so assumes // the user cache is fresh. diff --git a/html/admin.html b/html/admin.html index 6dc6ab9..297bf77 100644 --- a/html/admin.html +++ b/html/admin.html @@ -331,14 +331,18 @@