. */ namespace SP\Modules\Web\Controllers\Status; use JsonException; use SP\Domain\Core\AppInfoInterface; use SP\Domain\Core\Exceptions\CheckException; use SP\Http\JsonResponse; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Util\VersionUtil; use Throwable; /** * Class StatusController * * @package SP\Modules\Web\Controllers */ final class StatusController extends StatusBase { use JsonTrait; private const TAG_VERSION_REGEX = '/v?(?P\d+)\.(?P\d+)\.(?P\d+)\.(?P\d+)(?P\-[a-z0-9\.]+)?$/'; /** * checkReleaseAction * * @return bool * @throws JsonException */ public function checkReleaseAction(): bool { try { $this->extensionChecker->checkCurl(true); $request = $this->client->request('GET', AppInfoInterface::APP_UPDATES_URL); if ($request->getStatusCode() === 200 && strpos($request->getHeaderLine('content-type'), 'application/json') !== false ) { $requestData = json_decode($request->getBody(), false, 512, JSON_THROW_ON_ERROR); if ($requestData !== null && !isset($requestData->message) && preg_match(self::TAG_VERSION_REGEX, $requestData->tag_name, $matches)) { $pubVersion = $matches['major']. $matches['minor']. $matches['patch']. '.'. $matches['build']; if (VersionUtil::checkVersion(VersionUtil::getVersionStringNormalized(), $pubVersion)) { return $this->returnJsonResponseData([ 'version' => $requestData->tag_name, 'url' => $requestData->html_url, 'title' => $requestData->name, 'description' => $requestData->body, 'date' => $requestData->published_at, ]); } return $this->returnJsonResponseData([]); } logger($requestData->message); } return $this->returnJsonResponse(JsonResponse::JSON_ERROR, __u('Version unavailable')); } catch (CheckException $e) { return $this->returnJsonResponseException($e); } catch (Throwable $e) { processException($e); return $this->returnJsonResponseException($e); } } }