Added Apache config classes

This commit is contained in:
Ziver Koc 2016-07-28 18:05:20 +02:00
parent 2d9aefd079
commit ba3c548232
5 changed files with 168 additions and 75 deletions

View file

@ -57,6 +57,7 @@ public abstract class ConfigPage extends WAPage {
}
@Override
public Templator htmlResponse(WAContext context,
HttpHeader client_info,
@ -81,13 +82,13 @@ public abstract class ConfigPage extends WAPage {
new Configurator<WAConfiguration>(target)
.setValues(request).applyConfiguration();
target.saveConfiguration();
target.save(db);
saveConfig(target);
}
break;
case "delete":
if (target != null) {
target.deleteConfiguration();
target.delete(db);
deleteConfig(id);
}
break;
}
@ -114,4 +115,10 @@ public abstract class ConfigPage extends WAPage {
private List<WAConfiguration> getAllConfigs(){
return null;
}
private WAConfiguration saveConfig(WAConfiguration target){
return null;
}
private WAConfiguration deleteConfig(int id){
return null;
}
}

View file

@ -5,7 +5,13 @@ import zutil.db.bean.DBBean;
/**
* Created by Ziver on 2016-07-27.
*/
public abstract class WAConfiguration extends DBBean {
public abstract class WAConfiguration{
public @interface WAConfig{
String id();
String name();
}
/**
* Configure or reconfigure service with current configuration data

View file

@ -0,0 +1,115 @@
package wa.server.plugin.apache;
import wa.server.WAConstants;
import wa.server.plugin.WAConfiguration;
import zutil.db.bean.DBBean.DBTable;
import zutil.ui.Configurator;
import java.io.IOException;
import java.io.PrintStream;
public abstract class ApacheAbstractConfig extends WAConfiguration {
private static final String CONFIG_NAME = "vhost";
private static final String NAVIGATION_NAME = "Apache Virtual Host";
private static final String SITE_AVAILABLE_DIR = "/apache2/site-available/";
private static final String SITE_ENABLED_DIR = "/apache2/site-enabled/";
@Configurator.Configurable("Domain")
protected String domain;
protected transient String domain_old;
@Configurator.Configurable("WWW Redirect")
protected boolean wwwRedirect;
@Configurator.Configurable("SSL")
protected boolean ssl;
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
public boolean wwwRedirectEnabled() {
return wwwRedirect;
}
public void setWWWRedirect(boolean redirect) {
this.wwwRedirect = redirect;
}
public boolean sslEnabk() {
return ssl;
}
public void setSSL(boolean ssl) {
this.ssl = ssl;
}
@Override
public void saveConfiguration() throws IOException {
if(domain != domain_old){ // Configuration file has changed name
WAConstants.getConfigFile(SITE_AVAILABLE_DIR+ domain_old).delete();
domain_old = domain;
}
PrintStream out = new PrintStream(
WAConstants.getConfigFile(SITE_AVAILABLE_DIR+ domain));
saveConfiguration(out);
out.close();
}
private void saveConfiguration(PrintStream out){
if (wwwRedirect){
out.println("<VirtualHost *:80>");
out.println(" ServerName www."+ domain);
out.println();
out.println(" RewriteEngine on");
out.println(" RewriteCond %{HTTP_HOST} ^www\\..*$ [NC]");
out.println(" RewriteRule ^ http://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]"); // 301: permanent, 302: temporary
out.println("</VirtualHost>");
out.println();
}
if (ssl){
out.println("<VirtualHost *:80>");
out.println(" ServerName "+ domain);
out.println();
out.println(" RewriteEngine On");
out.println(" RewriteCond %{SERVER_PORT} !^443$");
out.println(" RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]");
out.println("</VirtualHost>");
out.println("<VirtualHost *:443>");
out.println(" ServerName "+ domain +":443");
out.println();
apacheConfiguration(out);
out.println();
out.println(" ServerAlias "+domain);
out.println(" Include /etc/letsencrypt/options-ssl-apache.conf");
out.println(" SSLCertificateFile /etc/letsencrypt/live/"+domain+"/cert.pem");
out.println(" SSLCertificateKeyFile /etc/letsencrypt/live/"+domain+"/privkey.pem");
out.println(" SSLCertificateChainFile /etc/letsencrypt/live/"+domain+"/chain.pem");
out.println("</VirtualHost>");
out.println("");
}
else {
out.println("<VirtualHost *:80>");
out.println(" ServerName "+ domain);
out.println();
apacheConfiguration(out);
out.println("</VirtualHost>");
out.println("");
}
}
protected abstract void apacheConfiguration(PrintStream out);
@Override
public void deleteConfiguration() throws Exception {
}
}

View file

@ -0,0 +1,32 @@
package wa.server.plugin.apache;
import wa.server.plugin.WAConfiguration;
import zutil.ui.Configurator;
import java.io.PrintStream;
@WAConfiguration.WAConfig(id="proxy", name="Proxy")
public class ApacheConfigProxy extends ApacheAbstractConfig {
@Configurator.Configurable("Proxy Target")
protected String target;
public String getTerget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
@Override
protected void apacheConfiguration(PrintStream out) {
out.println(" ProxyPreserveHost on");
out.println(" ProxyPass / "+ target);
out.println(" ProxyPassReverse / "+ target);
}
}

View file

@ -1,97 +1,30 @@
package wa.server.plugin.apache;
import wa.server.WAConstants;
import wa.server.plugin.WAConfiguration;
import zutil.db.bean.DBBean.DBTable;
import zutil.ui.Configurator;
import java.io.IOException;
import java.io.PrintStream;
@DBTable(WAConstants.DB_TABLE_PREFIX + "_apache_vhost")
public class ApacheConfigVirtualHost extends WAConfiguration {
private static final String CONFIG_NAME = "vhost";
private static final String NAVIGATION_NAME = "Apache Virtual Host";
@WAConfiguration.WAConfig(id="vhost", name="VirtualHost")
public class ApacheConfigVirtualHost extends ApacheAbstractConfig {
private static final String SITE_AVAILABLE_DIR = "/apache2/site-available/";
private static final String SITE_ENABLED_DIR = "/apache2/site-enabled/";
@Configurator.Configurable("Domain")
protected String domain;
protected transient String domain_old;
@Configurator.Configurable("DocRoot")
@Configurator.Configurable("Document Root")
protected String path;
@Configurator.Configurable("SSL")
protected boolean ssl;
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public boolean isSSL() {
return ssl;
}
public void setSSL(boolean ssl) {
this.ssl = ssl;
}
@Override
public void saveConfiguration() throws IOException {
if(domain != domain_old){ // Configuration file has changed name
WAConstants.getConfigFile(SITE_AVAILABLE_DIR+ domain_old).delete();
domain_old = domain;
}
PrintStream out = new PrintStream(
WAConstants.getConfigFile(SITE_AVAILABLE_DIR+ domain));
saveConfiguration(out);
out.close();
}
private void saveConfiguration(PrintStream out){
if(ssl){
out.println("<VirtualHost *:80>");
out.println(" ServerName "+ domain +":80");
out.println(" RewriteEngine On");
out.println(" RewriteCond %{SERVER_PORT} !^443$");
out.println(" RewriteRule ^(.*)$ https://server$1 [L,R]");
out.println("</VirtualHost>");
out.println("<VirtualHost *:443>");
out.println(" ServerName "+ domain +":443");
out.println(" DocumentRoot "+ path);
out.println();
out.println(" SSLEngine on");
out.println(" SSLCertificateFile "+ WAConstants.getConfigFile(WAConstants.WA_SSL_CERT));
out.println(" SSLCertificateKeyFile "+ WAConstants.getConfigFile(WAConstants.WA_SSL_KEY));
out.println("</VirtualHost>");
out.println("");
}
else {
out.println("<VirtualHost *:80>");
out.println(" ServerName "+ domain +":80");
out.println(" DocumentRoot "+ path);
out.println("</VirtualHost>");
out.println("");
}
}
@Override
public void deleteConfiguration() throws Exception {
protected void apacheConfiguration(PrintStream out) {
out.println(" DocumentRoot "+ path);
}
}