diff options
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/S3/Crypto/InstructionFileMetadataStrategy.php')
-rw-r--r-- | vendor/aws/aws-sdk-php/src/S3/Crypto/InstructionFileMetadataStrategy.php | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/S3/Crypto/InstructionFileMetadataStrategy.php b/vendor/aws/aws-sdk-php/src/S3/Crypto/InstructionFileMetadataStrategy.php new file mode 100644 index 0000000..5065928 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/S3/Crypto/InstructionFileMetadataStrategy.php @@ -0,0 +1,90 @@ +<?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; + } +} |