modules/vhosts/vhosts.php
72518278
 <?php
c208bd90
 /*
 This file belongs to the Webinterface of schokokeks.org Hosting
 
5effc2bd
 Written 2008-2014 by schokokeks.org Hosting, namely
c208bd90
   Bernd Wurst <bernd@schokokeks.org>
   Hanno Böck <hanno@schokokeks.org>
 
 To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty.
 
 You should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see 
 http://creativecommons.org/publicdomain/zero/1.0/
 
 Nevertheless, in case you use a significant part of this code, we ask (but not require, see the license) that you keep the authors' names in place and return your changes to the public. We would be especially happy if you tell us what you're going to do with this code.
 */
 
72518278
 require_once('inc/debug.php');
 require_once('inc/security.php');
da0e59cc
 require_once('inc/icons.php');
72518278
 
 require_once('vhosts.php');
 
f2550e90
 title("Subdomains");
72518278
 $error = '';
 
 require_role(ROLE_SYSTEMUSER);
 
3cda75a7
 global $prefix;
72518278
 
f2550e90
 output("<p>Mit dieser Funktion legen Sie fest, welche Domains und Subdomains als Webserver-Ressource verfügbar sein sollen und welches Verzeichnis die Dateien enthalten soll.</p>
b3c8f947
 <p>Änderungen an Ihren Einstellungen werden im 5-Minuten-Takt auf dem Server übernommen.</p>
 ");
72518278
 
d70a5791
 
33819571
 $domain = NULL;
 if (isset($_REQUEST['domain']) && $_REQUEST['domain'] != '') {
   $domain = $_REQUEST['domain'];
   output('<p class="warning"><strong>Filter aktiv!</strong> Momentan werden nur Einstellungen für die Domain <strong>'.filter_input_general($domain).'</strong> angezeigt. Klicken Sie '.internal_link('', 'hier', 'domain=').' um alle Einstellungen anzuzeigen.</p>');
 }
 $vhosts = list_vhosts($domain);
4b6dffbd
 $traffic_sum = 0;
6e8f27ac
 $letsencrypt = false;
 foreach ($vhosts as $vh) {
   if (strstr($vh['options'], 'letsencrypt')) {
     $letsencrypt = true;
   }
 }
72518278
 
 if (count($vhosts) > 0)
 {
937a4ab4
   /*
6e8f27ac
   if ($letsencrypt) {
     warning("Sie haben für eine oder mehrere Domains die Nutzung eines Let's-Encrypt-Zertifikats aktiviert. Wir haben diese Funktion nach allgemeiner Verfügbarkeit von Let's Encrypt umgehend freigeschaltet und sind mit der ersten Erfahrungen sehr zufrieden. Dennoch befindet sich Let's Encrypt momentan im Beta-Betrieb (d.h. Testbetrieb). Störungen sind daher nicht auszuschließen.");
     warning("Die Bereitstellung eines Zertifikats von Let's Encrypt kann momentan bis zu 15 Minuten in Anspruch nehmen.");
   }
937a4ab4
   */
5231fb2f
   if (count($vhosts) > 10) {
     addnew('edit', 'Neue Domain bzw. Subdomain einrichten');
   }
d27efa24
   output("<table><tr><th>(Sub-)Domain</th><th></th><th>Zusätzliche Alias-Namen</th><th>Protokoll</th><th>HTTPS</th><th>Traffic<sup>*</sup></th><th>PHP</th><th>Lokaler Pfad<sup>**</sup></th></tr>\n");
33c1bcb0
 
   $even = True;
709c9ea2
 
72518278
   foreach ($vhosts as $vhost)
   {
33c1bcb0
     $even = ! $even;
72518278
     $fqdn = $vhost['fqdn'];
33c1bcb0
     $class = 'odd';
     if ($even) $class = 'even';
33819571
     $proto = 'http';
     if ($vhost['ssl'] == 'https' || $vhost['ssl'] == 'forward') {
       $proto = 'https';
     }
     $linkuri = $vhost['fqdn'];
     if (strstr($vhost['options'], 'aliaswww')) {
       $linkuri = "www.".$vhost['fqdn'];
     }
     output("<tr class=\"{$class}\"><td>".internal_link('edit', $fqdn, "vhost={$vhost['id']}", 'title="Einstellungen bearbeiten"')."</td><td><a href=\"{$proto}://{$linkuri}\">".other_icon('world_link.png', 'Website aufrufen')."</a> ".internal_link('save', icon_delete("»{$vhost['fqdn']}« löschen"), 'action=delete&vhost='.$vhost['id'] )."</td><td>");
76f04610
     $aliases = get_all_aliases($vhost);
33c1bcb0
     $tmp = '';
     if (count($aliases) > 0)
72518278
     {
33c1bcb0
       foreach ($aliases as $alias)
       {
         $tmp .= $alias['fqdn'].'<br />';
       }
     } else {
       $tmp = '<em>- keine -</em>';
72518278
     }
33c1bcb0
     output(internal_link('aliases', $tmp, 'vhost='.$vhost['id'], 'title="Aliase verwalten"'));
72518278
     output('</td>');
4b6dffbd
     $logfiles = 'Kein Log';
47b732dc
     if ($vhost['logtype'] == 'default')
4b6dffbd
       $logfiles = 'Zugriffe ';
47b732dc
     elseif ($vhost['logtype'] == 'anonymous')
4b6dffbd
       $logfiles = 'Anonym';
47b732dc
     if ($vhost['errorlog'] == 1)
     {
33c1bcb0
       if ($vhost['logtype'] == NULL)
4b6dffbd
         $logfiles = 'Fehler';
47b732dc
       else
4b6dffbd
         $logfiles .= ' + Fehler';
47b732dc
     }
56c4c2ac
     $stats = $vhost['stats'] ? internal_link("showstats", other_icon("chart_bar.png", "Statistiken anzeigen"), "vhost={$vhost['id']}").' ' : '';
     output("<td>{$stats}{$logfiles}</td>");
1ab9db55
   
     if ($vhost['ssl'] == 'http')
     {
d27efa24
       output("<td>".icon_disabled('HTTPS ausgeschaltet')."</td>");
1ab9db55
     }
9e8d592b
     elseif (strstr($vhost['options'], "letsencrypt") && $vhost['cert'])
     {
0e0855ee
       $forward = '';
       if ($vhost['ssl'] == 'forward') {
d27efa24
         $forward = " ".other_icon("refresh.png", 'Auf HTTPS umleiten');
0e0855ee
       } else {
         $forward = " ".other_icon("warning.png", 'Ungeschützter Aufruf weiterhin möglich');
       }
       output("<td>".other_icon("letsencrypt.png", "Automatische Zertifikatsverwaltung mit Let's Encrypt").$forward."</td>");
9e8d592b
     }
1ab9db55
     elseif ($vhost['cert'])
     {
d27efa24
       output("<td>".other_icon("secure.png", "HTTPS mit eigenem Zertifikat")."</td>");
0595cb7b
     }
     elseif (strstr($vhost['options'], "letsencrypt")) {
       // Letsencrypt gewählt aber noch nicht aktiv
       $message = "Let's Encrypt-Zertifikat ist noch nicht bereit";
9e8d592b
       output("<td>".other_icon("letsencrypt.png", $message).icon_warning($message)."</td>");
1ab9db55
     }
     else
     {
d27efa24
       output("<td>".icon_enabled('HTTPS eingeschaltet')."</td>");
1ab9db55
     }
 
4b6dffbd
     $traffic = traffic_month($vhost['id']);
     $traffic_sum += (int) $traffic;
     $traffic_string = $traffic.' MB';
     if ($traffic > 1024) {
       $traffic_string = round($traffic / 1024, 2).' GB';
     }
     if ($traffic === NULL) {
       $traffic_string = '--';
     }
     output("<td style=\"text-align: right;\">{$traffic_string}</td>");
 
832d06da
     if ($vhost['is_webapp'] == 1) {
33c1bcb0
       output('<td colspan="2"><em><strong>Sonderanwendung:</strong> Vorinstallierte Webanwendung</em></td>');
832d06da
     }
     elseif ($vhost['is_dav'] == 1) {
33c1bcb0
       output('<td colspan="2"><em><strong>Sonderanwendung:</strong> WebDAV</em></td>');
832d06da
     }
     elseif ($vhost['is_svn'] == 1) {
33c1bcb0
       output('<td colspan="2"><em><strong>Sonderanwendung:</strong> Subversion-Server</em></td>');
832d06da
     }
     else {
       $php = $vhost['php'];
       switch ($php)
       {
49fd23ed
         /* To create new PHP icon:
            convert ok.png -gravity center -draw "text 0,0 '7.2'" ok-php72.png
         */
832d06da
         case NULL:
da0e59cc
           $php = icon_disabled('PHP ausgeschaltet');
832d06da
           break;
b4c3e67f
         case 'php56':
           $php = icon_enabled_phpxx('PHP in Version 5.6 eingeschaltet', 5, 6);
832d06da
           break;
b3ed510f
         case 'fpm70':
da1ba0c3
           $php = icon_enabled_phpxx('PHP in Version 7.0 eingeschaltet', 7, 0);
           break;
b3ed510f
         case 'fpm71':
           $php = icon_enabled_phpxx('PHP in Version 7.1 eingeschaltet', 7, 1);
           break;
49fd23ed
         case 'fpm72':
           $php = icon_enabled_phpxx('PHP in Version 7.2 eingeschaltet', 7, 2);
           break;
832d06da
       }
       output("<td>{$php}</td>");
       if ($vhost['docroot_is_default'] == 1)
         output("<td><span style=\"color:#777;\">{$vhost['docroot']}</span></td>");
       else
         output("<td><strong>{$vhost['docroot']}</strong></td>");
     }
33c1bcb0
     output("</tr>\n");
72518278
   }
ec226905
   output('</table>');
4b6dffbd
   if ($traffic_sum > 0) {
     $traffic_string = $traffic_sum.' MB';
     if ($traffic_sum > 1024) {
       $traffic_string = round($traffic_sum / 1024, 2).' GB';
     }
421680ba
     output('<p><strong>Traffic insgesamt: '.$traffic_string.'</strong> in den letzten 30 Tagen</p>');
4b6dffbd
   }
   output('<p style="font-size: 90%;"><sup>*</sup>)&#160;Dieser Wert stellt den Datenverkehr dieser Website für die letzten 30 Tage dar.</p>');
   output('<p style="font-size: 90%;"><sup>**</sup>)&#160;schwach geschriebene Pfadangaben bezeichnen die Standardeinstellung. Ist ein Pfad fett dargestellt, so haben Sie einen davon abweichenden Wert eingegeben.</p>');
72518278
 }
c1085e1c
 else // keine VHosts vorhanden
 {
   output("<p><strong><em>Bisher haben Sie keine Domain bzw. Subdomain eingerichtet.</em></strong></p>");
 }
72518278
 
45e40a07
 addnew('edit', 'Neue Domain bzw. Subdomain einrichten');
 
d27efa24
 output('<p>Bei passenden Einstellungen wird für jede Ihrer Websites automatisch ein Zertifikat von Let\'s Encrypt verwaltet und regelmäßig erneuert. Wenn Sie ein Zertifikat einsetzen möchten, das von einer anderen Zertifizierungsstelle ausgestellt ist, können Sie dieses hier hochladen.</p>');
 addnew('newcert', 'Ein eigenes HTTPS-Zertifikat eintragen');
 
72518278
 ?>