diff options
Diffstat (limited to 'src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java')
-rw-r--r-- | src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java b/src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java new file mode 100644 index 0000000..f04b2dc --- /dev/null +++ b/src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java @@ -0,0 +1,120 @@ +package org.openslx.taskmanager.tasks; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.openslx.taskmanager.api.SystemCommandTask; + +import com.google.gson.annotations.Expose; + +public class SyncdaemonLauncher extends SystemCommandTask +{ + /** + * What to do: start, stop, checkconfig, import, ... + */ + @Expose + private String operation; + /** + * When importing, these are the fields for our identity + */ + @Expose + private String importModulus, importPrivateExponent, importPublicExponent, importOrganization; + /** + * (IP) Address of this satellite server, used when calling submitkey or updateaddress + */ + @Expose + private String address; + + private StatusObject status = null; + + @Override + protected String[] initCommandLine() + { + List<String> params = new ArrayList<>(); + params.addAll( + Arrays.asList( + "/usr/bin/sudo", + "-n", + "-u", "syncdaemon", + "/opt/syncdaemon/control.sh" ) ); + switch ( operation ) { + case "start": + case "stop": + case "checkconfig": + params.add( operation ); + break; + case "genid": + if ( errorIfNull( importOrganization, "genid: no organization given" ) ) + return null; + params.add( operation ); + params.add( importOrganization ); + break; + case "updateaddress": + case "submitkey": + if ( errorIfNull( address, "updateaddress/submitkey: no address given" ) ) + return null; + params.add( operation ); + params.add( address ); + break; + case "import": + if ( errorIfNull( importOrganization, "import: no organization given" ) + || errorIfNull( importModulus, "import: no modulus given" ) + || errorIfNull( importPrivateExponent, "import: no private exponent given" ) + || errorIfNull( importPublicExponent, "import: no public exponent given" ) ) + return null; + params.add( operation ); + params.add( importOrganization ); + params.add( importModulus ); + params.add( importPrivateExponent ); + params.add( importPublicExponent ); + break; + default: + status.addMsg( "Unknown operation: " + operation ); + return null; + } + return params.toArray( new String[ 0 ] ); + } + + private boolean errorIfNull( String check, String message ) + { + if ( check == null ) + status.addMsg( message ); + return check == null; + } + + @Override + protected boolean processEnded( int exitCode ) + { + return exitCode == 0; + } + + @Override + protected void processStdOut( String line ) + { + status.addMsg( line ); + } + + @Override + protected void processStdErr( String line ) + { + status.addMsg( line ); + } + + @Override + protected boolean initTask() + { + return !errorIfNull( operation, "No operation given" ); + } + + class StatusObject + { + private String messages = ""; + + public void addMsg( String str ) + { + messages = messages + "\n" + str; + } + } + +} |