/usr/share/php/Aws/S3/PostObject.php is in php-aws-sdk 3.15.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | <?php
namespace Aws\S3;
use Aws\Credentials\CredentialsInterface;
use GuzzleHttp\Psr7\Uri;
/**
* Encapsulates the logic for getting the data for an S3 object POST upload form
*
* @link http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html
*/
class PostObject
{
private $client;
private $bucket;
private $formAttributes;
private $formInputs;
private $jsonPolicy;
/**
* Constructs the PostObject.
*
* @param S3Client $client Client used with the POST object
* @param string $bucket Bucket to use
* @param array $formInputs Associative array of form input fields.
* @param string|array $jsonPolicy JSON encoded POST policy document. The
* policy will be base64 encoded and applied
* to the form on your behalf.
*/
public function __construct(
S3Client $client,
$bucket,
array $formInputs,
$jsonPolicy
) {
$this->client = $client;
$this->bucket = $bucket;
if (is_array($jsonPolicy)) {
$jsonPolicy = json_encode($jsonPolicy);
}
$this->jsonPolicy = $jsonPolicy;
$this->formAttributes = [
'action' => $this->generateUri(),
'method' => 'POST',
'enctype' => 'multipart/form-data'
];
$this->formInputs = $formInputs + ['key' => '${filename}'];
$credentials = $client->getCredentials()->wait();
$this->formInputs += $this->getPolicyAndSignature($credentials);
}
/**
* Gets the S3 client.
*
* @return S3Client
*/
public function getClient()
{
return $this->client;
}
/**
* Gets the bucket name.
*
* @return string
*/
public function getBucket()
{
return $this->bucket;
}
/**
* Gets the form attributes as an array.
*
* @return array
*/
public function getFormAttributes()
{
return $this->formAttributes;
}
/**
* Set a form attribute.
*
* @param string $attribute Form attribute to set.
* @param string $value Value to set.
*/
public function setFormAttribute($attribute, $value)
{
$this->formAttributes[$attribute] = $value;
}
/**
* Gets the form inputs as an array.
*
* @return array
*/
public function getFormInputs()
{
return $this->formInputs;
}
/**
* Set a form input.
*
* @param string $field Field name to set
* @param string $value Value to set.
*/
public function setFormInput($field, $value)
{
$this->formInputs[$field] = $value;
}
/**
* Gets the raw JSON policy.
*
* @return string
*/
public function getJsonPolicy()
{
return $this->jsonPolicy;
}
private function generateUri()
{
$uri = new Uri($this->client->getEndpoint());
if ($uri->getScheme() === 'https'
&& strpos($this->bucket, '.') !== false
) {
// Use path-style URLs
$uri = $uri->withPath($this->bucket);
} else {
// Use virtual-style URLs
$uri = $uri->withHost($this->bucket . '.' . $uri->getHost());
}
return (string) $uri;
}
protected function getPolicyAndSignature(CredentialsInterface $creds)
{
$jsonPolicy64 = base64_encode($this->jsonPolicy);
return [
'AWSAccessKeyId' => $creds->getAccessKeyId(),
'policy' => $jsonPolicy64,
'signature' => base64_encode(hash_hmac(
'sha1',
$jsonPolicy64,
$creds->getSecretKey(),
true
))
];
}
}
|