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;
}
}