Skip to content
This repository has been archived by the owner on Nov 27, 2023. It is now read-only.

Commit

Permalink
Add support to sas authorization (#958)
Browse files Browse the repository at this point in the history
* add sas filter

* typos

* typos

* - Change minimum azure-storage version to 0.15.0
- Change createWrapService to static method and reference it by self to
  avoid non object context error

* - Revert changes to composer.lock file to allow support for php 5.6
- Fix $this in non object context error

* - Revert azure back to version 19 and update lock

* - Altered __construct comments
- Added getNamespace method to return private _namespace property
- Changed getFilter comments

* - Configure tests inline with new code changes

* - Emulate tests that require environment variables to be set
  • Loading branch information
polkfarody authored and sergey-shandar committed Nov 27, 2017
1 parent f5d4efa commit 0d3ce5b
Show file tree
Hide file tree
Showing 8 changed files with 530 additions and 361 deletions.
425 changes: 224 additions & 201 deletions composer.lock

Large diffs are not rendered by default.

112 changes: 112 additions & 0 deletions src/Common/Internal/Filters/SASFilter.php
@@ -0,0 +1,112 @@
<?php

/**
* LICENSE: Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* 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
*
* @author Azure PHP SDK <azurephpsdk@microsoft.com>
* @copyright 2012 Microsoft Corporation
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
*
* @link https://github.com/windowsazure/azure-sdk-for-php
*/

namespace WindowsAzure\Common\Internal\Filters;

use WindowsAzure\Common\Internal\Resources;
use WindowsAzure\Common\Internal\Utilities;
use WindowsAzure\Common\Internal\IServiceFilter;
use WindowsAzure\Common\Internal\Http\IHttpClient;
use WindowsAzure\ServiceBus\Internal\WrapTokenManager;
use WindowsAzure\ServiceBus\Internal\IWrap;
use Psr\Http\Message\ResponseInterface;

/**
* Adds SAS authentication header to the http request object.
*
* @category Microsoft
*
* @author Azure PHP SDK <azurephpsdk@microsoft.com>
* @copyright 2012 Microsoft Corporation
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
*
* @version Release: 0.5.0_2016-11
*
* @link https://github.com/windowsazure/azure-sdk-for-php
*/
class SASFilter implements IServiceFilter {

private $sharedAccessKeyName;

private $sharedAccessKey;

public function __construct(
$sharedAccessKeyName,
$sharedAccessKey
) {
$this->sharedAccessKeyName = $sharedAccessKeyName;
$this->sharedAccessKey = $sharedAccessKey;
}

/**
* Adds WRAP authentication header to the request headers.
*
* @param IHttpClient $request HTTP channel object
*
* @return IHttpClient
*/
public function handleRequest(IHttpClient $request) {
$token = $this->getAuthorization(
$request->getUrl(),
$this->sharedAccessKeyName,
$this->sharedAccessKey
);

$request->setHeader(Resources::AUTHENTICATION, $token);

return $request;
}

/**
* @param $url
* @param $policy
* @param $key
*/
private function getAuthorization($url, $sharedAccessKeyName, $sharedAccessKey) {
$expiry = time() + 3600;
$encodedUrl = Utilities::lowerUrlencode($url);
$scope = $encodedUrl . "\n" . $expiry;
$signature = base64_encode(hash_hmac('sha256', $scope, $sharedAccessKey, true));
return sprintf(Resources::SAS_AUTHORIZATION,
Utilities::lowerUrlencode($signature),
$expiry,
$sharedAccessKeyName,
$encodedUrl
);
}


/**
* Returns the original response.
*
* @param IHttpClient $request A HTTP channel object
* @param ResponseInterface $response A HTTP response object
*
* @return ResponseInterface
*/
public function handleResponse(IHttpClient $request, ResponseInterface $response) {
return $response;
}
}
6 changes: 4 additions & 2 deletions src/Common/Internal/Resources.php
Expand Up @@ -38,8 +38,7 @@
*
* @link https://github.com/windowsazure/azure-sdk-for-php
*/
class Resources
{
class Resources {
// @codingStandardsIgnoreStart

// Connection strings
Expand All @@ -64,6 +63,8 @@ class Resources
const SERVICE_BUS_ENDPOINT_NAME = 'Endpoint';
const SHARED_SECRET_ISSUER_NAME = 'SharedSecretIssuer';
const SHARED_SECRET_VALUE_NAME = 'SharedSecretValue';
const SHARED_SHARED_ACCESS_KEY_NAME = 'SharedAccessKeyName';
const SHARED_SHARED_ACCESS_KEY = 'SharedAccessKey';
const STS_ENDPOINT_NAME = 'StsEndpoint';
const MEDIA_SERVICES_ENDPOINT_URI_NAME = 'MediaServicesEndpoint';
const MEDIA_SERVICES_ACCOUNT_NAME = 'AccountName';
Expand Down Expand Up @@ -169,6 +170,7 @@ class Resources
const DATE = 'date';
const AUTHENTICATION = 'authorization';
const WRAP_AUTHORIZATION = 'WRAP access_token="%s"';
const SAS_AUTHORIZATION = 'SharedAccessSignature sig=%s&se=%s&skn=%s&sr=%s';
const CONTENT_ENCODING = 'content-encoding';
const CONTENT_LANGUAGE = 'content-language';
const CONTENT_LENGTH = 'content-length';
Expand Down

0 comments on commit 0d3ce5b

Please sign in to comment.