summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java')
-rw-r--r--src/main/java/org/openslx/taskmanager/tasks/SyncdaemonLauncher.java120
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;
+ }
+ }
+
+}