From ba3c54823204552fd7f0050df58dd63ab608213c Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Thu, 28 Jul 2016 18:05:20 +0200 Subject: [PATCH] Added Apache config classes --- src/wa/server/page/ConfigPage.java | 11 +- src/wa/server/plugin/WAConfiguration.java | 8 +- .../plugin/apache/ApacheAbstractConfig.java | 115 ++++++++++++++++++ .../plugin/apache/ApacheConfigProxy.java | 32 +++++ .../apache/ApacheConfigVirtualHost.java | 77 +----------- 5 files changed, 168 insertions(+), 75 deletions(-) create mode 100755 src/wa/server/plugin/apache/ApacheAbstractConfig.java create mode 100755 src/wa/server/plugin/apache/ApacheConfigProxy.java diff --git a/src/wa/server/page/ConfigPage.java b/src/wa/server/page/ConfigPage.java index a4d3785..6cf5bd7 100755 --- a/src/wa/server/page/ConfigPage.java +++ b/src/wa/server/page/ConfigPage.java @@ -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(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 getAllConfigs(){ return null; } + private WAConfiguration saveConfig(WAConfiguration target){ + return null; + } + private WAConfiguration deleteConfig(int id){ + return null; + } } diff --git a/src/wa/server/plugin/WAConfiguration.java b/src/wa/server/plugin/WAConfiguration.java index e663adc..e1238da 100755 --- a/src/wa/server/plugin/WAConfiguration.java +++ b/src/wa/server/plugin/WAConfiguration.java @@ -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 diff --git a/src/wa/server/plugin/apache/ApacheAbstractConfig.java b/src/wa/server/plugin/apache/ApacheAbstractConfig.java new file mode 100755 index 0000000..29ed046 --- /dev/null +++ b/src/wa/server/plugin/apache/ApacheAbstractConfig.java @@ -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(""); + 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(""); + out.println(); + } + + if (ssl){ + out.println(""); + 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(""); + out.println(""); + 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(""); + out.println(""); + } + else { + out.println(""); + out.println(" ServerName "+ domain); + out.println(); + apacheConfiguration(out); + out.println(""); + out.println(""); + } + } + + protected abstract void apacheConfiguration(PrintStream out); + + + @Override + public void deleteConfiguration() throws Exception { + + } +} + diff --git a/src/wa/server/plugin/apache/ApacheConfigProxy.java b/src/wa/server/plugin/apache/ApacheConfigProxy.java new file mode 100755 index 0000000..66cbcaf --- /dev/null +++ b/src/wa/server/plugin/apache/ApacheConfigProxy.java @@ -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); + } +} + diff --git a/src/wa/server/plugin/apache/ApacheConfigVirtualHost.java b/src/wa/server/plugin/apache/ApacheConfigVirtualHost.java index fa2b16d..7b10181 100755 --- a/src/wa/server/plugin/apache/ApacheConfigVirtualHost.java +++ b/src/wa/server/plugin/apache/ApacheConfigVirtualHost.java @@ -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(""); - 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(""); - out.println(""); - 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(""); - out.println(""); - } - else { - out.println(""); - out.println(" ServerName "+ domain +":80"); - out.println(" DocumentRoot "+ path); - out.println(""); - out.println(""); - } - } - - @Override - public void deleteConfiguration() throws Exception { - + protected void apacheConfiguration(PrintStream out) { + out.println(" DocumentRoot "+ path); } }