326 lines
10 KiB
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;
|
|
}
|
|
}
|