From f652c5901e8230fd53bcd5f57ccd6ae69dc2b2ca Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Sat, 02 Jan 2016 07:34:58 -0500
Subject: [PATCH] Fixed postconf warnings in installer.

---
 server/plugins-available/apache2_plugin.inc.php |  107 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 104 insertions(+), 3 deletions(-)

diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 1b5a4c2..d5406b5 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -1091,12 +1091,16 @@
 		// Make sure we only have Unix linebreaks
 		$vhost_data['apache_directives'] = str_replace("\r\n", "\n", $vhost_data['apache_directives']);
 		$vhost_data['apache_directives'] = str_replace("\r", "\n", $vhost_data['apache_directives']);
-		$trans = array('{DOCROOT}' => $vhost_data['web_document_root_www']);
+		$trans = array(
+			'{DOCROOT}' => $vhost_data['web_document_root_www'],
+			'{DOCROOT_CLIENT}' => $vhost_data['web_document_root']
+		);
 		$vhost_data['apache_directives'] = strtr($vhost_data['apache_directives'], $trans);
 
 		// Check if a SSL cert exists
 		$ssl_dir = $data['new']['document_root'].'/ssl';
 		$domain = $data['new']['ssl_domain'];
+		if(!$domain) $domain = $data['new']['domain'];
 		$key_file = $ssl_dir.'/'.$domain.'.key';
 		$crt_file = $ssl_dir.'/'.$domain.'.crt';
 		$bundle_file = $ssl_dir.'/'.$domain.'.bundle';
@@ -1110,6 +1114,100 @@
 			$app->log('SSL Disabled. '.$domain,LOGLEVEL_DEBUG);
 		}
 		*/
+
+		//* Generate Let's Encrypt SSL certificat
+		if($data['new']['ssl'] == 'y' && $data['new']['ssl_letsencrypt'] == 'y') {
+			if(substr($domain, 0, 2) === '*.') {
+				// wildcard domain not yet supported by letsencrypt!
+				$app->log('Wildcard domains not yet supported by letsencrypt, so changing ' . $domain . ' to ' . substr($domain, 2), LOGLEVEL_WARN);
+				$domain = substr($domain, 2);
+			}
+			
+			$data['new']['ssl_domain'] = $domain;
+			$vhost_data['ssl_domain'] = $domain;
+
+			//* be sure to have good domain
+			$lddomain = (string) "$domain";
+			if($data['new']['subdomain'] == "www" OR $data['new']['subdomain'] == "*") {
+				$lddomain .= (string) " --domains www." . $domain;
+			}
+
+				$crt_tmp_file = "/etc/letsencrypt/live/".$domain."/cert.pem";
+				$key_tmp_file = "/etc/letsencrypt/live/".$domain."/privkey.pem";
+				$bundle_tmp_file = "/etc/letsencrypt/live/".$domain."/chain.pem";
+				$webroot = $data['new']['document_root']."/web";
+
+				//* check if we have already a Let's Encrypt cert
+				if(!file_exists($crt_tmp_file) && !file_exists($key_tmp_file)) {
+					$app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG);
+
+					if(is_dir($webroot . "/.well-known/")) {
+						$app->log("Remove old challenge directory", LOGLEVEL_DEBUG);
+						$this->_exec("rm -rf " . $webroot . "/.well-known/");
+					}
+
+					$app->log("Create challenge directory", LOGLEVEL_DEBUG);
+					$app->system->mkdirpath($webroot . "/.well-known/");
+					$app->system->chown($webroot . "/.well-known/", $data['new']['system_user']);
+					$app->system->chgrp($webroot . "/.well-known/", $data['new']['system_group']);
+					$app->system->mkdirpath($webroot . "/.well-known/acme-challenge");
+					$app->system->chown($webroot . "/.well-known/acme-challenge/", $data['new']['system_user']);
+					$app->system->chgrp($webroot . "/.well-known/acme-challenge/", $data['new']['system_group']);
+					$app->system->chmod($webroot . "/.well-known/acme-challenge", "g+s");
+					
+					if(file_exists("/root/.local/share/letsencrypt/bin/letsencrypt")) {
+						$this->_exec("/root/.local/share/letsencrypt/bin/letsencrypt auth --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path " . escapeshellarg($webroot));
+					}
+				};
+
+				//* check is been correctly created
+				if(file_exists($crt_tmp_file) OR file_exists($key_tmp_file)) {
+					$date = date("YmdHis");
+					if(is_file($key_file)) {
+						$app->system->copy($key_file, $key_file.'.old'.$date);
+						$app->system->chmod($key_file.'.old.'.$date, 0400);
+						$app->system->unlink($key_file);
+					}
+
+					if ($web_config["website_symlinks_rel"] == 'y') {
+						$this->create_relative_link(escapeshellcmd($key_tmp_file), escapeshellcmd($key_file));
+					} else {
+						exec("ln -s ".escapeshellcmd($key_tmp_file)." ".escapeshellcmd($key_file));
+					}
+
+					if(is_file($crt_file)) {
+						$app->system->copy($crt_file, $crt_file.'.old.'.$date);
+						$app->system->chmod($crt_file.'.old.'.$date, 0400);
+						$app->system->unlink($crt_file);
+					}
+
+					if($web_config["website_symlinks_rel"] == 'y') {
+						$this->create_relative_link(escapeshellcmd($crt_tmp_file), escapeshellcmd($crt_file));
+					} else {
+						exec("ln -s ".escapeshellcmd($crt_tmp_file)." ".escapeshellcmd($crt_file));
+					}
+
+					if(is_file($bundle_file)) {
+						$app->system->copy($bundle_file, $bundle_file.'.old.'.$date);
+						$app->system->chmod($bundle_file.'.old.'.$date, 0400);
+						$app->system->unlink($bundle_file);
+					}
+
+					if($web_config["website_symlinks_rel"] == 'y') {
+						$this->create_relative_link(escapeshellcmd($bundle_tmp_file), escapeshellcmd($bundle_file));
+					} else {
+						exec("ln -s ".escapeshellcmd($bundle_tmp_file)." ".escapeshellcmd($bundle_file));
+					}
+
+					/* we don't need to store it.
+					/* Update the DB of the (local) Server */
+					$app->db->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '$ssl_cert', ssl_key = '$ssl_key' WHERE domain = '".$data['new']['domain']."'");
+					$app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
+					/* Update also the master-DB of the Server-Farm */
+					$app->dbmaster->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '$ssl_cert', ssl_key = '$ssl_key' WHERE domain = '".$data['new']['domain']."'");
+					$app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data['new']['domain']."'");
+				}
+			};
 
 		if(@is_file($bundle_file)) $vhost_data['has_bundle_cert'] = 1;
 
@@ -1135,6 +1233,7 @@
 
 		// Rewrite rules
 		$rewrite_rules = array();
+		$rewrite_wildcard_rules = array();
 		if($data['new']['redirect_type'] != '' && $data['new']['redirect_path'] != '') {
 			if(substr($data['new']['redirect_path'], -1) != '/' && !preg_match('/^(https?|\[scheme\]):\/\//', $data['new']['redirect_path'])) $data['new']['redirect_path'] .= '/';
 			if(substr($data['new']['redirect_path'], 0, 8) == '[scheme]'){
@@ -1166,7 +1265,7 @@
 					'rewrite_add_path' => (substr($rewrite_target, -1) == '/' ? 'y' : 'n'));
 				break;
 			case '*':
-				$rewrite_rules[] = array( 'rewrite_domain'  => '(^|\.)'.$this->_rewrite_quote($data['new']['domain']),
+				$rewrite_wildcard_rules[] = array( 'rewrite_domain'  => '(^|\.)'.$this->_rewrite_quote($data['new']['domain']),
 					'rewrite_type'   => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
 					'rewrite_target'  => $rewrite_target,
 					'rewrite_target_ssl' => $rewrite_target_ssl,
@@ -1265,7 +1364,7 @@
 							'rewrite_add_path' => (substr($rewrite_target, -1) == '/' ? 'y' : 'n'));
 						break;
 					case '*':
-						$rewrite_rules[] = array( 'rewrite_domain'  => '(^|\.)'.$this->_rewrite_quote($alias['domain']),
+						$rewrite_wildcard_rules[] = array( 'rewrite_domain'  => '(^|\.)'.$this->_rewrite_quote($alias['domain']),
 							'rewrite_type'   => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
 							'rewrite_target'  => $rewrite_target,
 							'rewrite_target_ssl' => $rewrite_target_ssl,
@@ -1302,6 +1401,8 @@
 		} else {
 			$tpl->setVar('alias', '');
 		}
+		
+		if (count($rewrite_wildcard_rules) > 0) $rewrite_rules = array_merge($rewrite_rules, $rewrite_wildcard_rules); // Append wildcard rules to the end of rules
 
 		if(count($rewrite_rules) > 0 || $vhost_data['seo_redirect_enabled'] > 0 || count($alias_seo_redirects) > 0) {
 			$tpl->setVar('rewrite_enabled', 1);

--
Gitblit v1.9.1