Skip to content

Commit 167aac7

Browse files
committed
add bucket cname token api.
1 parent 533627a commit 167aac7

File tree

7 files changed

+294
-4
lines changed

7 files changed

+294
-4
lines changed

src/OSS/Core/OssUtil.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@ public static function toQueryString($options = array())
3131
uksort($options, 'strnatcasecmp');
3232
foreach ($options as $key => $value) {
3333
if (is_string($key) && !is_array($value)) {
34-
$temp[] = rawurlencode($key) . '=' . rawurlencode($value);
34+
if (strlen($value) > 0) {
35+
$temp[] = rawurlencode($key) . '=' . rawurlencode($value);
36+
} else {
37+
$temp[] = rawurlencode($key);
38+
}
3539
}
3640
}
3741
return implode('&', $temp);

src/OSS/Model/CnameTokenInfo.php

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
<?php
2+
3+
namespace OSS\Model;
4+
5+
6+
/**
7+
* Cname token info class.
8+
*
9+
* Class CnameTokenInfo
10+
* @package OSS\Model
11+
*/
12+
class CnameTokenInfo
13+
{
14+
/**
15+
* Get bucket name
16+
*
17+
* @return string
18+
*/
19+
public function getBucket()
20+
{
21+
return $this->bucket;
22+
}
23+
24+
/**
25+
* Get cname
26+
*
27+
* @return string
28+
*/
29+
public function getCname()
30+
{
31+
return $this->cname;
32+
}
33+
34+
/**
35+
* Get token.
36+
*
37+
* @return string
38+
*/
39+
public function getToken()
40+
{
41+
return $this->token;
42+
}
43+
44+
/**
45+
* Get expireTime.
46+
*
47+
* @return string
48+
*/
49+
public function getExpireTime()
50+
{
51+
return $this->expireTime;
52+
}
53+
54+
/**
55+
* Parse cname token from the xml.
56+
*
57+
* @param string $strXml
58+
* @throws OssException
59+
* @return null
60+
*/
61+
public function parseFromXml($strXml)
62+
{
63+
$xml = simplexml_load_string($strXml);
64+
if (isset($xml->Bucket) ) {
65+
$this->bucket = strval($xml->Bucket);
66+
}
67+
if (isset($xml->Cname) ) {
68+
$this->cname = strval($xml->Cname);
69+
}
70+
if (isset($xml->Token) ) {
71+
$this->token = strval($xml->Token);
72+
}
73+
if (isset($xml->ExpireTime) ) {
74+
$this->expireTime = strval($xml->ExpireTime);
75+
}
76+
}
77+
78+
/**
79+
* bucket name
80+
*
81+
* @var string
82+
*/
83+
private $bucket;
84+
/**
85+
* cname
86+
*
87+
* @var string
88+
*/
89+
private $cname;
90+
91+
/**
92+
* token
93+
*
94+
* @var string
95+
*/
96+
private $token;
97+
98+
/**
99+
* expire time
100+
*
101+
* @var string
102+
*/
103+
private $expireTime;
104+
105+
}

src/OSS/OssClient.php

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@
7676
use OSS\Result\DeleteObjectVersionsResult;
7777
use OSS\Model\TransferAccelerationConfig;
7878
use OSS\Result\GetBucketTransferAccelerationResult;
79+
use OSS\Model\CnameTokenInfo;
80+
use OSS\Result\CreateBucketCnameTokenResult;
81+
use OSS\Result\GetBucketCnameTokenResult;
7982

8083
/**
8184
* Class OssClient
@@ -546,12 +549,12 @@ public function addBucketCname($bucket, $cname, $options = NULL)
546549
$options[self::OSS_BUCKET] = $bucket;
547550
$options[self::OSS_METHOD] = self::OSS_HTTP_POST;
548551
$options[self::OSS_OBJECT] = '/';
549-
$options[self::OSS_SUB_RESOURCE] = 'cname';
550552
$options[self::OSS_CONTENT_TYPE] = 'application/xml';
551553
$cnameConfig = new CnameConfig();
552554
$cnameConfig->addCname($cname);
553555
$options[self::OSS_CONTENT] = $cnameConfig->serializeToXml();
554556
$options[self::OSS_COMP] = 'add';
557+
$options[self::OSS_CNAME] = '';
555558

556559
$response = $this->auth($options);
557560
$result = new PutSetDeleteResult($response);
@@ -572,7 +575,7 @@ public function getBucketCname($bucket, $options = NULL)
572575
$options[self::OSS_BUCKET] = $bucket;
573576
$options[self::OSS_METHOD] = self::OSS_HTTP_GET;
574577
$options[self::OSS_OBJECT] = '/';
575-
$options[self::OSS_SUB_RESOURCE] = 'cname';
578+
$options[self::OSS_CNAME] = '';
576579
$response = $this->auth($options);
577580
$result = new GetCnameResult($response);
578581
return $result->getData();
@@ -593,18 +596,64 @@ public function deleteBucketCname($bucket, $cname, $options = NULL)
593596
$options[self::OSS_BUCKET] = $bucket;
594597
$options[self::OSS_METHOD] = self::OSS_HTTP_POST;
595598
$options[self::OSS_OBJECT] = '/';
596-
$options[self::OSS_SUB_RESOURCE] = 'cname';
597599
$options[self::OSS_CONTENT_TYPE] = 'application/xml';
598600
$cnameConfig = new CnameConfig();
599601
$cnameConfig->addCname($cname);
600602
$options[self::OSS_CONTENT] = $cnameConfig->serializeToXml();
601603
$options[self::OSS_COMP] = 'delete';
604+
$options[self::OSS_CNAME] = '';
602605

603606
$response = $this->auth($options);
604607
$result = new PutSetDeleteResult($response);
605608
return $result->getData();
606609
}
607610

611+
/**
612+
* create a cname token for a bucket
613+
*
614+
* @param string $bucket bucket name
615+
* @param array $options
616+
* @throws OssException
617+
* @return CnameToken
618+
*/
619+
public function createBucketCnameToken($bucket, $cname, $options = NULL)
620+
{
621+
$this->precheckCommon($bucket, NULL, $options, false);
622+
$options[self::OSS_BUCKET] = $bucket;
623+
$options[self::OSS_METHOD] = self::OSS_HTTP_POST;
624+
$options[self::OSS_OBJECT] = '/';
625+
$options[self::OSS_CONTENT_TYPE] = 'application/xml';
626+
$cnameConfig = new CnameConfig();
627+
$cnameConfig->addCname($cname);
628+
$options[self::OSS_CONTENT] = $cnameConfig->serializeToXml();
629+
$options[self::OSS_COMP] = 'token';
630+
$options[self::OSS_CNAME] = '';
631+
$response = $this->auth($options);
632+
$result = new CreateBucketCnameTokenResult($response);
633+
return $result->getData();
634+
}
635+
636+
/**
637+
* get a cname token for a bucket
638+
*
639+
* @param string $bucket bucket name
640+
* @param array $options
641+
* @throws OssException
642+
* @return CnameToken
643+
*/
644+
public function getBucketCnameToken($bucket, $cname, $options = NULL)
645+
{
646+
$this->precheckCommon($bucket, NULL, $options, false);
647+
$options[self::OSS_BUCKET] = $bucket;
648+
$options[self::OSS_METHOD] = self::OSS_HTTP_GET;
649+
$options[self::OSS_OBJECT] = '/';
650+
$options[self::OSS_COMP] = 'token';
651+
$options[self::OSS_CNAME] = $cname;
652+
$response = $this->auth($options);
653+
$result = new GetBucketCnameTokenResult($response);
654+
return $result->getData();
655+
}
656+
608657
/**
609658
* Creates a Live Channel under a bucket
610659
*
@@ -3279,6 +3328,7 @@ private function generateSignableQueryStringParam($options)
32793328
self::OSS_TRAFFIC_LIMIT,
32803329
self::OSS_VERSION_ID,
32813330
self::OSS_CONTINUATION_TOKEN,
3331+
self::OSS_CNAME,
32823332
);
32833333

32843334
foreach ($signableList as $item) {
@@ -3565,6 +3615,7 @@ public function setConnectTimeout($connectTimeout)
35653615
const OSS_VERSION_ID_MARKER = 'version-id-marker';
35663616
const OSS_VERSION_ID = 'versionId';
35673617
const OSS_HEADER_VERSION_ID = 'x-oss-version-id';
3618+
const OSS_CNAME = 'cname';
35683619

35693620
//private URLs
35703621
const OSS_URL_ACCESS_KEY_ID = 'OSSAccessKeyId';
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace OSS\Result;
4+
5+
use OSS\Model\CnameTokenInfo;
6+
7+
class CreateBucketCnameTokenResult extends Result
8+
{
9+
/**
10+
* @return CnameConfig
11+
*/
12+
protected function parseDataFromResponse()
13+
{
14+
$content = $this->rawResponse->body;
15+
$info = new CnameTokenInfo();
16+
$info->parseFromXml($content);
17+
return $info;
18+
}
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace OSS\Result;
4+
5+
use OSS\Model\CnameTokenInfo;
6+
7+
class GetBucketCnameTokenResult extends Result
8+
{
9+
/**
10+
* @return CnameConfig
11+
*/
12+
protected function parseDataFromResponse()
13+
{
14+
$content = $this->rawResponse->body;
15+
$info = new CnameTokenInfo();
16+
$info->parseFromXml($content);
17+
return $info;
18+
}
19+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace OSS\Tests;
4+
5+
6+
use OSS\Model\CnameTokenInfo;
7+
use OSS\Core\OssException;
8+
9+
class CnameTokenInfoTest extends \PHPUnit\Framework\TestCase
10+
{
11+
private $xml1 = <<<BBBB
12+
<?xml version="1.0" encoding="utf-8"?>
13+
<CnameToken>
14+
<Bucket>bucket</Bucket>
15+
<Cname>www.foo.com</Cname>
16+
<Token>1234</Token>
17+
<ExpireTime>20150101</ExpireTime>
18+
</CnameToken>
19+
BBBB;
20+
21+
public function testFromXml()
22+
{
23+
$info = new CnameTokenInfo();
24+
$info->parseFromXml($this->xml1);
25+
26+
$this->assertEquals('bucket', $info->getBucket());
27+
$this->assertEquals('www.foo.com', $info->getCname());
28+
$this->assertEquals('1234', $info->getToken());
29+
$this->assertEquals('20150101', $info->getExpireTime());
30+
}
31+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
namespace OSS\Tests;
4+
5+
use OSS\OssClient;
6+
use OSS\Core\OssException;
7+
use OSS\Model\CnameConfig;
8+
use OSS\Model\CnameTokenInfo;
9+
10+
require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestOssClientBase.php';
11+
12+
13+
class OssClientBucketCnameTest extends TestOssClientBase
14+
{
15+
public function testBucketCname()
16+
{
17+
$bucketName = $this->bucket . '-cname';
18+
$client = new OssClient(
19+
getenv('OSS_ACCESS_KEY_ID'),
20+
getenv('OSS_ACCESS_KEY_SECRET'),
21+
"oss-ap-southeast-2.aliyuncs.com", false);
22+
23+
$client->createBucket($bucketName);
24+
25+
try {
26+
$info1 = $client->createBucketCnameToken($bucketName, "www.example.com");
27+
$this->assertEquals("www.example.com", $info1->getCname());
28+
$this->assertEquals($bucketName, $info1->getBucket());
29+
} catch (OssException $e) {
30+
$this->assertTrue(false);
31+
}
32+
33+
try {
34+
$info2 = $client->getBucketCnameToken($bucketName, "www.example.com");
35+
$this->assertEquals("www.example.com", $info2->getCname());
36+
$this->assertEquals($bucketName, $info2->getBucket());
37+
} catch (OssException $e) {
38+
$this->assertTrue(false);
39+
}
40+
41+
try {
42+
$result = $client->addBucketCname($bucketName, "www.example.com");
43+
} catch (OssException $e) {
44+
$this->assertEquals('NeedVerifyDomainOwnership', $e->getErrorCode());
45+
}
46+
47+
try {
48+
$config = $client->getBucketCname($bucketName);
49+
} catch (OssException $e) {
50+
$this->assertTrue(false);
51+
}
52+
53+
try {
54+
$result = $client->deleteBucketCname($bucketName, "www.example.com");
55+
} catch (OssException $e) {
56+
$this->assertTrue(false);
57+
}
58+
59+
$client->deleteBucket($bucketName);
60+
}
61+
}

0 commit comments

Comments
 (0)