/** * @param array $request * @param Resource $resource * @param array $args * * @return Command */ private function prepareCommand(array $request, Resource $resource, array $args = []) { if (isset($request['params'])) { $this->prepareArgs($request['params'], $resource, $args); } return $this->apiClient->getCommand($request['operation'], $args); }
private function createPresignedUrl(AwsClientInterface $client, CommandInterface $cmd) { $newCmd = $client->getCommand('CopySnapshot', $cmd->toArray()); $newCmd->getEmitter()->detach($this); // Serialize a request for the CopySnapshot operation. $request = $client->initTransaction($newCmd)->request; // Create the new endpoint for the target endpoint. $endpoint = EndpointProvider::resolve($this->endpointProvider, ['region' => $cmd['SourceRegion'], 'service' => 'ec2'])['endpoint']; // Set the request to hit the target endpoint. $request->setHost(Url::fromString($endpoint)->getHost()); // Create a presigned URL for our generated request. $signer = new SignatureV4('ec2', $cmd['SourceRegion']); return $signer->createPresignedUrl(SignatureV4::convertPostToGet($request), $client->getCredentials(), '+1 hour'); }
private function createPresignedUrl(AwsClientInterface $client, CommandInterface $cmd) { $newCmd = $client->getCommand('CopySnapshot', $cmd->toArray()); // Avoid infinite recursion by flagging the new command. $newCmd->__skipCopySnapshot = true; // Serialize a request for the CopySnapshot operation. $request = \Aws\serialize($newCmd); // Create the new endpoint for the target endpoint. $endpoint = EndpointProvider::resolve($this->endpointProvider, ['region' => $cmd['SourceRegion'], 'service' => 'ec2'])['endpoint']; // Set the request to hit the target endpoint. $uri = $request->getUri()->withHost((new Uri($endpoint))->getHost()); $request = $request->withUri($uri); // Create a presigned URL for our generated request. $signer = new SignatureV4('ec2', $cmd['SourceRegion']); return (string) $signer->presign(SignatureV4::convertPostToGet($request), $client->getCredentials()->wait(), '+1 hour')->getUri(); }
private function flushQueue() { static $validKeys = ['Key' => true, 'VersionId' => true]; if (count($this->queue) === 0) { return null; } $batch = []; while ($obj = array_shift($this->queue)) { $batch[] = array_intersect_key($obj, $validKeys); } $command = $this->client->getCommand('DeleteObjects', ['Bucket' => $this->bucket, 'Delete' => ['Objects' => $batch]]); if ($this->before) { call_user_func($this->before, $command); } return $this->client->executeAsync($command)->then(function ($result) { if (!empty($result['Errors'])) { throw new DeleteMultipleObjectsException($result['Deleted'] ?: [], $result['Errors']); } return $result; }); }