Merge pull request #17792 from kamil-tekiela/performConfigChecksServersSetBlowfishSecret

Refactor ServerConfigChecks::performConfigChecks
This commit is contained in:
Maurício Meneghini Fauth 2022-10-17 20:10:56 -03:00 committed by GitHub
commit bc71e6c474
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 122 deletions

View File

@ -16,7 +16,6 @@ use function __;
use function function_exists;
use function htmlspecialchars;
use function ini_get;
use function is_string;
use function mb_strlen;
use function sodium_crypto_secretbox_keygen;
use function sprintf;
@ -47,17 +46,10 @@ class ServerConfigChecks
*/
public function performConfigChecks(): void
{
$blowfishSecret = $this->cfg->get('blowfish_secret');
$blowfishSecretSet = false;
$cookieAuthUsed = false;
/** @var string $blowfishSecret */
$blowfishSecret = $this->cfg->get('blowfish_secret', '');
[$cookieAuthUsed, $blowfishSecret, $blowfishSecretSet] = $this->performConfigChecksServers(
$cookieAuthUsed,
$blowfishSecret,
$blowfishSecretSet
);
$this->performConfigChecksCookieAuthUsed($cookieAuthUsed, $blowfishSecretSet, $blowfishSecret);
$this->performConfigChecksServers($blowfishSecret);
// $cfg['AllowArbitraryServer']
// should be disabled
@ -122,19 +114,14 @@ class ServerConfigChecks
/**
* Check config of servers
*
* @param bool $cookieAuthUsed Cookie auth is used
* @param string $blowfishSecret Blowfish secret
* @param bool $blowfishSecretSet Blowfish secret set
*
* @return array
* @param string $blowfishSecret Blowfish secret
*/
protected function performConfigChecksServers(
$cookieAuthUsed,
$blowfishSecret,
$blowfishSecretSet
) {
protected function performConfigChecksServers(string $blowfishSecret): void
{
$blowfishSecretSet = false;
$serverCnt = $this->cfg->getServerCount();
$isCookieAuthUsed = (int) $cookieAuthUsed;
$isCookieAuthUsed = 0;
for ($i = 1; $i <= $serverCnt; $i++) {
$cookieAuthServer = ($this->cfg->getValue('Servers/' . $i . '/auth_type') === 'cookie');
$isCookieAuthUsed |= (int) $cookieAuthServer;
@ -144,11 +131,10 @@ class ServerConfigChecks
);
$serverName = htmlspecialchars($serverName);
[$blowfishSecret, $blowfishSecretSet] = $this->performConfigChecksServersSetBlowfishSecret(
$blowfishSecret,
$cookieAuthServer,
$blowfishSecretSet
);
if ($cookieAuthServer && (mb_strlen($blowfishSecret, '8bit') !== SODIUM_CRYPTO_SECRETBOX_KEYBYTES)) {
$blowfishSecretSet = true;
$this->cfg->set('blowfish_secret', sodium_crypto_secretbox_keygen());
}
// $cfg['Servers'][$i]['ssl']
// should be enabled if possible
@ -226,39 +212,24 @@ class ServerConfigChecks
);
}
return [
(bool) $isCookieAuthUsed,
$blowfishSecret,
$blowfishSecretSet,
];
}
/**
* Set blowfish secret
*
* @param string|null $blowfishSecret Blowfish secret
* @param bool $cookieAuthServer Cookie auth is used
* @param bool $blowfishSecretSet Blowfish secret set
*
* @return array<int, bool|string|null>
*/
protected function performConfigChecksServersSetBlowfishSecret(
$blowfishSecret,
$cookieAuthServer,
$blowfishSecretSet
): array {
if (
$cookieAuthServer
&& (! is_string($blowfishSecret) || mb_strlen($blowfishSecret, '8bit') !== SODIUM_CRYPTO_SECRETBOX_KEYBYTES)
) {
$blowfishSecretSet = true;
$this->cfg->set('blowfish_secret', sodium_crypto_secretbox_keygen());
// $cfg['blowfish_secret']
// it's required for 'cookie' authentication
if ($isCookieAuthUsed === 0 || ! $blowfishSecretSet) {
return;
}
return [
$blowfishSecret,
$blowfishSecretSet,
];
// 'cookie' auth used, blowfish_secret was generated
SetupIndex::messagesSet(
'notice',
'blowfish_secret_created',
Descriptions::get('blowfish_secret'),
Sanitize::sanitizeMessage(__(
'You didn\'t have blowfish secret set and have enabled '
. '[kbd]cookie[/kbd] authentication, so a key was automatically '
. 'generated for you. It is used to encrypt cookies; you don\'t need to '
. 'remember it.'
))
);
}
/**
@ -334,38 +305,6 @@ class ServerConfigChecks
);
}
/**
* Check config of servers
*
* @param bool $cookieAuthUsed Cookie auth is used
* @param bool $blowfishSecretSet Blowfish secret set
* @param string $blowfishSecret Blowfish secret
*/
protected function performConfigChecksCookieAuthUsed(
$cookieAuthUsed,
$blowfishSecretSet,
$blowfishSecret
): void {
// $cfg['blowfish_secret']
// it's required for 'cookie' authentication
if (! $cookieAuthUsed || ! $blowfishSecretSet) {
return;
}
// 'cookie' auth used, blowfish_secret was generated
SetupIndex::messagesSet(
'notice',
'blowfish_secret_created',
Descriptions::get('blowfish_secret'),
Sanitize::sanitizeMessage(__(
'You didn\'t have blowfish secret set and have enabled '
. '[kbd]cookie[/kbd] authentication, so a key was automatically '
. 'generated for you. It is used to encrypt cookies; you don\'t need to '
. 'remember it.'
))
);
}
/**
* Check configuration for login cookie
*/

View File

@ -620,26 +620,6 @@ parameters:
count: 1
path: libraries/classes/Config/Forms/User/SqlForm.php
-
message: "#^Method PhpMyAdmin\\\\Config\\\\ServerConfigChecks\\:\\:performConfigChecksServers\\(\\) return type has no value type specified in iterable type array\\.$#"
count: 1
path: libraries/classes/Config/ServerConfigChecks.php
-
message: "#^Parameter \\#1 \\$blowfishSecret of method PhpMyAdmin\\\\Config\\\\ServerConfigChecks\\:\\:performConfigChecksServersSetBlowfishSecret\\(\\) expects string\\|null, bool\\|string\\|null given\\.$#"
count: 1
path: libraries/classes/Config/ServerConfigChecks.php
-
message: "#^Parameter \\#2 \\$blowfishSecret of method PhpMyAdmin\\\\Config\\\\ServerConfigChecks\\:\\:performConfigChecksServers\\(\\) expects string, mixed given\\.$#"
count: 1
path: libraries/classes/Config/ServerConfigChecks.php
-
message: "#^Parameter \\#3 \\$blowfishSecretSet of method PhpMyAdmin\\\\Config\\\\ServerConfigChecks\\:\\:performConfigChecksServersSetBlowfishSecret\\(\\) expects bool, bool\\|string\\|null given\\.$#"
count: 1
path: libraries/classes/Config/ServerConfigChecks.php
-
message: "#^Cannot access offset int\\|string on mixed\\.$#"
count: 1

View File

@ -688,18 +688,7 @@
</ReferenceConstraintViolation>
</file>
<file src="libraries/classes/Config/ServerConfigChecks.php">
<InvalidScalarArgument occurrences="2">
<code>$blowfishSecret</code>
<code>$blowfishSecretSet</code>
</InvalidScalarArgument>
<MixedArgument occurrences="4">
<code>$blowfishSecret</code>
<code>$blowfishSecret</code>
<code>$blowfishSecretSet</code>
<code>$cookieAuthUsed</code>
</MixedArgument>
<MixedAssignment occurrences="2">
<code>$blowfishSecret</code>
<MixedAssignment occurrences="1">
<code>$loginCookieValidity</code>
</MixedAssignment>
</file>