403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/ilovecveti.ru/bitrix/modules/calendar/lib/sharing/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/ilovecveti.ru/bitrix/modules/calendar/lib/sharing/sharinguser.php
<?php

namespace Bitrix\Calendar\Sharing;

use Bitrix\Main\Context;
use Bitrix\Main\Loader;
use Bitrix\Main\Web\Cookie;

final class SharingUser
{
	public const EXTERNAL_AUTH_ID = 'calendar_sharing';
	public const COOKIE_AUTH_HASH_NAME = 'CALENDAR_SHARING_HASH';
	private static ?SharingUser $instance = null;

	protected function __construct()
	{
	}

	/**
	 * @return SharingUser
	 */
	public static function getInstance(): SharingUser
	{
		if (!self::$instance)
		{
			self::$instance = new self();
		}

		return self::$instance;
	}

	/**
	 * @param bool $needToCreateUser
	 * @param array $userParams
	 * @return null
	 * @throws \Bitrix\Main\ArgumentException
	 * @throws \Bitrix\Main\ObjectPropertyException
	 * @throws \Bitrix\Main\SystemException
	 */
	public function login(bool $needToCreateUser = false, array $userParams = [])
	{
		global $USER;

		if (
			$USER->isAuthorized()
			&& in_array($USER->GetParam('EXTERNAL_AUTH_ID'), [self::EXTERNAL_AUTH_ID, null], true)
		)
		{
			if ($needToCreateUser)
			{
				$this->updateUserPersonalInfo($USER->GetID(), $userParams);
			}

			return $USER->GetID();
		}

		$user = $this->getByHash();

		if (!$user && $needToCreateUser)
		{
			$user = $this->createUser($userParams);
		}

		if ($user)
		{
			$this->saveAuthHashToCookie($user->getXmlId());

			if ($needToCreateUser)
			{
				$this->updateUserPersonalInfo($user->getId(), $userParams);
			}

			return $user->getId();
		}

		return null;
	}

	/**
	 * @param array $userParams
	 * @return int|null
	 * @throws \Bitrix\Main\ArgumentException
	 * @throws \Bitrix\Main\ObjectPropertyException
	 * @throws \Bitrix\Main\SystemException
	 */
	public function getAnonymousUserForOwner(array $userParams): ?int
	{
		$user = $this->getByHash();

		if (!$user)
		{
			$user = $this->createUser($userParams);
		}

		if ($user)
		{
			$this->saveAuthHashToCookie($user->getXmlId());

			$this->updateUserPersonalInfo($user->getId(), $userParams);

			return $user->getId();
		}

		return null;
	}

	/**
	 * @return \Bitrix\Main\EO_User|null
	 * @throws \Bitrix\Main\ArgumentException
	 * @throws \Bitrix\Main\ObjectPropertyException
	 * @throws \Bitrix\Main\SystemException
	 */
	private function getByHash(): ?\Bitrix\Main\EO_User
	{
		$request = Context::getCurrent()->getRequest();
		$authHash = $request->getCookieRaw(self::COOKIE_AUTH_HASH_NAME);

		if (!($authHash && is_string($authHash)))
		{
			return null;
		}
		if (!preg_match('/^[0-9a-f]{32}$/', $authHash))
		{
			return null;
		}

		$xmlId = self::EXTERNAL_AUTH_ID . '|' . $authHash;

		return \Bitrix\Main\UserTable::query()
			->setSelect(['*'])
			->where('ACTIVE', 'Y')
			->where('EXTERNAL_AUTH_ID', self::EXTERNAL_AUTH_ID)
			->where('XML_ID', $xmlId)
			->exec()->fetchObject();
	}

	/**
	 * @param array $userParams
	 * @return \Bitrix\Main\EO_User|null
	 * @throws \Bitrix\Main\ArgumentException
	 * @throws \Bitrix\Main\ObjectPropertyException
	 * @throws \Bitrix\Main\SystemException
	 * @throws \Exception
	 */
	private function createUser(array $userParams = []): ?\Bitrix\Main\EO_User
	{
		$name = $userParams['NAME'] ?? 'Guest';
		$lastName = $userParams['LAST_NAME'] ?? '';
		$personalPhone = '';
		$personalMailbox = '';

		if (SharingEventManager::isEmailCorrect($userParams['CONTACT_DATA']))
		{
			$personalMailbox = $userParams['CONTACT_DATA'];
		}
		if (SharingEventManager::isPhoneNumberCorrect($userParams['CONTACT_DATA']))
		{
			$personalPhone = $userParams['CONTACT_DATA'];
		}

		$login = 'calendar_sharing_' . random_int(10000, 99999) . \Bitrix\Main\Security\Random::getString(8);
		$password = md5($login . '|' . random_int(10000, 99999). '|' . time());
		$xmlId = self::EXTERNAL_AUTH_ID . '|' . md5($login . $password . time() . \Bitrix\Main\Security\Random::getString(8));

		$userManager = new \CUser();
		$userId = $userManager->add([
			'NAME' => $name,
			'LAST_NAME' => $lastName,
			'LOGIN' => $login,
			'PASSWORD' => $password,
			'CONFIRM_PASSWORD' => $password,
			'EXTERNAL_AUTH_ID' => self::EXTERNAL_AUTH_ID,
			'XML_ID' => $xmlId,
			'ACTIVE' => 'Y',
			'PERSONAL_PHONE' => $personalPhone,
			'PERSONAL_MAILBOX' => $personalMailbox,
		]);

		if ($userId)
		{
			if (Loader::includeModule("socialnetwork"))
			{
				\CSocNetUserPerms::SetPerm($userId, 'message', SONET_RELATIONS_TYPE_NONE);
			}

			return \Bitrix\Main\UserTable::getById($userId)->fetchObject();
		}

		return null;
	}

	/**
	 * @param int $userId
	 * @param array $userParams
	 * @return void
	 */
	private function updateUserPersonalInfo(int $userId, array $userParams = []): void
	{
		$user = \CUser::GetByID($userId)->Fetch();

		if (($user['EXTERNAL_AUTH_ID'] ?? null) !== self::EXTERNAL_AUTH_ID)
		{
			return;
		}

		if (
			$user['NAME'] === $userParams['NAME']
			&& (
				$user['PERSONAL_PHONE'] === $userParams['CONTACT_DATA']
				|| $user['PERSONAL_MAILBOX'] === $userParams['CONTACT_DATA']
			)
		)
		{
			return;
		}

		$name = $userParams['NAME'] ?? 'Guest';
		$personalPhone = '';
		$personalMailbox = '';

		if (SharingEventManager::isEmailCorrect($userParams['CONTACT_DATA']))
		{
			$personalMailbox = $userParams['CONTACT_DATA'];
		}
		if (SharingEventManager::isPhoneNumberCorrect($userParams['CONTACT_DATA']))
		{
			$personalPhone = $userParams['CONTACT_DATA'];
		}

		$userManager = new \CUser();
		$userManager->update($userId, [
			'NAME' => $name,
			'PERSONAL_PHONE' => $personalPhone,
			'PERSONAL_MAILBOX' => $personalMailbox,
		]);
	}

	/**
	 * @param string $userXmlId
	 * @return void
	 */
	private function saveAuthHashToCookie(string $userXmlId): void
	{
		$authHash = str_replace(self::EXTERNAL_AUTH_ID . '|', '', $userXmlId);
		$cookie = new Cookie(self::COOKIE_AUTH_HASH_NAME, $authHash, null, false);
		Context::getCurrent()->getResponse()->addCookie($cookie);
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit