summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2017-04-20 17:08:22 +0200
committerRobin Appelman <robin@icewind.nl>2017-09-18 15:16:27 +0200
commitdad18baec8274995ff384789ccc2577aabc6dde8 (patch)
tree15e53802f49cb7d32e664f1e75f6234014b68a88
parentcf1da57c1d38852a21aea701fd9194c0c6226c20 (diff)
downloadnextcloud-server-dad18baec8274995ff384789ccc2577aabc6dde8.tar.gz
nextcloud-server-dad18baec8274995ff384789ccc2577aabc6dde8.zip
update aws sdk and move it to 3rdparty
Signed-off-by: Robin Appelman <robin@icewind.nl>
m---------3rdparty0
-rw-r--r--apps/files_external/lib/Lib/Storage/AmazonS3.php38
-rw-r--r--lib/private/Files/ObjectStore/S3.php38
-rw-r--r--lib/private/Files/ObjectStore/S3ConnectionTrait.php24
4 files changed, 42 insertions, 58 deletions
diff --git a/3rdparty b/3rdparty
-Subproject 2bae53c7cfe022361de2cad6a9f2d6062aa30ca
+Subproject 15c606831ca86d895facfb443ada73fdc163aea
diff --git a/apps/files_external/lib/Lib/Storage/AmazonS3.php b/apps/files_external/lib/Lib/Storage/AmazonS3.php
index 9dab25f7197..edcc084ae44 100644
--- a/apps/files_external/lib/Lib/Storage/AmazonS3.php
+++ b/apps/files_external/lib/Lib/Storage/AmazonS3.php
@@ -36,10 +36,6 @@
namespace OCA\Files_External\Lib\Storage;
-set_include_path(get_include_path() . PATH_SEPARATOR .
- \OC_App::getAppPath('files_external') . '/3rdparty/aws-sdk-php');
-require_once 'aws-autoloader.php';
-
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
use Icewind\Streams\CallbackWrapper;
@@ -230,21 +226,29 @@ class AmazonS3 extends \OC\Files\Storage\Common {
try {
$files = array();
- $result = $this->getConnection()->getIterator('ListObjects', array(
+ $results = $this->getConnection()->getPaginator('ListObjects', [
'Bucket' => $this->bucket,
'Delimiter' => '/',
- 'Prefix' => $path
- ), array('return_prefixes' => true));
-
- foreach ($result as $object) {
- if (isset($object['Key']) && $object['Key'] === $path) {
- // it's the directory itself, skip
- continue;
+ 'Prefix' => $path,
+ ]);
+
+ foreach ($results as $result) {
+ // sub folders
+ if (is_array($result['CommonPrefixes'])) {
+ foreach ($result['CommonPrefixes'] as $prefix) {
+ $files[] = substr(trim($prefix['Prefix'], '/'), strlen($path));
+ }
+ }
+ foreach ($result['Contents'] as $object) {
+ if (isset($object['Key']) && $object['Key'] === $path) {
+ // it's the directory itself, skip
+ continue;
+ }
+ $file = basename(
+ isset($object['Key']) ? $object['Key'] : $object['Prefix']
+ );
+ $files[] = $file;
}
- $file = basename(
- isset($object['Key']) ? $object['Key'] : $object['Prefix']
- );
- $files[] = $file;
}
return IteratorDirectory::wrap($files);
@@ -270,7 +274,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
));
$stat['size'] = $result['ContentLength'] ? $result['ContentLength'] : 0;
- if ($result['Metadata']['lastmodified']) {
+ if (isset($result['Metadata']['lastmodified'])) {
$stat['mtime'] = strtotime($result['Metadata']['lastmodified']);
} else {
$stat['mtime'] = strtotime($result['LastModified']);
diff --git a/lib/private/Files/ObjectStore/S3.php b/lib/private/Files/ObjectStore/S3.php
index 6f37492271c..17caf1cb126 100644
--- a/lib/private/Files/ObjectStore/S3.php
+++ b/lib/private/Files/ObjectStore/S3.php
@@ -22,11 +22,7 @@
namespace OC\Files\ObjectStore;
use OCP\Files\ObjectStore\IObjectStore;
-
-// TODO: proper composer
-set_include_path(get_include_path() . PATH_SEPARATOR .
- \OC_App::getAppPath('files_external') . '/3rdparty/aws-sdk-php');
-require_once 'aws-autoloader.php';
+use Psr\Http\Message\StreamInterface;
class S3 implements IObjectStore {
use S3ConnectionTrait;
@@ -49,32 +45,18 @@ class S3 implements IObjectStore {
* @throws \Exception when something goes wrong, message will be logged
* @since 7.0.0
*/
- public function readObject($urn) {
- // Create the command and serialize the request
- $request = $this->getConnection()->getCommand('GetObject', [
+ function readObject($urn) {
+ $client = $this->getConnection();
+ $command = $client->getCommand('GetObject', [
'Bucket' => $this->bucket,
'Key' => $urn
- ])->prepare();
-
- $request->dispatch('request.before_send', array(
- 'request' => $request
- ));
-
- $headers = $request->getHeaderLines();
- $headers[] = 'Connection: close';
-
- $opts = [
- 'http' => [
- 'method' => "GET",
- 'header' => $headers
- ],
- 'ssl' => [
- 'verify_peer' => true
- ]
- ];
+ ]);
+ $command['@http']['stream'] = true;
+ $result = $client->execute($command);
+ /** @var StreamInterface $body */
+ $body = $result['Body'];
- $context = stream_context_create($opts);
- return fopen($request->getUrl(), 'r', false, $context);
+ return $body->detach();
}
/**
diff --git a/lib/private/Files/ObjectStore/S3ConnectionTrait.php b/lib/private/Files/ObjectStore/S3ConnectionTrait.php
index a8b57cb18d3..f665bc2e7ce 100644
--- a/lib/private/Files/ObjectStore/S3ConnectionTrait.php
+++ b/lib/private/Files/ObjectStore/S3ConnectionTrait.php
@@ -53,7 +53,7 @@ trait S3ConnectionTrait {
$this->bucket = $params['bucket'];
$this->timeout = (!isset($params['timeout'])) ? 15 : $params['timeout'];
$params['region'] = empty($params['region']) ? 'eu-west-1' : $params['region'];
- $params['hostname'] = empty($params['hostname']) ? 's3.amazonaws.com' : $params['hostname'];
+ $params['hostname'] = empty($params['hostname']) ? 's3.' . $params['region'] . '.amazonaws.com' : $params['hostname'];
if (!isset($params['port']) || $params['port'] === '') {
$params['port'] = (isset($params['use_ssl']) && $params['use_ssl'] === false) ? 80 : 443;
}
@@ -76,20 +76,23 @@ trait S3ConnectionTrait {
$base_url = $scheme . '://' . $this->params['hostname'] . ':' . $this->params['port'] . '/';
$options = [
- 'key' => $this->params['key'],
- 'secret' => $this->params['secret'],
- 'base_url' => $base_url,
+ 'version' => isset($this->params['version']) ? $this->params['version'] : 'latest',
+ 'credentials' => [
+ 'key' => $this->params['key'],
+ 'secret' => $this->params['secret'],
+ ],
+ 'endpoint' => $base_url,
'region' => $this->params['region'],
- S3Client::COMMAND_PARAMS => [
+ 'command.params' => [
'PathStyle' => isset($this->params['use_path_style']) ? $this->params['use_path_style'] : false,
]
];
if (isset($this->params['proxy'])) {
- $options[S3Client::REQUEST_OPTIONS] = ['proxy' => $this->params['proxy']];
+ $options['request.options'] = ['proxy' => $this->params['proxy']];
}
- $this->connection = S3Client::factory($options);
+ $this->connection = new S3Client($options);
- if (!$this->connection->isValidBucketName($this->bucket)) {
+ if (!S3Client::isBucketDnsCompatible($this->bucket)) {
throw new \Exception("The configured bucket name is invalid.");
}
@@ -98,11 +101,6 @@ trait S3ConnectionTrait {
$this->connection->createBucket(array(
'Bucket' => $this->bucket
));
- $this->connection->waitUntilBucketExists(array(
- 'Bucket' => $this->bucket,
- 'waiter.interval' => 1,
- 'waiter.max_attempts' => 15
- ));
$this->testTimeout();
} catch (S3Exception $e) {
\OCP\Util::logException('files_external', $e);