Hanno Böck This code is published under a 0BSD license. 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. */ require_once('inc/debug.php'); require_once('inc/security.php'); require_once('inc/javascript.php'); javascript(); require_once('vhosts.php'); require_once('certs.php'); $section = 'vhosts_vhosts'; require_role(ROLE_SYSTEMUSER); $id = (isset($_GET['vhost']) ? (int) $_GET['vhost'] : 0); $vhost = empty_vhost(); if ($id != 0) { $vhost = get_vhost_details($id); } $have_v6 = false; $server = ($vhost['server'] ?? $_SESSION['userinfo']['server']); if (ipv6_possible($server)) { $have_v6 = true; } DEBUG($vhost); if ($id == 0) { title("Neue Website anlegen"); } else { title("Website bearbeiten"); } $defaultdocroot = $vhost['domain']; if (!$vhost['domain']) { $defaultdocroot = $_SESSION['userinfo']['username'] . '.' . config('masterdomain'); } if ($vhost['domain_id'] == -1) { $defaultdocroot = $_SESSION['userinfo']['username'] . '.' . config('user_vhosts_domain'); } if ($vhost['hostname']) { $defaultdocroot = $vhost['hostname'] . '.' . $defaultdocroot; } $defaultdocroot = $defaultdocroot . '/htdocs'; $is_default_docroot = ($vhost['docroot'] == null) || ($vhost['homedir'] . '/websites/' . $defaultdocroot == $vhost['docroot']); if ($vhost['docroot'] != '' && !strstr($vhost['docroot'], '/websites/')) { warning("Sie verwenden einen Speicherplatz außerhalb von »~/websites/«. Diese Einstellung ist momentan nicht mehr gestattet. Ihre Einstellung wurde daher auf die Standardeinstellung zurückgesetzt. Prüfen Sie dies bitte und verschieben Sie ggf. ihre Dateien."); $is_default_docroot = true; } $docroot = ''; if ($is_default_docroot) { $docroot = $defaultdocroot; } else { $docroot = substr($vhost['docroot'], strlen($vhost['homedir'] . '/websites/')); } $s = (strstr($vhost['options'], 'aliaswww') ? ' checked="checked" ' : ''); $errorlog = ($vhost['errorlog'] == 1 ? ' checked="checked" ' : ''); $vhost_type = 'regular'; if ($vhost['is_dav']) { $vhost_type = 'dav'; } elseif ($vhost['is_svn']) { $vhost_type = 'svn'; } elseif ($vhost['is_webapp']) { $vhost_type = 'webapp'; } $applist = list_available_webapps(); $webapp_options = ''; foreach ($applist as $app) { $webapp_options .= "\n"; } $aliaswww_options = ["forwardwww" => "Umleiten auf www-Subdomain", "forwardnowww" => "Umleiten auf Stammdomain (ohne www)", "noforward" => "Keine Umleitung"]; $aliaswww_option = 'forwardwww'; if (strstr($vhost['options'], 'aliaswww')) { // Wenn aliaswww gar nicht gesetzt war, dann soll die select-Option für forwardwww trotzdem auf dem default stehen. // Ist nicht sichtbar und wird beim Speichern auch wieder entfernt if (strstr($vhost['options'], 'forwardwww')) { $aliaswww_option = 'forwardwww'; } elseif (strstr($vhost['options'], 'forwardnowww')) { $aliaswww_option = 'forwardnowww'; } else { $aliaswww_option = 'noforward'; } } $form = "

Adresse der Website

." . domainselect($vhost['domain_id']); $form .= "

" . html_select('forwardwww', $aliaswww_options, $aliaswww_option) . "

Optionen

Speicherort für Dateien (»Document Root«)
 
" . $vhost['homedir'] . "/websites/ 
"; /* * Choose what PHP version to use */ $options = ["none" => 'ausgeschaltet', "default" => "Eingeschaltet (empfohlene Version)"]; $phpinfo = valid_php_versions(); $php_default_version = null; foreach ($phpinfo as $v) { if ($v['default'] == true) { $php_default_version = $v['major'] . '.' . $v['minor']; break; } } foreach ($phpinfo as $tag => $info) { $options[$tag] = 'PHP ' . $info['major'] . '.' . $info['minor']; if ($info['status'] == 'deprecated') { $options[$tag] .= ' (veraltet)'; } elseif ($info['status'] == 'beta') { $options[$tag] .= ' (Testversion)'; } elseif ($info['status'] == 'used') { $options[$tag] .= ' (nur Bestandsschutz)'; } } $phpoptions = "
PHP
" . html_select("php", $options, $vhost['php']) . "

Aktuell empfohlene Version: $php_default_version.
Bei der Einstellung \"empfohlene Version\" wird Ihre Website immer mit einer von uns ausgesuchten PHP-Version betrieben. Meist ist dies die zweit-neueste Version.

"; $safemode = ($vhost['cgi'] == 1 ? '' : ' checked="checked" '); $form .= "
" . $phpoptions . "
Abgesicherter Modus
 
(Deaktiviert CGI, mod_rewrite und einige weitere Funktionen mit denen die Website auf andere Orte des Home-Verzeichnisses zugreifen könnte.)
"; $form .= "

Optionen

Anwendung

Wenn Sie diese Option wählen, wird die Anwendung automatisch eingerichtet. Sie erhalten dann ihre Zugangsdaten per E-Mail.

"; $form .= "

Verwendung


"; if ($vhost_type == 'webapp') { // Wird nur noch angezeigt wenn der Vhost schon auf webapp konfiguriert ist, ansonsten nicht. // Die User sollen den Webapp-Installer benutzen. $form .= "
"; } $hsts_value = $vhost['hsts']; $hsts_preset_values = ["-1" => "aus", "86400" => "1 Tag", "2592000" => "30 Tage", "31536000" => "1 Jahr", "63072000" => "2 Jahre", "custom" => "Individuell"]; $hsts_preset_value = 'custom'; if (isset($hsts_preset_values[$hsts_value])) { $hsts_preset_value = $hsts_value; } $form .= "



Optionen

Sichere Verbindung erzwingen
" . html_select('hsts_preset', $hsts_preset_values, $hsts_preset_value) . " Sekunden

"; $certs = user_certs(); $certselect = []; $certselect[0] = 'kein Zertifikat / System-Standard benutzen'; if ($vhost_type != 'dav' && $vhost_type != 'svn') { $certselect[-1] = 'Automatische Zertifikatsverwaltung mit Let\'s Encrypt'; } foreach ($certs as $c) { if (!cert_is_letsencrypt($c['id'])) { $certselect[$c['id']] = $c['subject']; } } if (strstr($vhost['options'], 'letsencrypt')) { $vhost['certid'] = -1; } if (count($certselect) > 1) { // Nur dann gibt es was zum Auswählen $form .= "
Verwendetes Zertifikat
" . html_select('cert', $certselect, $vhost['certid']) . "

Datenschutz-Hinweis:
Alle erstellten HTTPS-Zertifikate werden automatisch in den für jeden zugänglichen Certificate-Transparency-Logs abgelegt. Die zugehörigen Subdomains sind damit auch öffentlich. Sie können die Logs mit dem Service crt.sh durchsuchen.

"; } else { $form .= "
Verwendetes Zertifikat

Für Sonderanwendungen (WebDAV, SVN) kann momentan kein Lets-Encrypt-Zertifikat verwaltet werden. Bitte beschaffen Sie ggf. ein Zertifikat und tragen Sie dieses unten auf der Websites-Übersichtsseite ein, damit es hier ausgewählt werden kann.

"; } $form .= "
Logfiles

 

Logfiles werden unter /var/log/apache2/" . $_SESSION['userinfo']['username'] . " abgelegt.

"; $ipaddrs = user_ipaddrs(); $available_users = available_suexec_users(); $available_servers = additional_servers(); $available_servers[] = my_server_id(); $available_servers = array_unique($available_servers); $selectable_servers = []; $all_servers = server_names(); foreach ($all_servers as $id => $fqdn) { if (in_array($id, $available_servers)) { $selectable_servers[$id] = $fqdn; } } if (!$vhost['server']) { $vhost['server'] = my_server_id(); } if (count($ipaddrs)) { $ipselect = [0 => 'System-Standard']; foreach ($ipaddrs as $i) { $ipselect[$i] = $i; } $form .= "
IP-Adresse
" . html_select('ipv4', $ipselect, $vhost['ipv4']) . "
"; } if (count($available_users)) { $userselect = [0 => 'Eigener Benutzeraccount']; foreach ($available_users as $u) { $userselect[$u['uid']] = $u['username']; } $form .= "
SuExec-Benutzeraccount
" . html_select('suexec_user', $userselect, $vhost['suexec_user']) . "
"; } if (count($available_servers) > 1) { $form .= "
Einrichten auf Server
" . html_select('server', $selectable_servers, $vhost['server']) . "
"; } if ($have_v6) { $ipv6_address = ''; if ($vhost['id'] && ($vhost['autoipv6'] > 0)) { $ipv6_address = 'IPv6-Adresse dieser Website: ' . autoipv6_address($vhost['id'], $vhost['autoipv6']); } $checked = ($vhost['autoipv6'] > 0) ? ' checked="checked"' : ''; $checked2 = ($vhost['autoipv6'] == 2) ? ' checked="checked"' : ''; $form .= '
IPv6
 
 
' . $ipv6_address . '
'; } $form .= '

    ' . internal_link('vhosts', 'Abbrechen') . '

'; output(html_form('vhosts_edit_vhost', 'save', 'action=edit&vhost=' . $vhost['id'], $form));