Skip to content

Commit

Permalink
improve design
Browse files Browse the repository at this point in the history
  • Loading branch information
宋神宗 committed Mar 6, 2019
1 parent ecc4d0b commit d901c3b
Show file tree
Hide file tree
Showing 20 changed files with 103 additions and 90 deletions.
7 changes: 4 additions & 3 deletions src/Clients/ManageTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,22 @@ trait ManageTrait
{
/**
* @param int $timeout
* @param int $connectTimeout
*
* @return CredentialsInterface|StsCredential
*
* @throws ClientException
* @throws ServerException
*/
public function getSessionCredential($timeout = Request::TIMEOUT)
public function getSessionCredential($timeout = Request::TIMEOUT, $connectTimeout = Request::CONNECT_TIMEOUT)
{
switch (\get_class($this->credential)) {
case EcsRamRoleCredential::class:
return (new EcsRamRoleProvider($this))->get();
case RamRoleArnCredential::class:
return (new RamRoleArnProvider($this))->get($timeout);
return (new RamRoleArnProvider($this))->get($timeout, $connectTimeout);
case RsaKeyPairCredential::class:
return (new RsaKeyPairProvider($this))->get($timeout);
return (new RsaKeyPairProvider($this))->get($timeout, $connectTimeout);
default:
return $this->credential;
}
Expand Down
19 changes: 11 additions & 8 deletions src/Credentials/Providers/CredentialsProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class CredentialsProvider
/**
* @var array
*/
private static $hasCustomChain;
private static $customChains;

/**
* @throws ClientException
Expand All @@ -36,20 +36,23 @@ public static function chain()
}
}

self::$hasCustomChain = $providers;
self::$customChains = $providers;
}

/**
* Forget the custom providers chain.
*/
public static function flush()
{
self::$hasCustomChain = [];
self::$customChains = [];
}

/**
* @return bool
*/
public static function hasCustomChain()
{
return (bool)self::$hasCustomChain;
return (bool)self::$customChains;
}

/**
Expand All @@ -59,7 +62,7 @@ public static function hasCustomChain()
*/
public static function customProvider($clientName)
{
foreach (self::$hasCustomChain as $provider) {
foreach (self::$customChains as $provider) {
$provider();
if (AlibabaCloud::has($clientName)) {
break;
Expand Down Expand Up @@ -93,7 +96,7 @@ public static function defaultProvider($clientName)
*/
public static function env()
{
return function () {
return function() {
$accessKeyId = \AlibabaCloud\Client\envNotEmpty('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = \AlibabaCloud\Client\envNotEmpty('ALIBABA_CLOUD_ACCESS_KEY_SECRET');

Expand All @@ -108,7 +111,7 @@ public static function env()
*/
public static function ini()
{
return function () {
return function() {
$ini = \AlibabaCloud\Client\envNotEmpty('ALIBABA_CLOUD_CREDENTIALS_FILE');

if ($ini) {
Expand Down Expand Up @@ -155,7 +158,7 @@ public static function getDefaultName()
*/
public static function instance()
{
return function () {
return function() {
$instance = \AlibabaCloud\Client\envNotEmpty('ALIBABA_CLOUD_ECS_METADATA');
if ($instance) {
AlibabaCloud::ecsRamRoleClient($instance)->asDefaultClient();
Expand Down
4 changes: 2 additions & 2 deletions src/Credentials/Providers/EcsRamRoleProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ class EcsRamRoleProvider extends Provider
*/
public static $config = [];
/**
* For TSC cache
* Expiration time slot for temporary security credentials.
*
* @var int
*/
protected $expiration = 10;
protected $expirationSlot = 10;
/**
* @var string
*/
Expand Down
19 changes: 8 additions & 11 deletions src/Credentials/Providers/Provider.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,16 @@ class Provider
* For TSC Duration Seconds
*/
const DURATION_SECONDS = 3600;

/**
* @var array
*/
protected static $credentialsCache = [];

/**
* Expiration time slot for temporary security credentials.
*
* @var int
*/
protected $expirationSlot = 180;
/**
* @var Client
*/
Expand All @@ -31,13 +35,6 @@ class Provider
*/
protected $error = 'Result contains no credentials';

/**
* For TSC cache
*
* @var int
*/
protected $expiration = 180;

/**
* CredentialTrait constructor.
*
Expand All @@ -57,11 +54,11 @@ public function getCredentialsInCache()
{
if (isset(self::$credentialsCache[$this->key()])) {
$result = self::$credentialsCache[$this->key()];
if (\strtotime($result['Expiration']) - \time() >= $this->expiration) {
if (\strtotime($result['Expiration']) - \time() >= $this->expirationSlot) {
return $result;
}
unset(self::$credentialsCache[$this->key()]);
}
unset(self::$credentialsCache[$this->key()]);

return null;
}
Expand Down
15 changes: 9 additions & 6 deletions src/Credentials/Providers/RamRoleArnProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,20 @@ class RamRoleArnProvider extends Provider
/**
* Get credential.
*
*
* @param int $timeout
* @param int $connectTimeout
*
* @return StsCredential
* @throws ClientException
* @throws ServerException
*/
public function get($timeout = Request::TIMEOUT)
public function get($timeout = Request::TIMEOUT, $connectTimeout = Request::CONNECT_TIMEOUT)
{
$credential = $this->getCredentialsInCache();

if (null === $credential) {
$result = $this->request($timeout);
$result = $this->request($timeout, $connectTimeout);

if (!isset($result['Credentials']['AccessKeyId'],
$result['Credentials']['AccessKeySecret'],
Expand All @@ -55,13 +57,14 @@ public function get($timeout = Request::TIMEOUT)
/**
* Get credentials by request.
*
* @param int $timeout
* @param $timeout
* @param $connectTimeout
*
* @return Result
* @throws ClientException
* @throws ServerException
*/
private function request($timeout)
private function request($timeout, $connectTimeout)
{
$clientName = __CLASS__ . \uniqid('ak', true);

Expand All @@ -71,9 +74,9 @@ private function request($timeout)
)->name($clientName);

return (new AssumeRole($this->client->getCredential()))
->timeout($timeout)
->connectTimeout($timeout)
->client($clientName)
->timeout($timeout)
->connectTimeout($connectTimeout)
->debug($this->client->isDebug())
->request();
}
Expand Down
12 changes: 7 additions & 5 deletions src/Credentials/Providers/RsaKeyPairProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,18 @@ class RsaKeyPairProvider extends Provider
* Get credential.
*
* @param int $timeout
* @param int $connectTimeout
*
* @return StsCredential
* @throws ClientException
* @throws ServerException
*/
public function get($timeout = Request::TIMEOUT)
public function get($timeout = Request::TIMEOUT, $connectTimeout = Request::CONNECT_TIMEOUT)
{
$credential = $this->getCredentialsInCache();

if ($credential === null) {
$result = $this->request($timeout);
$result = $this->request($timeout, $connectTimeout);

if (!isset($result['SessionAccessKey']['SessionAccessKeyId'],
$result['SessionAccessKey']['SessionAccessKeySecret'])) {
Expand All @@ -55,13 +56,14 @@ public function get($timeout = Request::TIMEOUT)
/**
* Get credentials by request.
*
* @param int $timeout
* @param $timeout
* @param $connectTimeout
*
* @return Result
* @throws ClientException
* @throws ServerException
*/
private function request($timeout)
private function request($timeout, $connectTimeout)
{
$clientName = __CLASS__ . \uniqid('rsa', true);

Expand All @@ -76,7 +78,7 @@ private function request($timeout)
return (new GenerateSessionAccessKey($this->client->getCredential()))
->client($clientName)
->timeout($timeout)
->connectTimeout($timeout)
->connectTimeout($connectTimeout)
->debug($this->client->isDebug())
->request();
}
Expand Down
10 changes: 9 additions & 1 deletion src/Request/Traits/ClientTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,15 @@ public function credential()
return $this->httpClient()->getCredential();
}

return $this->httpClient()->getSessionCredential();
$timeout = isset($this->options['timeout'])
? $this->options['timeout']
: Request::TIMEOUT;

$connectTimeout = isset($this->options['connect_timeout'])
? $this->options['connect_timeout']
: Request::CONNECT_TIMEOUT;

return $this->httpClient()->getSessionCredential($timeout, $connectTimeout);
}

/**
Expand Down
12 changes: 6 additions & 6 deletions tests/Feature/Credentials/AccessKeyCredentialTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@ public function testEcs()
{
$result = (new DescribeAccessPointsRequest())
->client($this->clientName)
->connectTimeout(20)
->timeout(25)
->connectTimeout(25)
->timeout(30)
->request();

$this->assertArrayHasKey('AccessPointSet', $result);
Expand Down Expand Up @@ -85,8 +85,8 @@ public function testCdn()
{
$result = (new DescribeCdnServiceRequest())
->client($this->clientName)
->connectTimeout(20)
->timeout(25)
->connectTimeout(25)
->timeout(30)
->request();

$this->assertArrayHasKey('ChangingChargeType', $result);
Expand All @@ -100,8 +100,8 @@ public function testVpc()
{
$result = (new DescribeVpcsRequest())
->client($this->clientName)
->connectTimeout(20)
->timeout(25)
->connectTimeout(25)
->timeout(30)
->request();

$this->assertArrayHasKey('Vpcs', $result);
Expand Down
8 changes: 4 additions & 4 deletions tests/Feature/Credentials/BearerTokenCredentialTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,8 @@ public function testEcs()
{
(new DescribeAccessPointsRequest())
->client($this->clientName)
->connectTimeout(20)
->timeout(25)
->connectTimeout(25)
->timeout(30)
->request();
}

Expand All @@ -94,8 +94,8 @@ public function testEcs()
public function testCdn()
{
(new DescribeCdnServiceRequest())->client($this->clientName)
->connectTimeout(20)
->timeout(25)
->connectTimeout(25)
->timeout(30)
->request();
}
}
4 changes: 2 additions & 2 deletions tests/Feature/Credentials/EcsRamRoleCredentialTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ public function testGetSessionCredential()
{
try {
(new DescribeRegionsRequest())->client($this->clientName)
->connectTimeout(20)
->timeout(25)
->connectTimeout(25)
->timeout(30)
->request();
} catch (ServerException $e) {
self::assertContains(
Expand Down
4 changes: 2 additions & 2 deletions tests/Feature/Credentials/RamRoleArnCredentialTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ public function testEcs()
{
try {
$result = (new DescribeAccessPointsRequest())->client($this->clientName)
->connectTimeout(20)
->timeout(25)
->connectTimeout(25)
->timeout(30)
->request();
$this->assertTrue(isset($result['AccessPointSet']));
} catch (ServerException $e) {
Expand Down
4 changes: 2 additions & 2 deletions tests/Feature/Credentials/RsaKeyPairCredentialTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ public function testEcsNotInJapan()
(new DescribeAccessPointsRequest())
->client($this->clientName)
->regionId(\AlibabaCloud\Client\env('REGION_ID'))
->connectTimeout(20)
->timeout(25)
->connectTimeout(25)
->timeout(30)
->request();
}
}
12 changes: 6 additions & 6 deletions tests/Feature/Request/ChainProviderRequestTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ public function testDefaultProviderOnInstance()
->product('Cdn')
->version('2014-11-11')
->action('DescribeCdnService')
->connectTimeout(15)
->timeout(20)
->connectTimeout(25)
->timeout(30)
->debug(true)
->request();
} catch (ClientException $e) {
Expand Down Expand Up @@ -83,8 +83,8 @@ public function testDefaultProviderOnEnv()
->product('Cdn')
->version('2014-11-11')
->action('DescribeCdnService')
->connectTimeout(15)
->timeout(20)
->connectTimeout(25)
->timeout(30)
->request();

self::assertNotEmpty('PayByTraffic', $result['ChangingChargeType']);
Expand Down Expand Up @@ -120,8 +120,8 @@ public function testDefaultProviderOnIni()
->product('Cdn')
->version('2014-11-11')
->action('DescribeCdnService')
->connectTimeout(20)
->timeout(25)
->connectTimeout(25)
->timeout(30)
->request();

self::assertNotEmpty('PayByTraffic', $result['ChangingChargeType']);
Expand Down

0 comments on commit d901c3b

Please sign in to comment.