"storage.yandexcloud.net", ); } /** * @param array[string]string $arBucket * @param bool $bServiceSet * @param string $cur_SERVICE_ID * @param bool $bVarsFromForm * @return string */ function GetSettingsHTML($arBucket, $bServiceSet, $cur_SERVICE_ID, $bVarsFromForm) { if($bVarsFromForm) $arSettings = $_POST["SETTINGS"][$this->GetID()]; else $arSettings = unserialize($arBucket["SETTINGS"], ['allowed_classes' => false]); if(!is_array($arSettings)) $arSettings = array("ACCESS_KEY" => "", "SECRET_KEY" => ""); $htmlID = htmlspecialcharsbx($this->GetID()); $result = ' '.GetMessage("CLO_STORAGE_YANDEX_EDIT_ACCESS_KEY").': '.GetMessage("CLO_STORAGE_YANDEX_EDIT_SECRET_KEY").': '; return $result; } /** * @param array[string]string $arBucket * @param array[string]string & $arSettings * @return bool */ function CheckSettings($arBucket, &$arSettings) { global $APPLICATION; $aMsg =/*.(array[int][string]string).*/array(); $result = array( "ACCESS_KEY" => is_array($arSettings)? trim($arSettings["ACCESS_KEY"]): '', "SECRET_KEY" => is_array($arSettings)? trim($arSettings["SECRET_KEY"]): '', ); if(is_array($arSettings) && array_key_exists("SESSION_TOKEN", $arSettings)) { $result["SESSION_TOKEN"] = trim($arSettings["SESSION_TOKEN"]); } if($arBucket["READ_ONLY"] !== "Y" && $result["ACCESS_KEY"] === '') { $aMsg[] = array( "id" => $this->GetID()."INP_ACCESS_KEY", "text" => GetMessage("CLO_STORAGE_YANDEX_EMPTY_ACCESS_KEY"), ); } if($arBucket["READ_ONLY"] !== "Y" && $result["SECRET_KEY"] === '') { $aMsg[] = array( "id" => $this->GetID()."INP_SECRET_KEY", "text" => GetMessage("CLO_STORAGE_YANDEX_EMPTY_SECRET_KEY"), ); } if(!empty($aMsg)) { $e = new CAdminException($aMsg); $APPLICATION->ThrowException($e); return false; } else { $arSettings = $result; } return true; } /** * @param string $bucket * @return string **/ protected function GetRequestHost($bucket, $arSettings) { if( $this->new_end_point != "" && preg_match('#^(http|https)://'.preg_quote($bucket, '#').'(.+?)/#', $this->new_end_point, $match) > 0 ) { return $bucket.$match[2]; } else { if ($bucket <> '') return $bucket.".storage.yandexcloud.net"; else return "storage.yandexcloud.net"; } } /** * @param array[string]string $arSettings * @param string $verb * @param string $bucket * @param string $file_name * @param string $params * @param string $content * @param array[string]string $additional_headers * @return mixed */ function SendRequest($arSettings, $verb, $bucket, $file_name='/', $params='', $content='', $additional_headers=/*.(array[string]string).*/array()) { $file_name = str_replace("+", "%20", $file_name); if (isset($additional_headers["x-amz-copy-source"])) { $additional_headers["x-amz-copy-source"] = str_replace("+", "%20", $additional_headers["x-amz-copy-source"]); } return parent::SendRequest($arSettings, $verb, $bucket, $file_name, $params, $content, $additional_headers); } /** * @param array[string]string $arBucket * @param mixed $arFile * @param boolean $encoded * @return string */ function GetFileSRC($arBucket, $arFile, $encoded = true) { $proto = CMain::IsHTTPS()? "https": "http"; if($arBucket["CNAME"] != "") { $host = $arBucket["CNAME"]; $pref = ""; } elseif ($proto === "https" && mb_strpos($arBucket["BUCKET"], ".") !== false) { $host = "storage.yandexcloud.net"; $pref = $arBucket["BUCKET"]; } else { $host = $arBucket["BUCKET"].".storage.yandexcloud.net"; $pref = ""; } if(is_array($arFile)) $URI = ltrim($arFile["SUBDIR"]."/".$arFile["FILE_NAME"], "/"); else $URI = ltrim($arFile, "/"); if ($arBucket["PREFIX"] != "") { if(mb_substr($URI, 0, mb_strlen($arBucket["PREFIX"]) + 1) !== $arBucket["PREFIX"]."/") $URI = $arBucket["PREFIX"]."/".$URI; } if ($pref !== "") { $URI = $pref."/".$URI; } if ($encoded) { return $proto."://$host/".str_replace("+", "%20", CCloudUtil::URLEncode($URI, "UTF-8")); } else { return $proto."://$host/".$URI; } } /** * @param array[string]string $arBucket * @return bool */ function DeleteBucket($arBucket) { //Do not delete bucket if there is some files left if(!$this->IsEmptyBucket($arBucket)) return false; return parent::DeleteBucket($arBucket); } function FileCopy($arBucket, $arFile, $filePath) { $this->streamTimeout = 3600; return parent::FileCopy($arBucket, $arFile, $filePath); } /** * @param array[string]string $arBucket * @param mixed & $NS * @return bool */ function CompleteMultipartUpload($arBucket, &$NS) { $this->streamTimeout = 3600; return parent::CompleteMultipartUpload($arBucket, $NS); } }