• Модуль: dav
  • Путь к файлу: ~/bitrix/modules/dav/classes/general/webdav.php
  • Класс: CDavWebDav
  • Вызов: CDavWebDav::ProcessRequest
public function ProcessRequest()
{
	/** @var CDavRequest $request */
	$request = $this->request;
	$response = $this->response;

	if(mb_strstr($request->GetParameter("REQUEST_URI"), '#'))
	{
		$response->SetHttpStatus("400 Bad Request");
		$response->Render();
		return;
	}

	$response->AddHeader("X-Dav-Powered-By: ".$this->davPoweredBy);

	// skip auth check for OPTIONS requests on "/" - http://pear.php.net/bugs/bug.php?id=5363
	if (($request->GetParameter('REQUEST_METHOD') !== 'OPTIONS' || (/*($this instanceof CDavGroupDav) && */($request->GetPath() !== "/"))) && !$this->CheckAuthWrapper())
	{
		$response->SetHttpStatus('401 Unauthorized');
		$response->AddHeader('WWW-Authenticate: Basic realm="'.$this->davPoweredBy.'"');

		if (
			$this instanceof CDavWebDavServer
			&& CDav::isDigestEnabled()
			&& COption::GetOptionString("main", "use_digest_auth", "N") === "Y"
		)
		{
			// On first try we found that we don't know user digest hash. Let ask only Basic auth first.
			if(BitrixMainApplication::getInstance()->getKernelSession()["BX_HTTP_DIGEST_ABSENT"] !== true)
			{
				$response->AddHeader('WWW-Authenticate: Digest realm="'
					. $this->davPoweredBy
					. '", nonce="'
					. uniqid('', true)
					. '"');
			}
		}
		$response->Render();

		return;
	}

	if (!$this->CheckIfHeaderConditions())
	{
		return;
	}

	$method = mb_strtolower($request->GetParameter("REQUEST_METHOD"));
	$wrapper = $method."Wrapper";

	if ($method === "head" && !method_exists($this, "head"))
	{
		$method = "get";
	}

	if (method_exists($this, $wrapper) && ($method === "options" || method_exists($this, $method)))
	{
		$this->$wrapper();
		$response->Render();
	}
	else
	{
		if ($request->GetParameter("REQUEST_METHOD") === "LOCK")
		{
			$error = '412 Precondition failed';
		}
		else
		{
			$error = '405 Method not allowed';
			$response->AddHeader("Allow: ".join(",", $this->GetAllowableMethods()));
		}
		$response->GenerateError($error);
		$response->Render();
	}
}