-
+
diff --git a/wcfsetup/test.php b/wcfsetup/test.php
index a9277de7d8f..f6c41db8949 100644
--- a/wcfsetup/test.php
+++ b/wcfsetup/test.php
@@ -11,7 +11,7 @@
$language = $_GET['language'];
}
-const WSC_SRT_VERSION = '6.0.0';
+const WSC_SRT_VERSION = '6.1.0';
$requiredExtensions = [
'ctype',
'dom',
@@ -82,6 +82,10 @@
'de' => 'Bitte stellen Sie sicher, dass MySQL 8.0.30+ oder MariaDB 10.5.15+ mit InnoDB-Unterstützung vorhanden ist.',
'en' => 'Please make sure that MySQL 8.0.30+ or MariaDB 10.5.15+, with InnoDB support is available.',
],
+ 'tls_failure' => [
+ 'de' => 'Die Seite wird nicht über HTTPS aufgerufen. Wichtige Funktionen stehen dadurch nicht zur Verfügung, die für die korrekte Funktionsweise der Software erforderlich sind.',
+ 'en' => 'The page is not accessed via HTTPS. Important features that are required for the proper operation of the software are therefore not available.',
+ ],
'result' => [
'de' => 'Ergebnis',
'en' => 'Summary',
@@ -185,7 +189,7 @@ function checkResult()
{
global $requiredExtensions;
- if (!checkPHPVersion() || !checkX64() || !checkMemoryLimit() || !checkOpcache()) {
+ if (!checkPHPVersion() || !checkX64() || !checkMemoryLimit() || !checkOpcache() || !checkTls()) {
return false;
}
@@ -224,9 +228,30 @@ function checkOpcache()
return true;
}
+function checkTls(): bool
+{
+ // @see \wcf\system\request\RouteHandler::secureConnection()
+ if (
+ (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off')
+ || $_SERVER['SERVER_PORT'] == 443
+ || (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
+ ) {
+ return true;
+ }
+
+ // @see \wcf\system\request\RouteHandler::secureContext()
+ $host = $_SERVER['HTTP_HOST'];
+ if ($host === '127.0.0.1' || $host === 'localhost' || \str_ends_with($host, '.localhost')) {
+ return true;
+ }
+
+ return false;
+}
-?>
+?>
+
+
@@ -238,7 +263,7 @@ function checkOpcache()
background-color: #2D2D2D;
box-sizing: border-box;
color: #c0c0c0;
- font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-size: 14px;
line-height: 1.5;
}
@@ -272,7 +297,7 @@ function checkOpcache()
margin-bottom: 15px;
}
- header > img {
+ header>img {
flex: 0 auto;
}
@@ -283,11 +308,11 @@ function checkOpcache()
padding: 0;
}
- .language-switcher > li {
+ .language-switcher>li {
display: inline;
}
- .language-switcher > li + li {
+ .language-switcher>li+li {
border-left: 1px solid #444444;
margin-left: 10px;
padding-left: 10px;
@@ -313,12 +338,13 @@ function checkOpcache()
text-align: right;
}
- footer > a {
+ footer>a {
color: inherit;
text-decoration: none;
}
- h2, h3 {
+ h2,
+ h3 {
margin: 0 0 10px 0;
font-weight: 300;
padding: 0;
@@ -346,6 +372,7 @@ function checkOpcache()
margin-bottom: 10px;
padding: 0 20px;
}
+
ul.system-requirements li::before {
font-family: Georgia, "Times New Roman", serif;
margin-right: 10px;
@@ -354,18 +381,23 @@ function checkOpcache()
li.success {
color: #00c291;
}
+
li.success::before {
content: '✔';
}
+
li.failure {
color: #f08f84;
}
+
li.failure::before {
content: '✘';
}
+
li.info {
color: #63b0e3;
}
+
li.info::before {
content: '✔';
}
@@ -376,6 +408,7 @@ function checkOpcache()
color: #fff;
padding: 10px 20px;
}
+
p.success::before,
p.failure::before {
font-family: Georgia, "Times New Roman", serif;
@@ -385,6 +418,7 @@ function checkOpcache()
p.success {
background-color: #008563;
}
+
p.success::before {
content: '✔';
}
@@ -392,6 +426,7 @@ function checkOpcache()
p.failure {
background-color: #de2f1b;
}
+
p.failure::before {
content: '✘';
}
@@ -415,86 +450,92 @@ function checkOpcache()
}
+
-
-
-
-
-
-
-
- WoltLab Suite System Requirements Test
-
- =getPhrase('php_requirements')?>
-
-
-
- - =getPhrase('php_version_success', [\PHP_VERSION])?>
-
-
- - =getPhrase('php_x64_success')?>
-
- - =getPhrase('php_x64_failure')?>
-
+
+
+
+
+
+
+
+ WoltLab Suite System Requirements Test
+
+ = getPhrase('php_requirements') ?>
+
+
+
+ - = getPhrase('php_version_success', [\PHP_VERSION]) ?>
+
+
+ - = getPhrase('php_x64_success') ?>
+
+ - = getPhrase('php_x64_failure') ?>
+
+
+
+
+ - = getPhrase('php_extension_success', [$extension]) ?>
+
+ - = getPhrase('php_extension_failure', [$extension]) ?>
+
+
-
-
- - =getPhrase('php_extension_success', [$extension])?>
+
+ - = getPhrase('php_extension_success', ['Imagick']) ?>
+
+
+ - = getPhrase('php_extension_success', ['GD']) ?>
+
+ - = getPhrase('php_extension_gd_or_imagick_webp_failure', ['GD']) ?>
+
- - =getPhrase('php_extension_failure', [$extension])?>
+ - = getPhrase('php_extension_gd_or_imagick_failure') ?>
-
-
- - =getPhrase('php_extension_success', ['Imagick'])?>
-
-
- - =getPhrase('php_extension_success', ['GD'])?>
+
+ - = getPhrase('php_memory_limit_success', [formatFilesizeBinary(getMemoryLimit())]) ?>
- - =getPhrase('php_extension_gd_or_imagick_webp_failure', ['GD'])?>
+ - = getPhrase('php_memory_limit_failure', [formatFilesizeBinary(getMemoryLimit())]) ?>
-
- - =getPhrase('php_extension_gd_or_imagick_failure')?>
-
-
- - =getPhrase('php_memory_limit_success', [formatFilesizeBinary(getMemoryLimit())])?>
+
+ - = getPhrase('php_opcache_failure') ?>
+
+
+
+ - = getPhrase('tls_failure') ?>
+
- - =getPhrase('php_memory_limit_failure', [formatFilesizeBinary(getMemoryLimit())])?>
+ - = getPhrase('php_version_failure', [\PHP_VERSION, $phpVersionLowerBound, $phpVersionUpperBound]) ?>
+
-
- - =getPhrase('php_opcache_failure')?>
-
+ = getPhrase('mysql_requirements') ?>
+
+
+ - = getPhrase('mysql_version') ?>
+
+
+ = getPhrase('result') ?>
+
+
+ = getPhrase('result_success') ?>
- - =getPhrase('php_version_failure', [\PHP_VERSION, $phpVersionLowerBound, $phpVersionUpperBound])?>
+ = getPhrase('result_failure') ?>
+
+
+
+ = getPhrase('button_start_installation') ?>
-
-
- =getPhrase('mysql_requirements')?>
-
-
- - =getPhrase('mysql_version')?>
-
-
- =getPhrase('result')?>
-
-
- =getPhrase('result_success')?>
-
- =getPhrase('result_failure')?>
-
-
-
- =getPhrase('button_start_installation')?>
-
-
-
-
+
+
+
-
+
+