laipower/wp-content/plugins/w3-total-cache/lib/Azure/MicrosoftAzureStorage/Common/ServicesBuilder.php

326 lines
10 KiB
PHP

<?php
/**
* LICENSE: The MIT License (the "License")
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* https://github.com/azure/azure-storage-php/LICENSE
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* PHP version 5
*
* @category Microsoft
* @package MicrosoftAzure\Storage\Common
* @author Azure Storage PHP SDK <dmsh@microsoft.com>
* @copyright 2016 Microsoft Corporation
* @license https://github.com/azure/azure-storage-php/LICENSE
* @link https://github.com/azure/azure-storage-php
*/
namespace MicrosoftAzure\Storage\Common;
use MicrosoftAzure\Storage\Blob\BlobRestProxy;
use MicrosoftAzure\Storage\Common\Internal\Resources;
use MicrosoftAzure\Storage\Common\Internal\Validate;
use MicrosoftAzure\Storage\Common\Internal\Utilities;
use MicrosoftAzure\Storage\Common\Internal\Filters\DateFilter;
use MicrosoftAzure\Storage\Common\Internal\Filters\HeadersFilter;
use MicrosoftAzure\Storage\Common\Internal\Filters\AuthenticationFilter;
use MicrosoftAzure\Storage\Common\Internal\InvalidArgumentTypeException;
use MicrosoftAzure\Storage\Common\Internal\Serialization\XmlSerializer;
use MicrosoftAzure\Storage\Common\Internal\Authentication\SharedKeyAuthScheme;
use MicrosoftAzure\Storage\Common\Internal\Authentication\TableSharedKeyLiteAuthScheme;
use MicrosoftAzure\Storage\Common\Internal\StorageServiceSettings;
use MicrosoftAzure\Storage\Queue\QueueRestProxy;
use MicrosoftAzure\Storage\Table\TableRestProxy;
use MicrosoftAzure\Storage\Table\Internal\AtomReaderWriter;
use MicrosoftAzure\Storage\Table\Internal\MimeReaderWriter;
/**
* Builds azure service objects.
*
* @category Microsoft
* @package MicrosoftAzure\Storage\Common
* @author Azure Storage PHP SDK <dmsh@microsoft.com>
* @copyright 2016 Microsoft Corporation
* @license https://github.com/azure/azure-storage-php/LICENSE
* @version Release: 0.11.0
* @link https://github.com/azure/azure-storage-php
*/
class ServicesBuilder
{
/**
* @var ServicesBuilder
*/
private static $_instance = null;
/**
* Gets the serializer used in the REST services construction.
*
* @return MicrosoftAzure\Storage\Common\Internal\Serialization\ISerializer
*/
protected function serializer()
{
return new XmlSerializer();
}
/**
* Gets the MIME serializer used in the REST services construction.
*
* @return \MicrosoftAzure\Storage\Table\Internal\IMimeReaderWriter
*/
protected function mimeSerializer()
{
return new MimeReaderWriter();
}
/**
* Gets the Atom serializer used in the REST services construction.
*
* @return \MicrosoftAzure\Storage\Table\Internal\IAtomReaderWriter
*/
protected function atomSerializer()
{
return new AtomReaderWriter();
}
/**
* Gets the Queue authentication scheme.
*
* @param string $accountName The account name.
* @param string $accountKey The account key.
*
* @return \MicrosoftAzure\Storage\Common\Internal\Authentication\StorageAuthScheme
*/
protected function queueAuthenticationScheme($accountName, $accountKey)
{
return new SharedKeyAuthScheme($accountName, $accountKey);
}
/**
* Gets the Blob authentication scheme.
*
* @param string $accountName The account name.
* @param string $accountKey The account key.
*
* @return \MicrosoftAzure\Storage\Common\Internal\Authentication\StorageAuthScheme
*/
protected function blobAuthenticationScheme($accountName, $accountKey)
{
return new SharedKeyAuthScheme($accountName, $accountKey);
}
/**
* Gets the Table authentication scheme.
*
* @param string $accountName The account name.
* @param string $accountKey The account key.
*
* @return TableSharedKeyLiteAuthScheme
*/
protected function tableAuthenticationScheme($accountName, $accountKey)
{
return new TableSharedKeyLiteAuthScheme($accountName, $accountKey);
}
/**
* Builds a queue object.
*
* @param string $connectionString The configuration connection string.
* @param array $options Array of options to pass to the service
*
* @return \MicrosoftAzure\Storage\Queue\Internal\IQueue
*/
public function createQueueService($connectionString, $options = [])
{
$settings = StorageServiceSettings::createFromConnectionString(
$connectionString
);
$serializer = $this->serializer();
$uri = Utilities::tryAddUrlScheme(
$settings->getQueueEndpointUri()
);
$queueWrapper = new QueueRestProxy(
$uri,
$settings->getName(),
$serializer,
$options
);
// Adding headers filter
$headers = array(
Resources::USER_AGENT => self::getUserAgent(),
);
$headers[Resources::X_MS_VERSION] = Resources::STORAGE_API_LATEST_VERSION;
$headersFilter = new HeadersFilter($headers);
$queueWrapper = $queueWrapper->withFilter($headersFilter);
// Adding date filter
$dateFilter = new DateFilter();
$queueWrapper = $queueWrapper->withFilter($dateFilter);
// Adding authentication filter
$authFilter = new AuthenticationFilter(
$this->queueAuthenticationScheme(
$settings->getName(),
$settings->getKey()
)
);
$queueWrapper = $queueWrapper->withFilter($authFilter);
return $queueWrapper;
}
/**
* Builds a blob object.
*
* @param string $connectionString The configuration connection string.
* @param array $options Array of options to pass to the service
* @return \MicrosoftAzure\Storage\Blob\Internal\IBlob
*/
public function createBlobService($connectionString, $options = [])
{
$settings = StorageServiceSettings::createFromConnectionString(
$connectionString
);
$serializer = $this->serializer();
$uri = Utilities::tryAddUrlScheme(
$settings->getBlobEndpointUri()
);
$blobWrapper = new BlobRestProxy(
$uri,
$settings->getName(),
$serializer,
$options
);
// Adding headers filter
$headers = array(
Resources::USER_AGENT => self::getUserAgent(),
);
$headers[Resources::X_MS_VERSION] = Resources::STORAGE_API_LATEST_VERSION;
$headersFilter = new HeadersFilter($headers);
$blobWrapper = $blobWrapper->withFilter($headersFilter);
// Adding date filter
$dateFilter = new DateFilter();
$blobWrapper = $blobWrapper->withFilter($dateFilter);
$authFilter = new AuthenticationFilter(
$this->blobAuthenticationScheme(
$settings->getName(),
$settings->getKey()
)
);
$blobWrapper = $blobWrapper->withFilter($authFilter);
return $blobWrapper;
}
/**
* Builds a table object.
*
* @param string $connectionString The configuration connection string.
* @param array $options Array of options to pass to the service
*
* @return \MicrosoftAzure\Storage\Table\Internal\ITable
*/
public function createTableService($connectionString, $options = [])
{
$settings = StorageServiceSettings::createFromConnectionString(
$connectionString
);
$atomSerializer = $this->atomSerializer();
$mimeSerializer = $this->mimeSerializer();
$serializer = $this->serializer();
$uri = Utilities::tryAddUrlScheme(
$settings->getTableEndpointUri()
);
$tableWrapper = new TableRestProxy(
$uri,
$atomSerializer,
$mimeSerializer,
$serializer,
$options
);
// Adding headers filter
$headers = array();
$latestServicesVersion = Resources::STORAGE_API_LATEST_VERSION;
$currentVersion = Resources::DATA_SERVICE_VERSION_VALUE;
$maxVersion = Resources::MAX_DATA_SERVICE_VERSION_VALUE;
$accept = Resources::ACCEPT_HEADER_VALUE;
$acceptCharset = Resources::ACCEPT_CHARSET_VALUE;
$userAgent = self::getUserAgent();
$headers[Resources::X_MS_VERSION] = $latestServicesVersion;
$headers[Resources::DATA_SERVICE_VERSION] = $currentVersion;
$headers[Resources::MAX_DATA_SERVICE_VERSION] = $maxVersion;
$headers[Resources::MAX_DATA_SERVICE_VERSION] = $maxVersion;
$headers[Resources::ACCEPT_HEADER] = $accept;
$headers[Resources::ACCEPT_CHARSET] = $acceptCharset;
$headers[Resources::USER_AGENT] = $userAgent;
$headersFilter = new HeadersFilter($headers);
$tableWrapper = $tableWrapper->withFilter($headersFilter);
// Adding date filter
$dateFilter = new DateFilter();
$tableWrapper = $tableWrapper->withFilter($dateFilter);
// Adding authentication filter
$authFilter = new AuthenticationFilter(
$this->tableAuthenticationScheme(
$settings->getName(),
$settings->getKey()
)
);
$tableWrapper = $tableWrapper->withFilter($authFilter);
return $tableWrapper;
}
/**
* Gets the user agent string used in request header.
*
* @return string
*/
private static function getUserAgent()
{
// e.g. User-Agent: Azure-Storage/0.10.0 (PHP 5.5.32)
return 'Azure-Storage/' . Resources::SDK_VERSION . ' (PHP ' . PHP_VERSION . ')';
}
/**
* Gets the static instance of this class.
*
* @return ServicesBuilder
*/
public static function getInstance()
{
if (!isset(self::$_instance)) {
self::$_instance = new ServicesBuilder();
}
return self::$_instance;
}
}