| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | 
							- <?php
 
- namespace Aws\S3\Crypto;
 
- use \Aws\Crypto\MetadataStrategyInterface;
 
- use \Aws\Crypto\MetadataEnvelope;
 
- use \Aws\S3\S3Client;
 
- /**
 
-  * Stores and reads encryption MetadataEnvelope information in a file on Amazon
 
-  * S3.
 
-  *
 
-  * A file with the contents of a MetadataEnvelope will be created or read from
 
-  * alongside the base file on Amazon S3. The provided client will be used for
 
-  * reading or writing this object. A specified suffix (default of '.instruction'
 
-  * will be applied to each of the operations involved with the instruction file.
 
-  *
 
-  * If there is a failure after an instruction file has been uploaded, it will
 
-  * not be automatically deleted.
 
-  */
 
- class InstructionFileMetadataStrategy implements MetadataStrategyInterface
 
- {
 
-     const DEFAULT_FILE_SUFFIX = '.instruction';
 
-     private $client;
 
-     private $suffix;
 
-     /**
 
-      * @param S3Client $client Client for use in uploading the instruction file.
 
-      * @param string|null $suffix Optional override suffix for instruction file
 
-      *                            object keys.
 
-      */
 
-     public function __construct(S3Client $client, $suffix = null)
 
-     {
 
-         $this->suffix = empty($suffix)
 
-             ? self::DEFAULT_FILE_SUFFIX
 
-             : $suffix;
 
-         $this->client = $client;
 
-     }
 
-     /**
 
-      * Places the information in the MetadataEnvelope to a location on S3.
 
-      *
 
-      * @param MetadataEnvelope $envelope Encryption data to save according to
 
-      *                                   the strategy.
 
-      * @param array $args Starting arguments for PutObject, used for saving
 
-      *                    extra the instruction file.
 
-      *
 
-      * @return array Updated arguments for PutObject.
 
-      */
 
-     public function save(MetadataEnvelope $envelope, array $args)
 
-     {
 
-         $this->client->putObject([
 
-             'Bucket' => $args['Bucket'],
 
-             'Key' => $args['Key'] . $this->suffix,
 
-             'Body' => json_encode($envelope)
 
-         ]);
 
-         return $args;
 
-     }
 
-     /**
 
-      * Uses the strategy's client to retrieve the instruction file from S3 and generates
 
-      * a MetadataEnvelope from its contents.
 
-      *
 
-      * @param array $args Arguments from Command and Result that contains
 
-      *                    S3 Object information, relevant headers, and command
 
-      *                    configuration.
 
-      *
 
-      * @return MetadataEnvelope
 
-      */
 
-     public function load(array $args)
 
-     {
 
-         $result = $this->client->getObject([
 
-             'Bucket' => $args['Bucket'],
 
-             'Key' => $args['Key'] . $this->suffix
 
-         ]);
 
-         $metadataHeaders = json_decode($result['Body'], true);
 
-         $envelope = new MetadataEnvelope();
 
-         $constantValues = MetadataEnvelope::getConstantValues();
 
-         foreach ($constantValues as $constant) {
 
-             if (!empty($metadataHeaders[$constant])) {
 
-                 $envelope[$constant] = $metadataHeaders[$constant];
 
-             }
 
-         }
 
-         return $envelope;
 
-     }
 
- }
 
 
  |