From 2717ebe0f00f2deccc9a3b2184cbae21239c3e1b Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 2 Mar 2023 16:08:01 +0100 Subject: [BackupRestore] Add support for archive testing and encryption --- .../openslx/taskmanager/tasks/BackupRestore.java | 58 +++++++++++++++++++--- 1 file changed, 52 insertions(+), 6 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/openslx/taskmanager/tasks/BackupRestore.java b/src/main/java/org/openslx/taskmanager/tasks/BackupRestore.java index 32a5beb..7c05b91 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/BackupRestore.java +++ b/src/main/java/org/openslx/taskmanager/tasks/BackupRestore.java @@ -1,7 +1,9 @@ package org.openslx.taskmanager.tasks; +import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import org.openslx.satserver.util.Constants; @@ -19,6 +21,10 @@ public class BackupRestore extends SystemCommandTask private boolean restoreOpenslx; @Expose private boolean restoreDozmod; + @Expose + private String password; + @Expose + private String destination; private Output status = new Output(); @@ -29,15 +35,15 @@ public class BackupRestore extends SystemCommandTask { this.setStatusObject( this.status ); if ( mode == null ) { - status.addMessage( "Mode given." ); + status.addMessage( "No mode given." ); return false; } - if ( !mode.equals( "backup" ) && !mode.equals( "restore" ) ) { + if ( !mode.equals( "backup" ) && !mode.equals( "restore" ) && !mode.equals( "test" ) ) { status.addMessage( "Invalid mode: " + mode ); return false; } - if ( mode.equals( "restore" ) && backupFile == null ) { - status.addMessage( "No backup file given to restore!" ); + if ( backupFile == null && ( mode.equals( "restore" ) || mode.equals( "test" ) ) ) { + status.addMessage( "No backup file given to restore/test!" ); return false; } this.timeoutSeconds = 180; @@ -56,8 +62,9 @@ public class BackupRestore extends SystemCommandTask args.add( "-n" ); args.add( "-u" ); args.add( "root" ); - args.add( Constants.BASEDIR + "/scripts/system-" + mode ); if ( mode.equals( "restore" ) ) { + // Restore + args.add( Constants.BASEDIR + "/scripts/system-restore" ); if ( backupFile != null ) { args.add( backupFile ); } @@ -67,15 +74,54 @@ public class BackupRestore extends SystemCommandTask if ( restoreOpenslx ) { args.add( "openslx" ); } + args.add( "--restore" ); + if ( password != null ) { + args.add( "--decrypt" ); + args.add( "TM_PW_ENV_VAR" ); + } + } else if ( mode.equals( "test" ) ) { + // Test archive encryption / archive format + args.add( Constants.BASEDIR + "/scripts/system-restore" ); + args.add( backupFile ); + args.add( "--test" ); + if ( password != null ) { + args.add( "--decrypt" ); + args.add( "TM_PW_ENV_VAR" ); + } + } else { + // Backup + args.add( Constants.BASEDIR + "/scripts/system-backup" ); + if ( password != null ) { + args.add( "--encrypt" ); + args.add( "TM_PW_ENV_VAR" ); + } + if ( destination != null ) { + args.add( "--destination" ); + args.add( destination ); + } } return args.toArray( new String[ args.size() ] ); } + @Override + protected void initEnvironment( Map environment ) + { + if ( password != null ) { + environment.put( "TM_PW_ENV_VAR", password ); + } + } + @Override protected boolean processEnded( int exitCode ) { + if ( backupFile != null ) { + try { + new File( backupFile ).delete(); + } catch ( Exception e ) { + } + } isRunning.set( false ); - return exitCode == 0 && ( mode.equals( "restore" ) || status.backupFile != null ); + return exitCode == 0 && ( mode.equals( "test" ) || mode.equals( "restore" ) || status.backupFile != null ); } @Override -- cgit v1.2.3-55-g7522