mirror of
https://github.com/nextcloud/all-in-one.git
synced 2026-02-17 03:00:21 +00:00
Compare commits
47 commits
beff7e6edb
...
3dde66f2e3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3dde66f2e3 | ||
|
|
053391dfb7 | ||
|
|
250e5a0c1e | ||
|
|
d82e85fa25 | ||
|
|
e4508a6ec1 | ||
|
|
7bcca1359d | ||
|
|
adc70bceb7 | ||
|
|
5c649c8b9d | ||
|
|
1c38926b6f | ||
|
|
5e6d3d7585 | ||
|
|
6d14bebf20 | ||
|
|
ab07bc7ca3 | ||
|
|
95fed23ce3 | ||
|
|
41bd40712a | ||
|
|
a987749cc7 | ||
|
|
69e58db642 | ||
|
|
1d51c93b87 | ||
|
|
066666c75f | ||
|
|
011f2f5a34 | ||
|
|
4cedde2936 | ||
|
|
ff095e6d9a | ||
|
|
d2e7d02a6f | ||
|
|
a83248d69f | ||
|
|
35824d4aca | ||
|
|
042037c064 | ||
|
|
844163f332 | ||
|
|
77165713f8 | ||
|
|
9096f8e8fc | ||
|
|
7ba721cb61 | ||
|
|
d29829eebc | ||
|
|
1a8aa308b8 | ||
|
|
0c4cb9165e | ||
|
|
4b14e91aa5 | ||
|
|
2f19225f81 | ||
|
|
ef8dce1a47 | ||
|
|
f63a11c05e | ||
|
|
54b5857e42 | ||
|
|
79d6458a72 | ||
|
|
3656d181a5 | ||
|
|
922e060ecc | ||
|
|
35bd920cb1 | ||
|
|
395c8dea1d | ||
|
|
c408fcdd87 | ||
|
|
66b0c579d1 | ||
|
|
e95c13b86d | ||
|
|
e2ca4af0b9 | ||
|
|
5b41770b68 |
10 changed files with 504 additions and 692 deletions
3
get-configurable-aio-variables.sh
Executable file
3
get-configurable-aio-variables.sh
Executable file
|
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
awk '/^ public [^f][^u][^n]/ { sub(/\$/, "", $3); print $3 }' php/src/Data/ConfigurationManager.php | sort
|
||||
|
|
@ -20,5 +20,10 @@
|
|||
</extraFiles>
|
||||
<issueHandlers>
|
||||
<ClassMustBeFinal errorLevel="suppress" />
|
||||
<MissingConstructor>
|
||||
<errorLevel type="suppress">
|
||||
<file name="src/Data/ConfigurationManager.php" /> <!-- We're using property hooks with virtual properties in that file, which Psalm wrongly complains about. See <https://github.com/vimeo/psalm/issues/11435>. -->
|
||||
</errorLevel>
|
||||
</MissingConstructor>
|
||||
</issueHandlers>
|
||||
</psalm>
|
||||
|
|
|
|||
|
|
@ -91,10 +91,10 @@ $app->get('/containers', function (Request $request, Response $response, array $
|
|||
$skip_domain_validation = isset($params['skip_domain_validation']);
|
||||
|
||||
return $view->render($response, 'containers.twig', [
|
||||
'domain' => $configurationManager->GetDomain(),
|
||||
'apache_port' => $configurationManager->GetApachePort(),
|
||||
'borg_backup_host_location' => $configurationManager->GetBorgBackupHostLocation(),
|
||||
'borg_remote_repo' => $configurationManager->GetBorgRemoteRepo(),
|
||||
'domain' => $configurationManager->domain,
|
||||
'apache_port' => $configurationManager->apache_port,
|
||||
'borg_backup_host_location' => $configurationManager->borg_backup_host_location,
|
||||
'borg_remote_repo' => $configurationManager->borg_remote_repo,
|
||||
'borg_public_key' => $configurationManager->GetBorgPublicKey(),
|
||||
'nextcloud_password' => $configurationManager->GetAndGenerateSecret('NEXTCLOUD_PASSWORD'),
|
||||
'containers' => (new \AIO\ContainerDefinitionFetcher($container->get(\AIO\Data\ConfigurationManager::class), $container))->FetchDefinition(),
|
||||
|
|
@ -103,42 +103,42 @@ $app->get('/containers', function (Request $request, Response $response, array $
|
|||
'has_backup_run_once' => $configurationManager->hasBackupRunOnce(),
|
||||
'is_backup_container_running' => $dockerActionManager->isBackupContainerRunning(),
|
||||
'backup_exit_code' => $dockerActionManager->GetBackupcontainerExitCode(),
|
||||
'is_instance_restore_attempt' => $configurationManager->isInstanceRestoreAttempt(),
|
||||
'borg_backup_mode' => $configurationManager->GetBackupMode(),
|
||||
'was_start_button_clicked' => $configurationManager->wasStartButtonClicked(),
|
||||
'is_instance_restore_attempt' => $configurationManager->instance_restore_attempt,
|
||||
'borg_backup_mode' => $configurationManager->backupMode,
|
||||
'was_start_button_clicked' => $configurationManager->wasStartButtonClicked,
|
||||
'has_update_available' => $dockerActionManager->isAnyUpdateAvailable(),
|
||||
'last_backup_time' => $configurationManager->GetLastBackupTime(),
|
||||
'backup_times' => $configurationManager->GetBackupTimes(),
|
||||
'current_channel' => $dockerActionManager->GetCurrentChannel(),
|
||||
'is_clamav_enabled' => $configurationManager->isClamavEnabled(),
|
||||
'is_onlyoffice_enabled' => $configurationManager->isOnlyofficeEnabled(),
|
||||
'is_collabora_enabled' => $configurationManager->isCollaboraEnabled(),
|
||||
'is_talk_enabled' => $configurationManager->isTalkEnabled(),
|
||||
'borg_restore_password' => $configurationManager->GetBorgRestorePassword(),
|
||||
'is_clamav_enabled' => $configurationManager->isClamavEnabled,
|
||||
'is_onlyoffice_enabled' => $configurationManager->isOnlyofficeEnabled,
|
||||
'is_collabora_enabled' => $configurationManager->isCollaboraEnabled,
|
||||
'is_talk_enabled' => $configurationManager->isTalkEnabled,
|
||||
'borg_restore_password' => $configurationManager->borg_restore_password,
|
||||
'daily_backup_time' => $configurationManager->GetDailyBackupTime(),
|
||||
'is_daily_backup_running' => $configurationManager->isDailyBackupRunning(),
|
||||
'timezone' => $configurationManager->GetTimezone(),
|
||||
'timezone' => $configurationManager->timezone,
|
||||
'skip_domain_validation' => $configurationManager->shouldDomainValidationBeSkipped($skip_domain_validation),
|
||||
'talk_port' => $configurationManager->GetTalkPort(),
|
||||
'collabora_dictionaries' => $configurationManager->GetCollaboraDictionaries(),
|
||||
'collabora_additional_options' => $configurationManager->GetAdditionalCollaboraOptions(),
|
||||
'talk_port' => $configurationManager->talk_port,
|
||||
'collabora_dictionaries' => $configurationManager->collabora_dictionaries,
|
||||
'collabora_additional_options' => $configurationManager->collabora_additional_options,
|
||||
'automatic_updates' => $configurationManager->areAutomaticUpdatesEnabled(),
|
||||
'is_backup_section_enabled' => $configurationManager->isBackupSectionEnabled(),
|
||||
'is_imaginary_enabled' => $configurationManager->isImaginaryEnabled(),
|
||||
'is_fulltextsearch_enabled' => $configurationManager->isFulltextsearchEnabled(),
|
||||
'is_imaginary_enabled' => $configurationManager->isImaginaryEnabled,
|
||||
'is_fulltextsearch_enabled' => $configurationManager->isFulltextsearchEnabled,
|
||||
'additional_backup_directories' => $configurationManager->GetAdditionalBackupDirectoriesString(),
|
||||
'nextcloud_datadir' => $configurationManager->GetNextcloudDatadirMount(),
|
||||
'nextcloud_mount' => $configurationManager->GetNextcloudMount(),
|
||||
'nextcloud_upload_limit' => $configurationManager->GetNextcloudUploadLimit(),
|
||||
'nextcloud_max_time' => $configurationManager->GetNextcloudMaxTime(),
|
||||
'nextcloud_memory_limit' => $configurationManager->GetNextcloudMemoryLimit(),
|
||||
'nextcloud_datadir' => $configurationManager->nextcloud_datadir_mount,
|
||||
'nextcloud_mount' => $configurationManager->nextcloud_mount,
|
||||
'nextcloud_upload_limit' => $configurationManager->nextcloud_upload_limit,
|
||||
'nextcloud_max_time' => $configurationManager->nextcloud_max_time,
|
||||
'nextcloud_memory_limit' => $configurationManager->nextcloud_memory_limit,
|
||||
'is_dri_device_enabled' => $configurationManager->isDriDeviceEnabled(),
|
||||
'is_nvidia_gpu_enabled' => $configurationManager->isNvidiaGpuEnabled(),
|
||||
'is_talk_recording_enabled' => $configurationManager->isTalkRecordingEnabled(),
|
||||
'is_docker_socket_proxy_enabled' => $configurationManager->isDockerSocketProxyEnabled(),
|
||||
'is_whiteboard_enabled' => $configurationManager->isWhiteboardEnabled(),
|
||||
'is_talk_recording_enabled' => $configurationManager->isTalkRecordingEnabled,
|
||||
'is_docker_socket_proxy_enabled' => $configurationManager->isDockerSocketProxyEnabled,
|
||||
'is_whiteboard_enabled' => $configurationManager->isWhiteboardEnabled,
|
||||
'community_containers' => $configurationManager->listAvailableCommunityContainers(),
|
||||
'community_containers_enabled' => $configurationManager->GetEnabledCommunityContainers(),
|
||||
'community_containers_enabled' => $configurationManager->aio_community_containers,
|
||||
'bypass_container_update' => $bypass_container_update,
|
||||
]);
|
||||
})->setName('profile');
|
||||
|
|
|
|||
|
|
@ -15,11 +15,11 @@ readonly class AuthManager {
|
|||
}
|
||||
|
||||
public function CheckCredentials(string $password) : bool {
|
||||
return hash_equals($this->configurationManager->GetPassword(), $password);
|
||||
return hash_equals($this->configurationManager->password, $password);
|
||||
}
|
||||
|
||||
public function CheckToken(string $token) : bool {
|
||||
return hash_equals($this->configurationManager->GetToken(), $token);
|
||||
return hash_equals($this->configurationManager->AIO_TOKEN, $token);
|
||||
}
|
||||
|
||||
public function SetAuthState(bool $isLoggedIn) : void {
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ readonly class ContainerDefinitionFetcher {
|
|||
$data = json_decode((string)file_get_contents(DataConst::GetContainersDefinitionPath()), true, 512, JSON_THROW_ON_ERROR);
|
||||
|
||||
$additionalContainerNames = [];
|
||||
foreach ($this->configurationManager->GetEnabledCommunityContainers() as $communityContainer) {
|
||||
foreach ($this->configurationManager->aio_community_containers as $communityContainer) {
|
||||
if ($communityContainer !== '') {
|
||||
$path = DataConst::GetCommunityContainersDirectory() . '/' . $communityContainer . '/' . $communityContainer . '.json';
|
||||
$additionalData = json_decode((string)file_get_contents($path), true, 512, JSON_THROW_ON_ERROR);
|
||||
|
|
@ -56,42 +56,42 @@ readonly class ContainerDefinitionFetcher {
|
|||
$containers = [];
|
||||
foreach ($data['aio_services_v1'] as $entry) {
|
||||
if ($entry['container_name'] === 'nextcloud-aio-clamav') {
|
||||
if (!$this->configurationManager->isClamavEnabled()) {
|
||||
if (!$this->configurationManager->isClamavEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-onlyoffice') {
|
||||
if (!$this->configurationManager->isOnlyofficeEnabled()) {
|
||||
if (!$this->configurationManager->isOnlyofficeEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-collabora') {
|
||||
if (!$this->configurationManager->isCollaboraEnabled()) {
|
||||
if (!$this->configurationManager->isCollaboraEnabled) {
|
||||
continue;
|
||||
}
|
||||
if ($this->configurationManager->isCollaboraSubscriptionEnabled()) {
|
||||
$entry['image'] = 'ghcr.io/nextcloud-releases/aio-collabora-online';
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-talk') {
|
||||
if (!$this->configurationManager->isTalkEnabled()) {
|
||||
if (!$this->configurationManager->isTalkEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-talk-recording') {
|
||||
if (!$this->configurationManager->isTalkRecordingEnabled()) {
|
||||
if (!$this->configurationManager->isTalkRecordingEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-imaginary') {
|
||||
if (!$this->configurationManager->isImaginaryEnabled()) {
|
||||
if (!$this->configurationManager->isImaginaryEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-fulltextsearch') {
|
||||
if (!$this->configurationManager->isFulltextsearchEnabled()) {
|
||||
if (!$this->configurationManager->isFulltextsearchEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-docker-socket-proxy') {
|
||||
if (!$this->configurationManager->isDockerSocketProxyEnabled()) {
|
||||
if (!$this->configurationManager->isDockerSocketProxyEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($entry['container_name'] === 'nextcloud-aio-whiteboard') {
|
||||
if (!$this->configurationManager->isWhiteboardEnabled()) {
|
||||
if (!$this->configurationManager->isWhiteboardEnabled) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
@ -113,18 +113,18 @@ readonly class ContainerDefinitionFetcher {
|
|||
if (isset($entry['volumes'])) {
|
||||
foreach ($entry['volumes'] as $value) {
|
||||
if($value['source'] === '%BORGBACKUP_HOST_LOCATION%') {
|
||||
$value['source'] = $this->configurationManager->GetBorgBackupHostLocation();
|
||||
$value['source'] = $this->configurationManager->borg_backup_host_location;
|
||||
if($value['source'] === '') {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if($value['source'] === '%NEXTCLOUD_MOUNT%') {
|
||||
$value['source'] = $this->configurationManager->GetNextcloudMount();
|
||||
$value['source'] = $this->configurationManager->nextcloud_mount;
|
||||
if($value['source'] === '') {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value['source'] === '%NEXTCLOUD_DATADIR%') {
|
||||
$value['source'] = $this->configurationManager->GetNextcloudDatadirMount();
|
||||
$value['source'] = $this->configurationManager->nextcloud_datadir_mount;
|
||||
if ($value['source'] === '') {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -140,7 +140,7 @@ readonly class ContainerDefinitionFetcher {
|
|||
}
|
||||
}
|
||||
if ($value['destination'] === '%NEXTCLOUD_MOUNT%') {
|
||||
$value['destination'] = $this->configurationManager->GetNextcloudMount();
|
||||
$value['destination'] = $this->configurationManager->nextcloud_mount;
|
||||
if($value['destination'] === '') {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -168,39 +168,39 @@ readonly class ContainerDefinitionFetcher {
|
|||
}
|
||||
foreach ($valueDependsOn as $value) {
|
||||
if ($value === 'nextcloud-aio-clamav') {
|
||||
if (!$this->configurationManager->isClamavEnabled()) {
|
||||
if (!$this->configurationManager->isClamavEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-onlyoffice') {
|
||||
if (!$this->configurationManager->isOnlyofficeEnabled()) {
|
||||
if (!$this->configurationManager->isOnlyofficeEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-collabora') {
|
||||
if (!$this->configurationManager->isCollaboraEnabled()) {
|
||||
if (!$this->configurationManager->isCollaboraEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-talk') {
|
||||
if (!$this->configurationManager->isTalkEnabled()) {
|
||||
if (!$this->configurationManager->isTalkEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-talk-recording') {
|
||||
if (!$this->configurationManager->isTalkRecordingEnabled()) {
|
||||
if (!$this->configurationManager->isTalkRecordingEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-imaginary') {
|
||||
if (!$this->configurationManager->isImaginaryEnabled()) {
|
||||
if (!$this->configurationManager->isImaginaryEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-fulltextsearch') {
|
||||
if (!$this->configurationManager->isFulltextsearchEnabled()) {
|
||||
if (!$this->configurationManager->isFulltextsearchEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-docker-socket-proxy') {
|
||||
if (!$this->configurationManager->isDockerSocketProxyEnabled()) {
|
||||
if (!$this->configurationManager->isDockerSocketProxyEnabled) {
|
||||
continue;
|
||||
}
|
||||
} elseif ($value === 'nextcloud-aio-whiteboard') {
|
||||
if (!$this->configurationManager->isWhiteboardEnabled()) {
|
||||
if (!$this->configurationManager->isWhiteboardEnabled) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,63 +67,27 @@ readonly class ConfigurationController {
|
|||
}
|
||||
|
||||
if (isset($request->getParsedBody()['delete_timezone'])) {
|
||||
$this->configurationManager->DeleteTimezone();
|
||||
$this->configurationManager->deleteTimezone();
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['timezone'])) {
|
||||
$timezone = $request->getParsedBody()['timezone'] ?? '';
|
||||
$this->configurationManager->SetTimezone($timezone);
|
||||
$this->configurationManager->timezone = $timezone;
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['options-form'])) {
|
||||
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!");
|
||||
}
|
||||
if (isset($request->getParsedBody()['clamav'])) {
|
||||
$this->configurationManager->SetClamavEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetClamavEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['onlyoffice'])) {
|
||||
$this->configurationManager->SetOnlyofficeEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetOnlyofficeEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['collabora'])) {
|
||||
$this->configurationManager->SetCollaboraEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetCollaboraEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['talk'])) {
|
||||
$this->configurationManager->SetTalkEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetTalkEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['talk-recording'])) {
|
||||
$this->configurationManager->SetTalkRecordingEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetTalkRecordingEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['imaginary'])) {
|
||||
$this->configurationManager->SetImaginaryEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetImaginaryEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['fulltextsearch'])) {
|
||||
$this->configurationManager->SetFulltextsearchEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetFulltextsearchEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['docker-socket-proxy'])) {
|
||||
$this->configurationManager->SetDockerSocketProxyEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetDockerSocketProxyEnabledState(0);
|
||||
}
|
||||
if (isset($request->getParsedBody()['whiteboard'])) {
|
||||
$this->configurationManager->SetWhiteboardEnabledState(1);
|
||||
} else {
|
||||
$this->configurationManager->SetWhiteboardEnabledState(0);
|
||||
}
|
||||
$this->configurationManager->isClamavEnabled = isset($request->getParsedBody()['clamav']);
|
||||
$this->configurationManager->isOnlyofficeEnabled = isset($request->getParsedBody()['onlyoffice']);
|
||||
$this->configurationManager->isCollaboraEnabled = isset($request->getParsedBody()['collabora']);
|
||||
$this->configurationManager->isTalkEnabled = isset($request->getParsedBody()['talk']);
|
||||
$this->configurationManager->isTalkRecordingEnabled = isset($request->getParsedBody()['talk-recording']);
|
||||
$this->configurationManager->isImaginaryEnabled = isset($request->getParsedBody()['imaginary']);
|
||||
$this->configurationManager->isFulltextsearchEnabled = isset($request->getParsedBody()['fulltextsearch']);
|
||||
$this->configurationManager->isDockerSocketProxyEnabled = isset($request->getParsedBody()['docker-socket-proxy']);
|
||||
$this->configurationManager->isWhiteboardEnabled = isset($request->getParsedBody()['whiteboard']);
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['community-form'])) {
|
||||
|
|
@ -137,7 +101,7 @@ readonly class ConfigurationController {
|
|||
$enabledCC[] = $item;
|
||||
}
|
||||
}
|
||||
$this->configurationManager->SetEnabledCommunityContainers($enabledCC);
|
||||
$this->configurationManager->aio_community_containers = $enabledCC;
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['delete_collabora_dictionaries'])) {
|
||||
|
|
@ -146,16 +110,16 @@ readonly class ConfigurationController {
|
|||
|
||||
if (isset($request->getParsedBody()['collabora_dictionaries'])) {
|
||||
$collaboraDictionaries = $request->getParsedBody()['collabora_dictionaries'] ?? '';
|
||||
$this->configurationManager->SetCollaboraDictionaries($collaboraDictionaries);
|
||||
$this->configurationManager->collabora_dictionaries = $collaboraDictionaries;
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['delete_collabora_additional_options'])) {
|
||||
$this->configurationManager->DeleteAdditionalCollaboraOptions();
|
||||
$this->configurationManager->deleteAdditionalCollaboraOptions();
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['collabora_additional_options'])) {
|
||||
$additionalCollaboraOptions = $request->getParsedBody()['collabora_additional_options'] ?? '';
|
||||
$this->configurationManager->SetAdditionalCollaboraOptions($additionalCollaboraOptions);
|
||||
$this->configurationManager->collabora_additional_options = $additionalCollaboraOptions;
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['delete_borg_backup_location_vars'])) {
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ readonly class DockerController {
|
|||
}
|
||||
|
||||
public function startBackup(bool $forceStopNextcloud = false) : void {
|
||||
$this->configurationManager->SetBackupMode('backup');
|
||||
$this->configurationManager->backupMode = 'backup';
|
||||
|
||||
$id = self::TOP_CONTAINER;
|
||||
$this->PerformRecursiveContainerStop($id, $forceStopNextcloud);
|
||||
|
|
@ -109,29 +109,25 @@ readonly class DockerController {
|
|||
}
|
||||
|
||||
public function checkBackup() : void {
|
||||
$this->configurationManager->SetBackupMode('check');
|
||||
$this->configurationManager->backupMode = 'check';
|
||||
|
||||
$id = 'nextcloud-aio-borgbackup';
|
||||
$this->PerformRecursiveContainerStart($id);
|
||||
}
|
||||
|
||||
private function listBackup() : void {
|
||||
$this->configurationManager->SetBackupMode('list');
|
||||
$this->configurationManager->backupMode = 'list';
|
||||
|
||||
$id = 'nextcloud-aio-borgbackup';
|
||||
$this->PerformRecursiveContainerStart($id);
|
||||
}
|
||||
|
||||
public function StartBackupContainerRestore(Request $request, Response $response, array $args) : Response {
|
||||
$this->configurationManager->SetBackupMode('restore');
|
||||
$config = $this->configurationManager->GetConfig();
|
||||
$config['selected-restore-time'] = $request->getParsedBody()['selected_restore_time'] ?? '';
|
||||
if (isset($request->getParsedBody()['restore-exclude-previews'])) {
|
||||
$config['restore-exclude-previews'] = 1;
|
||||
} else {
|
||||
$config['restore-exclude-previews'] = '';
|
||||
}
|
||||
$this->configurationManager->WriteConfig($config);
|
||||
$this->configurationManager->setMultiple(function (ConfigurationManager $confManager) use ($request) {
|
||||
$confManager->backupMode = 'restore';
|
||||
$confManager->selectedRestoreTime = $request->getParsedBody()['selected_restore_time'] ?? '';
|
||||
$confManager->restoreExcludePreviews = isset($request->getParsedBody()['restore-exclude-previews']);
|
||||
});
|
||||
|
||||
$id = self::TOP_CONTAINER;
|
||||
$forceStopNextcloud = true;
|
||||
|
|
@ -144,22 +140,22 @@ readonly class DockerController {
|
|||
}
|
||||
|
||||
public function StartBackupContainerCheckRepair(Request $request, Response $response, array $args) : Response {
|
||||
$this->configurationManager->SetBackupMode('check-repair');
|
||||
$this->configurationManager->backupMode = 'check-repair';
|
||||
|
||||
$id = 'nextcloud-aio-borgbackup';
|
||||
$this->PerformRecursiveContainerStart($id);
|
||||
|
||||
// Restore to backup check which is needed to make the UI logic work correctly
|
||||
$this->configurationManager->SetBackupMode('check');
|
||||
$this->configurationManager->backupMode = 'check';
|
||||
|
||||
return $response->withStatus(201)->withHeader('Location', '.');
|
||||
}
|
||||
|
||||
public function StartBackupContainerTest(Request $request, Response $response, array $args) : Response {
|
||||
$this->configurationManager->SetBackupMode('test');
|
||||
$config = $this->configurationManager->GetConfig();
|
||||
$config['instance_restore_attempt'] = 0;
|
||||
$this->configurationManager->WriteConfig($config);
|
||||
$this->configurationManager->setMultiple(function (ConfigurationManager $confManager) {
|
||||
$confManager->backupMode = 'test';
|
||||
$confManager->instance_restore_attempt = false;
|
||||
});
|
||||
|
||||
$id = self::TOP_CONTAINER;
|
||||
$this->PerformRecursiveContainerStop($id);
|
||||
|
|
@ -181,21 +177,13 @@ readonly class DockerController {
|
|||
$port = 443;
|
||||
}
|
||||
|
||||
if (isset($request->getParsedBody()['install_latest_major'])) {
|
||||
$installLatestMajor = 32;
|
||||
} else {
|
||||
$installLatestMajor = "";
|
||||
}
|
||||
|
||||
$config = $this->configurationManager->GetConfig();
|
||||
// set AIO_URL
|
||||
$config['AIO_URL'] = $host . ':' . (string)$port . $path;
|
||||
// set wasStartButtonClicked
|
||||
$config['wasStartButtonClicked'] = 1;
|
||||
// set install_latest_major
|
||||
$config['install_latest_major'] = $installLatestMajor;
|
||||
$this->configurationManager->WriteConfig($config);
|
||||
|
||||
$this->configurationManager->setMultiple(function (ConfigurationManager $confManager) use ($request, $host, $port, $path) {
|
||||
$confManager->install_latest_major = isset($request->getParsedBody()['install_latest_major']);
|
||||
// set AIO_URL
|
||||
$confManager->AIO_URL = $host . ':' . (string)$port . $path;
|
||||
// set wasStartButtonClicked
|
||||
$confManager->wasStartButtonClicked = true;
|
||||
});
|
||||
// Do not pull container images in case 'bypass_container_update' is set via url params
|
||||
// Needed for local testing
|
||||
$pullImage = !isset($request->getParsedBody()['bypass_container_update']);
|
||||
|
|
@ -213,10 +201,7 @@ readonly class DockerController {
|
|||
}
|
||||
|
||||
public function startTopContainer(bool $pullImage) : void {
|
||||
$config = $this->configurationManager->GetConfig();
|
||||
// set AIO_TOKEN
|
||||
$config['AIO_TOKEN'] = bin2hex(random_bytes(24));
|
||||
$this->configurationManager->WriteConfig($config);
|
||||
$this->configurationManager->AIO_TOKEN = bin2hex(random_bytes(24));
|
||||
|
||||
// Stop domaincheck since apache would not be able to start otherwise
|
||||
$this->StopDomaincheckContainer();
|
||||
|
|
@ -244,7 +229,7 @@ readonly class DockerController {
|
|||
// This is a hack but no better solution was found for the meantime
|
||||
// Stop Collabora first to make sure it force-saves
|
||||
// See https://github.com/nextcloud/richdocuments/issues/3799
|
||||
if ($id === self::TOP_CONTAINER && $this->configurationManager->isCollaboraEnabled()) {
|
||||
if ($id === self::TOP_CONTAINER && $this->configurationManager->isCollaboraEnabled) {
|
||||
$this->PerformRecursiveContainerStop('nextcloud-aio-collabora');
|
||||
}
|
||||
|
||||
|
|
@ -277,7 +262,7 @@ readonly class DockerController {
|
|||
public function StartDomaincheckContainer() : void
|
||||
{
|
||||
# Don't start if domain is already set
|
||||
if ($this->configurationManager->GetDomain() !== '' || $this->configurationManager->wasStartButtonClicked()) {
|
||||
if ($this->configurationManager->domain !== '' || $this->configurationManager->wasStartButtonClicked) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -17,7 +17,7 @@ readonly class Setup {
|
|||
}
|
||||
|
||||
$password = $this->passwordGenerator->GeneratePassword(8);
|
||||
$this->configurationManager->SetPassword($password);
|
||||
$this->configurationManager->password = $password;
|
||||
return $password;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -115,9 +115,9 @@ readonly class DockerActionManager {
|
|||
$containerName = $container->GetIdentifier();
|
||||
$internalPort = $container->GetInternalPort();
|
||||
if ($internalPort === '%APACHE_PORT%') {
|
||||
$internalPort = $this->configurationManager->GetApachePort();
|
||||
$internalPort = $this->configurationManager->apache_port;
|
||||
} elseif ($internalPort === '%TALK_PORT%') {
|
||||
$internalPort = $this->configurationManager->GetTalkPort();
|
||||
$internalPort = $this->configurationManager->talk_port;
|
||||
}
|
||||
|
||||
if ($internalPort !== "" && $internalPort !== 'host') {
|
||||
|
|
@ -205,7 +205,7 @@ readonly class DockerActionManager {
|
|||
foreach ($container->GetVolumes()->GetVolumes() as $volume) {
|
||||
// // NEXTCLOUD_MOUNT gets added via bind-mount later on
|
||||
// if ($container->GetIdentifier() === 'nextcloud-aio-nextcloud') {
|
||||
// if ($volume->name === $this->configurationManager->GetNextcloudMount()) {
|
||||
// if ($volume->name === $this->configurationManager->nextcloud_mount) {
|
||||
// continue;
|
||||
// }
|
||||
// }
|
||||
|
|
@ -228,15 +228,7 @@ readonly class DockerActionManager {
|
|||
$requestBody['HostConfig']['Binds'] = $volumes;
|
||||
}
|
||||
|
||||
$aioVariables = $container->GetAioVariables()->GetVariables();
|
||||
foreach ($aioVariables as $variable) {
|
||||
$config = $this->configurationManager->GetConfig();
|
||||
$variable = $this->replaceEnvPlaceholders($variable);
|
||||
$variableArray = explode('=', $variable);
|
||||
$config[$variableArray[0]] = $variableArray[1];
|
||||
$this->configurationManager->WriteConfig($config);
|
||||
sleep(1);
|
||||
}
|
||||
$this->configurationManager->setAioVariables($container->GetAioVariables()->GetVariables());
|
||||
|
||||
$envs = $container->GetEnvironmentVariables()->GetVariables();
|
||||
// Special thing for the nextcloud container
|
||||
|
|
@ -244,7 +236,7 @@ readonly class DockerActionManager {
|
|||
$envs[] = $this->GetAllNextcloudExecCommands();
|
||||
}
|
||||
foreach ($envs as $key => $env) {
|
||||
$envs[$key] = $this->replaceEnvPlaceholders($env);
|
||||
$envs[$key] = $this->configurationManager->replaceEnvPlaceholders($env);
|
||||
}
|
||||
|
||||
if (count($envs) > 0) {
|
||||
|
|
@ -261,13 +253,13 @@ readonly class DockerActionManager {
|
|||
$port = $value->port;
|
||||
$protocol = $value->protocol;
|
||||
if ($port === '%APACHE_PORT%') {
|
||||
$port = $this->configurationManager->GetApachePort();
|
||||
$port = $this->configurationManager->apache_port;
|
||||
// Do not expose udp if AIO is in reverse proxy mode
|
||||
if ($port !== '443' && $protocol === 'udp') {
|
||||
continue;
|
||||
}
|
||||
} else if ($port === '%TALK_PORT%') {
|
||||
$port = $this->configurationManager->GetTalkPort();
|
||||
$port = $this->configurationManager->talk_port;
|
||||
}
|
||||
$portWithProtocol = $port . '/' . $protocol;
|
||||
$exposedPorts[$portWithProtocol] = null;
|
||||
|
|
@ -283,13 +275,13 @@ readonly class DockerActionManager {
|
|||
$port = $value->port;
|
||||
$protocol = $value->protocol;
|
||||
if ($port === '%APACHE_PORT%') {
|
||||
$port = $this->configurationManager->GetApachePort();
|
||||
$port = $this->configurationManager->apache_port;
|
||||
// Do not expose udp if AIO is in reverse proxy mode
|
||||
if ($port !== '443' && $protocol === 'udp') {
|
||||
continue;
|
||||
}
|
||||
} else if ($port === '%TALK_PORT%') {
|
||||
$port = $this->configurationManager->GetTalkPort();
|
||||
$port = $this->configurationManager->talk_port;
|
||||
// Skip publishing talk tcp port if it is set to 443
|
||||
if ($port === '443' && $protocol === 'tcp') {
|
||||
continue;
|
||||
|
|
@ -297,7 +289,7 @@ readonly class DockerActionManager {
|
|||
}
|
||||
$ipBinding = $value->ipBinding;
|
||||
if ($ipBinding === '%APACHE_IP_BINDING%') {
|
||||
$ipBinding = $this->configurationManager->GetApacheIPBinding();
|
||||
$ipBinding = $this->configurationManager->apache_ip_binding;
|
||||
// Do not expose if AIO is in internal network mode
|
||||
if ($ipBinding === '@INTERNAL') {
|
||||
continue;
|
||||
|
|
@ -403,7 +395,7 @@ readonly class DockerActionManager {
|
|||
// // Special things for the nextcloud container which should not be exposed in the containers.json
|
||||
// } elseif ($container->GetIdentifier() === 'nextcloud-aio-nextcloud') {
|
||||
// foreach ($container->GetVolumes()->GetVolumes() as $volume) {
|
||||
// if ($volume->name !== $this->configurationManager->GetNextcloudMount()) {
|
||||
// if ($volume->name !== $this->configurationManager->nextcloud_mount) {
|
||||
// continue;
|
||||
// }
|
||||
// $mounts[] = ["Type" => "bind", "Source" => $volume->name, "Target" => $volume->mountPoint, "ReadOnly" => !$volume->isWritable, "BindOptions" => [ "Propagation" => "rshared"]];
|
||||
|
|
@ -422,8 +414,8 @@ readonly class DockerActionManager {
|
|||
}
|
||||
|
||||
// Additional Collabora options
|
||||
if ($this->configurationManager->GetAdditionalCollaboraOptions() !== '') {
|
||||
$requestBody['Cmd'] = [$this->configurationManager->GetAdditionalCollaboraOptions()];
|
||||
if ($this->configurationManager->collabora_additional_options !== '') {
|
||||
$requestBody['Cmd'] = [$this->configurationManager->collabora_additional_options];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -515,82 +507,6 @@ readonly class DockerActionManager {
|
|||
}
|
||||
}
|
||||
|
||||
// Replaces placeholders in $envValue with their values.
|
||||
// E.g. "%NC_DOMAIN%:%APACHE_PORT" becomes "my.nextcloud.com:11000"
|
||||
private function replaceEnvPlaceholders(string $envValue): string {
|
||||
// $pattern breaks down as:
|
||||
// % - matches a literal percent sign
|
||||
// ([^%]+) - capture group that matches one or more characters that are NOT percent signs
|
||||
// % - matches the closing percent sign
|
||||
//
|
||||
// Assumes literal percent signs are always matched and there is no
|
||||
// escaping.
|
||||
$pattern = '/%([^%]+)%/';
|
||||
$matchCount = preg_match_all($pattern, $envValue, $matches);
|
||||
|
||||
if ($matchCount === 0) {
|
||||
return $envValue;
|
||||
}
|
||||
|
||||
$placeholders = $matches[0]; // ["%PLACEHOLDER1%", "%PLACEHOLDER2%", ...]
|
||||
$placeholderNames = $matches[1]; // ["PLACEHOLDER1", "PLACEHOLDER2", ...]
|
||||
$placeholderPatterns = array_map(static fn(string $p) => '/' . preg_quote($p) . '/', $placeholders); // ["/%PLACEHOLDER1%/", ...]
|
||||
$placeholderValues = array_map($this->getPlaceholderValue(...), $placeholderNames); // ["val1", "val2"]
|
||||
// Guaranteed to be non-null because we found the placeholders in the preg_match_all.
|
||||
return (string) preg_replace($placeholderPatterns, $placeholderValues, $envValue);
|
||||
}
|
||||
|
||||
private function getPlaceholderValue(string $placeholder) : string {
|
||||
return match ($placeholder) {
|
||||
'NC_DOMAIN' => $this->configurationManager->GetDomain(),
|
||||
'NC_BASE_DN' => $this->configurationManager->GetBaseDN(),
|
||||
'AIO_TOKEN' => $this->configurationManager->GetToken(),
|
||||
'BORGBACKUP_REMOTE_REPO' => $this->configurationManager->GetBorgRemoteRepo(),
|
||||
'BORGBACKUP_MODE' => $this->configurationManager->GetBackupMode(),
|
||||
'AIO_URL' => $this->configurationManager->GetAIOURL(),
|
||||
'SELECTED_RESTORE_TIME' => $this->configurationManager->GetSelectedRestoreTime(),
|
||||
'RESTORE_EXCLUDE_PREVIEWS' => $this->configurationManager->GetRestoreExcludePreviews(),
|
||||
'APACHE_PORT' => $this->configurationManager->GetApachePort(),
|
||||
'APACHE_IP_BINDING' => $this->configurationManager->GetApacheIPBinding(),
|
||||
'TALK_PORT' => $this->configurationManager->GetTalkPort(),
|
||||
'TURN_DOMAIN' => $this->configurationManager->GetTurnDomain(),
|
||||
'NEXTCLOUD_MOUNT' => $this->configurationManager->GetNextcloudMount(),
|
||||
'BACKUP_RESTORE_PASSWORD' => $this->configurationManager->GetBorgRestorePassword(),
|
||||
'CLAMAV_ENABLED' => $this->configurationManager->isClamavEnabled() ? 'yes' : '',
|
||||
'TALK_RECORDING_ENABLED' => $this->configurationManager->isTalkRecordingEnabled() ? 'yes' : '',
|
||||
'ONLYOFFICE_ENABLED' => $this->configurationManager->isOnlyofficeEnabled() ? 'yes' : '',
|
||||
'COLLABORA_ENABLED' => $this->configurationManager->isCollaboraEnabled() ? 'yes' : '',
|
||||
'TALK_ENABLED' => $this->configurationManager->isTalkEnabled() ? 'yes' : '',
|
||||
'UPDATE_NEXTCLOUD_APPS' => ($this->configurationManager->isDailyBackupRunning() && $this->configurationManager->areAutomaticUpdatesEnabled()) ? 'yes' : '',
|
||||
'TIMEZONE' => $this->configurationManager->GetTimezone() === '' ? 'Etc/UTC' : $this->configurationManager->GetTimezone(),
|
||||
'COLLABORA_DICTIONARIES' => $this->configurationManager->GetCollaboraDictionaries() === '' ? 'de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru' : $this->configurationManager->GetCollaboraDictionaries(),
|
||||
'IMAGINARY_ENABLED' => $this->configurationManager->isImaginaryEnabled() ? 'yes' : '',
|
||||
'FULLTEXTSEARCH_ENABLED' => $this->configurationManager->isFulltextsearchEnabled() ? 'yes' : '',
|
||||
'DOCKER_SOCKET_PROXY_ENABLED' => $this->configurationManager->isDockerSocketProxyEnabled() ? 'yes' : '',
|
||||
'NEXTCLOUD_UPLOAD_LIMIT' => $this->configurationManager->GetNextcloudUploadLimit(),
|
||||
'NEXTCLOUD_MEMORY_LIMIT' => $this->configurationManager->GetNextcloudMemoryLimit(),
|
||||
'NEXTCLOUD_MAX_TIME' => $this->configurationManager->GetNextcloudMaxTime(),
|
||||
'BORG_RETENTION_POLICY' => $this->configurationManager->GetBorgRetentionPolicy(),
|
||||
'FULLTEXTSEARCH_JAVA_OPTIONS' => $this->configurationManager->GetFulltextsearchJavaOptions(),
|
||||
'NEXTCLOUD_TRUSTED_CACERTS_DIR' => $this->configurationManager->GetTrustedCacertsDir(),
|
||||
'ADDITIONAL_DIRECTORIES_BACKUP' => $this->configurationManager->GetAdditionalBackupDirectoriesString() !== '' ? 'yes' : '',
|
||||
'BORGBACKUP_HOST_LOCATION' => $this->configurationManager->GetBorgBackupHostLocation(),
|
||||
'APACHE_MAX_SIZE' => (string)($this->configurationManager->GetApacheMaxSize()),
|
||||
'COLLABORA_SECCOMP_POLICY' => $this->configurationManager->GetCollaboraSeccompPolicy(),
|
||||
'NEXTCLOUD_STARTUP_APPS' => $this->configurationManager->GetNextcloudStartupApps(),
|
||||
'NEXTCLOUD_ADDITIONAL_APKS' => $this->configurationManager->GetNextcloudAdditionalApks(),
|
||||
'NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS' => $this->configurationManager->GetNextcloudAdditionalPhpExtensions(),
|
||||
'INSTALL_LATEST_MAJOR' => $this->configurationManager->shouldLatestMajorGetInstalled() ? 'yes' : '',
|
||||
'REMOVE_DISABLED_APPS' => $this->configurationManager->shouldDisabledAppsGetRemoved() ? 'yes' : '',
|
||||
// Allow to get local ip-address of database container which allows to talk to it even in host mode (the container that requires this needs to be started first then)
|
||||
'AIO_DATABASE_HOST' => gethostbyname('nextcloud-aio-database'),
|
||||
// Allow to get local ip-address of caddy container and add it to trusted proxies automatically
|
||||
'CADDY_IP_ADDRESS' => in_array('caddy', $this->configurationManager->GetEnabledCommunityContainers(), true) ? gethostbyname('nextcloud-aio-caddy') : '',
|
||||
'WHITEBOARD_ENABLED' => $this->configurationManager->isWhiteboardEnabled() ? 'yes' : '',
|
||||
default => $this->configurationManager->GetRegisteredSecret($placeholder),
|
||||
};
|
||||
}
|
||||
|
||||
private function isContainerUpdateAvailable(string $id): string {
|
||||
$container = $this->containerDefinitionFetcher->GetContainerById($id);
|
||||
|
||||
|
|
@ -606,7 +522,7 @@ readonly class DockerActionManager {
|
|||
|
||||
public function isAnyUpdateAvailable(): bool {
|
||||
// return early if instance is not installed
|
||||
if (!$this->configurationManager->wasStartButtonClicked()) {
|
||||
if (!$this->configurationManager->wasStartButtonClicked) {
|
||||
return false;
|
||||
}
|
||||
$id = 'nextcloud-aio-apache';
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue