2021-11-30 11:20:42 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace AIO\Controller;
|
|
|
|
|
|
|
|
|
|
use AIO\ContainerDefinitionFetcher;
|
|
|
|
|
use AIO\Data\ConfigurationManager;
|
|
|
|
|
use AIO\Data\InvalidSettingConfigurationException;
|
|
|
|
|
use AIO\Docker\DockerActionManager;
|
|
|
|
|
use Psr\Http\Message\ResponseInterface as Response;
|
|
|
|
|
use Psr\Http\Message\ServerRequestInterface as Request;
|
|
|
|
|
|
2024-10-07 10:12:43 +02:00
|
|
|
readonly class ConfigurationController {
|
2021-11-30 11:20:42 +01:00
|
|
|
public function __construct(
|
2024-10-07 10:12:43 +02:00
|
|
|
private ConfigurationManager $configurationManager
|
2021-11-30 11:20:42 +01:00
|
|
|
) {
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-30 09:32:51 +02:00
|
|
|
public function SetConfig(Request $request, Response $response, array $args): Response {
|
2021-11-30 11:20:42 +01:00
|
|
|
try {
|
|
|
|
|
if (isset($request->getParsedBody()['domain'])) {
|
2022-03-21 13:23:17 +01:00
|
|
|
$domain = $request->getParsedBody()['domain'] ?? '';
|
2025-11-07 15:05:36 +01:00
|
|
|
$skipDomainValidation = isset($request->getParsedBody()['skip_domain_validation']);
|
|
|
|
|
$this->configurationManager->SetDomain($domain, $skipDomainValidation);
|
2021-11-30 11:20:42 +01:00
|
|
|
}
|
|
|
|
|
|
2022-03-08 21:16:33 +01:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-07 22:19:56 +01:00
|
|
|
if (isset($request->getParsedBody()['borg_backup_host_location']) || isset($request->getParsedBody()['borg_remote_repo'])) {
|
2022-03-21 13:23:17 +01:00
|
|
|
$location = $request->getParsedBody()['borg_backup_host_location'] ?? '';
|
2024-11-07 22:19:56 +01:00
|
|
|
$borgRemoteRepo = $request->getParsedBody()['borg_remote_repo'] ?? '';
|
|
|
|
|
$this->configurationManager->SetBorgLocationVars($location, $borgRemoteRepo);
|
2022-03-21 13:23:17 +01:00
|
|
|
}
|
|
|
|
|
|
2024-11-07 22:19:56 +01:00
|
|
|
if (isset($request->getParsedBody()['borg_restore_host_location']) || isset($request->getParsedBody()['borg_restore_remote_repo']) || isset($request->getParsedBody()['borg_restore_password'])) {
|
2022-03-21 13:23:17 +01:00
|
|
|
$restoreLocation = $request->getParsedBody()['borg_restore_host_location'] ?? '';
|
2024-11-07 22:19:56 +01:00
|
|
|
$borgRemoteRepo = $request->getParsedBody()['borg_restore_remote_repo'] ?? '';
|
2022-03-21 13:23:17 +01:00
|
|
|
$borgPassword = $request->getParsedBody()['borg_restore_password'] ?? '';
|
2024-11-07 22:19:56 +01:00
|
|
|
$this->configurationManager->SetBorgRestoreLocationVarsAndPassword($restoreLocation, $borgRemoteRepo, $borgPassword);
|
2021-11-30 11:20:42 +01:00
|
|
|
}
|
|
|
|
|
|
2022-04-04 19:12:07 +02:00
|
|
|
if (isset($request->getParsedBody()['daily_backup_time'])) {
|
2022-07-10 21:47:25 +02:00
|
|
|
if (isset($request->getParsedBody()['automatic_updates'])) {
|
|
|
|
|
$enableAutomaticUpdates = true;
|
|
|
|
|
} else {
|
|
|
|
|
$enableAutomaticUpdates = false;
|
|
|
|
|
}
|
2023-10-09 17:18:40 +02:00
|
|
|
if (isset($request->getParsedBody()['success_notification'])) {
|
|
|
|
|
$successNotification = true;
|
|
|
|
|
} else {
|
|
|
|
|
$successNotification = false;
|
|
|
|
|
}
|
2022-04-04 19:12:07 +02:00
|
|
|
$dailyBackupTime = $request->getParsedBody()['daily_backup_time'] ?? '';
|
2023-10-09 17:18:40 +02:00
|
|
|
$this->configurationManager->SetDailyBackupTime($dailyBackupTime, $enableAutomaticUpdates, $successNotification);
|
2022-04-04 19:12:07 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isset($request->getParsedBody()['delete_daily_backup_time'])) {
|
|
|
|
|
$this->configurationManager->DeleteDailyBackupTime();
|
|
|
|
|
}
|
2022-08-22 17:35:03 +02:00
|
|
|
|
|
|
|
|
if (isset($request->getParsedBody()['additional_backup_directories'])) {
|
|
|
|
|
$additionalBackupDirectories = $request->getParsedBody()['additional_backup_directories'] ?? '';
|
|
|
|
|
$this->configurationManager->SetAdditionalBackupDirectories($additionalBackupDirectories);
|
|
|
|
|
}
|
2022-04-04 19:12:07 +02:00
|
|
|
|
2022-05-18 18:36:51 +02:00
|
|
|
if (isset($request->getParsedBody()['delete_timezone'])) {
|
2026-01-19 12:17:25 +01:00
|
|
|
$this->configurationManager->deleteTimezone();
|
2022-05-18 18:36:51 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isset($request->getParsedBody()['timezone'])) {
|
|
|
|
|
$timezone = $request->getParsedBody()['timezone'] ?? '';
|
2026-01-19 12:17:25 +01:00
|
|
|
$this->configurationManager->timezone = $timezone;
|
2022-05-18 18:36:51 +02:00
|
|
|
}
|
|
|
|
|
|
2022-03-16 14:29:30 +01:00
|
|
|
if (isset($request->getParsedBody()['options-form'])) {
|
2022-03-17 10:13:21 +01:00
|
|
|
if (isset($request->getParsedBody()['collabora']) && isset($request->getParsedBody()['onlyoffice'])) {
|
|
|
|
|
throw new InvalidSettingConfigurationException("Collabora and Onlyoffice are not allowed to be enabled at the same time!");
|
|
|
|
|
}
|
2026-01-19 12:01:53 +01:00
|
|
|
$this->configurationManager->isClamavEnabled = isset($request->getParsedBody()['clamav']);
|
2026-01-19 12:02:41 +01:00
|
|
|
$this->configurationManager->isOnlyofficeEnabled = isset($request->getParsedBody()['onlyoffice']);
|
2026-01-19 12:03:12 +01:00
|
|
|
$this->configurationManager->isCollaboraEnabled = isset($request->getParsedBody()['collabora']);
|
2026-01-19 12:03:38 +01:00
|
|
|
$this->configurationManager->isTalkEnabled = isset($request->getParsedBody()['talk']);
|
2026-01-19 12:04:04 +01:00
|
|
|
$this->configurationManager->isTalkRecordingEnabled = isset($request->getParsedBody()['talk-recording']);
|
2026-01-19 12:04:24 +01:00
|
|
|
$this->configurationManager->isImaginaryEnabled = isset($request->getParsedBody()['imaginary']);
|
2026-01-19 12:04:48 +01:00
|
|
|
$this->configurationManager->isFulltextsearchEnabled = isset($request->getParsedBody()['fulltextsearch']);
|
2026-01-19 12:56:10 +01:00
|
|
|
$this->configurationManager->isDockerSocketProxyEnabled = isset($request->getParsedBody()['docker-socket-proxy']);
|
2026-01-19 13:00:22 +01:00
|
|
|
$this->configurationManager->isWhiteboardEnabled = isset($request->getParsedBody()['whiteboard']);
|
2022-03-15 23:46:58 +01:00
|
|
|
}
|
|
|
|
|
|
2025-05-30 09:32:51 +02:00
|
|
|
if (isset($request->getParsedBody()['community-form'])) {
|
2025-05-30 12:48:15 +02:00
|
|
|
$cc = $this->configurationManager->listAvailableCommunityContainers();
|
|
|
|
|
$enabledCC = [];
|
|
|
|
|
/**
|
|
|
|
|
* @psalm-suppress PossiblyNullIterator
|
|
|
|
|
*/
|
|
|
|
|
foreach ($request->getParsedBody() as $item) {
|
|
|
|
|
if (array_key_exists($item , $cc)) {
|
|
|
|
|
$enabledCC[] = $item;
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-01-19 15:44:22 +01:00
|
|
|
$this->configurationManager->aio_community_containers = $enabledCC;
|
2025-05-30 09:32:51 +02:00
|
|
|
}
|
|
|
|
|
|
2022-06-27 15:29:17 +02:00
|
|
|
if (isset($request->getParsedBody()['delete_collabora_dictionaries'])) {
|
|
|
|
|
$this->configurationManager->DeleteCollaboraDictionaries();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isset($request->getParsedBody()['collabora_dictionaries'])) {
|
|
|
|
|
$collaboraDictionaries = $request->getParsedBody()['collabora_dictionaries'] ?? '';
|
2026-01-23 17:35:52 +01:00
|
|
|
$this->configurationManager->collaboraDictionaries = $collaboraDictionaries;
|
2022-06-27 15:29:17 +02:00
|
|
|
}
|
|
|
|
|
|
2025-02-26 14:30:55 +01:00
|
|
|
if (isset($request->getParsedBody()['delete_collabora_additional_options'])) {
|
2026-01-19 12:21:23 +01:00
|
|
|
$this->configurationManager->deleteAdditionalCollaboraOptions();
|
2025-02-26 14:30:55 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isset($request->getParsedBody()['collabora_additional_options'])) {
|
|
|
|
|
$additionalCollaboraOptions = $request->getParsedBody()['collabora_additional_options'] ?? '';
|
2026-01-19 12:21:23 +01:00
|
|
|
$this->configurationManager->collabora_additional_options = $additionalCollaboraOptions;
|
2025-02-26 14:30:55 +01:00
|
|
|
}
|
|
|
|
|
|
2024-11-07 22:19:56 +01:00
|
|
|
if (isset($request->getParsedBody()['delete_borg_backup_location_vars'])) {
|
2025-12-02 12:42:13 +01:00
|
|
|
$this->configurationManager->DeleteBorgBackupLocationItems();
|
2023-06-10 14:18:05 +02:00
|
|
|
}
|
|
|
|
|
|
2025-08-23 01:30:20 +02:00
|
|
|
return $response->withStatus(201)->withHeader('Location', '.');
|
2021-11-30 11:20:42 +01:00
|
|
|
} catch (InvalidSettingConfigurationException $ex) {
|
|
|
|
|
$response->getBody()->write($ex->getMessage());
|
|
|
|
|
return $response->withStatus(422);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|