diff -Nur smeserver-php-3.0.0.old/createlinks smeserver-php-3.0.0/createlinks
--- smeserver-php-3.0.0.old/createlinks 2020-11-08 21:14:58.600000000 -0500
+++ smeserver-php-3.0.0/createlinks 2020-11-08 21:29:38.439000000 -0500
@@ -105,3 +105,9 @@
$service = "php-fpm.service";
safe_symlink("../$service", "root/usr/lib/systemd/system/multi-user.target.wants/$service");
safe_symlink("../$service", "root/usr/lib/systemd/system/sme-server.target.wants/$service");
+
+#webapps
+$event = 'webapps-update';
+templates2events("/etc/my.cnf", $event);
+
+safe_symlink("start", "root/etc/e-smith/events/$event/services2adjust/mysql.init");
diff -Nur smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/81SimpleVHosts smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/81SimpleVHosts
--- smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/81SimpleVHosts 1969-12-31 19:00:00.000000000 -0500
+++ smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/81SimpleVHosts 2020-11-08 21:22:23.367000000 -0500
@@ -0,0 +1,35 @@
+{
+ $OUT = '';
+
+ use esmith::DomainsDB;
+
+ my $db = esmith::DomainsDB->open_ro;
+ unless ($db){
+ warn "Couldn't open domains DB in VirtualHosts template fragment";
+ return;
+ }
+
+ my @vhosts = $db->get_all_by_prop('type' => 'vhost');
+ foreach my $vhost (@vhosts) {
+ my $templatePath = $vhost->prop('TemplatePath') || 'WebAppVirtualHost';
+ foreach my $port ($httpPort, $httpsPort){
+ my %virtualHost = (
+ ipAddress => '0.0.0.0',
+ port => $port,
+ localAccess => $localAccess,
+ externalSSLAccess => $externalSSLAccess,
+ domain => $vhost,
+ httpPort => $httpPort,
+ httpsPort => $httpsPort
+ );
+
+ $OUT .= esmith::templates::processTemplate (
+ {
+ MORE_DATA => \%virtualHost,
+ TEMPLATE_PATH =>
+ "/etc/httpd/conf/httpd.conf/$templatePath",
+ OUTPUT_TYPE => 'string',
+ });
+ }
+ }
+}
diff -Nur smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/00Setup smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/00Setup
--- smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/00Setup 1969-12-31 19:00:00.000000000 -0500
+++ smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/00Setup 2017-10-01 09:19:18.000000000 -0400
@@ -0,0 +1,9 @@
+{
+ use esmith::DomainsDB;
+ # Convert the passed hash for the domain object back into an object.
+ $domain = bless \%domain, 'esmith::DB::db::Record';
+
+ # Make scalars from some of the properties of the domain
+ $virtualHost = $domain->key;
+ $OUT = "";
+}
diff -Nur smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/02ServerName smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/02ServerName
--- smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/02ServerName 1969-12-31 19:00:00.000000000 -0500
+++ smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/02ServerName 2017-10-01 09:19:18.000000000 -0400
@@ -0,0 +1 @@
+ ServerName {$virtualHost}
diff -Nur smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/03ServerAlias smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/03ServerAlias
--- smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/03ServerAlias 1969-12-31 19:00:00.000000000 -0500
+++ smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/03ServerAlias 2017-10-01 09:19:18.000000000 -0400
@@ -0,0 +1,13 @@
+ ServerAlias {
+
+ use esmith::HostsDB;
+ use esmith::DomainsDB;
+ my $hdb = esmith::HostsDB->open_ro();
+ my %domains = map { $_->key => 1 } esmith::DomainsDB->open_ro->domains;
+ my @hosts = grep {
+ my $h = $_;
+ ($h->prop('HostType') eq 'Self') && !$domains{$h->key}
+ } $hdb->get_hosts_by_domain($virtualHost);
+ $OUT = join " ", map { $_->key } @hosts;
+}
+
diff -Nur smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/25SSLDirectives smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/25SSLDirectives
--- smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/25SSLDirectives 1969-12-31 19:00:00.000000000 -0500
+++ smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/25SSLDirectives 2020-11-08 21:23:48.335000000 -0500
@@ -0,0 +1,28 @@
+{
+ my $ssl = $domain->prop('RequireSSL') || 'disabled';
+ my $auth = $domain->prop('Authentication') || 'none';
+
+ if (($httpsPort eq $port){
+ $OUT .= " SSLEngine on\n";
+ }
+ elsif (($ssl =~ m/^enabled|yes|on|1$/i) || ($auth =~ /^LemonLDAP/)){
+ $OUT .=<<'EOF';
+ RewriteEngine on
+ RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/.*
+ RewriteRule ^/(.*|$) https://%{HTTP_HOST}/$1 [L,R]
+
+EOF
+ }
+ elsif ($ssl =~ m#/#){
+ $OUT .= " RewriteEngine on\n";
+ foreach my $loc (split(/[;,]/, $ssl)){
+ $OUT .= " # Rewriting $loc to use SSL\n";
+ $loc =~ s#^/##;
+ $OUT .= " RewriteRule ^/$loc(/.*|\$) https://%\{HTTP_HOST\}/$loc\$1 \[L,R\]\n";
+ }
+ }
+ else{
+ $OUT .= '';
+ }
+}
+
diff -Nur smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/26RewriteTraceAndTrack smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/26RewriteTraceAndTrack
--- smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/26RewriteTraceAndTrack 1969-12-31 19:00:00.000000000 -0500
+++ smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/26RewriteTraceAndTrack 2017-10-01 09:19:18.000000000 -0400
@@ -0,0 +1,8 @@
+{
+ $OUT =<<'HERE';
+ RewriteEngine on
+ RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
+ RewriteRule .* - [F]
+HERE
+}
+
diff -Nur smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/40ApacheIconAlias smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/40ApacheIconAlias
--- smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/40ApacheIconAlias 1969-12-31 19:00:00.000000000 -0500
+++ smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/40ApacheIconAlias 2017-10-01 09:19:18.000000000 -0400
@@ -0,0 +1,13 @@
+{
+my $alias = $domain->prop('IconAlias') || 'enabled';
+$OUT .= '';
+
+unless ($alias =~ m/disabled|off|no|0/i){
+ $OUT .=<<'EOF';
+
+ # alias for Apache icons
+ Alias /icons/ /var/www/icons/
+
+EOF
+}
+}
diff -Nur smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/50Content smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/50Content
--- smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/50Content 1969-12-31 19:00:00.000000000 -0500
+++ smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/50Content 2020-11-08 21:26:33.645000000 -0500
@@ -0,0 +1,166 @@
+{
+
+use esmith::util;
+my $base = esmith::util::ldapBase($DomainName);
+
+my $name = $domain->key;
+my $target = $domain->prop('ProxyPassTarget') || '';
+my $proxy_acme = $domain->prop('ProxyPassACMEChallenges') || 'disabled';
+my $redirect = $domain->prop('Redirect') || '';
+my $rewrite = $domain->prop('Rewrite') || '';
+my $allow = $domain->prop('AllowHosts') || '';
+my $preserve = $domain->prop('ProxyPreserveHost') || 'no';
+my $keepalive = $domain->prop('ProxyNoKeepAlive') || 'no';
+my $timeout = $domain->prop('Timeout') || '';
+my $index = $domain->prop('DirectoryIndex') || '';
+my @alias = split /[,;]/, ($domain->prop('Alias') || '');
+my @env = split(/[;,]/, ($domain->prop('SetEnv') || ''));
+my $auth = $domain->prop('Authentication') || 'none';
+my @groups = split(/[;,]/, ($domain->prop('AllowGroups') || ''));
+my $ssl_port = $httpsPort;
+my $proto = ($port eq $ssl_port ) ? 'https' : 'http';
+my $socketio = $domain->prop('ProxySocketIO') || 'disabled';
+my @proxyrules = split /[,;]/, ($domain->prop('ProxyPassRules') || '');
+
+# Custom proxypass rules
+foreach my $rule (@proxyrules){
+ my ($from, $to) = split /=/, $rule;
+ $OUT .= " ProxyPass $from $to\n";
+}
+
+if (@proxyrules > 0 || $target =~ m|https?://[\d\w\.\-/]*|){
+ $OUT .= " ProxyPreserveHost on\n" if ($preserve eq 'yes');
+ $OUT .= " RequestHeader set X-Forwarded-Proto \"$proto\"\n";
+}
+
+# ProxyPass ?
+if ($target =~ m|https?://[\d\w\.\-/]*|){
+ $OUT .= " SetEnv proxy-nokeepalive 1\n" if ($keepalive eq 'yes');
+ if ($proxy_acme eq 'only'){
+ $OUT .= " ProxyPass /.well-known/acme-challenge/ $target" . ".well-known/acme-challenge/\n";
+ $OUT .= " ProxyPassReverse / $target" . ".well-known/acme-challenge/\n";
+ }
+ else{
+ if ($proxy_acme eq 'disabled'){
+ $OUT .= " ProxyPass /.well-known/acme-challenge/ !\n";
+ }
+ if ($socketio eq 'enabled'){
+ # Try to handle Socket.IO
+ my $wstarget = $target;
+ $wstarget =~ s/^http:/ws:/;
+ $wstarget =~ s/^https:/wss:/;
+ $OUT .=<<"_EOF"
+
+
+ RewriteCond %{QUERY_STRING} transport=polling [NC]
+ RewriteRule /socket.io/(.*) ${target}socket.io/\$1 [P,L]
+
+ ProxyPass /socket.io/socket.io.js ${target}socket.io/socket.io.js
+ ProxyPassReverse /socket.io/socket.io.js ${target}socket.io/socket.io.js
+
+ ProxyPass /socket.io/ ${wstarget}socket.io/
+ ProxyPassReverse /socket.io/ ${wstarget}socket.io/
+
+
+_EOF
+ }
+ $OUT .= " ProxyPass / $target\n";
+ $OUT .= " ProxyPassReverse / $target\n";
+ }
+}
+# Rewrite ?
+elsif ($rewrite =~ m|https?://[\d\w\.\-/]*|){
+ $OUT .=<<"HERE";
+
+ RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/.*
+ RewriteRule /(.*|\$) $rewrite/\$1 [L,R]
+
+HERE
+}
+# Redirect ?
+elsif ($redirect =~ m|https?://[\d\w\.\-/]*|){
+ $OUT .=<<"HERE";
+
+ RedirectMatch permanent ^/(.*|\$) $redirect/\$1
+
+HERE
+}
+else{
+ my $root = $domain->prop('DocumentRoot') ||
+ '/home/e-smith/files/ibays/Primary/html';
+
+ $OUT .= " DocumentRoot $root\n";
+}
+
+if ($timeout =~ m/^\d+$/){
+ $OUT .= " Timeout $timeout\n";
+}
+
+if ($index ne ''){
+ $OUT .= " DirectoryIndex $index\n";
+}
+
+foreach (@alias){
+ next unless $_ =~ m/^(\/\w+)=(\/.*)/;
+ my ($al, $targ) = ($1, $2);
+ next unless (-e $2);
+ $OUT .= " Alias $al $targ\n";
+}
+
+foreach (@env){
+ next unless (m/^(.*)=(.*)$/);
+ $OUT .= " SetEnv $1 $2\n";
+}
+
+if ($allow ne ''){
+ if ($allow eq 'local'){
+ $allow = "$localAccess $externalSSLAccess";
+ }
+ else{
+ $allow =~ s/[,;]/ /g;
+ }
+ $OUT .=<<"EOF";
+
+
+ Order deny,allow
+ Deny from all
+ Allow from $allow
+
+
+
+ Allow from all
+
+
+EOF
+}
+
+if ($auth =~ m/^Basic$/i){
+ my $require = "Require valid-user";
+ if (scalar(@groups) > 0){
+ $require = "Require ldap-group ";
+ $require .= "cn=$_,ou=Groups,$base " foreach(@groups);
+ }
+
+ $OUT .=<<"EOF";
+ SetEnvIf %{Request_URI} "^/\.well\-known/acme\-challenge" granted=1
+
+
+ Order deny,allow
+ Satisfy any
+ Deny from all
+ Allow from env=granted
+ AuthType basic
+ AuthName "$name"
+ AuthBasicProvider ldap
+ AuthLDAPURL ldap://localhost/ou=Users,$base?uid
+ AuthLDAPGroupAttribute memberUid
+ AuthLDAPGroupAttributeIsDN off
+ $require
+
+
+EOF
+
+}
+
+}
+
diff -Nur smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/template-begin smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/template-begin
--- smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/template-begin 1969-12-31 19:00:00.000000000 -0500
+++ smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/template-begin 2017-10-01 09:19:18.000000000 -0400
@@ -0,0 +1,2 @@
+
+
diff -Nur smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/template-end smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/template-end
--- smeserver-php-3.0.0.old/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/template-end 1969-12-31 19:00:00.000000000 -0500
+++ smeserver-php-3.0.0/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/WebAppVirtualHost/template-end 2017-10-01 09:19:18.000000000 -0400
@@ -0,0 +1,2 @@
+
+