You can now set ACLs on containers.
This commit is contained in:
@@ -13,6 +13,7 @@
|
|||||||
namespace HPCloud\Storage;
|
namespace HPCloud\Storage;
|
||||||
|
|
||||||
use HPCloud\Storage\ObjectStorage\Container;
|
use HPCloud\Storage\ObjectStorage\Container;
|
||||||
|
use HPCloud\Storage\ObjectStorage\ACL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Access to ObjectStorage (Swift).
|
* Access to ObjectStorage (Swift).
|
||||||
@@ -270,13 +271,29 @@ class ObjectStorage {
|
|||||||
*
|
*
|
||||||
* @param string $name
|
* @param string $name
|
||||||
* The name of the container.
|
* The name of the container.
|
||||||
|
* @param \HPCloud\Storage\ObjectStorage\ACL $acl
|
||||||
|
* An access control list object. By default, a container is
|
||||||
|
* non-public (private). To change this behavior, you can add a
|
||||||
|
* custom ACL. To make the container publically readable, you can
|
||||||
|
* use this: `ACL::publicRead()`.
|
||||||
* @return boolean
|
* @return boolean
|
||||||
* TRUE if the container was created, FALSE if the container was not
|
* TRUE if the container was created, FALSE if the container was not
|
||||||
* created because it already exists.
|
* created because it already exists.
|
||||||
*/
|
*/
|
||||||
public function createContainer($name) {
|
public function createContainer($name, ACL $acl = NULL) {
|
||||||
$url = $this->url() . '/' . urlencode($name);
|
$url = $this->url() . '/' . urlencode($name);
|
||||||
$data = $this->req($url, 'PUT', FALSE);
|
$headers = array(
|
||||||
|
'X-Auth-Token' => $this->token(),
|
||||||
|
);
|
||||||
|
|
||||||
|
$client = \HPCloud\Transport::instance();
|
||||||
|
// Add ACLs to header.
|
||||||
|
if (!empty($acl)) {
|
||||||
|
$headers += $acl->headers();
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = $client->doRequest($url, 'PUT', $headers);
|
||||||
|
syslog(LOG_WARNING, print_r($data, TRUE));
|
||||||
|
|
||||||
$status = $data->status();
|
$status = $data->status();
|
||||||
|
|
||||||
|
|||||||
@@ -480,6 +480,19 @@ class Container implements \Countable, \IteratorAggregate {
|
|||||||
return $this->objectQuery($params, $limit, $marker);
|
return $this->objectQuery($params, $limit, $marker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the URL to this container.
|
||||||
|
*
|
||||||
|
* Any container that has been created will have a valid URL. If the
|
||||||
|
* Container was set to be public (See
|
||||||
|
* ObjectStorage::createContainer()) will be accessible by this URL.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public function url() {
|
||||||
|
return $this->url;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform the HTTP query for a list of objects and de-serialize the
|
* Perform the HTTP query for a list of objects and de-serialize the
|
||||||
* results.
|
* results.
|
||||||
|
|||||||
@@ -155,4 +155,25 @@ class ObjectStorageTest extends \HPCloud\Tests\TestCase {
|
|||||||
$store->deleteContainer($testCollection);
|
$store->deleteContainer($testCollection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @depends testCreateContainer
|
||||||
|
*/
|
||||||
|
public function testCreateContainerPublic() {
|
||||||
|
$testCollection = self::$settings['hpcloud.swift.container'] . 'PUBLIC';
|
||||||
|
$store = $this->swiftAuth();
|
||||||
|
if ($store->hasContainer($testCollection)) {
|
||||||
|
$store->deleteContainer($testCollection);
|
||||||
|
}
|
||||||
|
$ret = $store->createContainer($testCollection, \HPCloud\Storage\ObjectStorage\ACL::publicRead());
|
||||||
|
|
||||||
|
// Now test that we can get the container contents. Since there is
|
||||||
|
// no content in the container, we use the format=xml to make sure
|
||||||
|
// we get some data back.
|
||||||
|
$container = $store->container($testCollection);
|
||||||
|
$url = $container->url() . '?format=xml';
|
||||||
|
$data = file_get_contents($url);
|
||||||
|
$this->assertNotEmpty($data, $url);
|
||||||
|
|
||||||
|
$store->deleteContainer($testCollection);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user