| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 | <?phpnamespace Aws\S3;use Aws\Credentials\CredentialsInterface;use GuzzleHttp\Psr7\Uri;/** * @deprecated */class PostObject{    private $client;    private $bucket;    private $formAttributes;    private $formInputs;    private $jsonPolicy;    /**     * Constructs the PostObject.     *     * @param S3ClientInterface $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(        S3ClientInterface $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 S3ClientInterface     */    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 ($this->client->getConfig('use_path_style_endpoint') === true            || ($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            ))        ];    }}
 |