diff --git a/samples/BucketReferer.php b/samples/BucketReferer.php
index 628f784..3670dc0 100644
--- a/samples/BucketReferer.php
+++ b/samples/BucketReferer.php
@@ -14,13 +14,29 @@
// Set referer whitelist
$refererConfig = new RefererConfig();
$refererConfig->setAllowEmptyReferer(true);
+$refererConfig->setAllowTruncateQueryString(false);
$refererConfig->addReferer("www.aliiyun.com");
$refererConfig->addReferer("www.aliiyuncs.com");
+
+$refererConfig->addBlackReferer("www.refuse.com");
+$refererConfig->addBlackReferer("www.?.deny.com");
$ossClient->putBucketReferer($bucket, $refererConfig);
Common::println("bucket $bucket refererConfig created:" . $refererConfig->serializeToXml());
// Get referer whitelist
$refererConfig = $ossClient->getBucketReferer($bucket);
-Common::println("bucket $bucket refererConfig fetched:" . $refererConfig->serializeToXml());
+
+Common::println("bucket $bucket referer allow empty referer:" . $refererConfig->getAllowEmptyReferer());
+Common::println("bucket $bucket referer allow truncate query string:" . $refererConfig->getAllowTruncateQueryString());
+if (count($refererConfig->getRefererList()) > 0){
+ foreach ($refererConfig->getRefererList() as $referer){
+ Common::println("bucket $bucket referer list:" . $referer);
+ }
+}
+if ($refererConfig->getRefererBlacklist() != null){
+ foreach ($refererConfig->getRefererBlacklist() as $referer){
+ Common::println("bucket $bucket referer blacklist:" . $referer);
+ }
+}
// Delete referrer whitelist
$refererConfig = new RefererConfig();
@@ -33,7 +49,6 @@
putBucketReferer($ossClient, $bucket);
getBucketReferer($ossClient, $bucket);
deleteBucketReferer($ossClient, $bucket);
-getBucketReferer($ossClient, $bucket);
/**
* Set bucket referer configuration
@@ -48,6 +63,8 @@ function putBucketReferer($ossClient, $bucket)
$refererConfig->setAllowEmptyReferer(true);
$refererConfig->addReferer("www.aliiyun.com");
$refererConfig->addReferer("www.aliiyuncs.com");
+ $refererConfig->addBlackReferer("www.refuse.com");
+ $refererConfig->addBlackReferer("www.?.deny.com");
try {
$ossClient->putBucketReferer($bucket, $refererConfig);
} catch (OssException $e) {
@@ -67,9 +84,20 @@ function putBucketReferer($ossClient, $bucket)
*/
function getBucketReferer($ossClient, $bucket)
{
- $refererConfig = null;
try {
$refererConfig = $ossClient->getBucketReferer($bucket);
+ Common::println("bucket $bucket referer allow empty referer:" . $refererConfig->getAllowEmptyReferer());
+ Common::println("bucket $bucket referer allow truncate query string:" . $refererConfig->getAllowTruncateQueryString());
+ if (count($refererConfig->getRefererList()) > 0){
+ foreach ($refererConfig->getRefererList() as $referer){
+ Common::println("bucket $bucket referer list:" . $referer);
+ }
+ }
+ if ($refererConfig->getRefererBlacklist() != null){
+ foreach ($refererConfig->getRefererBlacklist() as $referer){
+ Common::println("bucket $bucket referer blacklist:" . $referer);
+ }
+ }
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
diff --git a/src/OSS/Model/RefererConfig.php b/src/OSS/Model/RefererConfig.php
index 0830143..f62625f 100644
--- a/src/OSS/Model/RefererConfig.php
+++ b/src/OSS/Model/RefererConfig.php
@@ -19,12 +19,19 @@ public function parseFromXml($strXml)
$xml = simplexml_load_string($strXml);
if (!isset($xml->AllowEmptyReferer)) return;
if (!isset($xml->RefererList)) return;
- $this->allowEmptyReferer =
- (strval($xml->AllowEmptyReferer) === 'TRUE' || strval($xml->AllowEmptyReferer) === 'true') ? true : false;
-
+ $this->allowEmptyReferer = strval($xml->AllowEmptyReferer) === 'TRUE' || strval($xml->AllowEmptyReferer) === 'true';
+ if (isset($xml->AllowTruncateQueryString)){
+ $this->allowTruncateQueryString = strval($xml->AllowTruncateQueryString) === 'TRUE' || strval($xml->AllowTruncateQueryString) === 'true';
+ }
foreach ($xml->RefererList->Referer as $key => $refer) {
$this->refererList[] = strval($refer);
}
+
+ if (isset($xml->RefererBlacklist->Referer)){
+ foreach ($xml->RefererBlacklist->Referer as $refer) {
+ $this->refererBlacklist[] = strval($refer);
+ }
+ }
}
@@ -36,15 +43,22 @@ public function parseFromXml($strXml)
public function serializeToXml()
{
$xml = new \SimpleXMLElement('');
- if ($this->allowEmptyReferer) {
- $xml->addChild('AllowEmptyReferer', 'true');
- } else {
- $xml->addChild('AllowEmptyReferer', 'false');
+ if (isset($this->allowEmptyReferer)){
+ $xml->addChild('AllowEmptyReferer',json_encode($this->allowEmptyReferer));
+ }
+ if (isset($this->allowTruncateQueryString)){
+ $xml->addChild('AllowTruncateQueryString',json_encode($this->allowTruncateQueryString));
}
$refererList = $xml->addChild('RefererList');
foreach ($this->refererList as $referer) {
$refererList->addChild('Referer', $referer);
}
+ if (isset($this->refererBlacklist)){
+ $refererList = $xml->addChild('RefererBlacklist');
+ foreach ($this->refererBlacklist as $referer) {
+ $refererList->addChild('Referer', $referer);
+ }
+ }
return $xml->asXML();
}
@@ -64,6 +78,14 @@ public function setAllowEmptyReferer($allowEmptyReferer)
$this->allowEmptyReferer = $allowEmptyReferer;
}
+ /**
+ * @param boolean $allowTruncateQueryString
+ */
+ public function setAllowTruncateQueryString($allowTruncateQueryString)
+ {
+ $this->allowTruncateQueryString = $allowTruncateQueryString;
+ }
+
/**
* @param string $referer
*/
@@ -72,14 +94,29 @@ public function addReferer($referer)
$this->refererList[] = $referer;
}
+ /**
+ * @param string $referer
+ */
+ public function addBlackReferer($referer){
+ $this->refererBlacklist[] = $referer;
+ }
+
/**
* @return boolean
*/
- public function isAllowEmptyReferer()
+ public function getAllowEmptyReferer()
{
return $this->allowEmptyReferer;
}
+
+ /**
+ * @return bool
+ */
+ public function getAllowTruncateQueryString(){
+ return $this->allowTruncateQueryString;
+ }
+
/**
* @return array
*/
@@ -88,6 +125,28 @@ public function getRefererList()
return $this->refererList;
}
+ /**
+ * @return array
+ */
+ public function getRefererBlacklist()
+ {
+ return $this->refererBlacklist;
+ }
+
+ /**
+ * @var bool
+ */
private $allowEmptyReferer = true;
+ /**
+ * @var bool
+ */
+ private $allowTruncateQueryString;
+ /**
+ * @var array
+ */
private $refererList = array();
+ /**
+ * @var array
+ */
+ private $refererBlacklist;
}
\ No newline at end of file
diff --git a/src/OSS/OssClient.php b/src/OSS/OssClient.php
index c953344..bfd4e8d 100644
--- a/src/OSS/OssClient.php
+++ b/src/OSS/OssClient.php
@@ -1064,7 +1064,7 @@ public function deleteBucketLifecycle($bucket, $options = NULL)
* @param string $bucket bucket name
* @param RefererConfig $refererConfig
* @param array $options
- * @return ResponseCore
+ * @return ResponseCore|null
* @throws null
*/
public function putBucketReferer($bucket, $refererConfig, $options = NULL)
@@ -1087,8 +1087,8 @@ public function putBucketReferer($bucket, $refererConfig, $options = NULL)
*
* @param string $bucket bucket name
* @param array $options
- * @throws OssException
- * @return RefererConfig
+ * @return RefererConfig|null
+ * @throws OssException|RequestCore_Exception
*/
public function getBucketReferer($bucket, $options = NULL)
{
diff --git a/tests/OSS/Tests/GetRefererResultTest.php b/tests/OSS/Tests/GetRefererResultTest.php
index 774aae9..37dc270 100644
--- a/tests/OSS/Tests/GetRefererResultTest.php
+++ b/tests/OSS/Tests/GetRefererResultTest.php
@@ -20,6 +20,34 @@ class GetRefererResultTest extends \PHPUnit\Framework\TestCase
https://www.?.aliyuncs.com
+BBBB;
+
+ private $validXml1 = <<
+
+true
+
+
+BBBB;
+
+ private $validXml2 = <<
+
+false
+false
+
+http://www.aliyun.com
+https://www.aliyun.com
+http://www.*.com
+https://www.?.aliyuncs.com
+
+
+http://www.refuse.com
+https://*.hack.com
+http://ban.*.com
+https://www.?.deny.com
+
+
BBBB;
public function testParseValidXml()
@@ -30,7 +58,63 @@ public function testParseValidXml()
$this->assertNotNull($result->getData());
$this->assertNotNull($result->getRawResponse());
$refererConfig = $result->getData();
- $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($refererConfig->serializeToXml()));
+
+ $this->assertTrue($refererConfig->getAllowEmptyReferer());
+ $refererList = $refererConfig->getRefererList();
+
+ $this->assertEquals(count($refererList),4);
+ $this->assertEquals($refererList[0],"http://www.aliyun.com");
+ $this->assertEquals($refererList[1],"https://www.aliyun.com");
+ $this->assertEquals($refererList[2],"http://www.*.com");
+ $this->assertEquals($refererList[3],"https://www.?.aliyuncs.com");
+
+ }
+
+ public function testParseValidXml1()
+ {
+ $response = new ResponseCore(array(), $this->validXml1, 200);
+ $result = new GetRefererResult($response);
+ $this->assertTrue($result->isOK());
+ $this->assertNotNull($result->getData());
+ $this->assertNotNull($result->getRawResponse());
+ $refererConfig = $result->getData();
+
+ $this->assertTrue($refererConfig->getAllowEmptyReferer());
+ $refererList = $refererConfig->getRefererList();
+ $this->assertEquals(count($refererList),0);
+
+ $this->assertNull($refererConfig->getAllowTruncateQueryString());
+ $this->assertNull($refererConfig->getRefererBlacklist());
+ }
+
+ public function testParseValidXml2()
+ {
+ $response = new ResponseCore(array(), $this->validXml2, 200);
+ $result = new GetRefererResult($response);
+ $this->assertTrue($result->isOK());
+ $this->assertNotNull($result->getData());
+ $this->assertNotNull($result->getRawResponse());
+ $refererConfig = $result->getData();
+ $this->assertFalse($refererConfig->getAllowEmptyReferer());
+ $this->assertFalse($refererConfig->getAllowTruncateQueryString());
+ $refererList = $refererConfig->getRefererList();
+
+ $this->assertEquals(count($refererList),4);
+ $this->assertEquals($refererList[0],"http://www.aliyun.com");
+ $this->assertEquals($refererList[1],"https://www.aliyun.com");
+ $this->assertEquals($refererList[2],"http://www.*.com");
+ $this->assertEquals($refererList[3],"https://www.?.aliyuncs.com");
+
+ $blacklist = $refererConfig->getRefererBlacklist();
+
+ $this->assertEquals(count($blacklist),4);
+ $this->assertEquals($blacklist[0],"http://www.refuse.com");
+ $this->assertEquals($blacklist[1],"https://*.hack.com");
+ $this->assertEquals($blacklist[2],"http://ban.*.com");
+ $this->assertEquals($blacklist[3],"https://www.?.deny.com");
+
+
+
}
private function cleanXml($xml)
diff --git a/tests/OSS/Tests/OssClientBucketRefererTest.php b/tests/OSS/Tests/OssClientBucketRefererTest.php
index ba7d14f..83e03ac 100644
--- a/tests/OSS/Tests/OssClientBucketRefererTest.php
+++ b/tests/OSS/Tests/OssClientBucketRefererTest.php
@@ -25,6 +25,7 @@ public function testBucket()
try {
Common::waitMetaSync();
$refererConfig2 = $this->ossClient->getBucketReferer($this->bucket);
+ $refererConfig->setAllowTruncateQueryString(true);
$this->assertEquals($refererConfig->serializeToXml(), $refererConfig2->serializeToXml());
} catch (OssException $e) {
$this->assertTrue(false);
@@ -45,4 +46,74 @@ public function testBucket()
$this->assertTrue(false);
}
}
+
+ public function testBucketReferer()
+ {
+
+ try {
+ $referer = $this->ossClient->getBucketReferer($this->bucket);
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+
+ $refererConfig = new RefererConfig();
+ $refererConfig->addReferer('http://www.aliyun.com');
+
+ try {
+ $this->ossClient->putBucketReferer($this->bucket, $refererConfig);
+ } catch (OssException $e) {
+ var_dump($e->getMessage());
+ $this->assertTrue(false);
+ }
+ try {
+ Common::waitMetaSync();
+ $refererConfig2 = $this->ossClient->getBucketReferer($this->bucket);
+ $refererConfig->setAllowTruncateQueryString(true);
+ $this->assertEquals($refererConfig->serializeToXml(), $refererConfig2->serializeToXml());
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+
+ try {
+ Common::waitMetaSync();
+ $nullRefererConfig = new RefererConfig();
+ $nullRefererConfig->setAllowEmptyReferer(false);
+ $nullRefererConfig->setAllowTruncateQueryString(false);
+ $nullRefererConfig->addReferer('http://www.aliyun.com');
+
+ $nullRefererConfig->addBlackReferer('http://www.refuse.com');
+ $nullRefererConfig->addBlackReferer('https://www.refuse.com');
+ $this->ossClient->putBucketReferer($this->bucket, $nullRefererConfig);
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+
+ try {
+ Common::waitMetaSync();
+ $refererConfig3 = $this->ossClient->getBucketReferer($this->bucket);
+ $this->assertEquals($refererConfig3->serializeToXml(), $nullRefererConfig->serializeToXml());
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+
+
+ try {
+ Common::waitMetaSync();
+ $refererConfig4 = new RefererConfig();
+ $this->ossClient->putBucketReferer($this->bucket,$refererConfig4);
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+
+
+ try {
+ Common::waitMetaSync();
+ $refererConfig5 = $this->ossClient->getBucketReferer($this->bucket);
+ $this->assertEquals($referer->serializeToXml(), $refererConfig5->serializeToXml());
+ } catch (OssException $e) {
+ $this->assertTrue(false);
+ }
+
+
+ }
}
diff --git a/tests/OSS/Tests/RefererConfigTest.php b/tests/OSS/Tests/RefererConfigTest.php
index 5112da8..3b30a7e 100644
--- a/tests/OSS/Tests/RefererConfigTest.php
+++ b/tests/OSS/Tests/RefererConfigTest.php
@@ -21,29 +21,68 @@ class RefererConfigTest extends \PHPUnit\Framework\TestCase
BBBB;
- private $validXml2 = <<
-true
+false
+false
http://www.aliyun.com
+https://www.aliyun.com
+http://www.*.com
+https://www.?.aliyuncs.com
+
+http://www.refuse.com
+https://*.hack.com
+http://ban.*.com
+https://www.?.deny.com
+
+
+BBBB;
+
+ private $validXml2 = <<
+
+true
+
BBBB;
public function testParseValidXml()
{
$refererConfig = new RefererConfig();
- $refererConfig->parseFromXml($this->validXml);
+ $refererConfig->setAllowEmptyReferer(true);
+ $refererConfig->addReferer("http://www.aliyun.com");
+ $refererConfig->addReferer("https://www.aliyun.com");
+ $refererConfig->addReferer("http://www.*.com");
+ $refererConfig->addReferer("https://www.?.aliyuncs.com");
+
$this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($refererConfig->serializeToXml()));
}
+ public function testParseValidXml1()
+ {
+ $refererConfig = new RefererConfig();
+ $refererConfig->setAllowEmptyReferer(false);
+ $refererConfig->setAllowTruncateQueryString(false);
+ $refererConfig->addReferer("http://www.aliyun.com");
+ $refererConfig->addReferer("https://www.aliyun.com");
+ $refererConfig->addReferer("http://www.*.com");
+ $refererConfig->addReferer("https://www.?.aliyuncs.com");
+
+ $refererConfig->addBlackReferer("http://www.refuse.com");
+ $refererConfig->addBlackReferer("https://*.hack.com");
+ $refererConfig->addBlackReferer("http://ban.*.com");
+ $refererConfig->addBlackReferer("https://www.?.deny.com");
+
+ $this->assertEquals($this->cleanXml($this->validXml1), $this->cleanXml($refererConfig->serializeToXml()));
+ }
+
public function testParseValidXml2()
{
$refererConfig = new RefererConfig();
- $refererConfig->parseFromXml($this->validXml2);
- $this->assertEquals(true, $refererConfig->isAllowEmptyReferer());
- $this->assertEquals(1, count($refererConfig->getRefererList()));
+ $refererConfig->setAllowEmptyReferer(true);
$this->assertEquals($this->cleanXml($this->validXml2), $this->cleanXml(strval($refererConfig)));
}