Generate WCF_UUID earlier during installation
authorTim Düsterhus <duesterhus@woltlab.com>
Fri, 21 Apr 2023 11:07:24 +0000 (13:07 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Mon, 24 Apr 2023 08:53:30 +0000 (10:53 +0200)
This is required for cronjob randomization. Some additional changes needed to
be performed to not break WCFSetup. As the options.inc.php is rewritten, the
cookie prefix update needs to be moved into the install script from
PackageInstallationDispatcher.

com.woltlab.wcf/package.xml
wcfsetup/install/files/acp/install_com.woltlab.wcf_step1.php
wcfsetup/install/files/acp/install_com.woltlab.wcf_step2.php
wcfsetup/install/files/lib/system/package/PackageInstallationDispatcher.class.php

index d89b20deb6ed590b3372aa19db2de51dd3a71b56..1b8e0f2c4837a74cbe73c522b86929f8d7d2f8a3 100644 (file)
@@ -23,7 +23,7 @@
                <instruction type="template" run="standalone" />
 
                <instruction type="eventListener" />
-               <instruction type="script">acp/install_com.woltlab.wcf_step1.php</instruction>
+               <instruction type="script" run="standalone">acp/install_com.woltlab.wcf_step1.php</instruction>
                <instruction type="cronjob" />
                <instruction type="coreObject" />
                <instruction type="clipboardAction" />
index c8f7f72d91ca4f89c86524f15463601882abeb62..e65aa10d2d8c63a6fb32d8489b924e07b61f7a1b 100644 (file)
@@ -1,14 +1,17 @@
 <?php
 
 /**
- * @author  Marcel Werk
- * @copyright   2001-2019 WoltLab GmbH
+ * @author Tim Duesterhus, Marcel Werk
+ * @copyright 2001-2023 WoltLab GmbH
  * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
  */
 
+use ParagonIE\ConstantTime\Hex;
+use wcf\data\option\OptionEditor;
 use wcf\system\user\storage\UserStorageHandler;
 use wcf\system\WCF;
 use wcf\util\DateUtil;
+use wcf\util\StringUtil;
 
 // change the priority of the PIPs to "1"
 $sql = "UPDATE  wcf1_package_installation_plugin
@@ -19,16 +22,38 @@ $statement->execute([1]);
 // Clear any outdated cached data from WCFSetup.
 UserStorageHandler::getInstance()->clear();
 
-// get server timezone
+// Configure early dynamic option values
+
+$sql = "UPDATE  wcf1_option
+        SET     optionValue = ?
+        WHERE   optionName = ?";
+$statement = WCF::getDB()->prepare($sql);
+$statement->execute([
+    StringUtil::getUUID(),
+    'wcf_uuid',
+]);
+
+$statement->execute([
+    Hex::encode(\random_bytes(20)),
+    'signature_secret',
+]);
+
+if (\file_exists(WCF_DIR . 'cookiePrefix.txt')) {
+    $statement->execute([
+        COOKIE_PREFIX,
+        'cookie_prefix',
+    ]);
+
+    @\unlink(WCF_DIR . 'cookiePrefix.txt');
+}
+
 if ($timezone = @\date_default_timezone_get()) {
     if (\in_array($timezone, DateUtil::getAvailableTimezones())) {
-        $sql = "UPDATE  wcf1_option
-                SET     optionValue = ?
-                WHERE   optionName = ?";
-        $statement = WCF::getDB()->prepare($sql);
         $statement->execute([
             $timezone,
             'timezone',
         ]);
     }
 }
+
+OptionEditor::resetCache();
index e5f39473e7f45efc328c30ade18d42839960dd3a..1c8948571765955200d806453cc95ec8920350f3 100644 (file)
@@ -121,15 +121,10 @@ $statement->execute([
 ]);
 
 // Configure dynamic option values
-
 $sql = "UPDATE  wcf1_option
         SET     optionValue = ?
         WHERE   optionName = ?";
 $statement = WCF::getDB()->prepare($sql);
-$statement->execute([
-    StringUtil::getUUID(),
-    'wcf_uuid',
-]);
 
 if (
     ImagickImageAdapter::isSupported()
index 8a68e6dddcd1e3cc4e841fe02760282a89373b89..502decb4f3ad1e1204c68e81ae0755c02df8c829 100644 (file)
@@ -268,25 +268,6 @@ class PackageInstallationDispatcher
      */
     protected function finalizeWcfSetup(): void
     {
-        $sql = "UPDATE  wcf1_option
-                SET     optionValue = ?
-                WHERE   optionName = ?";
-        $statement = WCF::getDB()->prepare($sql);
-
-        if (\file_exists(WCF_DIR . 'cookiePrefix.txt')) {
-            $statement->execute([
-                COOKIE_PREFIX,
-                'cookie_prefix',
-            ]);
-
-            @\unlink(WCF_DIR . 'cookiePrefix.txt');
-        }
-
-        $statement->execute([
-            $signatureSecret = Hex::encode(\random_bytes(20)),
-            'signature_secret',
-        ]);
-        \define('SIGNATURE_SECRET', $signatureSecret);
         HeaderUtil::setCookie(
             'user_session',
             CryptoUtil::createSignedString(