- Модуль: clouds
- Путь к файлу: ~/bitrix/modules/clouds/classes/general/storage_service_rackspace.php
- Класс: CCloudStorageService_RackSpaceCloudFiles
- Вызов: CCloudStorageService_RackSpaceCloudFiles::_GetToken
function _GetToken($host, $user, $key)
{
$result = false;
$cache_id = "v0|".$host."|".$user."|".$key;
$obCache = new CPHPCache;
if($obCache->InitCache(3600, $cache_id, "/"))
{
$result = $obCache->GetVars();
}
else
{
$this->status = 0;
$this->host = $host;
$this->verb = "GET";
$this->url = "http://".$host."/v1.0";
$this->headers = array();
$this->errno = 0;
$this->errstr = '';
$this->result = '';
$logRequest = false;
if (defined("BX_CLOUDS_TRACE") && $verb !== "GET" && $verb !== "HEAD")
{
$stime = microtime(1);
$logRequest = array(
"request_id" => md5((string)mt_rand()),
"portal" => $_SERVER["HTTP_HOST"],
"verb" => $this->verb,
"url" => $this->url,
);
AddMessage2Log(json_encode($logRequest), 'clouds', 20);
}
$request = new BitrixMainWebHttpClient(array(
"redirect" => false,
"streamTimeout" => $this->streamTimeout,
));
$request->setHeader("X-Auth-User", $user);
$request->setHeader("X-Auth-Key", $key);
$request->query($this->verb, $this->url);
$this->status = $request->getStatus();
foreach($request->getHeaders() as $key => $value)
{
$this->headers[$key] = is_array($value) ? $value[0] : $value;
}
$this->errstr = implode("n", $request->getError());
$this->errno = $this->errstr? 255: 0;
$this->result = $request->getResult();
if ($logRequest)
{
$logRequest["status"] = $this->status;
$logRequest["time"] = round(microtime(true) - $stime, 6);
$logRequest["headers"] = $this->headers;
AddMessage2Log(json_encode($logRequest), 'clouds', 0);
}
if (
$this->status == 301
&& $this->headers["Location"] <> ''
&& preg_match("#^https://(.*?)(/.*)$#", $this->headers["Location"], $arNewLocation)
)
{
$APPLICATION->ResetException();
$this->status = 0;
$this->host = $arNewLocation[1];
$this->verb = "GET";
$this->url = "https://".$arNewLocation[1]."/v1.0";
$this->headers = array();
$this->errno = 0;
$this->errstr = '';
$this->result = '';
$logRequest = false;
if (defined("BX_CLOUDS_TRACE") && $verb !== "GET" && $verb !== "HEAD")
{
$stime = microtime(1);
$logRequest = array(
"request_id" => md5((string)mt_rand()),
"portal" => $_SERVER["HTTP_HOST"],
"verb" => $this->verb,
"url" => $this->url,
);
AddMessage2Log(json_encode($logRequest), 'clouds', 20);
}
$request = new BitrixMainWebHttpClient(array(
"redirect" => false,
"streamTimeout" => $this->streamTimeout,
));
$request->setHeader("X-Auth-User", $user);
$request->setHeader("X-Auth-Key", $key);
$request->query($this->verb, $this->url);
$this->status = $request->getStatus();
foreach($request->getHeaders() as $key => $value)
{
$this->headers[$key] = is_array($value) ? $value[0] : $value;
}
$this->errstr = implode("n", $request->getError());
$this->errno = $this->errstr? 255: 0;
$this->result = $request->getResult();
if ($logRequest)
{
$logRequest["status"] = $this->status;
$logRequest["time"] = round(microtime(true) - $stime, 6);
$logRequest["headers"] = $this->headers;
AddMessage2Log(json_encode($logRequest), 'clouds', 0);
}
if($this->status == 204)
{
if(preg_match("#^https://(.*?)(/.*)$#", $this->headers["X-Storage-Url"], $arStorage))
{
$result = $this->headers;
$result["X-Storage-Host"] = $arStorage[1];
$result["X-Storage-Port"] = 443;
$result["X-Storage-Urn"] = $arStorage[2];
$result["X-Storage-Proto"] = "ssl://";
}
}
}
}
if(is_array($result))
{
if($obCache->StartDataCache())
$obCache->EndDataCache($result);
}
return $result;
}