diff --git a/samples/BucketCname.php b/samples/BucketCname.php index c39eb401..14d21c96 100644 --- a/samples/BucketCname.php +++ b/samples/BucketCname.php @@ -1,22 +1,75 @@ '; +$info = $ossClient->createBucketCnameToken($bucket, $myDomain); +Common::println("Bucket name: " . $info->getBucket()); +Common::println("Cname is: " . $info->getCname()); +Common::println("Token is: " . $info->getToken()); +Common::println("ExpireTime is: " . $info->getExpireTime()); -// Add Canme record +//Get Cname Token $myDomain = ''; -$ossClient->addBucketCname($bucket, $myDomain); +$info = $ossClient->getBucketCnameToken($bucket, $myDomain); +Common::println("Bucket name: " . $info->getBucket()); +Common::println("Cname is: " . $info->getCname()); +Common::println("Token is: " . $info->getToken()); +Common::println("ExpireTime is: " . $info->getExpireTime()); + +// Add Cname record +$config = new CnameConfig(); +$certificate = new CnameConfigCertificate(); +$certificate->setCertId("927***-cn-hangzhou"); +$certificate->setCertificate("-----BEGIN CERTIFICATE-----MIIGeDCCBOCgAwIBAgIRAPj4FW***-----END CERTIFICATE-----"); +$certificate->setPrivateKey("-----BEGIN CERTIFICATE-----MIIFBzCCA++gAwIBAgIRALIM7***-----END CERTIFICATE-----"); +$certificate->setPreviousCertId("493***-cn-hangzhou"); +$certificate->setForce(true); +$certificate->setDeleteCertificate(false); +$config->setCname(''); +$config->setCertificateConfig($certificate); +$ossClient->addBucketCnameV2($bucket, $config); + +// Unbind Cname SSL Certificate +$config = new CnameConfig(); +$certificate = new CnameConfigCertificate(); +$certificate->setDeleteCertificate(true); +$config->setCname(''); +$config->setCertificateConfig($certificate); +$ossClient->addBucketCnameV2($bucket, $config); + // View cname records $cnameConfig = $ossClient->getBucketCname($bucket); -Common::println("bucket $bucket cname:" . $cnameConfig->serializeToXml()); +Common::println("Bucket name: " . $cnameConfig->getBucket()); +Common::println("Owner is: " . $cnameConfig->getOwner()); + +foreach ( $cnameConfig->getCnameList() as $cnameInfo){ + Common::println("Domain is: " . $cnameInfo->getDomain()); + Common::println("Status is: " . $cnameInfo->getStatus()); + Common::println("LastModified is: " . $cnameInfo->getLastModified()); + $cert = $cnameInfo->getCertificate(); + if (isset($cert)){ + Common::println("Certificate Type is: " . $cert->getType()); + Common::println("Certificate Cert Id is: " . $cert->getCertId()); + Common::println("Certificate Status is: " . $cert->getStatus()); + Common::println("Certificate Creation Date is: " . $cert->getCreationDate()); + Common::println("Certificate Fingerprint is: " . $cert->getFingerprint()); + Common::println("Certificate Valid Start Date is: " . $cert->getValidStartDate()); + Common::println("Certificate Valid End Date is: " . $cert->getValidEndDate()); + } +} + // Delete bucket cname $myDomain = ''; @@ -25,29 +78,91 @@ //******************************* For complete usage, see the following functions **************************************************** +createBucketCnameToken($ossClient, $bucket); +getBucketCnameToken($ossClient, $bucket); addBucketCname($ossClient, $bucket); getBucketCname($ossClient, $bucket); deleteBucketCname($ossClient, $bucket); +/** + * Create Bucket Cname Token + * @param OssClient $ossClient OssClient instance + * @param string $bucket bucket name + * @return null + * @throws RequestCore_Exception + */ +function createBucketCnameToken($ossClient, $bucket) +{ + // Set up a custom domain name. + $myDomain = ''; + try { + $info = $ossClient->createBucketCnameToken($bucket, $myDomain); + printf("Bucket name: " . $info->getBucket()); + printf("Cname is: " . $info->getCname()); + printf("Token is: " . $info->getToken()); + printf("ExpireTime is: " . $info->getExpireTime()); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + + +/** + * Get Bucket Cname Token + * @param OssClient $ossClient OssClient instance + * @param string $bucket bucket name + * @return null + * @throws RequestCore_Exception + */ +function getBucketCnameToken($ossClient, $bucket) +{ + // Set up a custom domain name. + $myDomain = ''; + try { + $info = $ossClient->getBucketCnameToken($bucket, $myDomain); + printf("Bucket name: " . $info->getBucket()); + printf("Cname is: " . $info->getCname()); + printf("Token is: " . $info->getToken()); + printf("ExpireTime is: " . $info->getExpireTime()); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); +} + /** * Set bucket cname * * @param OssClient $ossClient OssClient instance * @param string $bucket bucket name * @return null + * @throws RequestCore_Exception */ function addBucketCname($ossClient, $bucket) { - // Set up a custom domain name. - $myDomain = ''; - try { - $ossClient->addBucketCname($bucket, $myDomain); - } catch (OssException $e) { - printf(__FUNCTION__ . ": FAILED\n"); - printf($e->getMessage() . "\n"); - return; - } - print(__FUNCTION__ . ": OK" . "\n"); + try { + $config = new CnameConfig(); + $certificate = new CnameConfigCertificate(); + $certificate->setCertId("927***-cn-hangzhou"); + $certificate->setCertificate("-----BEGIN CERTIFICATE-----MIIGeDCCBOCgAwIBAgIRAPj4FW***-----END CERTIFICATE-----"); + $certificate->setPrivateKey("-----BEGIN CERTIFICATE-----MIIFBzCCA++gAwIBAgIRALIM7***-----END CERTIFICATE-----"); + $certificate->setPreviousCertId("493***-cn-hangzhou"); + $certificate->setForce(true); + $certificate->setDeleteCertificate(false); + $config->setCname(''); + $config->setCertificateConfig($certificate); + $ossClient->addBucketCname($bucket, $config); + } catch (OssException $e) { + printf(__FUNCTION__ . ": FAILED\n"); + printf($e->getMessage() . "\n"); + return; + } + print(__FUNCTION__ . ": OK" . "\n"); } /** @@ -56,18 +171,37 @@ function addBucketCname($ossClient, $bucket) * @param OssClient $ossClient OssClient instance * @param string $bucket bucket name * @return null + * @throws RequestCore_Exception */ function getBucketCname($ossClient, $bucket) { try { - $cnameConfig = $ossClient->getBucketCname($bucket); + $cnameConfig = $ossClient->getBucketCname($bucket); + printf("Bucket name: " . $cnameConfig->getBucket().PHP_EOL); + printf("Owner is: " . $cnameConfig->getOwner().PHP_EOL); + + foreach ( $cnameConfig->getCnameList() as $cnameInfo){ + printf("Domain is: " . $cnameInfo->getDomain().PHP_EOL); + printf("Status is: " . $cnameInfo->getStatus().PHP_EOL); + printf("LastModified is: " . $cnameInfo->getLastModified().PHP_EOL); + $cert = $cnameInfo->getCertificate(); + if (isset($cert)){ + printf("Certificate Type is: " . $cert->getType().PHP_EOL); + printf("Certificate Cert Id is: " . $cert->getCertId().PHP_EOL); + printf("Certificate Status is: " . $cert->getStatus().PHP_EOL); + printf("Certificate Creation Date is: " . $cert->getCreationDate().PHP_EOL); + printf("Certificate Fingerprint is: " . $cert->getFingerprint().PHP_EOL); + printf("Certificate Valid Start Date is: " . $cert->getValidStartDate().PHP_EOL); + printf("Certificate Valid End Date is: " . $cert->getValidEndDate().PHP_EOL); + } + + } } catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n"); - print($cnameConfig->serializeToXml() . "\n"); } /** @@ -76,12 +210,13 @@ function getBucketCname($ossClient, $bucket) * @param OssClient $ossClient OssClient instance * @param string $bucket bucket name * @return null + * @throws RequestCore_Exception */ function deleteBucketCname($ossClient, $bucket) { - $myDomain = ''; + $myDomain = ''; try { - $ossClient->deleteBucketCname($bucket, $myDomain); + $ossClient->deleteBucketCname($bucket, $myDomain); } catch (OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); diff --git a/src/OSS/Model/CnameCertificate.php b/src/OSS/Model/CnameCertificate.php new file mode 100644 index 00000000..03d84b1e --- /dev/null +++ b/src/OSS/Model/CnameCertificate.php @@ -0,0 +1,179 @@ +certId = $certId; + } + + /** + * @return string + */ + public function getCertId(){ + return $this->certId; + } + + /** + * @return string + */ + public function getType(){ + return $this->type; + } + + /** + * @param $type string + */ + public function setType($type){ + $this->type = $type; + } + + + /** + * @param $status string + */ + public function setStatus($status){ + $this->status = $status; + } + + /** + * @return string + */ + public function getStatus(){ + return $this->status; + } + + /** + * @param $creationDate string + */ + public function setCreationDate($creationDate){ + $this->creationDate = $creationDate; + } + + /** + * @return string + */ + public function getCreationDate(){ + return $this->creationDate; + } + + /** + * @param $fingerprint string + */ + public function setFingerprint($fingerprint){ + $this->fingerprint = $fingerprint; + } + + /** + * @return string + */ + public function getFingerprint(){ + return $this->fingerprint; + } + + /** + * @param $validStartDate string + */ + public function setValidStartDate($validStartDate){ + $this->validStartDate = $validStartDate; + } + + /** + * @return string + */ + public function getValidStartDate(){ + return $this->validStartDate; + } + + /** + * @param $validEndDate string + */ + public function setValidEndDate($validEndDate){ + $this->validEndDate = $validEndDate; + } + + /** + * @return string + */ + public function getValidEndDate(){ + return $this->validEndDate; + } + + /** + * @param \SimpleXMLElement $xmlCname + */ + public function appendToXml(&$xmlCname) + { + if (isset($this->certId) || isset($this->type) || isset($this->status) || isset($this->creationDate) || isset($this->fingerprint) || isset($this->validStartDate) || isset($this->validEndDate)){ + $xmlCertificate = $xmlCname->addChild('Certificate'); + } + if (isset($this->type)){ + $xmlCertificate->addChild('Type',$this->type); + } + if (isset($this->certId)){ + $xmlCertificate->addChild('CertId', $this->certId); + } + if (isset($this->status)){ + $xmlCertificate->addChild('Status',$this->status); + } + if (isset($this->creationDate)){ + $xmlCertificate->addChild('CreationDate',$this->creationDate); + } + if (isset($this->fingerprint)){ + $xmlCertificate->addChild('Fingerprint',$this->fingerprint); + } + if (isset($this->validStartDate)){ + $xmlCertificate->addChild('ValidStartDate',$this->validStartDate); + } + if (isset($this->validEndDate)){ + $xmlCertificate->addChild('ValidEndDate',$this->validEndDate); + } + + } + +} \ No newline at end of file diff --git a/src/OSS/Model/CnameConfig.php b/src/OSS/Model/CnameConfig.php index f3597d2f..bd8f668b 100644 --- a/src/OSS/Model/CnameConfig.php +++ b/src/OSS/Model/CnameConfig.php @@ -8,83 +8,128 @@ /** * Class CnameConfig * @package OSS\Model - * - * TODO: fix link - * @link http://help.aliyun.com/document_detail/oss/api-reference/cors/PutBucketcors.html + * @link https://help.aliyun.com/document_detail/428391.html */ class CnameConfig implements XmlConfig { - public function __construct() + + /** + * @var CnameConfigCertificate + */ + private $certificateConfig; + + + /** + * @var string + */ + private $cname; + + /** + * @param $cname string + */ + public function setCname($cname) { - $this->cnameList = array(); + $this->cname = $cname; } /** - * @return array - * @example - * array(2) { - * [0]=> - * array(3) { - * ["Domain"]=> - * string(11) "www.foo.com" - * ["Status"]=> - * string(7) "enabled" - * ["LastModified"]=> - * string(8) "20150101" - * } - * [1]=> - * array(3) { - * ["Domain"]=> - * string(7) "bar.com" - * ["Status"]=> - * string(8) "disabled" - * ["LastModified"]=> - * string(8) "20160101" - * } - * } + * @param $certificateConfig CnameConfigCertificate */ - public function getCnames() + public function setCertificateConfig($certificateConfig) { - return $this->cnameList; + $this->certificateConfig = $certificateConfig; } - - public function addCname($cname) + /** + * @return CnameConfigCertificate + */ + public function getCertificateConfig() { - if (count($this->cnameList) >= self::OSS_MAX_RULES) { - throw new OssException( - "num of cname in the config exceeds self::OSS_MAX_RULES: " . strval(self::OSS_MAX_RULES)); - } - $this->cnameList[] = array('Domain' => $cname); + return $this->certificateConfig; + } + + + /** + * @return string + */ + public function getCname(){ + return $this->cname; } + /** + * Parse the xml into this object. + * + * @param string $strXml + * @return void|null + */ public function parseFromXml($strXml) { + $this->cnameConfig = array(); $xml = simplexml_load_string($strXml); if (!isset($xml->Cname)) return; - foreach ($xml->Cname as $entry) { - $cname = array(); - foreach ($entry as $key => $value) { - $cname[strval($key)] = strval($value); + $this->parseCname($xml->Cname); + } + + /** + * @param $xmlCname \SimpleXMLElement + */ + private function parseCname($xmlCname) + { + if(isset($xmlCname)){ + if (isset($xmlCname->Domain)){ + $this->setCname(strval($xmlCname->Domain)); + } + if (isset($xmlCname->CertificateConfiguration)){ + $this->parseCertificateConfiguration($xmlCname->CertificateConfiguration); } - $this->cnameList[] = $cname; } + } - public function serializeToXml() + /** + * @param $certificateConfiguration \SimpleXMLElement + */ + private function parseCertificateConfiguration($certificateConfiguration) { - $strXml = << - - -EOF; - $xml = new \SimpleXMLElement($strXml); - foreach ($this->cnameList as $cname) { - $node = $xml->addChild('Cname'); - foreach ($cname as $key => $value) { - $node->addChild($key, $value); + if(isset($certificateConfiguration)){ + $certificateConfig = new CnameConfigCertificate(); + if (isset($certificateConfiguration->CertId)){ + $certificateConfig->setCertId(strval($certificateConfiguration->CertId)); + } + if (isset($certificateConfiguration->Certificate)){ + $certificateConfig->setCertificate(strval($certificateConfiguration->Certificate)); + } + if (isset($certificateConfiguration->PrivateKey)){ + $certificateConfig->setPrivateKey(strval($certificateConfiguration->PrivateKey)); + } + if (isset($certificateConfiguration->PreviousCertId)){ + $certificateConfig->setPreviousCertId(strval($certificateConfiguration->PreviousCertId)); + } + if (isset($certificateConfiguration->Force)){ + $certificateConfig->setForce(strval($certificateConfiguration->Force)); + } + if (isset($certificateConfiguration->DeleteCertificate)){ + $certificateConfig->setDeleteCertificate(strval($certificateConfiguration->DeleteCertificate)); } + $this->setCertificateConfig($certificateConfig); } + } + + public function serializeToXml() + { + $xml = new \SimpleXMLElement(''); + + if (isset($this->cname) || isset($this->certificateConfig)){ + $xmlCname = $xml->addChild('Cname'); + } + if (isset($this->cname)){ + $xmlCname->addChild('Domain',$this->cname); + } + + if (isset($this->certificateConfig)){ + $this->certificateConfig->appendToXml($xmlCname); + } + return $xml->asXML(); } @@ -93,7 +138,4 @@ public function __toString() return $this->serializeToXml(); } - const OSS_MAX_RULES = 10; - - private $cnameList = array(); } \ No newline at end of file diff --git a/src/OSS/Model/CnameConfigCertificate.php b/src/OSS/Model/CnameConfigCertificate.php new file mode 100644 index 00000000..10e71744 --- /dev/null +++ b/src/OSS/Model/CnameConfigCertificate.php @@ -0,0 +1,172 @@ +certId = $certId; + } + + /** + * @return string + */ + public function getCertId(){ + return $this->certId; + } + + /** + * @return string + */ + public function getType(){ + return $this->type; + } + + /** + * @param $type string + */ + public function setType($type){ + $this->type = $type; + } + + /** + * @param $certificate string + */ + public function setCertificate($certificate){ + $this->certificate = $certificate; + } + + /** + * @return string + */ + public function getCertificate(){ + return $this->certificate; + } + + /** + * @param $privateKey string + */ + public function setPrivateKey($privateKey){ + $this->privateKey = $privateKey; + } + + /** + * @return string + */ + public function getPrivateKey(){ + return $this->privateKey; + } + + /** + * @param $previousCertId string + */ + public function setPreviousCertId($previousCertId){ + $this->previousCertId = $previousCertId; + } + + /** + * @return string + */ + public function getPreviousCertId(){ + return $this->previousCertId; + } + + /** + * @param $force boolean + */ + public function setForce($force){ + $this->force = $force; + } + + /** + * @return boolean + */ + public function getForce(){ + return $this->force; + } + + /** + * @param $deleteCertificate boolean + */ + public function setDeleteCertificate($deleteCertificate){ + $this->deleteCertificate = $deleteCertificate; + } + + /** + * @return boolean + */ + public function getDeleteCertificate(){ + return $this->deleteCertificate; + } + + /** + * @param \SimpleXMLElement $xmlCname + */ + public function appendToXml($xmlCname) + { + if (isset($this->certId) || isset($this->certificate) || isset($this->privateKey) || isset($this->previousCertId) || isset($this->force) || isset($this->deleteCertificate)){ + $xmlCertificateConfig = $xmlCname->addChild('CertificateConfiguration'); + } + if (isset($this->certId)){ + $xmlCertificateConfig->addChild('CertId', $this->certId); + } + if (isset($this->certificate)){ + $xmlCertificateConfig->addChild('Certificate',$this->certificate); + } + if (isset($this->privateKey)){ + $xmlCertificateConfig->addChild('PrivateKey',$this->privateKey); + } + if (isset($this->previousCertId)){ + $xmlCertificateConfig->addChild('PreviousCertId',$this->previousCertId); + } + if (isset($this->force)){ + $xmlCertificateConfig->addChild('Force', ($this->force === true || $this->force === True ? "true" : "false")); + } + if (isset($this->deleteCertificate)){ + $xmlCertificateConfig->addChild('DeleteCertificate', ($this->deleteCertificate === true || $this->deleteCertificate === True ? "true" : "false")); + } + + } + +} \ No newline at end of file diff --git a/src/OSS/Model/CnameInfo.php b/src/OSS/Model/CnameInfo.php new file mode 100644 index 00000000..162fc8cb --- /dev/null +++ b/src/OSS/Model/CnameInfo.php @@ -0,0 +1,127 @@ +domain; + } + + /** + * Set domain name + * @param $domain string + */ + public function setDomain($domain) + { + $this->domain = $domain; + } + + /** + * Get Cname Certificate + * + * @return CnameCertificate + */ + public function getCertificate() + { + return $this->certificate; + } + + /** + * Add Cname Certificate + * + * @param $certificate CnameCertificate + */ + public function addCertificate($certificate) + { + $this->certificate = $certificate; + } + + /** + * @param \SimpleXMLElement $xmlCname + */ + public function appendToXml(&$xmlCname) + { + if (isset($this->domain)){ + $xmlCname->addChild('Domain', $this->domain); + } + if (isset($this->certificateConfiguration)){ + $this->certificateConfiguration->appendToXml($xmlCname); + } + + if (isset($this->certificate)){ + $this->certificate->appendToXml($xmlCname); + } + + } + + /** + * Get lastModified + * + * @return string + */ + public function getLastModified() + { + return $this->lastModified; + } + + /** + * Set lastModified + * + * @param $lastModified string + */ + public function setLastModified($lastModified) + { + $this->lastModified = $lastModified; + } + + + /** + * Get status + * + * @return string + */ + public function getStatus() + { + return $this->status; + } + + /** + * Set status + * + * @param $status string + */ + public function setStatus($status) + { + $this->status = $status; + } +} \ No newline at end of file diff --git a/src/OSS/Model/CnameList.php b/src/OSS/Model/CnameList.php new file mode 100644 index 00000000..c1c74ddf --- /dev/null +++ b/src/OSS/Model/CnameList.php @@ -0,0 +1,171 @@ +bucket; + } + + /** + * Get owner + * + * @return string + */ + public function getOwner() + { + return $this->owner; + } + + /** + * Get token. + * + * @return CnameInfo[] + */ + public function getCnameList() + { + return $this->cnameList; + } + + /** + * @param $cname CnameInfo + */ + public function addCnameList($cname){ + $this->cnameList[] = $cname; + } + + /** + * Parse cname list from the xml. + * @param $strXml string + */ + public function parseFromXml($strXml) + { + $xml = simplexml_load_string($strXml); + if (isset($xml->Bucket) ) { + $this->bucket = strval($xml->Bucket); + } + if (isset($xml->Owner) ) { + $this->owner = strval($xml->Owner); + } + if (isset($xml->Cname) ) { + $this->parseCname($xml->Cname); + } + } + + /** + * @param $cname SimpleXMLElement + */ + private function parseCname($cname){ + if(isset($cname)){ + foreach ($cname as $cnameInfo){ + $cnameConfig = new CnameInfo(); + if (isset($cnameInfo->Domain)){ + $cnameConfig->setDomain(strval($cnameInfo->Domain)); + } + if (isset($cnameInfo->LastModified)){ + $cnameConfig->setLastModified(strval($cnameInfo->LastModified)); + } + if (isset($cnameInfo->Status)){ + $cnameConfig->setStatus(strval($cnameInfo->Status)); + } + if (isset($cnameInfo->Certificate)){ + $this->parseCertificate($cnameInfo->Certificate,$cnameConfig); + } + $this->addCnameList($cnameConfig); + } + } + } + + + /** + * @param $certificate SimpleXMLElement + * @param $cnameInfo CnameInfo + */ + private function parseCertificate($certificate,&$cnameInfo){ + if(isset($certificate)){ + $certificateConfig = new CnameCertificate(); + if (isset($certificate->Type)){ + $certificateConfig->setType(strval($certificate->Type)); + } + if (isset($certificate->CertId)){ + $certificateConfig->setCertId(strval($certificate->CertId)); + } + if (isset($certificate->Status)){ + $certificateConfig->setStatus(strval($certificate->Status)); + } + if (isset($certificate->CreationDate)){ + $certificateConfig->setCreationDate(strval($certificate->CreationDate)); + } + if (isset($certificate->Fingerprint)){ + $certificateConfig->setFingerprint(strval($certificate->Fingerprint)); + } + if (isset($certificate->ValidStartDate)){ + $certificateConfig->setValidStartDate(strval($certificate->ValidStartDate)); + } + if (isset($certificate->ValidEndDate)){ + $certificateConfig->setValidEndDate(strval($certificate->ValidEndDate)); + } + $cnameInfo->addCertificate($certificateConfig); + } + } + + public function serializeToXml() + { + $xml = new SimpleXMLElement(''); + + if (isset($this->bucket)){ + $xml->addChild("Bucket",$this->bucket); + } + + if (isset($this->owner)){ + $xml->addChild("Owner",$this->owner); + } + + if (isset($this->cnameList)){ + foreach ($this->cnameList as $cname) { + $xmlCname = $xml->addChild('Cname'); + $cname->appendToXml($xmlCname); + } + } + + return $xml->asXML(); + } + + public function __toString() + { + return $this->serializeToXml(); + } + +} \ No newline at end of file diff --git a/src/OSS/OssClient.php b/src/OSS/OssClient.php index d7f73df9..e90bdf7a 100644 --- a/src/OSS/OssClient.php +++ b/src/OSS/OssClient.php @@ -6,6 +6,8 @@ use OSS\Http\RequestCore; use OSS\Http\RequestCore_Exception; use OSS\Http\ResponseCore; +use OSS\Model\CnameInfo; +use OSS\Model\CnameList; use OSS\Model\CorsConfig; use OSS\Model\CnameConfig; use OSS\Model\LoggingConfig; @@ -16,6 +18,7 @@ use OSS\Model\StorageCapacityConfig; use OSS\Result\AclResult; use OSS\Result\BodyResult; +use OSS\Result\GetBucketCnameResult; use OSS\Result\GetCorsResult; use OSS\Result\GetLifecycleResult; use OSS\Result\GetLocationResult; @@ -540,8 +543,8 @@ public function deleteBucketCors($bucket, $options = NULL) * @param string $bucket bucket name * @param string $cname * @param array $options - * @throws OssException * @return null + * @throws OssException|RequestCore_Exception */ public function addBucketCname($bucket, $cname, $options = NULL) { @@ -551,7 +554,32 @@ public function addBucketCname($bucket, $cname, $options = NULL) $options[self::OSS_OBJECT] = '/'; $options[self::OSS_CONTENT_TYPE] = 'application/xml'; $cnameConfig = new CnameConfig(); - $cnameConfig->addCname($cname); + $cnameConfig->setCname($cname); + $options[self::OSS_CONTENT] = $cnameConfig->serializeToXml(); + $options[self::OSS_COMP] = 'add'; + $options[self::OSS_CNAME] = ''; + + $response = $this->auth($options); + $result = new PutSetDeleteResult($response); + return $result->getData(); + } + + /** + * Bind a CName for the bucket v2 + * + * @param string $bucket bucket name + * @param CnameConfig $cnameConfig + * @param array $options + * @return null + * @throws OssException|RequestCore_Exception + */ + public function addBucketCnameV2($bucket, $cnameConfig, $options = NULL) + { + $this->precheckCommon($bucket, NULL, $options, false); + $options[self::OSS_BUCKET] = $bucket; + $options[self::OSS_METHOD] = self::OSS_HTTP_POST; + $options[self::OSS_OBJECT] = '/'; + $options[self::OSS_CONTENT_TYPE] = 'application/xml'; $options[self::OSS_CONTENT] = $cnameConfig->serializeToXml(); $options[self::OSS_COMP] = 'add'; $options[self::OSS_CNAME] = ''; @@ -566,8 +594,8 @@ public function addBucketCname($bucket, $cname, $options = NULL) * * @param string $bucket bucket name * @param array $options - * @throws OssException - * @return CnameConfig + * @return CnameList|null + * @throws OssException|RequestCore_Exception */ public function getBucketCname($bucket, $options = NULL) { @@ -577,7 +605,7 @@ public function getBucketCname($bucket, $options = NULL) $options[self::OSS_OBJECT] = '/'; $options[self::OSS_CNAME] = ''; $response = $this->auth($options); - $result = new GetCnameResult($response); + $result = new GetBucketCnameResult($response); return $result->getData(); } @@ -585,10 +613,11 @@ public function getBucketCname($bucket, $options = NULL) * Remove a CName binding from the bucket * * @param string $bucket bucket name - * @param CnameConfig $cnameConfig + * @param string $cname * @param array $options - * @throws OssException * @return null + * @throws OssException + * @throws RequestCore_Exception */ public function deleteBucketCname($bucket, $cname, $options = NULL) { @@ -597,9 +626,9 @@ public function deleteBucketCname($bucket, $cname, $options = NULL) $options[self::OSS_METHOD] = self::OSS_HTTP_POST; $options[self::OSS_OBJECT] = '/'; $options[self::OSS_CONTENT_TYPE] = 'application/xml'; - $cnameConfig = new CnameConfig(); - $cnameConfig->addCname($cname); - $options[self::OSS_CONTENT] = $cnameConfig->serializeToXml(); + $config = new CnameConfig(); + $config->setCname($cname); + $options[self::OSS_CONTENT] = $config->serializeToXml(); $options[self::OSS_COMP] = 'delete'; $options[self::OSS_CNAME] = ''; @@ -613,8 +642,8 @@ public function deleteBucketCname($bucket, $cname, $options = NULL) * * @param string $bucket bucket name * @param array $options - * @throws OssException - * @return CnameToken + * @return CnameTokenInfo|null + * @throws OssException|RequestCore_Exception */ public function createBucketCnameToken($bucket, $cname, $options = NULL) { @@ -624,12 +653,12 @@ public function createBucketCnameToken($bucket, $cname, $options = NULL) $options[self::OSS_OBJECT] = '/'; $options[self::OSS_CONTENT_TYPE] = 'application/xml'; $cnameConfig = new CnameConfig(); - $cnameConfig->addCname($cname); + $cnameConfig->setCname($cname); $options[self::OSS_CONTENT] = $cnameConfig->serializeToXml(); $options[self::OSS_COMP] = 'token'; $options[self::OSS_CNAME] = ''; $response = $this->auth($options); - $result = new CreateBucketCnameTokenResult($response); + $result = new GetBucketCnameTokenResult($response); return $result->getData(); } @@ -638,8 +667,8 @@ public function createBucketCnameToken($bucket, $cname, $options = NULL) * * @param string $bucket bucket name * @param array $options - * @throws OssException - * @return CnameToken + * @return CnameTokeninfo|null + * @throws OssException|RequestCore_Exception */ public function getBucketCnameToken($bucket, $cname, $options = NULL) { diff --git a/src/OSS/Result/GetBucketCnameResult.php b/src/OSS/Result/GetBucketCnameResult.php new file mode 100644 index 00000000..5a57eaec --- /dev/null +++ b/src/OSS/Result/GetBucketCnameResult.php @@ -0,0 +1,20 @@ +rawResponse->body; + $list = new CnameList(); + $list->parseFromXml($content); + return $list; + } + +} \ No newline at end of file diff --git a/src/OSS/Result/GetBucketCnameTokenResult.php b/src/OSS/Result/GetBucketCnameTokenResult.php index b524d3fb..4baf5390 100644 --- a/src/OSS/Result/GetBucketCnameTokenResult.php +++ b/src/OSS/Result/GetBucketCnameTokenResult.php @@ -7,7 +7,7 @@ class GetBucketCnameTokenResult extends Result { /** - * @return CnameConfig + * @return CnameTokenInfo */ protected function parseDataFromResponse() { diff --git a/tests/OSS/Tests/BucketCnameTest.php b/tests/OSS/Tests/BucketCnameTest.php deleted file mode 100644 index 03b016f4..00000000 --- a/tests/OSS/Tests/BucketCnameTest.php +++ /dev/null @@ -1,77 +0,0 @@ -client = Common::getOssClient(); - $this->bucketName = 'php-sdk-test-bucket-' . strval(rand(0, 10000)); - $this->client->createBucket($this->bucketName); - } - - protected function tearDown(): void - { - $this->client->deleteBucket($this->bucketName); - } - - public function testBucketWithoutCname() - { - $cnameConfig = $this->client->getBucketCname($this->bucketName); - $this->assertEquals(0, count($cnameConfig->getCnames())); - } - - public function testAddCname() - { - $this->client->addBucketCname($this->bucketName, 'www.baidu.com'); - $this->client->addBucketCname($this->bucketName, 'www.qq.com'); - - $ret = $this->client->getBucketCname($this->bucketName); - $this->assertEquals(2, count($ret->getCnames())); - - // add another 2 cnames - $this->client->addBucketCname($this->bucketName, 'www.sina.com.cn'); - $this->client->addBucketCname($this->bucketName, 'www.iqiyi.com'); - - $ret = $this->client->getBucketCname($this->bucketName); - $cnames = $ret->getCnames(); - $cnameList = array(); - - foreach ($cnames as $c) { - $cnameList[] = $c['Domain']; - } - $should = array( - 'www.baidu.com', - 'www.qq.com', - 'www.sina.com.cn', - 'www.iqiyi.com' - ); - $this->assertEquals(4, count($cnames)); - $this->assertEquals(sort($should), sort($cnameList)); - } - - public function testDeleteCname() - { - $this->client->addBucketCname($this->bucketName, 'www.baidu.com'); - $this->client->addBucketCname($this->bucketName, 'www.qq.com'); - - $ret = $this->client->getBucketCname($this->bucketName); - $this->assertEquals(2, count($ret->getCnames())); - - // delete one cname - $this->client->deleteBucketCname($this->bucketName, 'www.baidu.com'); - - $ret = $this->client->getBucketCname($this->bucketName); - $this->assertEquals(1, count($ret->getCnames())); - $cnames = $ret->getCnames(); - $this->assertEquals('www.qq.com', $cnames[0]['Domain']); - } -} diff --git a/tests/OSS/Tests/CnameConfigTest.php b/tests/OSS/Tests/CnameConfigTest.php index 8f7529c9..cc76d2a5 100644 --- a/tests/OSS/Tests/CnameConfigTest.php +++ b/tests/OSS/Tests/CnameConfigTest.php @@ -4,74 +4,64 @@ use OSS\Model\CnameConfig; -use OSS\Core\OssException; +use OSS\Model\CnameConfigCertificate; +use OSS\Model\CnameInfo; + class CnameConfigTest extends \PHPUnit\Framework\TestCase { - private $xml1 = << +example.com +BBBB; + + + private $validXml1 = << - - www.foo.com - enabled - 20150101 - - - bar.com - disabled - 20160101 - + +example.com + +493****-cn-hangzhou +-----BEGIN CERTIFICATE----- MIIDhDCCAmwCCQCFs8ixARsyrDANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMC **** -----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- MIIDhDCCAmwCCQCFs8ixARsyrDANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMC **** -----END CERTIFICATE----- +493****-cn-hangzhou +true +false + + BBBB; - public function testFromXml() + public function testValidXml() { - $cnameConfig = new CnameConfig(); - $cnameConfig->parseFromXml($this->xml1); + $config = new CnameConfig(); + $config->setCname("example.com"); - $cnames = $cnameConfig->getCnames(); - $this->assertEquals(2, count($cnames)); - $this->assertEquals('www.foo.com', $cnames[0]['Domain']); - $this->assertEquals('enabled', $cnames[0]['Status']); - $this->assertEquals('20150101', $cnames[0]['LastModified']); - - $this->assertEquals('bar.com', $cnames[1]['Domain']); - $this->assertEquals('disabled', $cnames[1]['Status']); - $this->assertEquals('20160101', $cnames[1]['LastModified']); + $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml($config->serializeToXml())); } - public function testToXml() + public function testValidXml1() { - $cnameConfig = new CnameConfig(); - $cnameConfig->addCname('www.foo.com'); - $cnameConfig->addCname('bar.com'); - - $xml = $cnameConfig->serializeToXml(); - $comp = new CnameConfig(); - $comp->parseFromXml($xml); + $config = new CnameConfig(); + $certificate = new CnameConfigCertificate(); + $certificate->setCertId("493****-cn-hangzhou"); + $certificate->setCertificate("-----BEGIN CERTIFICATE----- MIIDhDCCAmwCCQCFs8ixARsyrDANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMC **** -----END CERTIFICATE-----"); + $certificate->setPrivateKey("-----BEGIN CERTIFICATE----- MIIDhDCCAmwCCQCFs8ixARsyrDANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMC **** -----END CERTIFICATE-----"); + $certificate->setPreviousCertId("493****-cn-hangzhou"); + $certificate->setForce(true); + $certificate->setDeleteCertificate(false); - $cnames1 = $cnameConfig->getCnames(); - $cnames2 = $comp->getCnames(); + $config->setCname("example.com"); + $config->setCertificateConfig($certificate); - $this->assertEquals(count($cnames1), count($cnames2)); - $this->assertEquals(count($cnames1[0]), count($cnames2[0])); - $this->assertEquals(1, count($cnames1[0])); - $this->assertEquals($cnames1[0]['Domain'], $cnames2[0]['Domain']); + $this->assertEquals($this->cleanXml($this->validXml1), $this->cleanXml($config->serializeToXml())); } - public function testCnameNumberLimit() + + private function cleanXml($xml) { - $cnameConfig = new CnameConfig(); - for ($i = 0; $i < CnameConfig::OSS_MAX_RULES; $i += 1) { - $cnameConfig->addCname(strval($i) . '.foo.com'); - } - try { - $cnameConfig->addCname('www.foo.com'); - $this->assertFalse(true); - } catch (OssException $e) { - $this->assertEquals( - $e->getMessage(), - "num of cname in the config exceeds self::OSS_MAX_RULES: " . strval(CnameConfig::OSS_MAX_RULES)); - } + return str_replace("\n", "", str_replace("\r", "", $xml)); } + } diff --git a/tests/OSS/Tests/GetBucketCnameResultTest.php b/tests/OSS/Tests/GetBucketCnameResultTest.php new file mode 100644 index 00000000..cd18892d --- /dev/null +++ b/tests/OSS/Tests/GetBucketCnameResultTest.php @@ -0,0 +1,79 @@ + + +targetbucket +testowner + +example.com +2021-09-15T02:35:07.000Z +Enabled + +CAS +493****-cn-hangzhou +Enabled +Wed, 15 Sep 2021 02:35:06 GMT +DE:01:CF:EC:7C:A7:98:CB:D8:6E:FB:1D:97:EB:A9:64:1D:4E:**:** +Tue, 12 Apr 2021 10:14:51 GMT +Mon, 4 May 2048 10:14:51 GMT + + + +example.org +2021-09-15T02:34:58.000Z +Enabled + + +example.edu +2021-09-15T02:50:34.000Z +Enabled + + +BBBB; + + public function testParseValidXml() + { + $response = new ResponseCore(array(), $this->validXml, 200); + $result = new GetBucketCnameResult($response); + $this->assertTrue($result->isOK()); + $this->assertNotNull($result->getData()); + $this->assertNotNull($result->getRawResponse()); + $config = $result->getData(); + $this->assertEquals("targetbucket", $config->getBucket()); + $this->assertEquals("testowner", $config->getOwner()); + + $cnameList = $config->getCnameList(); + $cnameInfo = $cnameList[0]; + $this->assertEquals("example.com", $cnameInfo->getDomain()); + $this->assertEquals("Enabled", $cnameInfo->getStatus()); + $this->assertEquals("2021-09-15T02:35:07.000Z", $cnameInfo->getLastModified()); + $cert = $cnameInfo->getCertificate(); + $this->assertEquals("CAS", $cert->getType()); + $this->assertEquals("Enabled", $cert->getStatus()); + $this->assertEquals("493****-cn-hangzhou", $cert->getCertId()); + $this->assertEquals("Wed, 15 Sep 2021 02:35:06 GMT", $cert->getCreationDate()); + $this->assertEquals("DE:01:CF:EC:7C:A7:98:CB:D8:6E:FB:1D:97:EB:A9:64:1D:4E:**:**", $cert->getFingerprint()); + $this->assertEquals("Tue, 12 Apr 2021 10:14:51 GMT", $cert->getValidStartDate()); + $this->assertEquals("Mon, 4 May 2048 10:14:51 GMT", $cert->getValidEndDate()); + + $cnameInfo1 = $cnameList[1]; + $this->assertEquals("example.org", $cnameInfo1->getDomain()); + $this->assertEquals("Enabled", $cnameInfo1->getStatus()); + $this->assertEquals("2021-09-15T02:34:58.000Z", $cnameInfo1->getLastModified()); + + $cnameInfo2 = $cnameList[2]; + $this->assertEquals("example.edu", $cnameInfo2->getDomain()); + $this->assertEquals("Enabled", $cnameInfo2->getStatus()); + $this->assertEquals("2021-09-15T02:50:34.000Z", $cnameInfo2->getLastModified()); + + } +} diff --git a/tests/OSS/Tests/OssClientBucketCnameTest.php b/tests/OSS/Tests/OssClientBucketCnameTest.php index dabe93f8..faacb228 100644 --- a/tests/OSS/Tests/OssClientBucketCnameTest.php +++ b/tests/OSS/Tests/OssClientBucketCnameTest.php @@ -27,6 +27,7 @@ public function testBucketCname() $this->assertEquals("www.example.com", $info1->getCname()); $this->assertEquals($bucketName, $info1->getBucket()); } catch (OssException $e) { + printf($e->getMessage()); $this->assertTrue(false); } @@ -44,6 +45,14 @@ public function testBucketCname() $this->assertEquals('NeedVerifyDomainOwnership', $e->getErrorCode()); } + try { + $config = new CnameConfig(); + $config->setCname("www.example.com"); + $result = $client->addBucketCnameV2($bucketName, $config); + } catch (OssException $e) { + $this->assertEquals('NeedVerifyDomainOwnership', $e->getErrorCode()); + } + try { $config = $client->getBucketCname($bucketName); } catch (OssException $e) {