summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/taskmanager/tasks/LighttpdHttps.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/taskmanager/tasks/LighttpdHttps.java')
-rw-r--r--src/main/java/org/openslx/taskmanager/tasks/LighttpdHttps.java105
1 files changed, 105 insertions, 0 deletions
diff --git a/src/main/java/org/openslx/taskmanager/tasks/LighttpdHttps.java b/src/main/java/org/openslx/taskmanager/tasks/LighttpdHttps.java
new file mode 100644
index 0000000..1b5e8e8
--- /dev/null
+++ b/src/main/java/org/openslx/taskmanager/tasks/LighttpdHttps.java
@@ -0,0 +1,105 @@
+package org.openslx.taskmanager.tasks;
+
+import java.io.File;
+
+import org.openslx.satserver.util.Exec;
+import org.openslx.satserver.util.Util;
+import org.openslx.taskmanager.api.AbstractTask;
+
+import com.google.gson.annotations.Expose;
+
+public class LighttpdHttps extends AbstractTask
+{
+
+ private Output status = new Output();
+
+ @Expose
+ private String importcert = null;
+ @Expose
+ private String importkey = null;
+
+ @Expose
+ private String proxyip = null;
+
+ @Override
+ protected boolean initTask()
+ {
+ this.setStatusObject( this.status );
+ return true;
+ }
+
+ @Override
+ protected boolean execute()
+ {
+ if ( this.importcert != null && this.importkey != null )
+ return createFromInput();
+ if ( this.proxyip != null )
+ return createRandom();
+ return disableHttps();
+ }
+
+ private boolean createRandom()
+ {
+ int ret = Exec.sync( "sudo", "-n", "-u", "root", "/opt/taskmanager/scripts/install-https", "--random", this.proxyip );
+ if ( ret != 0 ) {
+ status.error = "generator exited with code " + ret;
+ return false;
+ }
+ return true;
+ }
+
+ private boolean createFromInput()
+ {
+ // Import supplied certificate and key. Test if they are valid first
+ File tmpKey = null;
+ File tmpCert = null;
+ try {
+ try {
+ tmpKey = File.createTempFile( "bwlp-", ".pem" );
+ tmpCert = File.createTempFile( "bwlp-", ".pem" );
+ Util.writeStringToFile( tmpCert, this.importcert );
+ Util.writeStringToFile( tmpKey, this.importkey );
+ } catch ( Exception e ) {
+ status.error = "Could not create temporary files!";
+ return false;
+ }
+ int ret;
+ ret = Exec.sync( "/opt/taskmanager/scripts/install-https", "--test", tmpKey.getAbsolutePath(), tmpCert.getAbsolutePath() );
+ if ( ret != 0 ) {
+ status.error = "Given key and certificate do not match, or have invalid format (exit code: " + ret + ")";
+ return false;
+ }
+ ret = Exec.sync( "sudo", "-n", "-u", "root", "/opt/taskmanager/scripts/install-https", "--import", tmpKey.getAbsolutePath(), tmpCert.getAbsolutePath() );
+ if ( ret != 0 ) {
+ status.error = "import exited with code " + ret;
+ return false;
+ }
+ return true;
+ } finally {
+ if ( tmpKey != null )
+ tmpKey.delete();
+ if ( tmpCert != null )
+ tmpCert.delete();
+ }
+ }
+
+ private boolean disableHttps()
+ {
+ int ret = Exec.sync( "sudo", "-n", "-u", "root", "/opt/taskmanager/scripts/install-https", "--disable" );
+ if ( ret != 0 ) {
+ status.error = "import exited with code " + ret;
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Output - contains additional status data of this task
+ */
+ @SuppressWarnings( "unused" )
+ private static class Output
+ {
+ protected String error = null;
+ }
+
+}