• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/document/onlyoffice/onlyofficehandler.php
  • Класс: BitrixDiskDocumentOnlyOfficeOnlyOfficeHandler
  • Вызов: OnlyOfficeHandler::isValidToken
static function isValidToken(string $token): Result
{
	$result = new Result();

	$http = new HttpClient([
		'socketTimeout' => 5,
		'streamTimeout' => 5,
		'version' => HttpClient::HTTP_1_1,
	]);

	$url = self::getApiUrlRoot() . '/coauthoring/CommandService.ashx';

	$postBody = ['c' => 'version'];
	$http->setHeader('Content-Type', 'application/json');
	$postFields = Json::encode($postBody);

	if ($http->post($url, $postFields) === false)
	{
		return $result->addError(new MainError('Server is not available.'));
	}
	if ($http->getStatus() !== 200)
	{
		return $result->addError(new MainError('Server is not available. Status ' . $http->getStatus()));
	}

	$response = Json::decode($http->getResult());
	if (isset($response['version']))
	{
		return $result->addError(new MainError('JSON Web Token is disabled on server. Please turn on this feature. https://api.onlyoffice.com/editors/signature/'));
	}

	$http = new HttpClient([
		'socketTimeout' => 5,
		'streamTimeout' => 5,
		'version' => HttpClient::HTTP_1_1,
	]);
	$http->setHeader('Content-Type', 'application/json');
	$http->setHeader('Authorization', 'Bearer ' . JWT::encode($postBody, $token));

	$postFields = Json::encode($postBody);
	if ($http->post($url, $postFields) === false)
	{
		return $result->addError(new MainError('Server is not available.'));
	}
	if ($http->getStatus() !== 200)
	{
		return $result->addError(new MainError('Server is not available. Status ' . $http->getStatus()));
	}

	$response = Json::decode($http->getResult());
	if (isset($response['error']) && $response['error'] !== 0)
	{
		return $result->addError(new MainError('Secret key is invalid. Please fix it, follow https://api.onlyoffice.com/editors/signature/'));
	}

	$result->setData([
		'version' => $response['version'],
	]);

	return $result;
}