diff --git a/php/src/Controller/ConfigurationController.php b/php/src/Controller/ConfigurationController.php index 61f22f27..e43a380f 100644 --- a/php/src/Controller/ConfigurationController.php +++ b/php/src/Controller/ConfigurationController.php @@ -25,6 +25,12 @@ class ConfigurationController $this->configurationManager->SetDomain($request->getParsedBody()['domain']); } + if (isset($request->getParsedBody()['current-master-password']) || isset($request->getParsedBody()['new-master-password'])) { + $currentMasterPassword = $request->getParsedBody()['current-master-password'] ?? ''; + $newMasterPassword = $request->getParsedBody()['new-master-password'] ?? ''; + $this->configurationManager->ChangeMasterPassword($currentMasterPassword, $newMasterPassword); + } + if (isset($request->getParsedBody()['borg_backup_host_location'])) { $this->configurationManager->SetBorgBackupHostLocation($request->getParsedBody()['borg_backup_host_location']); } diff --git a/php/src/Data/ConfigurationManager.php b/php/src/Data/ConfigurationManager.php index f98cab2b..d4eab72f 100644 --- a/php/src/Data/ConfigurationManager.php +++ b/php/src/Data/ConfigurationManager.php @@ -236,6 +236,34 @@ class ConfigurationManager $this->WriteConfig($config); } + /** + * @throws InvalidSettingConfigurationException + */ + public function ChangeMasterPassword(string $currentPassword, string $newPassword) : void { + if ($currentPassword === '') { + throw new InvalidSettingConfigurationException("Please enter your current password."); + } + + if ($currentPassword !== $this->GetPassword()) { + throw new InvalidSettingConfigurationException("The entered current password is not correct."); + } + + if ($newPassword === '') { + throw new InvalidSettingConfigurationException("Please enter a new password."); + } + + if (strlen($newPassword) < 24) { + throw new InvalidSettingConfigurationException("New passwords must be >= 24 digits."); + } + + if (!preg_match("#^[a-zA-Z0-9 ]+$#", $newPassword)) { + throw new InvalidSettingConfigurationException('Not allowed characters in the new password.'); + } + + // All checks pass so set the password + $this->SetPassword($newPassword); + } + public function GetApachePort() : string { $port = getenv('APACHE_PORT'); if ($port === false) { diff --git a/php/templates/containers.twig b/php/templates/containers.twig index 3875d266..bbaf8fb3 100644 --- a/php/templates/containers.twig +++ b/php/templates/containers.twig @@ -19,8 +19,6 @@