HEX
Server: LiteSpeed
System: Linux d8 4.18.0-553.121.1.lve.el8.x86_64 #1 SMP Thu Apr 30 16:40:41 UTC 2026 x86_64
User: wbwebdes (3015)
PHP: 8.1.31
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: /home/wbwebdes/domains/files.wb-cloud.nl/public_html/apps/updatenotification/lib/UpdateChecker.php
<?php

declare(strict_types=1);

/**
 * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
 * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
 * SPDX-License-Identifier: AGPL-3.0-only
 */
namespace OCA\UpdateNotification;

use OC\Updater\ChangesCheck;
use OC\Updater\VersionCheck;
use OCP\AppFramework\Services\IInitialState;

class UpdateChecker {

	public function __construct(
		private VersionCheck $updater,
		private ChangesCheck $changesCheck,
		private IInitialState $initialState,
	) {
	}

	/**
	 * @return array
	 */
	public function getUpdateState(): array {
		$data = $this->updater->check();
		$result = [];

		if (isset($data['version']) && $data['version'] !== '' && $data['version'] !== []) {
			$result['updateAvailable'] = true;
			$result['updateVersion'] = $data['version'];
			$result['updateVersionString'] = $data['versionstring'];
			$result['updaterEnabled'] = $data['autoupdater'] === '1';
			$result['versionIsEol'] = $data['eol'] === '1';
			if (strpos($data['web'], 'https://') === 0) {
				$result['updateLink'] = $data['web'];
			}
			if (strpos($data['url'], 'https://') === 0) {
				$result['downloadLink'] = $data['url'];
			}
			if (strpos($data['changes'], 'https://') === 0) {
				try {
					$result['changes'] = $this->changesCheck->check($data['changes'], $data['version']);
				} catch (\Exception $e) {
					// no info, not a problem
				}
			}

			return $result;
		}

		return [];
	}

	/**
	 * Provide update information as initial state
	 */
	public function setInitialState(): void {
		$updateState = $this->getUpdateState();
		if (empty($updateState)) {
			return;
		}

		$this->initialState->provideInitialState('updateState', [
			'updateVersion' => $updateState['updateVersionString'],
			'updateLink' => $updateState['updateLink'] ?? '',
		]);
	}
}