/src/Sqs/SqsClient.php
PHP | 141 lines | 79 code | 6 blank | 56 comment | 4 complexity | 438fd5b5eb72ea4193f34faa6a8664aa MD5 | raw file
- <?php
- namespace Aws\Sqs;
- use Aws\AwsClient;
- use Aws\CommandInterface;
- use Aws\Sqs\Exception\SqsException;
- use GuzzleHttp\Psr7\Uri;
- use Psr\Http\Message\RequestInterface;
- /**
- * Client used to interact Amazon Simple Queue Service (Amazon SQS)
- *
- * @method \Aws\Result addPermission(array $args = [])
- * @method \GuzzleHttp\Promise\Promise addPermissionAsync(array $args = [])
- * @method \Aws\Result changeMessageVisibility(array $args = [])
- * @method \GuzzleHttp\Promise\Promise changeMessageVisibilityAsync(array $args = [])
- * @method \Aws\Result changeMessageVisibilityBatch(array $args = [])
- * @method \GuzzleHttp\Promise\Promise changeMessageVisibilityBatchAsync(array $args = [])
- * @method \Aws\Result createQueue(array $args = [])
- * @method \GuzzleHttp\Promise\Promise createQueueAsync(array $args = [])
- * @method \Aws\Result deleteMessage(array $args = [])
- * @method \GuzzleHttp\Promise\Promise deleteMessageAsync(array $args = [])
- * @method \Aws\Result deleteMessageBatch(array $args = [])
- * @method \GuzzleHttp\Promise\Promise deleteMessageBatchAsync(array $args = [])
- * @method \Aws\Result deleteQueue(array $args = [])
- * @method \GuzzleHttp\Promise\Promise deleteQueueAsync(array $args = [])
- * @method \Aws\Result getQueueAttributes(array $args = [])
- * @method \GuzzleHttp\Promise\Promise getQueueAttributesAsync(array $args = [])
- * @method \Aws\Result getQueueUrl(array $args = [])
- * @method \GuzzleHttp\Promise\Promise getQueueUrlAsync(array $args = [])
- * @method \Aws\Result listDeadLetterSourceQueues(array $args = [])
- * @method \GuzzleHttp\Promise\Promise listDeadLetterSourceQueuesAsync(array $args = [])
- * @method \Aws\Result listQueues(array $args = [])
- * @method \GuzzleHttp\Promise\Promise listQueuesAsync(array $args = [])
- * @method \Aws\Result purgeQueue(array $args = [])
- * @method \GuzzleHttp\Promise\Promise purgeQueueAsync(array $args = [])
- * @method \Aws\Result receiveMessage(array $args = [])
- * @method \GuzzleHttp\Promise\Promise receiveMessageAsync(array $args = [])
- * @method \Aws\Result removePermission(array $args = [])
- * @method \GuzzleHttp\Promise\Promise removePermissionAsync(array $args = [])
- * @method \Aws\Result sendMessage(array $args = [])
- * @method \GuzzleHttp\Promise\Promise sendMessageAsync(array $args = [])
- * @method \Aws\Result sendMessageBatch(array $args = [])
- * @method \GuzzleHttp\Promise\Promise sendMessageBatchAsync(array $args = [])
- * @method \Aws\Result setQueueAttributes(array $args = [])
- * @method \GuzzleHttp\Promise\Promise setQueueAttributesAsync(array $args = [])
- */
- class SqsClient extends AwsClient
- {
- public function __construct(array $config)
- {
- parent::__construct($config);
- $list = $this->getHandlerList();
- $list->appendBuild($this->queueUrl(), 'sqs.queue_url');
- $list->appendSign($this->validateMd5(), 'sqs.md5');
- }
- /**
- * Converts a queue URL into a queue ARN.
- *
- * @param string $queueUrl The queue URL to perform the action on.
- * Retrieved when the queue is first created.
- *
- * @return string An ARN representation of the queue URL.
- */
- public function getQueueArn($queueUrl)
- {
- return strtr($queueUrl, array(
- 'http://' => 'arn:aws:',
- 'https://' => 'arn:aws:',
- '.amazonaws.com' => '',
- '/' => ':',
- '.' => ':',
- ));
- }
- /**
- * Moves the URI of the queue to the URI in the input parameter.
- *
- * @return callable
- */
- private function queueUrl()
- {
- return static function (callable $handler) {
- return function (
- CommandInterface $c,
- RequestInterface $r = null
- ) use ($handler) {
- if ($c->hasParam('QueueUrl')) {
- $uri = Uri::resolve($r->getUri(), $c['QueueUrl']);
- $r = $r->withUri($uri);
- }
- return $handler($c, $r);
- };
- };
- }
- /**
- * Validates ReceiveMessage body MD5s
- *
- * @return callable
- */
- private function validateMd5()
- {
- return static function (callable $handler) {
- return function (
- CommandInterface $c,
- RequestInterface $r = null
- ) use ($handler) {
- if ($c->getName() !== 'ReceiveMessage') {
- return $handler($c, $r);
- }
- return $handler($c, $r)
- ->then(
- function ($result) use ($c, $r) {
- foreach ((array) $result['Messages'] as $msg) {
- if (isset($msg['MD5OfBody'])
- && md5($msg['Body']) !== $msg['MD5OfBody']
- ) {
- throw new SqsException(
- sprintf(
- 'MD5 mismatch. Expected %s, found %s',
- $msg['MD5OfBody'],
- md5($msg['Body'])
- ),
- $c,
- [
- 'code' => 'ClientChecksumMismatch',
- 'request' => $r
- ]
- );
- }
- }
- return $result;
- }
- );
- };
- };
- }
- }